Files
archicratie-edition/src/content/config.ts
archicratia 60d88939b0
All checks were successful
CI / build-and-anchors (push) Successful in 1m25s
SMOKE / smoke (push) Successful in 11s
CI / build-and-anchors (pull_request) Successful in 1m20s
Seed from NAS prod snapshot 20260130-190531
2026-01-31 10:51:38 +00:00

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
};