64 lines
2.4 KiB
JavaScript
64 lines
2.4 KiB
JavaScript
|
|
/* eslint-env node */
|
||
|
|
import fs from 'node:fs'
|
||
|
|
import path from 'node:path'
|
||
|
|
import { fileURLToPath } from 'node:url'
|
||
|
|
|
||
|
|
const currentDir = path.dirname(fileURLToPath(import.meta.url))
|
||
|
|
const rootDir = path.resolve(currentDir, '../../../..')
|
||
|
|
|
||
|
|
const files = {
|
||
|
|
page: path.resolve(rootDir, 'views/steady/checksquare/index.vue'),
|
||
|
|
staticRouter: path.resolve(rootDir, 'routers/modules/staticRouter.ts'),
|
||
|
|
dynamicRouter: path.resolve(rootDir, 'routers/modules/dynamicRouter.ts'),
|
||
|
|
authStore: path.resolve(rootDir, 'stores/modules/auth.ts')
|
||
|
|
}
|
||
|
|
|
||
|
|
const read = file => fs.readFileSync(file, 'utf8')
|
||
|
|
const exists = file => fs.existsSync(file)
|
||
|
|
|
||
|
|
const checks = [
|
||
|
|
['checksquare page exists', () => exists(files.page)],
|
||
|
|
['static router registers /checksquare/index', () => /path:\s*'\/checksquare\/index'/.test(read(files.staticRouter))],
|
||
|
|
['static route name is checksquare', () => /name:\s*'checksquare'/.test(read(files.staticRouter))],
|
||
|
|
[
|
||
|
|
'static router imports checksquare page',
|
||
|
|
() => /@\/views\/steady\/checksquare\/index\.vue/.test(read(files.staticRouter))
|
||
|
|
],
|
||
|
|
[
|
||
|
|
'static router aliases steady check-square to checksquare',
|
||
|
|
() => /\/steady\/check-square[\s\S]*\/steady\/checksquare/.test(read(files.staticRouter))
|
||
|
|
],
|
||
|
|
[
|
||
|
|
'dynamic router aliases check-square to checksquare',
|
||
|
|
() => /\/steady\/check-square[\s\S]*\/steady\/checksquare/.test(read(files.dynamicRouter))
|
||
|
|
],
|
||
|
|
[
|
||
|
|
'dynamic router keeps checksquare static route from being overwritten',
|
||
|
|
() => /STATIC_ROUTE_NAMES[\s\S]*'checksquare'/.test(read(files.dynamicRouter))
|
||
|
|
],
|
||
|
|
[
|
||
|
|
'auth normalizes backend checksquare menu to static entry',
|
||
|
|
() => /isChecksquareMenu[\s\S]*menu\.path\s*=\s*'\/checksquare\/index'/.test(read(files.authStore))
|
||
|
|
],
|
||
|
|
[
|
||
|
|
'auth treats 数据验证 menu title as checksquare',
|
||
|
|
() => /isChecksquareMenu[\s\S]*title\.includes\('数据验证'\)/.test(read(files.authStore))
|
||
|
|
],
|
||
|
|
[
|
||
|
|
'business menu path resolver handles checksquare',
|
||
|
|
() => /isChecksquareMenu\(menu\)[\s\S]*return\s+'\/checksquare\/index'/.test(read(files.authStore))
|
||
|
|
]
|
||
|
|
]
|
||
|
|
|
||
|
|
const failures = checks.filter(([, check]) => !check()).map(([name]) => name)
|
||
|
|
|
||
|
|
if (failures.length) {
|
||
|
|
console.error('checksquare route contract failed:')
|
||
|
|
for (const failure of failures) {
|
||
|
|
console.error(`- ${failure}`)
|
||
|
|
}
|
||
|
|
process.exit(1)
|
||
|
|
}
|
||
|
|
|
||
|
|
console.log('checksquare route contract passed')
|