Files
2025-07-24 18:46:24 +02:00

90 lines
2.3 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _index = require("./utils/index.cjs");
const DRIVER_NAME = "deno-kv";
module.exports = (0, _index.defineDriver)((opts = {}) => {
const basePrefix = opts.base ? (0, _index.normalizeKey)(opts.base).split(":") : [];
const r = (key = "") => [...basePrefix, ...key.split(":")].filter(Boolean);
let _kv;
const getKv = () => {
if (_kv) {
return _kv;
}
if (opts.openKv) {
_kv = opts.openKv();
} else {
if (!globalThis.Deno) {
throw (0, _index.createError)(DRIVER_NAME, "Missing global `Deno`. Are you running in Deno? (hint: use `deno-kv-node` driver for Node.js)");
}
if (!Deno.openKv) {
throw (0, _index.createError)(DRIVER_NAME, "Missing `Deno.openKv`. Are you running Deno with --unstable-kv?");
}
_kv = Deno.openKv(opts.path);
}
return _kv;
};
return {
name: DRIVER_NAME,
getInstance() {
return getKv();
},
async hasItem(key) {
const kv = await getKv();
const value = await kv.get(r(key));
return !!value.value;
},
async getItem(key) {
const kv = await getKv();
const value = await kv.get(r(key));
return value.value;
},
async getItemRaw(key) {
const kv = await getKv();
const value = await kv.get(r(key));
return value.value;
},
async setItem(key, value) {
const kv = await getKv();
await kv.set(r(key), value);
},
async setItemRaw(key, value) {
const kv = await getKv();
await kv.set(r(key), value);
},
async removeItem(key) {
const kv = await getKv();
await kv.delete(r(key));
},
async getKeys(base) {
const kv = await getKv();
const keys = [];
for await (const entry of kv.list({
prefix: r(base)
})) {
keys.push((basePrefix.length > 0 ? entry.key.slice(basePrefix.length) : entry.key).join(":"));
}
return keys;
},
async clear(base) {
const kv = await getKv();
const batch = kv.atomic();
for await (const entry of kv.list({
prefix: r(base)
})) {
batch.delete(entry.key);
}
await batch.commit();
},
async dispose() {
if (_kv) {
const kv = await _kv;
await kv.close();
_kv = void 0;
}
}
};
});