UNPKG

kysely-bun-worker

Version:
92 lines (84 loc) 3.06 kB
'use strict'; var worker = require('kysely-generic-sqlite/worker'); var workerHelperNode = require('kysely-generic-sqlite/worker-helper-node'); var workerHelperWeb = require('kysely-generic-sqlite/worker-helper-web'); var Database = require('bun:sqlite'); var kyselyGenericSqlite = require('kysely-generic-sqlite'); var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null; function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var Database__default = /*#__PURE__*/_interopDefault(Database); // src/index.ts function createSqliteExecutor(db, cache) { const fn = cache ? "query" : "prepare"; const getStmt = (sql, parameters) => db[fn](sql, parameters); return { db, query: (_, sql, parameters) => { const stmt = getStmt(sql, parameters); if (stmt.columnNames.length > 0) { return { rows: stmt.all() }; } else { const { changes, lastInsertRowid } = stmt.run(); return { numAffectedRows: kyselyGenericSqlite.parseBigInt(changes), insertId: kyselyGenericSqlite.parseBigInt(lastInsertRowid), rows: [] }; } }, close: () => db.close(), iterator: (_, sql, parameters) => iterateData(getStmt(sql), parameters) }; } async function* iterateData(stmt, parameters) { if (!("iterate" in stmt)) { throw new Error("Streaming not supported, please upgrade to Bun@1.1.31 or later"); } for (const row of stmt.iterate(...parameters || [])) { yield row; } } // src/worker/utils.ts var defaultCreateDatabaseFn = (fileName, opt) => new Database__default.default(fileName, opt); function createOnMessageCallback(create, message) { workerHelperWeb.createWebOnMessageCallback( async ({ cache, fileName, opt }) => { const db = await create(fileName, opt); return createSqliteExecutor(db, cache); }, message ); } // src/index.ts var BunWorkerDialect = class extends worker.GenericSqliteWorkerDialect { /** * dialect for `bun:sqlite`, run sql in worker */ constructor(config) { const { url: fileName = ":memory:", cacheStatment: cache = false, onCreateConnection, worker = new Worker( new URL("./worker", (typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.js', document.baseURI).href))), { type: "module" } ), dbOptions: opt = { create: true } } = config || {}; super( () => ({ data: { cache, fileName, opt }, mitt: workerHelperNode.createNodeMitt(), handle: workerHelperWeb.handleWebWorker, worker }), onCreateConnection ); } }; exports.BunWorkerDialect = BunWorkerDialect; exports.createOnMessageCallback = createOnMessageCallback; exports.createSqliteExecutor = createSqliteExecutor; exports.defaultCreateDatabaseFn = defaultCreateDatabaseFn;