summaryrefslogtreecommitdiff
path: root/src/content
diff options
context:
space:
mode:
authorDawid Rycerz <dawid@rycerz.xyz>2025-07-21 21:56:55 +0300
committerDawid Rycerz <dawid@rycerz.xyz>2025-07-21 21:56:55 +0300
commitc735556726e75428550a3d28a2cf58e2c8490b7d (patch)
treefd0ae29d1636b825abeedff6b99d3376bb383135 /src/content
Initial template
Diffstat (limited to 'src/content')
-rw-r--r--src/content/config.ts70
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,
+};