kysely-bun-worker
Version:
kysely dialect for bun:sqlite, running in worker
59 lines (52 loc) • 1.79 kB
JavaScript
;
var Database = require('bun:sqlite');
var workerHelperWeb = require('kysely-generic-sqlite/worker-helper-web');
var kyselyGenericSqlite = require('kysely-generic-sqlite');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var Database__default = /*#__PURE__*/_interopDefault(Database);
// src/worker/utils.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/worker/index.ts
createOnMessageCallback(defaultCreateDatabaseFn);