64 lines
1.8 KiB
JavaScript
64 lines
1.8 KiB
JavaScript
import fs from "node:fs";
|
||
import path from "node:path";
|
||
|
||
const CWD = process.cwd();
|
||
const ALIASES_PATH = path.join(CWD, "src", "anchors", "anchor-aliases.json");
|
||
const DIST_DIR = path.join(CWD, "dist");
|
||
|
||
if (!fs.existsSync(ALIASES_PATH)) {
|
||
console.log("ℹ️ Pas d'aliases => skip verify.");
|
||
process.exit(0);
|
||
}
|
||
if (!fs.existsSync(DIST_DIR)) {
|
||
console.error("❌ dist/ introuvable. Lance d'abord le build.");
|
||
process.exit(1);
|
||
}
|
||
|
||
const aliases = JSON.parse(fs.readFileSync(ALIASES_PATH, "utf8"));
|
||
|
||
let checked = 0;
|
||
let failed = 0;
|
||
|
||
for (const [route, mapping] of Object.entries(aliases)) {
|
||
const htmlPath = path.join(DIST_DIR, route.replace(/^\//, ""), "index.html");
|
||
if (!fs.existsSync(htmlPath)) {
|
||
console.error(`❌ HTML introuvable pour route=${route} => ${htmlPath}`);
|
||
failed++;
|
||
continue;
|
||
}
|
||
const html = fs.readFileSync(htmlPath, "utf8");
|
||
|
||
for (const [oldId, newId] of Object.entries(mapping)) {
|
||
checked++;
|
||
|
||
const oldNeedle = `id="${oldId}"`;
|
||
const newNeedle = `id="${newId}"`;
|
||
|
||
const oldPos = html.indexOf(oldNeedle);
|
||
const newPos = html.indexOf(newNeedle);
|
||
|
||
if (newPos === -1) {
|
||
console.error(`❌ newId absent: route=${route} newId=${newId}`);
|
||
failed++;
|
||
continue;
|
||
}
|
||
if (oldPos === -1) {
|
||
console.error(`❌ alias oldId non injecté: route=${route} oldId=${oldId} (newId=${newId})`);
|
||
failed++;
|
||
continue;
|
||
}
|
||
if (oldPos > newPos) {
|
||
console.error(`❌ alias placé APRÈS newId: route=${route} oldId=${oldId} newId=${newId}`);
|
||
failed++;
|
||
continue;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (failed) {
|
||
console.error(`❌ verify-anchor-aliases-in-dist: failed=${failed} checked=${checked}`);
|
||
process.exit(1);
|
||
}
|
||
|
||
console.log(`✅ verify-anchor-aliases-in-dist: checked=${checked} (all good)`);
|