@oberoncms/core
Version:
OberonCMS is a cloud deployable CMS written in typescript based on the Puck visual editor
92 lines (91 loc) • 2.12 kB
JavaScript
import { notFound, redirect } from "next/navigation";
import { isRedirectError } from "next/dist/client/components/redirect";
import { isNotFoundError } from "next/dist/client/components/not-found";
import { 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.NODE_ENV === "development" && !process.env.CI;
}
};
const USE_DEVELOPMENT_DATABASE_PLUGIN = resolveDevEnv(
process.env.USE_DEVELOPMENT_DATABASE
);
const USE_DEVELOPMENT_SEND_PLUGIN = resolveDevEnv(
process.env.USE_DEVELOPMENT_SEND
);
function notImplemented(action) {
return () => {
throw new ResponseError(
`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) || isNotFoundError(error)) {
throw error;
}
if (error instanceof ResponseError) {
return {
status: "error",
message: error.message
};
}
return {
status: "error"
};
}
}
export {
USE_DEVELOPMENT_DATABASE_PLUGIN,
USE_DEVELOPMENT_SEND_PLUGIN,
getTitle,
notImplemented,
parseClientAction,
resolveSlug,
wrap
};