Files
Tiber365/node_modules/unstorage/drivers/netlify-blobs.mjs
2025-07-24 18:46:24 +02:00

68 lines
1.9 KiB
JavaScript

import { createError, createRequiredError, defineDriver } from "./utils/index.mjs";
import { getStore, getDeployStore } from "@netlify/blobs";
import { fetch } from "ofetch";
const DRIVER_NAME = "netlify-blobs";
export default defineDriver((options) => {
const { deployScoped, name, ...opts } = options;
let store;
const getClient = () => {
if (!store) {
if (deployScoped) {
if (name) {
throw createError(
DRIVER_NAME,
"deploy-scoped stores cannot have a name"
);
}
store = getDeployStore({ fetch, ...options });
} else {
if (!name) {
throw createRequiredError(DRIVER_NAME, "name");
}
store = getStore({ name: encodeURIComponent(name), fetch, ...opts });
}
}
return store;
};
return {
name: DRIVER_NAME,
options,
getInstance: getClient,
async hasItem(key) {
return getClient().getMetadata(key).then(Boolean);
},
getItem: (key, tops) => {
return getClient().get(key, tops);
},
getMeta(key) {
return getClient().getMetadata(key);
},
getItemRaw(key, topts) {
return getClient().get(key, { type: topts?.type ?? "arrayBuffer" });
},
async setItem(key, value, topts) {
await getClient().set(key, value, topts);
},
async setItemRaw(key, value, topts) {
await getClient().set(key, value, topts);
},
removeItem(key) {
return getClient().delete(key);
},
async getKeys(base, tops) {
return (await getClient().list({ ...tops, prefix: base })).blobs.map(
(item) => item.key
);
},
async clear(base) {
const client = getClient();
return Promise.allSettled(
(await client.list({ prefix: base })).blobs.map(
(item) => client.delete(item.key)
)
).then(() => {
});
}
};
});