55 lines
1.7 KiB
TypeScript
55 lines
1.7 KiB
TypeScript
import { defineCollection, reference, z } from "astro:content";
|
|
import { glob, file } from 'astro/loaders';
|
|
|
|
|
|
const writing = defineCollection({
|
|
loader: glob({pattern: "**/*.(md|mdx)", base: "./src/content/wie-man-einen-code-schreibt"}),
|
|
schema: z.object({
|
|
title: z.string(),
|
|
chapter: reference("writingChapters"),
|
|
part: z.number(),
|
|
subtitle: z.string().optional(),
|
|
})
|
|
})
|
|
|
|
const writingChapters = defineCollection({
|
|
loader: file("./src/content/wie-man-einen-code-schreibt/chapters.json"),
|
|
schema: z.object({
|
|
name: z.string(),
|
|
order: z.number(),
|
|
subtitle: z.string(),
|
|
})
|
|
});
|
|
|
|
const projects = defineCollection({
|
|
loader: glob({pattern: "**/*.(md|mdx)", base: "./src/content/projects"}),
|
|
schema: z.object({
|
|
title: z.string(),
|
|
site_title: z.string().optional(),
|
|
summary: z.string(),
|
|
repository: z.string().url().optional(),
|
|
relatedWebsite: z.string().url().optional(),
|
|
published: z.date(),
|
|
tags: z.array(z.string()).optional(),
|
|
isDraft: z.boolean().optional(),
|
|
subtitle: z.string().optional(),
|
|
}),
|
|
});
|
|
|
|
const blog = defineCollection({
|
|
loader: glob({pattern: "**/*.(md|mdx)", base: "./src/content/blog"}),
|
|
schema: z.object({
|
|
title: z.string(),
|
|
site_title: z.string().optional(),
|
|
relatedWebsite: z.string().url().optional(),
|
|
published: z.date(),
|
|
summary: z.string().optional(),
|
|
tags: z.array(z.string()).optional(),
|
|
isDraft: z.boolean().optional(),
|
|
subtitle: z.string().optional(),
|
|
}),
|
|
});
|
|
|
|
|
|
export const collections = { writing, writingChapters, projects, blog };
|