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