Seed from NAS prod snapshot 20260130-190531
This commit is contained in:
77
src/content/config.ts
Normal file
77
src/content/config.ts
Normal file
@@ -0,0 +1,77 @@
|
||||
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
|
||||
};
|
||||
Reference in New Issue
Block a user