44 lines
1.3 KiB
JavaScript
44 lines
1.3 KiB
JavaScript
"use strict";
|
|
/**
|
|
* ABE Database Connection
|
|
* Singleton SQLite connection using better-sqlite3.
|
|
* Runs migrations on first access.
|
|
*/
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
};
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.getDb = getDb;
|
|
exports.setDb = setDb;
|
|
exports.closeDb = closeDb;
|
|
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
|
|
const path_1 = __importDefault(require("path"));
|
|
const fs_1 = __importDefault(require("fs"));
|
|
const migrations_1 = require("./migrations");
|
|
let _db = null;
|
|
function getDb() {
|
|
if (_db)
|
|
return _db;
|
|
const dbPath = process.env['ABE_DB_PATH'] ?? path_1.default.join(process.cwd(), 'data', 'abe.db');
|
|
const dir = path_1.default.dirname(dbPath);
|
|
if (!fs_1.default.existsSync(dir)) {
|
|
fs_1.default.mkdirSync(dir, { recursive: true });
|
|
}
|
|
_db = new better_sqlite3_1.default(dbPath);
|
|
_db.pragma('journal_mode = WAL');
|
|
_db.pragma('foreign_keys = ON');
|
|
(0, migrations_1.runMigrations)(_db);
|
|
return _db;
|
|
}
|
|
/** For testing — inject a custom (in-memory) database instance. */
|
|
function setDb(db) {
|
|
_db = db;
|
|
}
|
|
/** Close and reset. Used in tests. */
|
|
function closeDb() {
|
|
if (_db) {
|
|
_db.close();
|
|
_db = null;
|
|
}
|
|
}
|