import initSqlJs from 'sql.js'; import path from 'path'; import fs from 'fs'; import { fileURLToPath } from 'url'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const dataDir = path.join(__dirname, '..', 'data'); if (!fs.existsSync(dataDir)) fs.mkdirSync(dataDir, { recursive: true }); const dbPath = process.env.DATABASE_PATH || path.join(dataDir, 'configurateur.db'); let db = null; function toSqlitePlaceholders(sql) { return sql.replace(/\$(\d+)/g, '?'); } function save() { if (db && dbPath) { const data = db.export(); fs.writeFileSync(dbPath, Buffer.from(data)); } } async function getDb() { if (db) return db; const SQL = await initSqlJs({ locateFile: (file) => path.join(__dirname, '..', 'node_modules', 'sql.js', 'dist', file) }); let buffer; if (fs.existsSync(dbPath)) { buffer = fs.readFileSync(dbPath); } db = new SQL.Database(buffer || null); return db; } export const dbReady = getDb(); export const query = async (sql, params = []) => { const database = await getDb(); const sqliteSql = toSqlitePlaceholders(sql); const stmt = database.prepare(sqliteSql); stmt.bind(Array.isArray(params) ? params : []); const rows = []; while (stmt.step()) rows.push(stmt.getAsObject()); stmt.free(); return { rows }; }; export const run = async (sql, params = []) => { const database = await getDb(); const sqliteSql = toSqlitePlaceholders(sql); database.run(sqliteSql, Array.isArray(params) ? params : []); save(); return {}; }; const pool = { query: (sql, params) => query(sql, params) }; export default pool;