Files
evento/node_modules/@mikro-orm/sql/dialects/sqlite/NodeSqliteDialect.js
2026-03-18 14:55:56 -03:00

44 lines
1.2 KiB
JavaScript

import { SqliteDialect } from 'kysely';
/**
* Kysely dialect for `node:sqlite` (Node.js 22.5+, Deno 2.2+).
*
* Bridges `node:sqlite`'s `DatabaseSync` to the `better-sqlite3` interface
* that Kysely's `SqliteDialect` expects.
*
* @example
* ```ts
* import { SqliteDriver, NodeSqliteDialect } from '@mikro-orm/sql';
*
* const orm = await MikroORM.init({
* driver: SqliteDriver,
* dbName: ':memory:',
* driverOptions: new NodeSqliteDialect(':memory:'),
* });
* ```
*/
export class NodeSqliteDialect extends SqliteDialect {
constructor(dbName) {
const { DatabaseSync } = globalThis.process.getBuiltinModule('node:sqlite');
super({
database: () => {
const db = new DatabaseSync(dbName);
return {
prepare(sql) {
const stmt = db.prepare(sql);
return {
reader: /^\s*(select|pragma|explain|with)/i.test(sql) || /\breturning\b/i.test(sql),
all: params => stmt.all(...params),
run: params => stmt.run(...params),
/* v8 ignore next */
get: params => stmt.get(...params),
};
},
close() {
db.close();
},
};
},
});
}
}