ditto/src/workers/sqlite.worker.ts
2023-11-15 17:09:30 -06:00

34 lines
No EOL
717 B
TypeScript

/// <reference lib="webworker" />
import { DenoSqlite3 } from '@/deps.ts';
let db: DenoSqlite3;
type Msg =
| ['open', [string]]
| ['query', [string, unknown[]]];
function call([cmd, args]: Msg) {
switch(cmd) {
case 'open':
return handleOpen(args[0]);
case 'query':
return handleQuery(args[0], args[1]);
}
}
function handleOpen(path: string): void {
db = new DenoSqlite3(path);
}
function handleQuery(sql: string, params: any[] = []) {
return db.prepare(sql).all(...params);
}
self.addEventListener('message', (event: MessageEvent<[string, Msg]>) => {
const [id, msg] = event.data;
const result = call(msg);
self.postMessage([id, result]);
});
self.postMessage(['ready']);