level.ts
1 import { MemoryLevel } from "memory-level"; 2 import type { AbstractLevel } from "abstract-level"; 3 import { AbstractStore } from "./abstract.ts"; 4 5 export type AbstractLevelConstructor = new ( 6 ...params: ConstructorParameters<typeof AbstractLevel> 7 ) => AbstractLevel<Uint8Array, Uint8Array>; 8 9 export class LevelStore extends AbstractStore { 10 constructor( 11 private level: Pick< 12 AbstractLevel<Uint8Array, Uint8Array, Uint8Array>, 13 "get" | "put" 14 > = new MemoryLevel< 15 Uint8Array, 16 Uint8Array 17 >({ 18 valueEncoding: "view", 19 keyEncoding: "view", 20 }), 21 ) { 22 super(); 23 } 24 25 async get( 26 key: Uint8Array, 27 ): Promise<Uint8Array | undefined> { 28 const value = await this.level.get(key); 29 if (value) return Uint8Array.from(value); 30 } 31 32 set(key: Uint8Array, value: Uint8Array): Promise<void> { 33 return this.level.put(key, value); 34 } 35 }