diff options
| author | Dawid Rycerz <dawid@rycerz.xyz> | 2025-07-22 15:08:37 +0300 |
|---|---|---|
| committer | Dawid Rycerz <dawid@rycerz.xyz> | 2025-07-22 15:08:37 +0300 |
| commit | fcc2f4704e39b0e69b377cc138f75027721dac22 (patch) | |
| tree | 732fc94b354a26c08fba9cc9059f9c6c900182be /src/content/config.ts | |
Initial template
Diffstat (limited to 'src/content/config.ts')
| -rw-r--r-- | src/content/config.ts | 70 |
1 files changed, 70 insertions, 0 deletions
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, +}; |
