Astro Content Collections ile Tip Güvenli Blog
Bir blogda en sinsi hata türü, sessizce bozulan içeriktir: eksik tarih, yanlış kategori, kırık kapak görseli. Astro’nun content layer API’si bu sınıfı derleme zamanında yok ediyor.
Şema tanımı
Koleksiyon şeması tek yerde durur ve her yazının frontmatter’ı buradan geçer:
import { defineCollection, z } from "astro:content";
import { glob } from "astro/loaders";
const posts = defineCollection({
loader: glob({ pattern: "**/*.mdx", base: "./src/content/posts" }),
schema: z.object({
title: z.string().min(1),
pubDate: z.coerce.date(),
category: z.enum(["ai", "yazilim", "girisimcilik"]),
draft: z.boolean().default(false),
}),
});
Sorgulama
Yazıları çekerken filtre fonksiyonu draft’ları üretimde gizler:
const posts = await getCollection("posts", ({ data }) => {
return !(data.draft && import.meta.env.PROD);
});
Konuyu video olarak izlemek istersen Astro ekibinin content layer tanıtımı iyi bir başlangıç: