From c735556726e75428550a3d28a2cf58e2c8490b7d Mon Sep 17 00:00:00 2001 From: Dawid Rycerz Date: Mon, 21 Jul 2025 21:56:55 +0300 Subject: Initial template --- src/content/config.ts | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/content/config.ts (limited to 'src/content/config.ts') diff --git a/src/content/config.ts b/src/content/config.ts new file mode 100644 index 0000000..71bc2f5 --- /dev/null +++ b/src/content/config.ts @@ -0,0 +1,70 @@ +import { z, defineCollection } from 'astro:content'; +import { glob } from 'astro/loaders'; + +const metadataDefinition = () => + z + .object({ + title: z.string().optional(), + ignoreTitleTemplate: z.boolean().optional(), + + canonical: z.string().url().optional(), + + robots: z + .object({ + index: z.boolean().optional(), + follow: z.boolean().optional(), + }) + .optional(), + + description: z.string().optional(), + + openGraph: z + .object({ + url: z.string().optional(), + siteName: z.string().optional(), + images: z + .array( + z.object({ + url: z.string(), + width: z.number().optional(), + height: z.number().optional(), + }) + ) + .optional(), + locale: z.string().optional(), + type: z.string().optional(), + }) + .optional(), + + twitter: z + .object({ + handle: z.string().optional(), + site: z.string().optional(), + cardType: z.string().optional(), + }) + .optional(), + }) + .optional(); + +const postCollection = defineCollection({ + loader: glob({ pattern: ['*.md', '*.mdx'], base: 'src/data/post' }), + schema: z.object({ + publishDate: z.date().optional(), + updateDate: z.date().optional(), + draft: z.boolean().optional(), + + title: z.string(), + excerpt: z.string().optional(), + image: z.string().optional(), + + category: z.string().optional(), + tags: z.array(z.string()).optional(), + author: z.string().optional(), + + metadata: metadataDefinition(), + }), +}); + +export const collections = { + post: postCollection, +}; -- cgit v1.2.3