import sqlWasmUrl from "@jlongster/sql.js/dist/sql-wasm.wasm?url"; import initSqlJs from "@jlongster/sql.js"; import { SQLiteFS } from "absurd-sql"; import type { Database } from "sql.js"; import IndexedDBBackend from "absurd-sql/dist/indexeddb-backend"; import { RpcProvider } from "worker-rpc"; let SQL; let db: Database; async function init() { const SQL = await initSqlJs({ locateFile: (file) => { console.log("FILE IS", file); console.log("url is", sqlWasmUrl); switch (file) { case "sql-wasm.wasm": return sqlWasmUrl; } return file; }, }); const sqlFS = new SQLiteFS(SQL.FS, new IndexedDBBackend()); SQL.register_for_idb(sqlFS); SQL.FS.mkdir("/sql"); SQL.FS.mount(sqlFS, {}, "/sql"); const path = "/sql/db.sqlite"; if (typeof SharedArrayBuffer === "undefined") { const stream = SQL.FS.open(path, "a+"); await stream.node.contents.readIfFallback(); SQL.FS.close(stream); } db = new SQL.Database(path, { filename: true }); db.exec("PRAGMA journal_mode=MEMORY;"); } await init(); const rpcProvider = new RpcProvider((message, transfer) => self.postMessage(message, undefined, transfer), ); self.addEventListener("message", (evt) => rpcProvider.dispatch(evt.data)); rpcProvider.registerRpcHandler("run", ({ s, p }) => { return db.run(s, p); }); rpcProvider.registerRpcHandler("exec", ({ s, p }) => { return db.exec(s, p); }); console.log("SHIET"); rpcProvider.signal("ready");