UNPKG

@studiocms/blog

Version:

Add a blog to your StudioCMS project with ease!

72 lines (71 loc) 1.75 kB
import { extname } from "node:path"; import { z } from "astro/zod"; import { HeadConfigSchema } from "studiocms/lib/head"; const faviconTypeMap = { ".ico": "image/x-icon", ".gif": "image/gif", ".jpeg": "image/jpeg", ".jpg": "image/jpeg", ".png": "image/png", ".svg": "image/svg+xml" }; function isFaviconExt(ext) { return ext in faviconTypeMap; } const FrontEndConfigSchema = z.object({ /** * HTML Default Language - The default language for the HTML tag * @default 'en' */ htmlDefaultLanguage: z.string().optional().default("en"), /** * HTML Default Header - The default head configuration for the Frontend */ htmlDefaultHead: HeadConfigSchema(), /** * Favicon Configuration - The default favicon configuration for the Frontend */ favicon: z.string().refine( (fav) => { const ext = extname(fav); return isFaviconExt(ext); }, { message: "favicon must be a .ico, .gif, .jpg, .png, or .svg file" } ).optional().default("/favicon.svg"), /** * Enable sitemap generation * @default true */ sitemap: z.boolean().optional().default(true), /** * Inject routes * @default true */ injectRoutes: z.boolean().optional().default(true), /** * The configuration for the blog */ blog: z.object({ /** * The title of the blog */ title: z.string().optional().default("Blog"), /** * Enable RSS feed */ enableRSS: z.boolean().optional().default(true), /** * The route for the blog * @default '/blog' * @example '/news' */ route: z.string().optional().default("/blog") }).optional().default({}) }).optional().default({}); export { FrontEndConfigSchema, faviconTypeMap, isFaviconExt };