Files
Tiber365/node_modules/unstorage/drivers/uploadthing.cjs
2025-07-24 18:46:24 +02:00

83 lines
2.4 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _utils = require("./utils/index.cjs");
var _server = require("uploadthing/server");
const DRIVER_NAME = "uploadthing";
module.exports = (0, _utils.defineDriver)((opts = {}) => {
let client;
const base = opts.base ? (0, _utils.normalizeKey)(opts.base) : "";
const r = key => base ? `${base}:${key}` : key;
const getClient = () => {
return client ??= new _server.UTApi({
...opts,
defaultKeyType: "customId"
});
};
const getKeys = async base2 => {
const client2 = getClient();
const {
files
} = await client2.listFiles({});
return files.map(file => file.customId).filter(k => k && k.startsWith(base2));
};
const toFile = (key, value) => {
return Object.assign(new Blob([value]), {
name: key,
customId: key
});
};
return {
name: DRIVER_NAME,
getInstance() {
return getClient();
},
getKeys(base2) {
return getKeys(r(base2));
},
async hasItem(key) {
const client2 = getClient();
const res = await client2.getFileUrls(r(key));
return res.data.length > 0;
},
async getItem(key) {
const client2 = getClient();
const url = await client2.getFileUrls(r(key)).then(res => res.data[0]?.url);
if (!url) return null;
return fetch(url).then(res => res.text());
},
async getItemRaw(key) {
const client2 = getClient();
const url = await client2.getFileUrls(r(key)).then(res => res.data[0]?.url);
if (!url) return null;
return fetch(url).then(res => res.arrayBuffer());
},
async setItem(key, value) {
const client2 = getClient();
await client2.uploadFiles(toFile(r(key), value));
},
async setItemRaw(key, value) {
const client2 = getClient();
await client2.uploadFiles(toFile(r(key), value));
},
async setItems(items) {
const client2 = getClient();
await client2.uploadFiles(items.map(item => toFile(r(item.key), item.value)));
},
async removeItem(key) {
const client2 = getClient();
await client2.deleteFiles([r(key)]);
},
async clear(base2) {
const client2 = getClient();
const keys = await getKeys(r(base2));
await client2.deleteFiles(keys);
}
// getMeta(key, opts) {
// // TODO: We don't currently have an endpoint to fetch metadata, but it does exist
// },
};
});