Files
archicratie-edition/src/content.config.ts
Archicratia 9d8d60d00f
All checks were successful
SMOKE / smoke (push) Successful in 4s
CI / build-and-anchors (push) Successful in 42s
CI / build-and-anchors (pull_request) Successful in 38s
feat(glossaire): enrichit la cartographie archicratique et les archicrations
2026-03-14 19:55:16 +01:00

83 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { defineCollection, z } from "astro:content";
const linkSchema = z.object({
type: z.enum(["definition", "appui", "transposition"]),
target: z.string().min(1),
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([]),
order: z.number().int().nonnegative().optional(),
summary: z.string().optional()
});
// Éditions (séparation stricte : edition + status verrouillés par collection)
const casIa = defineCollection({
type: "content",
schema: baseTextSchema.extend({
edition: z.literal("cas-ia"),
status: z.literal("application")
})
});
const commencer = defineCollection({
type: "content",
schema: baseTextSchema.extend({
edition: z.literal("commencer"),
status: z.union([z.literal("presentation"), z.literal("draft")])
})
});
// ✅ NOUVELLE collection : archicrat-ia (Essai-thèse)
// NOTE : on accepte temporairement edition/status "archicratie/modele_sociopolitique"
// si tes MDX nont pas encore été normalisés.
// Quand tu voudras "strict", on passera à edition="archicrat-ia" status="essai_these"
// + update frontmatter des 7 fichiers.
const archicratIa = defineCollection({
type: "content",
schema: baseTextSchema.extend({
edition: z.union([z.literal("archicrat-ia"), z.literal("archicratie")]),
status: z.union([z.literal("essai_these"), z.literal("modele_sociopolitique")])
})
});
// Glossaire (référentiel terminologique)
const glossaire = defineCollection({
type: "content",
schema: z.object({
title: z.string().min(1),
term: z.string().min(1),
aliases: z.array(z.string().min(1)).default([]),
urlAliases: z
.array(z.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/))
.default([]),
authors: z.array(z.string().min(1)).default([]),
tradition: z.string().min(1).optional(),
edition: z.literal("glossaire"),
status: z.literal("referentiel"),
version: z.string().min(1),
definitionShort: z.string().min(1),
concepts: z.array(z.string().min(1)).default([]),
links: z.array(linkSchema).default([]),
kind: z.enum(["concept", "topologie", "diagnostic", "verbe", "paradigme", "doctrine"]),
domain: z.enum(["transversal", "theorie", "cas-ia"]),
level: z.enum(["fondamental", "intermediaire", "avance"]),
related: z.array(z.string().min(1)).default([]),
opposedTo: z.array(z.string().min(1)).default([]),
seeAlso: z.array(z.string().min(1)).default([])
})
});
export const collections = {
commencer,
"archicrat-ia": archicratIa,
"cas-ia": casIa,
glossaire,
};