Use node:Sqlite

This commit is contained in:
2026-07-27 09:19:17 +00:00
parent 17e646c2e3
commit 1723b1cca1
5 changed files with 87 additions and 12 deletions
+13 -9
View File
@@ -1,5 +1,6 @@
import DatabaseConstructor from 'better-sqlite3';
import { Kysely, SqliteDialect } from 'kysely';
import { CompiledQuery, Kysely } from 'kysely';
import { NodeNativeSqliteDialect } from 'kysely-node-native-sqlite';
import type { DatabaseTables } from './tables.ts';
import type { Logger } from '../../utils/logger.ts';
@@ -13,13 +14,13 @@ export type DatabaseOptions = {
};
/**
* Thin wrapper around better-sqlite3 and Kysely.
* Thin wrapper around Kysely and NodeNativeSqliteDialect (which uses node:sqlite).
*
* Owns connection setup, pragma configuration, and graceful teardown.
*/
export class Database {
private readonly debug: Logger;
private readonly sqlite: DatabaseConstructor.Database;
private readonly dialect: NodeNativeSqliteDialect;
private readonly kysely: Kysely<DatabaseTables>;
/**
@@ -32,13 +33,15 @@ export class Database {
this.debug = options.debug.extend('database');
// Create the SQLite database.
this.sqlite = new DatabaseConstructor(options.path);
this.configurePragmas();
this.dialect = new NodeNativeSqliteDialect(options.path);
// Create the Kysely database.
this.kysely = new Kysely<DatabaseTables>({
dialect: new SqliteDialect({ database: this.sqlite }),
dialect: this.dialect,
});
// Configure the SQLite pragmas.
this.configurePragmas();
}
/**
@@ -65,7 +68,8 @@ export class Database {
*/
private configurePragmas(): void {
this.debug('configuring SQLite pragmas');
this.sqlite.pragma('journal_mode = WAL');
this.sqlite.pragma('foreign_keys = ON');
this.kysely.executeQuery(CompiledQuery.raw('PRAGMA journal_mode = WAL'));
this.kysely.executeQuery(CompiledQuery.raw('PRAGMA foreign_keys = ON'));
}
}