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
|
|
|
}
|
|
|
|
}
|