@maxlkatze/cms
Version:
A git based Nuxt Module CMS - zero effort, zero cost
78 lines (77 loc) • 2.75 kB
JavaScript
import { createStorage } from "unstorage";
export const useContentStorage = async (_runtimeConfig) => {
const runtimeConfig = _runtimeConfig;
let module;
switch (runtimeConfig.storage.type) {
case "azure-app-configuration":
module = await import("unstorage/drivers/azure-app-configuration");
break;
case "cloudflare-kv-binding":
module = await import("unstorage/drivers/cloudflare-kv-binding");
break;
case "fs":
module = await import("unstorage/drivers/fs");
break;
case "github":
module = await import("unstorage/drivers/github");
break;
case "mongodb":
module = await import("unstorage/drivers/mongodb");
break;
case "netlify-blobs":
module = await import("unstorage/drivers/netlify-blobs");
break;
case "planetscale":
module = await import("unstorage/drivers/planetscale");
break;
case "redis":
module = await import("unstorage/drivers/redis");
break;
case "upstash":
module = await import("unstorage/drivers/upstash");
break;
case "vercel-kv":
module = await import("unstorage/drivers/vercel-kv");
break;
default:
throw new Error(`Driver ${runtimeConfig.storage.type} not found`);
}
let driver;
const copiedOptions = JSON.parse(JSON.stringify(runtimeConfig.storage.options));
try {
const nitroPackImport = module;
driver = nitroPackImport(copiedOptions);
} catch (e1) {
try {
const moduleImport = module;
driver = moduleImport.default(copiedOptions);
} catch (e2) {
console.log("\x1B[41m\x1B[30m !Katze \x1B[0m Have you installed the driver for the storage type? Consult the unstorage documentation for more information");
throw new Error(`Driver ${runtimeConfig.storage.type} could not be imported, possible error: ${e1}, ${e2}`);
}
}
const storage = createStorage({
driver
});
storage.publishContent = async (content) => {
console.log("Publishing content", content);
};
storage.close = async () => {
if (runtimeConfig.storage.type === "redis") {
try {
console.log("\x1B[42m\x1B[30m Katze \x1B[0m Closing Redis connection");
const redisDriver = driver;
if (redisDriver.getInstance && typeof redisDriver.getInstance === "function") {
const instance = redisDriver.getInstance();
if (instance && typeof instance.quit === "function") {
await instance.quit();
console.log("\x1B[42m\x1B[30m Katze \x1B[0m Redis connection closed successfully");
}
}
} catch (err) {
console.error("\x1B[41m\x1B[30m !Katze \x1B[0m Error closing Redis connection:", err);
}
}
};
return storage;
};