78 lines
2.1 KiB
TypeScript
78 lines
2.1 KiB
TypeScript
import { defineCollection, z } from "astro:content";
|
|
|
|
const linkSchema = z.object({
|
|
type: z.enum(["definition", "appui", "transposition"]),
|
|
target: z.string().min(1), // URL interne (ex: /glossaire/archicratie/) ou slug
|
|
note: z.string().optional()
|
|
});
|
|
|
|
const baseTextSchema = z.object({
|
|
title: z.string().min(1),
|
|
level: z.union([z.literal(1), z.literal(2), z.literal(3)]).default(1),
|
|
version: z.string().min(1),
|
|
concepts: z.array(z.string().min(1)).default([]),
|
|
links: z.array(linkSchema).default([]),
|
|
// optionnels mais utiles dès maintenant
|
|
order: z.number().int().nonnegative().optional(),
|
|
summary: z.string().optional()
|
|
});
|
|
|
|
// Éditions (séparation stricte : edition + status verrouillés par collection)
|
|
const traite = defineCollection({
|
|
type: "content",
|
|
schema: baseTextSchema.extend({
|
|
edition: z.literal("traite"),
|
|
status: z.literal("theorie_fondamentale")
|
|
})
|
|
});
|
|
|
|
const archicratie = defineCollection({
|
|
type: "content",
|
|
schema: baseTextSchema.extend({
|
|
edition: z.literal("archicratie"),
|
|
status: z.literal("modele_sociopolitique")
|
|
})
|
|
});
|
|
|
|
const ia = defineCollection({
|
|
type: "content",
|
|
schema: baseTextSchema.extend({
|
|
edition: z.literal("ia"),
|
|
status: z.literal("application")
|
|
})
|
|
});
|
|
|
|
const atlas = defineCollection({
|
|
type: "content",
|
|
schema: baseTextSchema.extend({
|
|
edition: z.literal("atlas"),
|
|
status: z.literal("cartographie")
|
|
})
|
|
});
|
|
|
|
// Glossaire (référentiel terminologique)
|
|
const glossaire = defineCollection({
|
|
type: "content",
|
|
schema: z.object({
|
|
title: z.string().min(1), // Titre public (souvent identique au terme)
|
|
term: z.string().min(1), // Terme canonique
|
|
aliases: z.array(z.string().min(1)).default([]),
|
|
edition: z.literal("glossaire"),
|
|
status: z.literal("referentiel"),
|
|
version: z.string().min(1),
|
|
// Micro-définition affichable en popover (courte, stable)
|
|
definitionShort: z.string().min(1),
|
|
concepts: z.array(z.string().min(1)).default([]),
|
|
// Liens typés (vers ouvrages ou autres termes)
|
|
links: z.array(linkSchema).default([])
|
|
})
|
|
});
|
|
|
|
export const collections = {
|
|
traite,
|
|
archicratie,
|
|
ia,
|
|
glossaire,
|
|
atlas
|
|
};
|