///
import {
AbstractBatch,
AbstractGetOptions,
AbstractIterator,
AbstractIteratorOptions,
AbstractLevelDOWN,
AbstractOptions,
ErrorCallback,
ErrorValueCallback,
} from "abstract-leveldown";
import { EventEmitter } from "events";
import {
EncodingError,
InitializationError,
LevelUPError,
NotFoundError,
OpenError,
ReadError,
WriteError,
} from "level-errors";
type LevelUpPut =
& ((key: K, value: V, callback: ErrorCallback) => void)
& ((key: K, value: V, options: O, callback: ErrorCallback) => void)
& ((key: K, value: V, options?: O) => Promise);
type LevelUpGet =
& ((key: K, callback: ErrorValueCallback) => void)
& ((key: K, options: O, callback: ErrorValueCallback) => void)
& ((key: K, options?: O) => Promise);
type LevelUpGetMany =
& ((keys: K[], callback: ErrorValueCallback) => void)
& ((keys: K[], options: O, callback: ErrorValueCallback) => void)
& ((keys: K[], options?: O) => Promise);
type LevelUpDel =
& ((key: K, callback: ErrorCallback) => void)
& ((key: K, options: O, callback: ErrorCallback) => void)
& ((key: K, options?: O) => Promise);
type LevelUpClear =
& ((callback: ErrorCallback) => void)
& ((options: O, callback: ErrorCallback) => void)
& ((options?: O) => Promise);
type LevelUpBatch =
& ((key: K, callback: ErrorCallback) => void)
& ((key: K, options: O, callback: ErrorCallback) => void)
& ((key: K, options?: O) => Promise);
type InferDBPut = DB extends { put: (key: infer K, value: infer V, options: infer O, cb: any) => void }
? LevelUpPut
: LevelUpPut;
type InferDBGet = DB extends
{ get: (key: infer K, options: infer O, callback: ErrorValueCallback) => void } ? LevelUpGet
: LevelUpGet;
type InferDBGetMany = DB extends
{ getMany: (keys: Array, options: infer O, callback: ErrorValueCallback>) => void }
? LevelUpGetMany
: LevelUpGetMany;
type InferDBDel = DB extends { del: (key: infer K, options: infer O, callback: ErrorCallback) => void }
? LevelUpDel
: LevelUpDel;
type InferDBClear = DB extends { clear: (options: infer O, callback: ErrorCallback) => void } ? LevelUpClear
: LevelUpClear;
interface AbstractClearOptions extends AbstractOptions {
gt?: K | undefined;
gte?: K | undefined;
lt?: K | undefined;
lte?: K | undefined;
reverse?: boolean | undefined;
limit?: number | undefined;
}
declare namespace levelup {
interface LevelUpChain {
readonly length: number;
put(key: K, value: V): this;
del(key: K): this;
clear(): this;
write(callback: ErrorCallback): this;
write(): Promise;
}
interface LevelUp> extends EventEmitter {
open(): Promise;
open(callback?: ErrorCallback): void;
close(): Promise;
close(callback?: ErrorCallback): void;
put: InferDBPut;
get: InferDBGet;
del: InferDBDel;
clear: InferDBClear;
getMany: InferDBGetMany;
batch(array: AbstractBatch[], options?: any): Promise;
batch(array: AbstractBatch[], options: any, callback: (err?: any) => any): void;
batch(array: AbstractBatch[], callback: (err?: any) => any): void;
batch(): LevelUpChain;
iterator(options?: AbstractIteratorOptions): Iterator;
isOpen(): boolean;
isClosed(): boolean;
readonly status: "closed" | "open" | "opening" | "new" | "closing";
isOperational(): boolean;
createReadStream(options?: AbstractIteratorOptions): NodeJS.ReadableStream;
createKeyStream(options?: AbstractIteratorOptions): NodeJS.ReadableStream;
createValueStream(options?: AbstractIteratorOptions): NodeJS.ReadableStream;
/*
emitted when a new value is 'put'
*/
on(event: "put", cb: (key: any, value: any) => void): this;
/*
emitted when a value is deleted
*/
on(event: "del", cb: (key: any) => void): this;
/*
emitted when a batch operation has executed
*/
on(event: "batch", cb: (ary: any[]) => void): this;
/*
emitted when clear is called
*/
on(event: "clear", cb: (opts: any) => void): this;
/*
emitted on given event
*/
on(event: "open" | "ready" | "closed" | "opening" | "closing", cb: () => void): this;
}
interface LevelUpConstructor {
(
db: DB,
options: any,
cb?: ErrorCallback,
): LevelUp;
(
db: DB,
cb?: ErrorCallback,
): LevelUp;
new(
db: DB,
options: any,
cb?: ErrorCallback,
): LevelUp;
new(
db: DB,
cb?: ErrorCallback,
): LevelUp;
errors: {
LevelUPError: typeof LevelUPError;
InitializationError: typeof InitializationError;
OpenError: typeof OpenError;
ReadError: typeof ReadError;
WriteError: typeof WriteError;
NotFoundError: typeof NotFoundError;
EncodingError: typeof EncodingError;
};
}
}
declare const levelup: levelup.LevelUpConstructor;
export = levelup;