@oberoncms/core
Version:
OberonCMS is a cloud deployable CMS written in typescript based on the Puck visual editor
84 lines (83 loc) • 2.03 kB
JavaScript
import { z } from "zod";
class OberonError extends Error {
}
class ResponseError extends Error {
}
const clientActions = [
"edit",
"preview",
"users",
"images",
"pages",
"site",
"login"
];
const actionPaths = clientActions.map((action) => ({
path: [action]
}));
const INITIAL_DATA = {
content: [],
root: { props: { title: "" } }
};
const PageSchema = z.object({
key: z.string().regex(/^[0-9a-zA-Z_.-/]+$/, "Valid characters: 0-9 a-z A-Z -_./").regex(/^(\/|\/[^/]+(\/[^/]+)*)$/, "Route segments cannot be empty"),
data: z.object({}).passthrough(),
updatedAt: z.date(),
updatedBy: z.string()
});
const AddPageSchema = PageSchema.pick({ key: true });
const DeletePageSchema = PageSchema.pick({ key: true });
const PublishPageSchema = PageSchema.pick({ key: true, data: true });
const PageMetaSchema = PageSchema.pick({
key: true,
updatedAt: true,
updatedBy: true
});
const ImageSchema = z.object({
key: z.string(),
url: z.string(),
size: z.number(),
width: z.number().gt(0),
height: z.number().gt(0),
alt: z.string(),
updatedAt: z.date(),
updatedBy: z.string()
});
const AddImageSchema = ImageSchema;
const DeleteImageSchema = ImageSchema.pick({ key: true });
const UserSchema = z.object({
id: z.string(),
email: z.string().email(),
role: z.enum(["user", "admin"])
});
const AddUserSchema = UserSchema.pick({ email: true, role: true });
const ChangeRoleSchema = UserSchema.pick({ id: true, role: true });
const DeleteUserSchema = UserSchema.pick({ id: true });
const roles = ["user", "admin"];
const SiteSchema = z.object({
version: z.number(),
components: z.record(z.string(), z.number()),
updatedAt: z.date(),
updatedBy: z.string()
});
export {
AddImageSchema,
AddPageSchema,
AddUserSchema,
ChangeRoleSchema,
DeleteImageSchema,
DeletePageSchema,
DeleteUserSchema,
INITIAL_DATA,
ImageSchema,
OberonError,
PageMetaSchema,
PageSchema,
PublishPageSchema,
ResponseError,
SiteSchema,
UserSchema,
actionPaths,
clientActions,
roles
};