74 lines
2.1 KiB
JavaScript
74 lines
2.1 KiB
JavaScript
import {
|
|
listPermissionRouteAliases,
|
|
normalizeRoutePathForPermission,
|
|
permissionRouteAliasGroups,
|
|
} from '../app/utils/route-alias.shared.js';
|
|
|
|
function assert(condition, message) {
|
|
if (!condition) {
|
|
throw new Error(message);
|
|
}
|
|
}
|
|
|
|
function runAliasExampleChecks() {
|
|
const seenInputs = new Set();
|
|
|
|
for (const group of permissionRouteAliasGroups) {
|
|
assert(group.entries.length > 0, `alias group "${group.group}" 不能为空`);
|
|
|
|
for (const entry of group.entries) {
|
|
assert(entry.examples.length > 0, `alias "${entry.source}" 必须提供至少一个 example`);
|
|
|
|
for (const example of entry.examples) {
|
|
assert(!seenInputs.has(example.input), `重复的 alias example 输入: ${example.input}`);
|
|
seenInputs.add(example.input);
|
|
|
|
const actual = normalizeRoutePathForPermission(example.input);
|
|
assert(
|
|
actual === example.output,
|
|
`alias example 校验失败: ${example.input} -> ${actual},预期 ${example.output}`,
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function runNoopChecks() {
|
|
const unaffectedPaths = [
|
|
'/documents',
|
|
'/files/upload',
|
|
'/cross-checking/upload',
|
|
'/document-types',
|
|
];
|
|
|
|
for (const path of unaffectedPaths) {
|
|
const actual = normalizeRoutePathForPermission(path);
|
|
assert(actual === path, `不应被改写的路径发生了变化: ${path} -> ${actual}`);
|
|
}
|
|
}
|
|
|
|
function runMetadataChecks() {
|
|
const aliases = listPermissionRouteAliases();
|
|
const signatureSet = new Set();
|
|
|
|
for (const alias of aliases) {
|
|
const signature = `${alias.source}=>${alias.target}`;
|
|
assert(!signatureSet.has(signature), `重复的 alias 定义: ${signature}`);
|
|
signatureSet.add(signature);
|
|
assert(alias.note.trim().length > 0, `alias "${alias.source}" 缺少 note`);
|
|
}
|
|
}
|
|
|
|
try {
|
|
runAliasExampleChecks();
|
|
runNoopChecks();
|
|
runMetadataChecks();
|
|
|
|
console.log(
|
|
`route alias checks passed: ${permissionRouteAliasGroups.length} groups, ${listPermissionRouteAliases().length} aliases`,
|
|
);
|
|
} catch (error) {
|
|
console.error(`route alias checks failed: ${error.message}`);
|
|
process.exit(1);
|
|
}
|