39 lines
837 B
TypeScript
39 lines
837 B
TypeScript
import { z, defineCollection } from 'astro:content'
|
|
|
|
// Individual TA entries
|
|
const entry = z.object({
|
|
title: z.string(),
|
|
link: z.string().url(),
|
|
date: z.string().transform((str) => new Date(str)),
|
|
servant: z.string(),
|
|
turns: z.string(),
|
|
runner: z.string(),
|
|
})
|
|
|
|
// Individual quest info block
|
|
const quest = z.object({
|
|
questTitle: z.string(),
|
|
description: z.string(),
|
|
data: z.array(entry)
|
|
})
|
|
|
|
// Basic info block for page
|
|
const info = z.object({
|
|
title: z.string(),
|
|
releaseDate: z.string().transform((str) => new Date(str)),
|
|
shortdescription: z.string(),
|
|
releaseNumber: z.number().default(1),
|
|
})
|
|
|
|
// Combined ta data collection schema
|
|
const taData = defineCollection({
|
|
type: 'data',
|
|
schema: z.object({
|
|
info: info,
|
|
quests: z.array(quest),
|
|
}),
|
|
})
|
|
|
|
export const collections = {
|
|
taInfoData: taData,
|
|
}
|