import type { Database } from 'lmdb'; import type { Key, Range } from '../interfaces/common.js'; import type { AztecAsyncSet, AztecSet } from '../interfaces/set.js'; import { LmdbAztecMap } from './map.js'; /** * A set backed by LMDB. */ export class LmdbAztecSet implements AztecSet, AztecAsyncSet { private map: LmdbAztecMap; constructor(rootDb: Database, mapName: string) { this.map = new LmdbAztecMap(rootDb, mapName); } close(): Promise { return this.map.close(); } has(key: K): boolean { return this.map.has(key); } hasAsync(key: K): Promise { return Promise.resolve(this.has(key)); } add(key: K): Promise { return this.map.set(key, true); } delete(key: K): Promise { return this.map.delete(key); } entries(range: Range = {}): IterableIterator { return this.map.keys(range); } async *entriesAsync(range: Range = {}): AsyncIterableIterator { for await (const key of this.map.keysAsync(range)) { yield key; } } }