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};