İçeriğe atla
Yazılım · 1 dk okuma

Astro Content Collections ile Tip Güvenli Blog

Astro 5'in content layer API'siyle frontmatter'ı Zod şemasına bağlayıp yazı arşivini derleme zamanında doğrulamak.

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ıç: