UNPKG

@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
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 };