feat(db): add betterSqliteAdapter wrapper

This commit is contained in:
diegosouzapw
2026-05-20 17:38:55 -03:00
parent 0bb0c9dfda
commit c51c2db8f8

View File

@@ -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<T>(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<void> {
return db.backup(destination);
},
checkpoint(mode = "TRUNCATE"): void {
try {
db.pragma(`wal_checkpoint(${mode})`);
} catch {}
},
close(): void {
db.close();
},
get raw() {
return db;
},
};
}