@studiocms/blog
Version:
Add a blog to your StudioCMS project with ease!
72 lines (71 loc) • 1.75 kB
JavaScript
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
};