From 69bdfc5daa01a96dbcc9dbc91333a38b95b0ae1b Mon Sep 17 00:00:00 2001 From: Thiago de Arruda Date: Mon, 21 Nov 2016 20:13:00 -0300 Subject: [PATCH] levelup: Add declarations for custom encodings. Levelup `keyEncoding`/`valueEncoding` options also accept an object that implements a custom encoding, add declarations to enable it. --- levelup/index.d.ts | 30 +++++++++++++++++++++--------- levelup/levelup-tests.ts | 28 ++++++++++++++++++++++++++-- 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/levelup/index.d.ts b/levelup/index.d.ts index dd30c96ca9..c547291e45 100644 --- a/levelup/index.d.ts +++ b/levelup/index.d.ts @@ -1,14 +1,26 @@ // Type definitions for LevelUp -// Project: https://github.com/rvagg/node-levelup +// Project: https://github.com/Level/levelup // Definitions by: Bret Little +// Definitions by: Thiago de Arruda // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +/// + +interface CustomEncoding { + encode(val: any): Buffer| string; + decode(val: Buffer | string): any; + buffer: boolean; + type: string; +} + +type Encoding = string | CustomEncoding; + interface Batch { type: string; key: any; value?: any; - keyEncoding?: string; - valueEncoding?: string; + keyEncoding?: Encoding; + valueEncoding?: Encoding; } interface LevelUp { open(callback ?: (error : any) => any): void; @@ -17,12 +29,12 @@ interface LevelUp { put(key: any, value: any, options?: { sync?: boolean }, callback ?: (error: any) => any): void; get(key: any, callback ?: (error: any, value: any) => any): void; - get(key: any, options ?: { keyEncoding?: string; fillCache?: boolean }, callback ?: (error: any, value: any) => any): void; + get(key: any, options ?: { keyEncoding?: Encoding; fillCache?: boolean }, callback ?: (error: any, value: any) => any): void; del(key: any, callback ?: (error: any) => any): void; - del(key: any, options ?: { keyEncoding?: string; sync?: boolean }, callback ?: (error: any) => any): void; + del(key: any, options ?: { keyEncoding?: Encoding; sync?: boolean }, callback ?: (error: any) => any): void; - batch(array: Batch[], options?: { keyEncoding?: string; valueEncoding?: string; sync?: boolean }, callback?: (error?: any)=>any): void; + batch(array: Batch[], options?: { keyEncoding?: Encoding; valueEncoding?: Encoding; sync?: boolean }, callback?: (error?: any)=>any): void; batch(array: Batch[], callback?: (error?: any)=>any): void; batch():LevelUpChain; isOpen():boolean; @@ -39,7 +51,7 @@ interface LevelUpChain { put(key: any, value: any): LevelUpChain; put(key: any, value: any, options?: { sync?: boolean }): LevelUpChain; del(key: any): LevelUpChain; - del(key: any, options ?: { keyEncoding?: string; sync?: boolean }): LevelUpChain; + del(key: any, options ?: { keyEncoding?: Encoding; sync?: boolean }): LevelUpChain; clear(): LevelUpChain; write(callback?: (error?: any)=>any) : LevelUpChain; } @@ -49,8 +61,8 @@ interface levelupOptions { errorIfExists?: boolean; compression?: boolean; cacheSize?: number; - keyEncoding?: string; - valueEncoding?: string; + keyEncoding?: Encoding; + valueEncoding?: Encoding; db?: string } diff --git a/levelup/levelup-tests.ts b/levelup/levelup-tests.ts index 4349c2864c..57eea64e63 100644 --- a/levelup/levelup-tests.ts +++ b/levelup/levelup-tests.ts @@ -1,7 +1,31 @@ - - import levelup = require("levelup"); +interface BufferEncoding { + encode(val: any): Buffer; + decode(val: Buffer): any; + buffer: boolean; + type: string; +} + +interface StringEncoding { + encode(val: any): string; + decode(val: string): any; + buffer: boolean; + type: string; +} + +declare const bufferEncoding: BufferEncoding; +declare const stringEncoding: StringEncoding; + +var db1 = levelup("db1", { + keyEncoding: bufferEncoding, + valueEncoding: bufferEncoding +}); +var db2 = levelup("db2", { + keyEncoding: stringEncoding, + valueEncoding: stringEncoding +}); + var db = levelup('./mydb') db.open(); db.close();