/* 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')