73 lines
2.0 KiB
TypeScript
73 lines
2.0 KiB
TypeScript
import { defineCollection } from 'astro:content';
|
|
import { glob } from 'astro/loaders';
|
|
import { z } from 'astro/zod';
|
|
|
|
const status = z.enum(['developing', 'disputed', 'resolved', 'historical']);
|
|
|
|
const maintenance = {
|
|
author: z.string().default('Ana'),
|
|
maintainers: z.array(z.string()).default(['Ana']),
|
|
reviewed: z.coerce.date(),
|
|
status: status.default('developing'),
|
|
draft: z.boolean().default(false),
|
|
};
|
|
|
|
const stories = defineCollection({
|
|
loader: glob({ base: './src/content/stories', pattern: '**/*.md' }),
|
|
schema: z.object({
|
|
title: z.string(),
|
|
description: z.string(),
|
|
published: z.coerce.date(),
|
|
featured: z.boolean().default(false),
|
|
tags: z.array(z.string()).default([]),
|
|
image: z.string().optional(),
|
|
imageAlt: z.string().optional(),
|
|
trustPattern: z
|
|
.object({
|
|
claim: z.string(),
|
|
trusted: z.string(),
|
|
failure: z.string(),
|
|
})
|
|
.optional(),
|
|
...maintenance,
|
|
}),
|
|
});
|
|
|
|
const briefings = defineCollection({
|
|
loader: glob({ base: './src/content/briefings', pattern: '**/*.md' }),
|
|
schema: z.object({
|
|
title: z.string(),
|
|
description: z.string(),
|
|
issue: z.number().int().nonnegative(),
|
|
published: z.coerce.date(),
|
|
...maintenance,
|
|
}),
|
|
});
|
|
|
|
const guides = defineCollection({
|
|
loader: glob({ base: './src/content/guides', pattern: '**/*.md' }),
|
|
schema: z.object({
|
|
title: z.string(),
|
|
description: z.string(),
|
|
firstPublished: z.coerce.date(),
|
|
tags: z.array(z.string()).default([]),
|
|
...maintenance,
|
|
}),
|
|
});
|
|
|
|
const episodes = defineCollection({
|
|
loader: glob({ base: './src/content/episodes', pattern: '**/*.md' }),
|
|
schema: z.object({
|
|
title: z.string(),
|
|
description: z.string(),
|
|
episode: z.number().int().positive(),
|
|
published: z.coerce.date(),
|
|
duration: z.string().optional(),
|
|
audioUrl: z.url().optional(),
|
|
guests: z.array(z.string()).default([]),
|
|
...maintenance,
|
|
}),
|
|
});
|
|
|
|
export const collections = { stories, briefings, guides, episodes };
|