analyze_api.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. const fs = require('fs');
  2. const path = require('path');
  3. function walk(dir) {
  4. let r = [];
  5. fs.readdirSync(dir).forEach(f => {
  6. const p = path.join(dir, f);
  7. fs.statSync(p).isDirectory() ? r = r.concat(walk(p)) : r.push(p);
  8. });
  9. return r;
  10. }
  11. // 1. Collect all saasadminui API paths
  12. const files = walk('src/api').filter(f => f.endsWith('.js'));
  13. const allPaths = [];
  14. files.forEach(f => {
  15. let c = fs.readFileSync(f, 'utf8');
  16. const re = /url:\s*['"]([^'"]+)['"]/g;
  17. let m;
  18. while ((m = re.exec(c)) !== null) {
  19. allPaths.push({ file: f, url: m[1] });
  20. }
  21. });
  22. // 2. Group by top-2 prefix
  23. const prefixes = new Map();
  24. const prefixPaths = new Map();
  25. allPaths.forEach(({ url }) => {
  26. const parts = url.split('/').filter(Boolean);
  27. if (parts.length >= 2) {
  28. const prefix = parts.slice(0, 2).join('/');
  29. if (!prefixes.has(prefix)) prefixes.set(prefix, 0);
  30. prefixes.set(prefix, prefixes.get(prefix) + 1);
  31. if (!prefixPaths.has(prefix)) prefixPaths.set(prefix, []);
  32. prefixPaths.get(prefix).push(url);
  33. }
  34. });
  35. console.log('Total API URL entries:', allPaths.length);
  36. console.log('Unique paths:', new Set(allPaths.map(x => x.url)).size);
  37. console.log('\nPath prefixes (sorted by count):');
  38. const sorted = [...prefixes.entries()].sort((a, b) => b[1] - a[1]);
  39. sorted.forEach(([k, v]) => console.log(` ${k} (${v})`));