import { getAdapter } from "../driver.js"; import { parseJson, stringifyJson } from "./jsonCol.js"; export function makeKv(scope) { return { async get(key, fallback = null) { const db = await getAdapter(); const row = db.get(`SELECT value FROM kv WHERE scope = ? AND key = ?`, [scope, key]); return row ? parseJson(row.value, fallback) : fallback; }, async getAll() { const db = await getAdapter(); const rows = db.all(`SELECT key, value FROM kv WHERE scope = ?`, [scope]); const out = {}; for (const r of rows) out[r.key] = parseJson(r.value); return out; }, async set(key, value) { const db = await getAdapter(); db.run(`INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value`, [scope, key, stringifyJson(value)]); }, async setMany(obj) { const db = await getAdapter(); db.transaction(() => { for (const [k, v] of Object.entries(obj)) { db.run(`INSERT INTO kv(scope, key, value) VALUES(?, ?, ?) ON CONFLICT(scope, key) DO UPDATE SET value = excluded.value`, [scope, k, stringifyJson(v)]); } }); }, async remove(key) { const db = await getAdapter(); db.run(`DELETE FROM kv WHERE scope = ? AND key = ?`, [scope, key]); }, async clear() { const db = await getAdapter(); db.run(`DELETE FROM kv WHERE scope = ?`, [scope]); }, }; }