@docus/admin
Version:
The Docus admin module.
45 lines (44 loc) • 1.47 kB
JavaScript
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;