UNPKG

@docus/admin

Version:
45 lines (44 loc) 1.47 kB
import { defineDriver } from "unstorage"; import { withBase } from "./utils"; export const driver = defineDriver(() => { const parseKey = (key) => { const [previewKey, fileKey] = (key || "").replace(/^:|:$/, "").split(":content:"); const [_id, ...previewParts] = previewKey.split(":"); const [base, id] = _id.includes("_") ? _id.split("_") : ["", _id]; const ref = previewParts.join("/"); return { base, id, ref, key: fileKey ? `content:${fileKey}` : "", prefix: `${_id}:${ref}:` }; }; return { hasItem: (_key) => { return true; }, getItem: async (_key) => { const { base, id, ref, key } = parseKey(_key); if (!id || !ref) return ""; if (key.endsWith("$")) return {}; try { const content = await fetch(withBase(`/projects/${id}/preview/file?ref=${ref}&key=${key}`, base)).then((res) => res.json()); if (content && content.content) return content.content; } catch (err) { console.error(err); } return null; }, getKeys: async (_key) => { const { base, id, ref, prefix } = parseKey(_key); if (!id || !ref) return []; try { const keys = await globalThis.$fetch(withBase(`/projects/${id}/preview/files?ref=${ref}`, base)); return keys.map((key) => `${prefix}${key.key || key}`); } catch (err) { console.error(err); } return []; } }; }); export default driver;