silverbullet/web/remote_datastore.ts

56 lines
1.4 KiB
TypeScript
Raw Normal View History

2024-01-12 00:12:04 +08:00
import { HttpSpacePrimitives } from "../common/spaces/http_space_primitives.ts";
import { KV, KvKey, KvQuery } from "$sb/types.ts";
import { IDataStore } from "../plugos/lib/datastore.ts";
2024-01-12 03:59:11 +08:00
import { rpcCall } from "./syscalls/datastore.proxy.ts";
2024-01-12 00:12:04 +08:00
// implements DataStore "interface"
export class RemoteDataStore implements IDataStore {
constructor(private httpPrimitives: HttpSpacePrimitives) {
}
private proxy(
name: string,
2024-01-12 03:59:11 +08:00
...args: any[]
2024-01-12 00:12:04 +08:00
) {
2024-01-12 03:59:11 +08:00
// console.trace();
return rpcCall(
2024-01-12 00:12:04 +08:00
this.httpPrimitives,
name,
2024-01-12 03:59:11 +08:00
...args,
2024-01-12 00:12:04 +08:00
);
}
2024-01-12 03:59:11 +08:00
async get<T = any>(key: KvKey): Promise<T | null> {
const results = await this.batchGet([key]);
return results[0];
2024-01-12 00:12:04 +08:00
}
batchGet<T = any>(keys: KvKey[]): Promise<(T | null)[]> {
2024-01-12 03:59:11 +08:00
return this.proxy("datastore.batchGet", keys);
2024-01-12 00:12:04 +08:00
}
set(key: KvKey, value: any): Promise<void> {
2024-01-12 03:59:11 +08:00
return this.batchSet([{ key, value }]);
2024-01-12 00:12:04 +08:00
}
batchSet<T = any>(entries: KV<T>[]): Promise<void> {
2024-01-12 03:59:11 +08:00
return this.proxy("datastore.batchSet", entries);
2024-01-12 00:12:04 +08:00
}
delete(key: KvKey): Promise<void> {
2024-01-12 03:59:11 +08:00
return this.batchDelete([key]);
2024-01-12 00:12:04 +08:00
}
batchDelete(keys: KvKey[]): Promise<void> {
2024-01-12 03:59:11 +08:00
return this.proxy("datastore.batchDelete", keys);
2024-01-12 00:12:04 +08:00
}
query<T = any>(query: KvQuery): Promise<KV<T>[]> {
2024-01-12 03:59:11 +08:00
return this.proxy("datastore.query", query);
2024-01-12 00:12:04 +08:00
}
queryDelete(query: KvQuery): Promise<void> {
2024-01-12 03:59:11 +08:00
return this.proxy("datastore.queryDelete", query);
2024-01-12 00:12:04 +08:00
}
}