diff --git a/scripts/check-anchor-aliases.mjs b/scripts/check-anchor-aliases.mjs new file mode 100644 index 0000000..f6869d3 --- /dev/null +++ b/scripts/check-anchor-aliases.mjs @@ -0,0 +1,63 @@ +import fs from "node:fs"; +import path from "node:path"; + +const ALIASES_PATH = path.join(process.cwd(), "src", "anchors", "anchor-aliases.json"); + +if (!fs.existsSync(ALIASES_PATH)) { + console.log("ℹ️ Aucun fichier d'aliases (src/anchors/anchor-aliases.json). Skip."); + process.exit(0); +} + +let data; +try { + data = JSON.parse(fs.readFileSync(ALIASES_PATH, "utf8")); +} catch (e) { + console.error("❌ JSON invalide dans src/anchors/anchor-aliases.json"); + console.error(e?.message || e); + process.exit(1); +} + +if (!data || typeof data !== "object" || Array.isArray(data)) { + console.error("❌ Le JSON doit être un objet { route: { oldId: newId } }"); + process.exit(1); +} + +let pages = 0; +let aliases = 0; + +for (const [route, mapping] of Object.entries(data)) { + pages++; + + if (typeof route !== "string" || !route.trim()) { + console.error("❌ Route invalide (clé): doit être une string non vide", { route }); + process.exit(1); + } + // Optionnel mais sain : routes de type "/xxx/yyy/" + if (!route.startsWith("/") || !route.endsWith("/")) { + console.error("❌ Route invalide: doit commencer et finir par '/'", { route }); + process.exit(1); + } + + if (!mapping || typeof mapping !== "object" || Array.isArray(mapping)) { + console.error("❌ Mapping invalide: doit être un objet { oldId: newId }", { route }); + process.exit(1); + } + + for (const [oldId, newId] of Object.entries(mapping)) { + if (typeof oldId !== "string" || typeof newId !== "string") { + console.error("❌ oldId/newId doivent être des strings", { route, oldId, newId }); + process.exit(1); + } + if (!oldId.trim() || !newId.trim()) { + console.error("❌ oldId/newId ne doivent pas être vides", { route, oldId, newId }); + process.exit(1); + } + if (oldId === newId) { + console.error("❌ oldId doit différer de newId", { route, oldId }); + process.exit(1); + } + aliases++; + } +} + +console.log(`✅ anchor-aliases.json OK: pages=${pages} aliases=${aliases}`);