60 lines
2.5 KiB
JavaScript
60 lines
2.5 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 pageFile = path.join(currentDir, 'index.vue')
|
||
|
|
const apiFile = path.resolve(currentDir, '../../../api/steady/steadyDataView/index.ts')
|
||
|
|
const interfaceFile = path.resolve(currentDir, '../../../api/steady/steadyDataView/interface/index.ts')
|
||
|
|
|
||
|
|
const source = fs.readFileSync(pageFile, 'utf8')
|
||
|
|
const apiSource = fs.readFileSync(apiFile, 'utf8')
|
||
|
|
const interfaceSource = fs.readFileSync(interfaceFile, 'utf8')
|
||
|
|
|
||
|
|
const forbiddenPatterns = [
|
||
|
|
['data detail tab is removed', /数据明细|name="detail"|SteadyDataTablePanel/, source],
|
||
|
|
['detail ProTable is removed', /buildSteadyDataQueryParams|SteadyDataSearchParams/, source],
|
||
|
|
['trend summary panel is removed', /SteadyTrendSummaryPanel|trendSummary|loading\.summary/, source],
|
||
|
|
[
|
||
|
|
'page detail API is removed',
|
||
|
|
/getSteadyDataPage|getSteadyDataDetail|getSteadyDataTemplates|\/steady\/data-view\/page|\/steady\/data-view\/detail|\/steady\/data-view\/templates/,
|
||
|
|
apiSource
|
||
|
|
],
|
||
|
|
['trend summary API is removed', /getSteadyTrendSummary|\/steady\/data-view\/trend\/summary/, apiSource],
|
||
|
|
[
|
||
|
|
'page detail types are removed',
|
||
|
|
/PageResult|SteadyDataPageParams|SteadyDataDetailParams|SteadyDataTemplate|SteadyDataRecord/,
|
||
|
|
interfaceSource
|
||
|
|
],
|
||
|
|
[
|
||
|
|
'trend summary types are removed',
|
||
|
|
/SteadyTrendSummary|SteadyTrendSummaryItem/,
|
||
|
|
interfaceSource
|
||
|
|
]
|
||
|
|
]
|
||
|
|
|
||
|
|
const requiredPatterns = [
|
||
|
|
['page defines SteadyDataView component name', /name:\s*'SteadyDataView'/, source],
|
||
|
|
['page keeps trend chart panel', /SteadyTrendChartPanel/, source],
|
||
|
|
['page keeps right floating indicator panel', /indicator-floating-panel/, source],
|
||
|
|
['indicator panel defaults expanded', /indicatorPanelCollapsed\s*=\s*ref\(false\)/, source],
|
||
|
|
['indicator panel supports collapsed state', /is-collapsed/, source],
|
||
|
|
['API keeps trend query endpoint', /\/steady\/data-view\/trend\/query/, apiSource]
|
||
|
|
]
|
||
|
|
|
||
|
|
const failures = [
|
||
|
|
...forbiddenPatterns.filter(([, pattern, target]) => pattern.test(target)),
|
||
|
|
...requiredPatterns.filter(([, pattern, target]) => !pattern.test(target))
|
||
|
|
]
|
||
|
|
|
||
|
|
if (failures.length) {
|
||
|
|
console.error('steadyDataView visible contract failed:')
|
||
|
|
for (const [name] of failures) {
|
||
|
|
console.error(`- ${name}`)
|
||
|
|
}
|
||
|
|
process.exit(1)
|
||
|
|
}
|
||
|
|
|
||
|
|
console.log('steadyDataView visible contract passed')
|