ci: add anchor aliases schema checker
All checks were successful
CI / build-and-anchors (push) Successful in 53s
All checks were successful
CI / build-and-anchors (push) Successful in 53s
This commit is contained in:
63
scripts/check-anchor-aliases.mjs
Normal file
63
scripts/check-anchor-aliases.mjs
Normal file
@@ -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}`);
|
||||
Reference in New Issue
Block a user