import { mkdirSync } from "node:fs"; import { dirname } from "node:path"; import { DatabaseSync } from "node:sqlite"; import { installSchema } from "./schema"; export class DatabaseConnection { readonly db: DatabaseSync; constructor(dbPath: string) { mkdirSync(dirname(dbPath), { recursive: true }); this.db = new DatabaseSync(dbPath); this.db.exec("pragma journal_mode = WAL"); this.db.exec("pragma foreign_keys = ON"); installSchema(this.db); } transaction(operation: () => T): T { this.db.exec("begin immediate"); try { const result = operation(); this.db.exec("commit"); return result; } catch (error) { this.db.exec("rollback"); throw error; } } close(): void { this.db.close(); } }