@oberoncms/core
Version:
OberonCMS is a cloud deployable CMS written in typescript based on the Puck visual editor
108 lines (107 loc) • 2.49 kB
JavaScript
import { notFound, redirect } from "next/navigation";
import { isRedirectError } from "next/dist/client/components/redirect-error";
import { NotImplementedError, ResponseError } from "./dtd.js";
function getTitle(action, slug) {
switch (action) {
case "edit":
return `Editing: ${slug}`;
case "preview":
return `Previewing: ${slug}`;
case "images":
return "Manage Images";
case "users":
return "Manage Users";
case "pages":
return "Manage Pages";
case "site":
default:
return "Oberon CMS";
}
}
const parseClientAction = (action) => {
switch (action) {
case "edit":
case "images":
case "login":
case "pages":
case "preview":
case "site":
case "users":
return action;
case void 0:
return redirect("/cms/pages");
default:
return notFound();
}
};
const resolveSlug = (path = []) => `/${path.join("/")}`;
const resolveDevEnv = (value) => {
switch (value) {
case "true":
return true;
case "false":
return false;
default:
return !process.env.CI && (!process.env.NODE_ENV || process.env.NODE_ENV === "development");
}
};
const USE_DEVELOPMENT_DATABASE_PLUGIN = resolveDevEnv(
process.env.USE_DEVELOPMENT_DATABASE
);
const USE_DEVELOPMENT_SEND_PLUGIN = resolveDevEnv(
process.env.USE_DEVELOPMENT_SEND
);
async function isNotImplemented(adapter, methodName) {
const method = adapter[methodName];
if (typeof method !== "function") {
return false;
}
try {
await Promise.resolve(Reflect.apply(method, adapter, []));
return false;
} catch (error) {
return error instanceof NotImplementedError;
}
}
function notImplemented(action) {
return () => {
throw new NotImplementedError(
`No oberon plugin provided for ${action} action, please check your oberon adapter configuration.`
);
};
}
async function wrap(promise) {
try {
return {
status: "success",
result: await promise
};
} catch (error) {
if (isRedirectError(error)) {
throw error;
}
if (error instanceof ResponseError) {
return {
status: "error",
message: error.message
};
}
return {
status: "error"
};
}
}
function isValidKey(key, obj) {
return key in obj;
}
export {
USE_DEVELOPMENT_DATABASE_PLUGIN,
USE_DEVELOPMENT_SEND_PLUGIN,
getTitle,
isNotImplemented,
isValidKey,
notImplemented,
parseClientAction,
resolveSlug,
wrap
};