scan-list-search-corruption.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. const fs = require('fs')
  2. const path = require('path')
  3. function walk(dir, files = []) {
  4. for (const name of fs.readdirSync(dir)) {
  5. const full = path.join(dir, name)
  6. if (fs.statSync(full).isDirectory()) walk(full, files)
  7. else if (name.endsWith('.vue')) files.push(full)
  8. }
  9. return files
  10. }
  11. function check(file) {
  12. const content = fs.readFileSync(file, 'utf8')
  13. const re = /<el-form-item[^>]*list-search-actions[^>]*>([\s\S]*?)<\/el-form-item>/g
  14. const issues = []
  15. let m
  16. while ((m = re.exec(content)) !== null) {
  17. const inner = m[1]
  18. if (/<el-form-item\b/.test(inner)) issues.push('nested-form-item')
  19. if (!/handleQuery|resetQuery|right-toolbar/.test(m[0])) issues.push('no-buttons')
  20. }
  21. return issues.length ? { file, issues } : null
  22. }
  23. const roots = process.argv.slice(2).length
  24. ? process.argv.slice(2)
  25. : [
  26. path.join(__dirname, '../src/views'),
  27. path.join(__dirname, '../../saas-mgnui/src/views'),
  28. path.join(__dirname, '../../adminui/src/views')
  29. ]
  30. let all = []
  31. for (const root of roots) {
  32. if (!fs.existsSync(root)) continue
  33. all = all.concat(walk(root).map(check).filter(Boolean))
  34. }
  35. console.log('issues', all.length)
  36. all.forEach((x) => console.log(x.file, x.issues.join(',')))