From c51c2db8f8dbbd95a1f36a2a598992cf600e56fe Mon Sep 17 00:00:00 2001 From: diegosouzapw Date: Wed, 20 May 2026 17:38:55 -0300 Subject: [PATCH] feat(db): add betterSqliteAdapter wrapper --- src/lib/db/adapters/betterSqliteAdapter.ts | 58 ++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/lib/db/adapters/betterSqliteAdapter.ts diff --git a/src/lib/db/adapters/betterSqliteAdapter.ts b/src/lib/db/adapters/betterSqliteAdapter.ts new file mode 100644 index 0000000000..42b1c96599 --- /dev/null +++ b/src/lib/db/adapters/betterSqliteAdapter.ts @@ -0,0 +1,58 @@ +import type { SqliteAdapter, PreparedStatement, RunResult } from "./types"; + +export function createBetterSqliteAdapter(db: import("better-sqlite3").Database): SqliteAdapter { + return { + driver: "better-sqlite3", + + get open() { + return db.open; + }, + + get name() { + return db.name; + }, + + prepare(sql: string): PreparedStatement { + const stmt = db.prepare(sql); + return { + run: (...params: unknown[]): RunResult => stmt.run(...params) as unknown as RunResult, + get: (...params: unknown[]): unknown => stmt.get(...params), + all: (...params: unknown[]): unknown[] => stmt.all(...params), + }; + }, + + exec(sql: string): void { + db.exec(sql); + }, + + pragma(pragmaStr: string, options?: { simple?: boolean }): unknown { + return db.pragma(pragmaStr, options); + }, + + transaction(fn: (...args: unknown[]) => T): (...args: unknown[]) => T { + return db.transaction(fn) as (...args: unknown[]) => T; + }, + + immediate(fn: () => void): void { + (db.transaction(fn) as unknown as { immediate: () => void }).immediate(); + }, + + backup(destination: string): Promise { + return db.backup(destination); + }, + + checkpoint(mode = "TRUNCATE"): void { + try { + db.pragma(`wal_checkpoint(${mode})`); + } catch {} + }, + + close(): void { + db.close(); + }, + + get raw() { + return db; + }, + }; +}