/* 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 componentDir = path.join(currentDir, '..', 'components') 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 componentSource = fs.existsSync(componentDir) ? fs .readdirSync(componentDir) .filter(file => file.endsWith('.vue')) .map(file => fs.readFileSync(path.join(componentDir, file), 'utf8')) .join('\n') : '' const viewSource = `${source}\n${componentSource}` 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 renders extracted trend workbench', / 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')