2026-05-29 15:10:14 +08:00
|
|
|
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 = [
|
2026-07-01 13:18:17 +08:00
|
|
|
'/system-monitor/dbms',
|
|
|
|
|
'/system-monitor/dbms/index',
|
|
|
|
|
'/system-monitor/databaseMonitor',
|
|
|
|
|
'/system-monitor/databaseMonitor/index',
|
|
|
|
|
'/system-monitor/database-monitor',
|
|
|
|
|
'/system-monitor/database-monitor/index',
|
2026-05-29 15:10:14 +08:00
|
|
|
'/systemMonitor/dbms',
|
|
|
|
|
'/systemMonitor/dbms/index',
|
|
|
|
|
'/systemMonitor/databaseMonitor',
|
|
|
|
|
'/systemMonitor/databaseMonitor/index',
|
|
|
|
|
'/systemMonitor/database-monitor',
|
|
|
|
|
'/systemMonitor/database-monitor/index',
|
2026-06-09 13:16:11 +08:00
|
|
|
'/system-ops/dbms/index',
|
2026-05-29 15:10:14 +08:00
|
|
|
'/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')
|