import { readFileSync } from 'node:fs' import { dirname, resolve } from 'node:path' import { fileURLToPath } from 'node:url' const root = resolve(dirname(fileURLToPath(import.meta.url)), '../..') const read = path => readFileSync(resolve(root, path), 'utf8') const staticRouterSource = read('routers/modules/staticRouter.ts') const authStoreSource = read('stores/modules/auth.ts') const expectedPaths = [ '/system-monitor/dbms', '/system-monitor/dbms/index', '/system-monitor/databaseMonitor', '/system-monitor/databaseMonitor/index', '/system-monitor/database-monitor', '/system-monitor/database-monitor/index', '/systemMonitor/dbms', '/systemMonitor/dbms/index', '/systemMonitor/databaseMonitor', '/systemMonitor/databaseMonitor/index', '/systemMonitor/database-monitor', '/systemMonitor/database-monitor/index', '/system-ops/dbms/index', '/system-ops/database-monitor', '/system-ops/database-monitor/index' ] const errors = [] const dbmsRouteIndex = staticRouterSource.indexOf("name: 'systemOpsDbms'") if (dbmsRouteIndex === -1) { errors.push('staticRouter.ts must define the systemOpsDbms route') } else { const nextRouteIndex = staticRouterSource.indexOf('\n {', dbmsRouteIndex + 1) const routeBlock = staticRouterSource.slice(dbmsRouteIndex, nextRouteIndex === -1 ? undefined : nextRouteIndex) for (const path of expectedPaths) { if (!routeBlock.includes(`'${path}'`)) { errors.push(`systemOpsDbms route alias must include ${path}`) } } } for (const snippet of [ 'function isDbmsMenu', "if (isDbmsMenu(menu))", "return '/system-ops/dbms'", "menu.name = 'systemOpsDbms'", "menu.component = '@/views/system-ops/dbms/index.vue'" ]) { if (!authStoreSource.includes(snippet)) { errors.push(`auth.ts must include DBMS menu normalization snippet: ${snippet}`) } } if (errors.length) { console.error('dbms route contract failed:') for (const error of errors) console.error(`- ${error}`) process.exit(1) } console.log('dbms route contract passed')