31 lines
808 B
TypeScript
31 lines
808 B
TypeScript
|
import type { BindParams, QueryExecResult } from "sql.js";
|
||
|
import { RpcProvider } from "worker-rpc";
|
||
|
import DbWorker from "./db.worker?worker";
|
||
|
|
||
|
const worker = new DbWorker();
|
||
|
|
||
|
const rpcProvider = new RpcProvider((message, transfer) =>
|
||
|
worker.postMessage(message, transfer),
|
||
|
);
|
||
|
|
||
|
worker.onmessage = (e) => rpcProvider.dispatch(e.data);
|
||
|
|
||
|
export async function getDbClient() {
|
||
|
await new Promise<void>((resolve) => {
|
||
|
rpcProvider.registerSignalHandler("ready", () => {
|
||
|
resolve();
|
||
|
});
|
||
|
});
|
||
|
|
||
|
return {
|
||
|
async run(s: string, p?: BindParams[]) {
|
||
|
return await rpcProvider.rpc("run", { s, p });
|
||
|
},
|
||
|
async exec(s: string, p?: BindParams[]): Promise<QueryExecResult[]> {
|
||
|
return await rpcProvider.rpc("exec", { s, p });
|
||
|
},
|
||
|
};
|
||
|
}
|
||
|
|
||
|
export const dbClient = await getDbClient();
|