seedproject-web/app/src/content.config.js

36 lines
1 KiB
JavaScript
Raw Normal View History

import { defineCollection } from "astro:content";
import { glob } from "astro/loaders";
import { z } from "astro/zod";
const blog = defineCollection({
loader: glob({
pattern: "**/index.mdx",
base: "./src/content/blog",
generateId: ({ entry }) => entry.replace(/[\\/]index\.mdx$/, "").replace(/\\/g, "/"),
}),
schema: ({ image }) =>
z.object({
title: z.string(),
excerpt: z.string(),
date: z.coerce.date(),
updated: z.coerce.date().optional(),
readingTime: z.number().int().positive(),
category: z.string(),
tags: z.array(z.string()).default([]),
author: z.string(),
thumbnail: image(),
imageCredit: z
.object({
caption: z.string().optional(),
author: z.string(),
authorUrl: z.string().url(),
source: z.string().optional(),
sourceUrl: z.string().url().optional(),
})
.optional(),
featured: z.boolean().default(false),
}),
});
export const collections = { blog };