UNPKG

kysely-generic-sqlite

Version:
81 lines (76 loc) 2.06 kB
'use strict'; // src/worker/types.ts var initEvent = "0"; var runEvent = "1"; var closeEvent = "2"; var dataEvent = "3"; var endEvent = "4"; // src/worker/utils.ts function createGenericOnMessageCallback(init, post, message) { let db; return async ([type, data1, data2, data3]) => { const ret = [type, null, null]; try { switch (type) { case initEvent: { db = await init(data1); break; } case runEvent: { ret[1] = await db.query(data1, data2, data3); break; } case closeEvent: { await db.close(); break; } case dataEvent: { if (!db.iterator) { throw new Error("streamQuery() is not supported."); } const it = db.iterator(data1, data2, data3); for await (const row of it) { post([type, row, null]); } ret[0] = endEvent; break; } default: { if (message) { const data = await message(db, type, data1, data2, data3); if (data !== void 0 && data !== null) { ret[1] = data; } } } } } catch (error) { ret[2] = error; } post(ret); }; } async function access(data) { return typeof data === "function" ? await data() : data; } // src/worker/web-helper.ts function createWebOnMessageCallback(init, message) { const cb = createGenericOnMessageCallback( init, (value) => globalThis.postMessage(value), message ); globalThis.onmessage = ({ data }) => cb(data); } var handleWebWorker = (worker, cb) => worker.onmessage = ({ data }) => cb(data); function createWebWorkerExecutor(config) { const { worker, ...rest } = config; return async () => ({ ...rest, worker: await access(worker), handle: handleWebWorker }); } exports.createWebOnMessageCallback = createWebOnMessageCallback; exports.createWebWorkerExecutor = createWebWorkerExecutor; exports.handleWebWorker = handleWebWorker;