65 lines
2.2 KiB
JavaScript
65 lines
2.2 KiB
JavaScript
// scripts/route-align-check.js
|
||
// 用途:检查路由路径与 HLI 注册表编号的一致性
|
||
|
||
const fs = require('fs');
|
||
const path = require('path');
|
||
|
||
// HLI 路由路径映射(从 Notion 注册表同步)
|
||
const HLI_ROUTES = {
|
||
'HLI-AUTH-001': '/hli/auth/login',
|
||
'HLI-AUTH-002': '/hli/auth/register',
|
||
'HLI-AUTH-003': '/hli/auth/verify',
|
||
'HLI-PERSONA-001': '/hli/persona/load',
|
||
'HLI-PERSONA-002': '/hli/persona/switch',
|
||
'HLI-USER-001': '/hli/user/profile',
|
||
'HLI-USER-002': '/hli/user/profile/update',
|
||
'HLI-TICKET-001': '/hli/ticket/create',
|
||
'HLI-TICKET-002': '/hli/ticket/query',
|
||
'HLI-TICKET-003': '/hli/ticket/status',
|
||
'HLI-DIALOGUE-001': '/hli/dialogue/send',
|
||
'HLI-DIALOGUE-002': '/hli/dialogue/stream',
|
||
'HLI-DIALOGUE-003': '/hli/dialogue/history',
|
||
'HLI-STORAGE-001': '/hli/storage/upload',
|
||
'HLI-STORAGE-002': '/hli/storage/download',
|
||
'HLI-DASHBOARD-001': '/hli/dashboard/status',
|
||
'HLI-DASHBOARD-002': '/hli/dashboard/realtime',
|
||
};
|
||
|
||
const schemaDir = 'src/schemas/hli';
|
||
const errors = [];
|
||
|
||
Object.entries(HLI_ROUTES).forEach(([hliId, expectedPath]) => {
|
||
const domain = hliId.split('-')[1].toLowerCase();
|
||
const domainDir = path.join(schemaDir, domain);
|
||
|
||
// 若 domain 目录尚不存在,视为未实现
|
||
if (!fs.existsSync(domainDir)) {
|
||
errors.push(`⚠️ [UNIMPLEMENTED] ${hliId} (${expectedPath}) — 尚无 schema 文件`);
|
||
return;
|
||
}
|
||
|
||
const schemaFiles = fs.readdirSync(domainDir).filter(f => f.endsWith('.schema.json'));
|
||
|
||
const matched = schemaFiles.find(f => {
|
||
try {
|
||
const schema = JSON.parse(fs.readFileSync(path.join(domainDir, f), 'utf8'));
|
||
return schema.hli_id === hliId;
|
||
} catch (_) {
|
||
return false;
|
||
}
|
||
});
|
||
|
||
if (!matched) {
|
||
errors.push(`⚠️ [UNIMPLEMENTED] ${hliId} (${expectedPath}) — 尚无 schema 文件`);
|
||
}
|
||
});
|
||
|
||
if (errors.length > 0) {
|
||
console.warn('\n⚠️ Route Alignment Report:\n');
|
||
errors.forEach(e => console.warn(e));
|
||
// 非阻断,仅报告
|
||
console.warn(`\n📊 覆盖率: ${Object.keys(HLI_ROUTES).length - errors.length}/${Object.keys(HLI_ROUTES).length}`);
|
||
} else {
|
||
console.log('✅ Route Alignment PASSED — 所有 HLI 接口均已实现');
|
||
}
|