@oberoncms/core
Version:
OberonCMS is a cloud deployable CMS written in typescript based on the Puck visual editor
92 lines (82 loc) • 2.16 kB
text/typescript
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, type ClientAction, type OberonResponse } from "./dtd"
export function getTitle(action: ClientAction, slug?: string) {
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"
}
}
export const parseClientAction = (action: unknown): ClientAction => {
switch (action) {
case "edit":
case "images":
case "login":
case "pages":
case "preview":
case "site":
case "users":
return action
case undefined:
return redirect("/cms/pages")
default:
return notFound()
}
}
export const resolveSlug = (path: string[] = []) => `/${path.join("/")}`
const resolveDevEnv = (value?: string) => {
switch (value) {
case "true":
return true
case "false":
return false
default:
return process.env.NODE_ENV === "development" && !process.env.CI
}
}
export const USE_DEVELOPMENT_DATABASE_PLUGIN = resolveDevEnv(
process.env.USE_DEVELOPMENT_DATABASE,
)
export const USE_DEVELOPMENT_SEND_PLUGIN = resolveDevEnv(
process.env.USE_DEVELOPMENT_SEND,
)
export function notImplemented(action: string) {
return (): never => {
throw new ResponseError(
`No oberon plugin provided for ${action} action, please check your oberon adapter configuration.`,
)
}
}
export async function wrap<T>(promise: Promise<T>): OberonResponse<T> {
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",
}
}
}