master
1import { glob } from 'astro/loaders';
2import { defineCollection, z } from 'astro:content';
3
4const postsCollection = defineCollection({
5 loader: glob({
6 pattern: ['**/*.{md,mdx}', '!**/_*', '!**/_*/**'],
7 base: 'src/content/posts',
8 }),
9 schema: ({ image }) =>
10 z.object({
11 title: z.string(),
12 slug: z.string(),
13 published: z.date(),
14 draft: z.boolean().optional().default(false),
15 description: z.string().optional().default(''),
16 cover: image().optional(),
17 tags: z.array(z.string()).optional().default([]),
18 category: z.string().optional().default(''),
19 lang: z.string().optional().default(''),
20 comment: z.boolean().optional().default(true),
21 }),
22});
23
24const draftsCollection = defineCollection({
25 loader: glob({
26 pattern: ['**/*.{md,mdx}', '!**/_*', '!**/_*/**'],
27 base: 'src/content/drafts',
28 }),
29 schema: ({ image }) =>
30 z.object({
31 title: z.string(),
32 slug: z.string(),
33 description: z.string().optional().default(''),
34 cover: image().optional(),
35 tags: z.array(z.string()).optional().default([]),
36 category: z.string().optional().default(''),
37 lang: z.string().optional().default(''),
38 comment: z.boolean().optional().default(true),
39 }),
40});
41
42const specCollection = defineCollection({
43 loader: glob({
44 pattern: ['**/*.{md,mdx}', '!**/_*', '!**/_*/**'],
45 base: 'src/content/spec',
46 }),
47 schema: z.object({
48 title: z.string().optional(),
49 description: z.string().optional(),
50 comment: z.boolean().optional().default(false),
51 }),
52});
53
54export const collections = {
55 posts: postsCollection,
56 drafts: draftsCollection,
57 spec: specCollection,
58};