/ packages / store / level.ts
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  }