1import { defineCollection, z } from "astro:content";
2import { glob } from "astro/loaders";
3import { generateSlug } from "~/utils/slug";
4
5const writings = defineCollection({
6 loader: glob({ pattern: "**/*.md", base: "./content/writings" }),
7 schema: z
8 .object({
9 title: z.string(),
10 description: z.string(),
11 pubDate: z
12 .string()
13 .or(z.date())
14 .transform((val) => new Date(val)),
15 slug: z.string().optional(),
16 tags: z.array(z.string()).optional(),
17 draft: z.boolean().optional().default(false),
18 })
19 .transform((data) => ({
20 ...data,
21 slug: data.slug || generateSlug(data.title, data.pubDate),
22 })),
23});
24
25export const collections = { writings };