| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- globalThis.process ??= {}; globalThis.process.env ??= {};
- function defineDriver(factory) {
- return factory;
- }
- function normalizeKey(key, sep = ":") {
- if (!key) {
- return "";
- }
- return key.replace(/[:/\\]/g, sep).replace(/^[:/\\]|[:/\\]$/g, "");
- }
- function joinKeys(...keys) {
- return keys.map((key) => normalizeKey(key)).filter(Boolean).join(":");
- }
- function createError(driver, message, opts) {
- const err = new Error(`[unstorage] [${driver}] ${message}`, opts);
- if (Error.captureStackTrace) {
- Error.captureStackTrace(err, createError);
- }
- return err;
- }
- function getBinding(binding) {
- let bindingName = "[binding]";
- if (typeof binding === "string") {
- bindingName = binding;
- binding = globalThis[bindingName] || globalThis.__env__?.[bindingName];
- }
- if (!binding) {
- throw createError(
- "cloudflare",
- `Invalid binding \`${bindingName}\`: \`${binding}\``
- );
- }
- for (const key of ["get", "put", "delete"]) {
- if (!(key in binding)) {
- throw createError(
- "cloudflare",
- `Invalid binding \`${bindingName}\`: \`${key}\` key is missing`
- );
- }
- }
- return binding;
- }
- function getKVBinding(binding = "STORAGE") {
- return getBinding(binding);
- }
- const DRIVER_NAME = "cloudflare-kv-binding";
- const cloudflareKvBinding = defineDriver((opts) => {
- const r = (key = "") => opts.base ? joinKeys(opts.base, key) : key;
- async function getKeys(base = "") {
- base = r(base);
- const binding = getKVBinding(opts.binding);
- const keys = [];
- let cursor = void 0;
- do {
- const kvList = await binding.list({ prefix: base || void 0, cursor });
- keys.push(...kvList.keys);
- cursor = kvList.list_complete ? void 0 : kvList.cursor;
- } while (cursor);
- return keys.map((key) => key.name);
- }
- return {
- name: DRIVER_NAME,
- options: opts,
- getInstance: () => getKVBinding(opts.binding),
- async hasItem(key) {
- key = r(key);
- const binding = getKVBinding(opts.binding);
- return await binding.get(key) !== null;
- },
- getItem(key) {
- key = r(key);
- const binding = getKVBinding(opts.binding);
- return binding.get(key);
- },
- setItem(key, value, topts) {
- key = r(key);
- const binding = getKVBinding(opts.binding);
- return binding.put(
- key,
- value,
- topts ? {
- expirationTtl: topts?.ttl ? Math.max(topts.ttl, opts.minTTL ?? 60) : void 0,
- ...topts
- } : void 0
- );
- },
- removeItem(key) {
- key = r(key);
- const binding = getKVBinding(opts.binding);
- return binding.delete(key);
- },
- getKeys(base) {
- return getKeys(base).then(
- (keys) => keys.map((key) => opts.base ? key.slice(opts.base.length) : key)
- );
- },
- async clear(base) {
- const binding = getKVBinding(opts.binding);
- const keys = await getKeys(base);
- await Promise.all(keys.map((key) => binding.delete(key)));
- }
- };
- });
- export { cloudflareKvBinding as default };
|