72 lines
1.7 KiB
TypeScript
72 lines
1.7 KiB
TypeScript
|
import { KV, KVStore } from "./kv_store.ts";
|
||
|
|
||
|
export class JSONKVStore implements KVStore {
|
||
|
private data: { [key: string]: any } = {};
|
||
|
|
||
|
async load(path: string) {
|
||
|
this.loadString(await Deno.readTextFile(path));
|
||
|
}
|
||
|
|
||
|
loadString(jsonString: string) {
|
||
|
this.data = JSON.parse(jsonString);
|
||
|
}
|
||
|
|
||
|
async save(path: string) {
|
||
|
await Deno.writeTextFile(path, JSON.stringify(this.data));
|
||
|
}
|
||
|
|
||
|
del(key: string): Promise<void> {
|
||
|
delete this.data[key];
|
||
|
return Promise.resolve();
|
||
|
}
|
||
|
|
||
|
deletePrefix(prefix: string): Promise<void> {
|
||
|
for (const key in this.data) {
|
||
|
if (key.startsWith(prefix)) {
|
||
|
delete this.data[key];
|
||
|
}
|
||
|
}
|
||
|
return Promise.resolve();
|
||
|
}
|
||
|
|
||
|
deleteAll(): Promise<void> {
|
||
|
this.data = {};
|
||
|
return Promise.resolve();
|
||
|
}
|
||
|
|
||
|
set(key: string, value: any): Promise<void> {
|
||
|
this.data[key] = value;
|
||
|
return Promise.resolve();
|
||
|
}
|
||
|
batchSet(kvs: KV[]): Promise<void> {
|
||
|
for (const kv of kvs) {
|
||
|
this.data[kv.key] = kv.value;
|
||
|
}
|
||
|
return Promise.resolve();
|
||
|
}
|
||
|
batchDelete(keys: string[]): Promise<void> {
|
||
|
for (const key of keys) {
|
||
|
delete this.data[key];
|
||
|
}
|
||
|
return Promise.resolve();
|
||
|
}
|
||
|
batchGet(keys: string[]): Promise<any[]> {
|
||
|
return Promise.resolve(keys.map((key) => this.data[key]));
|
||
|
}
|
||
|
get(key: string): Promise<any> {
|
||
|
return Promise.resolve(this.data[key]);
|
||
|
}
|
||
|
has(key: string): Promise<boolean> {
|
||
|
return Promise.resolve(key in this.data);
|
||
|
}
|
||
|
queryPrefix(keyPrefix: string): Promise<{ key: string; value: any }[]> {
|
||
|
const results: { key: string; value: any }[] = [];
|
||
|
for (const key in this.data) {
|
||
|
if (key.startsWith(keyPrefix)) {
|
||
|
results.push({ key, value: this.data[key] });
|
||
|
}
|
||
|
}
|
||
|
return Promise.resolve(results);
|
||
|
}
|
||
|
}
|