full site update
This commit is contained in:
77
node_modules/unstorage/drivers/uploadthing.mjs
generated
vendored
Normal file
77
node_modules/unstorage/drivers/uploadthing.mjs
generated
vendored
Normal file
@@ -0,0 +1,77 @@
|
||||
import { defineDriver, normalizeKey } from "./utils/index.mjs";
|
||||
import { UTApi } from "uploadthing/server";
|
||||
const DRIVER_NAME = "uploadthing";
|
||||
export default defineDriver((opts = {}) => {
|
||||
let client;
|
||||
const base = opts.base ? normalizeKey(opts.base) : "";
|
||||
const r = (key) => base ? `${base}:${key}` : key;
|
||||
const getClient = () => {
|
||||
return client ??= new 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
|
||||
// },
|
||||
};
|
||||
});
|
Reference in New Issue
Block a user