ForgeFlow-ERP/frontend/scripts/test-sidebar-icon-uniqueness.mjs
2026-06-12 16:00:56 +08:00

48 lines
1.5 KiB
JavaScript
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 assert from "node:assert/strict";
import { readFileSync } from "node:fs";
import { resolve } from "node:path";
const appVuePath = resolve("frontend/src/App.vue");
const source = readFileSync(appVuePath, "utf8");
const navStart = source.indexOf("const navStages = [");
const navEnd = source.indexOf("\n];", navStart);
assert.notEqual(navStart, -1, "未找到 navStages 菜单配置");
assert.notEqual(navEnd, -1, "未找到 navStages 结束位置");
const navSource = source.slice(navStart, navEnd);
const iconEntries = [];
const entryPattern = /label:\s*"([^"]+)"[\s\S]*?iconPaths:\s*\[([\s\S]*?)\]/g;
let match;
while ((match = entryPattern.exec(navSource))) {
const [, label, iconSource] = match;
const paths = [...iconSource.matchAll(/"([^"]+)"/g)].map((pathMatch) => pathMatch[1].trim());
if (paths.length) {
iconEntries.push({
label,
signature: paths.join("|")
});
}
}
assert.ok(iconEntries.length > 0, "未解析到任何侧边栏图标配置");
const labelsBySignature = new Map();
for (const entry of iconEntries) {
const labels = labelsBySignature.get(entry.signature) || [];
labels.push(entry.label);
labelsBySignature.set(entry.signature, labels);
}
const duplicates = [...labelsBySignature.values()].filter((labels) => labels.length > 1);
assert.deepEqual(
duplicates,
[],
`侧边栏存在重复图标:${duplicates.map((labels) => labels.join(" / ")).join("")}`
);
console.log(`侧边栏图标唯一性检查通过,共检查 ${iconEntries.length} 个菜单图标。`);