api9nin / src /lib /db /helpers /kvStore.js
github-actions[bot]
deploy from github actions 2026-06-18
c8ae75d
Raw
History Blame Contribute Delete
1.47 kB
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]);
},
};
}