declare module "hyperbee" { import type { EncodingType } from "hypercore"; import type Hypercore, { Key } from "hypercore"; import { EventEmitter } from "events"; interface BeeOpts { keyEncoding?: EncodingType; valueEncoding?: EncodingType; } interface Entry { readonly seq: number; readonly key: Key; readonly value: Value; } type HistoryEntry = Entry & { readonly type: "put" | "del"; }; interface Range { gt?: Key; gte?: Key; lt?: Key; lte?: Key; } interface BatchOptions { cas?(prev: Entry, next: Entry): boolean; } type DBWatcher = AsyncIterable< Hyperbee & { close(): Never } > & { ready(): Promise; close(): Promise; }; type KeyWatcher = EventEmitter<{ update: [] }> & { readonly node: Entry; close(): Promise; }; interface SubOpts { sep?: Buffer; valueEncoding?: EncodingType; keyEncoding?: EncodingType; } interface ReadStreamOpts { reverse?: boolean; limit?: number; } type HistoryOpts = Range & ReadStreamOpts & { live?: boolean; }; interface Batch { put(key: Key, [value]?: Value, [options]?: BatchOptions): Promise; get(key: Key): Promise | null>; del(key: Key, [options]?: BatchOptions): Promise; flush(): Promise; close(): Promise; } export default class Hyperbee< Key = Buffer, Value = Buffer > extends EventEmitter { constructor(core: Hypercore, opts?: BeeOpts); readonly url: string; readonly id: string; readonly writable: boolean; readonly readable: boolean; readonly key: Key; readonly discoveryKey: Key; readonly version: number; readonly core: Hypercore; ready(): Promise; put(key: Key, [value]?: Value, [options]?: BatchOptions): Promise; get(key: Key): Promise | null>; del(key: Key, [options]?: BatchOptions): Promise; batch(): Batch; getBySeq(seq: number, options?: {}): Promise | null>; createReadStream( range?: Range, options?: ReadStreamOpts ): AsyncIterable>; peek( range?: Range, options?: ReadStreamOpts ): Promise>; createHistoryStream( options?: HistoryOpts ): AsyncIterable>; createDiffStream( otherVersion: Hyperbee, options?: Range ): AsyncIterable<{ left: Entry | null; right: Entry | null; }>; getAndWatch(key: Key, options?: {}): Promise>; watch(range?: Range): DBWatcher; checkout(version: number): Hyperbee; snapshot(): Hyperbee; sub(prefix: string, options?: SubOpts): Hyperbee; close(): Promise; } }