UNPKG

studiocms

Version:

Astro Native CMS for AstroDB. Built from the ground up by the Astro community.

54 lines (53 loc) 2.1 kB
import { z } from "astro/zod"; function ensureStringArray(val) { if (!val) return []; if (typeof val === "string" && val.trim() === "") return []; if (Array.isArray(val)) return val; try { const parsed = JSON.parse(val); if (Array.isArray(parsed)) return parsed; return []; } catch { return []; } } const studioCMSCreatePageDataSchema = z.object({ title: z.string().min(1, { message: "Title is required" }), slug: z.string().refine((val) => /^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(val), { message: "Slug must be lowercase and can only contain letters, numbers, and hyphens (no leading/trailing hyphens)" }), description: z.string().optional(), package: z.string(), showOnNav: z.string().optional().transform(transformStringToBoolean), heroImage: z.string().optional(), parentFolder: z.union([z.string(), z.null()]).transform((value) => value === "null" || value === null ? null : value).optional().default(null), draft: z.string().optional().transform(transformStringToBoolean), showAuthor: z.string().optional().transform(transformStringToBoolean), showContributors: z.string().optional().transform(transformStringToBoolean), categories: z.string().or(z.array(z.string())).optional().transform(ensureStringArray).default([]), tags: z.string().or(z.array(z.string())).optional().transform(ensureStringArray).default([]) }); const studioCMSEditPageDataAndContentSchema = studioCMSCreatePageDataSchema.extend({ id: z.string(), content: z.string(), contentId: z.string(), pluginFields: z.record(z.custom().nullable()).optional().default({}), augments: z.array(z.string()).optional() }); function formDataToRecord(formData, keyRemapping) { const record = {}; for (const [key, value] of formData.entries()) { const mappedKey = keyRemapping?.[key] || key; record[mappedKey] = value; } return record; } function transformStringToBoolean(value) { return !!value && value.toLowerCase() === "true"; } export { formDataToRecord, studioCMSCreatePageDataSchema, studioCMSEditPageDataAndContentSchema, transformStringToBoolean };