// Generated, do not edit. sha256:82c1a99dd9bcb14921519651f00e41b83ebb6753c9cc496d2de5d3792c7a8814 import { DatabaseSync } from 'node:sqlite'; import { SCHEMA, createDatabase as echteCreateDatabase } from '../../server/db.js'; import { CONFIG, PREFERENCES } from '../../shared/config.js'; const bind = params => params.map(v => { if (v === undefined) return null; if (typeof v === 'boolean') return v ? 1n : 0n; if (typeof v === 'number' && Number.isInteger(v)) return BigInt(v); return v; }); export function createDbHarness({ seedPreferences = false } = {}) { let sqlite; let calls; function fresh() { sqlite = new DatabaseSync(':memory:', { enableForeignKeyConstraints: true }); sqlite.exec(SCHEMA); sqlite.prepare(`INSERT INTO Schema (version) VALUES (?)`).run(CONFIG.SCHEMA_VERSION); sqlite.prepare(`INSERT INTO Portfolio (id, baseCurrency, createdAt) VALUES (1, ?, ?)`) .run(CONFIG.PORTFOLIO.DEFAULT_BASE_CURRENCY, '2026-01-01T00:00:00.000Z'); calls = { run: 0, persist: 0, seedPriceSource: [] }; if (seedPreferences) seedPrefs(); } function seedPrefs() { for (const [scope, keys] of Object.entries(PREFERENCES)) { for (const [key, spec] of Object.entries(keys)) { if (spec.secret) continue; api.run(`INSERT INTO Preference (scope, key, value) VALUES (?,?,?)`, [scope, key, JSON.stringify(spec.initial)]); } } } const api = { run(sql, params = []) { calls.run++; if (params.length === 0) sqlite.exec(sql); else sqlite.prepare(sql).run(...bind(params)); }, all(sql, params = []) { return sqlite.prepare(sql).all(...bind(params)).map(row => ({ ...row })); }, one(sql, params = []) { const rows = api.all(sql, params); return rows.length ? rows[0] : null; }, lastId() { const r = api.one(`SELECT last_insert_rowid() AS id`); return r ? r.id : null; }, schemaVersion() { const r = api.one(`SELECT version FROM Schema`); return r ? r.version : null; }, async persist() { calls.persist++; }, seedPriceSource(assetId, status) { calls.seedPriceSource.push([assetId, status]); }, async init() { return sqlite; }, exportBytes() { throw new Error('db-node-harness: exportBytes() niet ondersteund in tests.'); }, async reset() { throw new Error('db-node-harness: reset() niet ondersteund; gebruik harness.recreate().'); }, async importBytes() { throw new Error('db-node-harness: importBytes() niet ondersteund in tests.'); }, createDatabase: echteCreateDatabase, async idbGet(key) { return idb.has(key) ? idb.get(key) : null; }, async idbPut(key, value) { idb.set(key, value); }, }; const idb = new Map(); fresh(); return { exports: api, recreate() { sqlite.close(); idb.clear(); fresh(); }, get sqlite() { return sqlite; }, get calls() { return calls; }, }; }