kysely-bun-worker
Version:
kysely dialect for bun:sqlite, running in worker
92 lines (84 loc) • 3.06 kB
JavaScript
;
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;