mcp-react-toolkit 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/README.md +146 -42
  2. package/package.json +13 -5
  3. package/server.json +20 -0
  4. package/tools/accessibility-checker/build/index.js +9 -5
  5. package/tools/accessibility-checker/build/index.js.map +1 -1
  6. package/tools/accessibility-checker/build/rules.d.ts.map +1 -1
  7. package/tools/accessibility-checker/build/rules.js +325 -94
  8. package/tools/accessibility-checker/build/rules.js.map +1 -1
  9. package/tools/code-modernizer/build/tools/01-convert-to-typescript.d.ts.map +1 -1
  10. package/tools/code-modernizer/build/tools/01-convert-to-typescript.js +65 -50
  11. package/tools/code-modernizer/build/tools/01-convert-to-typescript.js.map +1 -1
  12. package/tools/code-modernizer/build/types.d.ts +1 -0
  13. package/tools/code-modernizer/build/types.d.ts.map +1 -1
  14. package/tools/code-modernizer/build/utils/ast-parser.d.ts.map +1 -1
  15. package/tools/code-modernizer/build/utils/ast-parser.js +30 -14
  16. package/tools/code-modernizer/build/utils/ast-parser.js.map +1 -1
  17. package/tools/code-modernizer/build/utils/type-generator.d.ts +1 -1
  18. package/tools/code-modernizer/build/utils/type-generator.d.ts.map +1 -1
  19. package/tools/code-modernizer/build/utils/type-generator.js +72 -23
  20. package/tools/code-modernizer/build/utils/type-generator.js.map +1 -1
  21. package/tools/component-factory/build/index.js +59 -7
  22. package/tools/component-factory/build/index.js.map +1 -1
  23. package/tools/component-fixer/README.md +44 -0
  24. package/tools/component-fixer/build/index.d.ts +3 -0
  25. package/tools/component-fixer/build/index.d.ts.map +1 -0
  26. package/tools/component-fixer/build/index.js +647 -0
  27. package/tools/component-fixer/build/index.js.map +1 -0
  28. package/tools/component-fixer/build/index.test.d.ts +2 -0
  29. package/tools/component-fixer/build/index.test.d.ts.map +1 -0
  30. package/tools/component-fixer/build/index.test.js.map +1 -0
  31. package/tools/component-fixer/package.json +20 -0
  32. package/tools/component-reviewer/README.md +54 -0
  33. package/tools/component-reviewer/build/index.d.ts +39 -0
  34. package/tools/component-reviewer/build/index.d.ts.map +1 -0
  35. package/tools/component-reviewer/build/index.js +946 -0
  36. package/tools/component-reviewer/build/index.js.map +1 -0
  37. package/tools/component-reviewer/build/index.test.d.ts +2 -0
  38. package/tools/component-reviewer/build/index.test.d.ts.map +1 -0
  39. package/tools/component-reviewer/build/index.test.js.map +1 -0
  40. package/tools/component-reviewer/package.json +20 -0
  41. package/tools/dep-auditor/build/index.d.ts +1 -0
  42. package/tools/dep-auditor/build/index.d.ts.map +1 -1
  43. package/tools/dep-auditor/build/index.js +71 -16
  44. package/tools/dep-auditor/build/index.js.map +1 -1
  45. package/tools/generate-tests/build/analyzer.d.ts +14 -0
  46. package/tools/generate-tests/build/analyzer.d.ts.map +1 -1
  47. package/tools/generate-tests/build/analyzer.js +96 -42
  48. package/tools/generate-tests/build/analyzer.js.map +1 -1
  49. package/tools/generate-tests/build/generators.d.ts.map +1 -1
  50. package/tools/generate-tests/build/generators.js +304 -79
  51. package/tools/generate-tests/build/generators.js.map +1 -1
  52. package/tools/generate-tests/build/index.js +29 -10
  53. package/tools/generate-tests/build/index.js.map +1 -1
  54. package/tools/json-viewer/build/index.js +29 -6
  55. package/tools/json-viewer/build/index.js.map +1 -1
  56. package/tools/legacy-analyzer/README.md +66 -0
  57. package/tools/legacy-analyzer/build/index.d.ts +3 -0
  58. package/tools/legacy-analyzer/build/index.d.ts.map +1 -0
  59. package/tools/legacy-analyzer/build/index.js +209 -0
  60. package/tools/legacy-analyzer/build/index.js.map +1 -0
  61. package/tools/legacy-analyzer/build/index.test.d.ts +2 -0
  62. package/tools/legacy-analyzer/build/index.test.d.ts.map +1 -0
  63. package/tools/legacy-analyzer/build/index.test.js.map +1 -0
  64. package/tools/legacy-analyzer/build/tools/01-detect-project-tech.d.ts +3 -0
  65. package/tools/legacy-analyzer/build/tools/01-detect-project-tech.d.ts.map +1 -0
  66. package/tools/legacy-analyzer/build/tools/01-detect-project-tech.js +115 -0
  67. package/tools/legacy-analyzer/build/tools/01-detect-project-tech.js.map +1 -0
  68. package/tools/legacy-analyzer/build/tools/02-analyze-folder-structure.d.ts +3 -0
  69. package/tools/legacy-analyzer/build/tools/02-analyze-folder-structure.d.ts.map +1 -0
  70. package/tools/legacy-analyzer/build/tools/02-analyze-folder-structure.js +85 -0
  71. package/tools/legacy-analyzer/build/tools/02-analyze-folder-structure.js.map +1 -0
  72. package/tools/legacy-analyzer/build/tools/03-analyze-components.d.ts +3 -0
  73. package/tools/legacy-analyzer/build/tools/03-analyze-components.d.ts.map +1 -0
  74. package/tools/legacy-analyzer/build/tools/03-analyze-components.js +87 -0
  75. package/tools/legacy-analyzer/build/tools/03-analyze-components.js.map +1 -0
  76. package/tools/legacy-analyzer/build/tools/04-analyze-state-management.d.ts +3 -0
  77. package/tools/legacy-analyzer/build/tools/04-analyze-state-management.d.ts.map +1 -0
  78. package/tools/legacy-analyzer/build/tools/04-analyze-state-management.js +133 -0
  79. package/tools/legacy-analyzer/build/tools/04-analyze-state-management.js.map +1 -0
  80. package/tools/legacy-analyzer/build/tools/05-analyze-api-layer.d.ts +3 -0
  81. package/tools/legacy-analyzer/build/tools/05-analyze-api-layer.d.ts.map +1 -0
  82. package/tools/legacy-analyzer/build/tools/05-analyze-api-layer.js +160 -0
  83. package/tools/legacy-analyzer/build/tools/05-analyze-api-layer.js.map +1 -0
  84. package/tools/legacy-analyzer/build/tools/06-analyze-routing.d.ts +3 -0
  85. package/tools/legacy-analyzer/build/tools/06-analyze-routing.d.ts.map +1 -0
  86. package/tools/legacy-analyzer/build/tools/06-analyze-routing.js +150 -0
  87. package/tools/legacy-analyzer/build/tools/06-analyze-routing.js.map +1 -0
  88. package/tools/legacy-analyzer/build/tools/07-analyze-styling.d.ts +3 -0
  89. package/tools/legacy-analyzer/build/tools/07-analyze-styling.d.ts.map +1 -0
  90. package/tools/legacy-analyzer/build/tools/07-analyze-styling.js +131 -0
  91. package/tools/legacy-analyzer/build/tools/07-analyze-styling.js.map +1 -0
  92. package/tools/legacy-analyzer/build/tools/08-analyze-assets.d.ts +3 -0
  93. package/tools/legacy-analyzer/build/tools/08-analyze-assets.d.ts.map +1 -0
  94. package/tools/legacy-analyzer/build/tools/08-analyze-assets.js +85 -0
  95. package/tools/legacy-analyzer/build/tools/08-analyze-assets.js.map +1 -0
  96. package/tools/legacy-analyzer/build/tools/09-detect-anti-patterns.d.ts +3 -0
  97. package/tools/legacy-analyzer/build/tools/09-detect-anti-patterns.d.ts.map +1 -0
  98. package/tools/legacy-analyzer/build/tools/09-detect-anti-patterns.js +329 -0
  99. package/tools/legacy-analyzer/build/tools/09-detect-anti-patterns.js.map +1 -0
  100. package/tools/legacy-analyzer/build/tools/10-detect-duplication.d.ts +3 -0
  101. package/tools/legacy-analyzer/build/tools/10-detect-duplication.d.ts.map +1 -0
  102. package/tools/legacy-analyzer/build/tools/10-detect-duplication.js +192 -0
  103. package/tools/legacy-analyzer/build/tools/10-detect-duplication.js.map +1 -0
  104. package/tools/legacy-analyzer/build/tools/11-analyze-dependencies-usage.d.ts +3 -0
  105. package/tools/legacy-analyzer/build/tools/11-analyze-dependencies-usage.d.ts.map +1 -0
  106. package/tools/legacy-analyzer/build/tools/11-analyze-dependencies-usage.js +232 -0
  107. package/tools/legacy-analyzer/build/tools/11-analyze-dependencies-usage.js.map +1 -0
  108. package/tools/legacy-analyzer/build/tools/12-analyze-legacy-app.d.ts +3 -0
  109. package/tools/legacy-analyzer/build/tools/12-analyze-legacy-app.d.ts.map +1 -0
  110. package/tools/legacy-analyzer/build/tools/12-analyze-legacy-app.js +247 -0
  111. package/tools/legacy-analyzer/build/tools/12-analyze-legacy-app.js.map +1 -0
  112. package/tools/legacy-analyzer/build/tools/13-detect-features.d.ts +3 -0
  113. package/tools/legacy-analyzer/build/tools/13-detect-features.d.ts.map +1 -0
  114. package/tools/legacy-analyzer/build/tools/13-detect-features.js +141 -0
  115. package/tools/legacy-analyzer/build/tools/13-detect-features.js.map +1 -0
  116. package/tools/legacy-analyzer/build/tools/14-classify-files.d.ts +3 -0
  117. package/tools/legacy-analyzer/build/tools/14-classify-files.d.ts.map +1 -0
  118. package/tools/legacy-analyzer/build/tools/14-classify-files.js +76 -0
  119. package/tools/legacy-analyzer/build/tools/14-classify-files.js.map +1 -0
  120. package/tools/legacy-analyzer/build/tools/15-detect-shared-modules.d.ts +3 -0
  121. package/tools/legacy-analyzer/build/tools/15-detect-shared-modules.d.ts.map +1 -0
  122. package/tools/legacy-analyzer/build/tools/15-detect-shared-modules.js +70 -0
  123. package/tools/legacy-analyzer/build/tools/15-detect-shared-modules.js.map +1 -0
  124. package/tools/legacy-analyzer/build/tools/16-design-target-structure.d.ts +3 -0
  125. package/tools/legacy-analyzer/build/tools/16-design-target-structure.d.ts.map +1 -0
  126. package/tools/legacy-analyzer/build/tools/16-design-target-structure.js +26 -0
  127. package/tools/legacy-analyzer/build/tools/16-design-target-structure.js.map +1 -0
  128. package/tools/legacy-analyzer/build/tools/17-map-files-to-target.d.ts +3 -0
  129. package/tools/legacy-analyzer/build/tools/17-map-files-to-target.d.ts.map +1 -0
  130. package/tools/legacy-analyzer/build/tools/17-map-files-to-target.js +108 -0
  131. package/tools/legacy-analyzer/build/tools/17-map-files-to-target.js.map +1 -0
  132. package/tools/legacy-analyzer/build/tools/18-detect-boundary-violations.d.ts +3 -0
  133. package/tools/legacy-analyzer/build/tools/18-detect-boundary-violations.d.ts.map +1 -0
  134. package/tools/legacy-analyzer/build/tools/18-detect-boundary-violations.js +137 -0
  135. package/tools/legacy-analyzer/build/tools/18-detect-boundary-violations.js.map +1 -0
  136. package/tools/legacy-analyzer/build/tools/19-suggest-module-splitting.d.ts +3 -0
  137. package/tools/legacy-analyzer/build/tools/19-suggest-module-splitting.d.ts.map +1 -0
  138. package/tools/legacy-analyzer/build/tools/19-suggest-module-splitting.js +160 -0
  139. package/tools/legacy-analyzer/build/tools/19-suggest-module-splitting.js.map +1 -0
  140. package/tools/legacy-analyzer/build/tools/20-naming-standardizer.d.ts +3 -0
  141. package/tools/legacy-analyzer/build/tools/20-naming-standardizer.d.ts.map +1 -0
  142. package/tools/legacy-analyzer/build/tools/20-naming-standardizer.js +162 -0
  143. package/tools/legacy-analyzer/build/tools/20-naming-standardizer.js.map +1 -0
  144. package/tools/legacy-analyzer/build/tools/21-generate-refactor-plan.d.ts +3 -0
  145. package/tools/legacy-analyzer/build/tools/21-generate-refactor-plan.d.ts.map +1 -0
  146. package/tools/legacy-analyzer/build/tools/21-generate-refactor-plan.js +108 -0
  147. package/tools/legacy-analyzer/build/tools/21-generate-refactor-plan.js.map +1 -0
  148. package/tools/legacy-analyzer/build/tools/22-refactor-folder-structure.d.ts +3 -0
  149. package/tools/legacy-analyzer/build/tools/22-refactor-folder-structure.d.ts.map +1 -0
  150. package/tools/legacy-analyzer/build/tools/22-refactor-folder-structure.js +98 -0
  151. package/tools/legacy-analyzer/build/tools/22-refactor-folder-structure.js.map +1 -0
  152. package/tools/legacy-analyzer/build/types.d.ts +413 -0
  153. package/tools/legacy-analyzer/build/types.d.ts.map +1 -0
  154. package/tools/legacy-analyzer/build/types.js +12 -0
  155. package/tools/legacy-analyzer/build/types.js.map +1 -0
  156. package/tools/legacy-analyzer/build/utils/ast-parser.d.ts +34 -0
  157. package/tools/legacy-analyzer/build/utils/ast-parser.d.ts.map +1 -0
  158. package/tools/legacy-analyzer/build/utils/ast-parser.js +394 -0
  159. package/tools/legacy-analyzer/build/utils/ast-parser.js.map +1 -0
  160. package/tools/legacy-analyzer/build/utils/file-scanner.d.ts +51 -0
  161. package/tools/legacy-analyzer/build/utils/file-scanner.d.ts.map +1 -0
  162. package/tools/legacy-analyzer/build/utils/file-scanner.js +174 -0
  163. package/tools/legacy-analyzer/build/utils/file-scanner.js.map +1 -0
  164. package/tools/legacy-analyzer/build/utils/import-tracker.d.ts +38 -0
  165. package/tools/legacy-analyzer/build/utils/import-tracker.d.ts.map +1 -0
  166. package/tools/legacy-analyzer/build/utils/import-tracker.js +194 -0
  167. package/tools/legacy-analyzer/build/utils/import-tracker.js.map +1 -0
  168. package/tools/legacy-analyzer/build/utils/refactor-helpers.d.ts +88 -0
  169. package/tools/legacy-analyzer/build/utils/refactor-helpers.d.ts.map +1 -0
  170. package/tools/legacy-analyzer/build/utils/refactor-helpers.js +538 -0
  171. package/tools/legacy-analyzer/build/utils/refactor-helpers.js.map +1 -0
  172. package/tools/legacy-analyzer/package.json +20 -0
  173. package/tools/lighthouse-runner/README.md +45 -0
  174. package/tools/lighthouse-runner/build/index.d.ts +6 -0
  175. package/tools/lighthouse-runner/build/index.d.ts.map +1 -0
  176. package/tools/lighthouse-runner/build/index.js +295 -0
  177. package/tools/lighthouse-runner/build/index.js.map +1 -0
  178. package/tools/lighthouse-runner/build/index.test.d.ts +2 -0
  179. package/tools/lighthouse-runner/build/index.test.d.ts.map +1 -0
  180. package/tools/lighthouse-runner/build/index.test.js.map +1 -0
  181. package/tools/lighthouse-runner/package.json +20 -0
  182. package/tools/monorepo-manager/build/utils.d.ts.map +1 -1
  183. package/tools/monorepo-manager/build/utils.js +12 -9
  184. package/tools/monorepo-manager/build/utils.js.map +1 -1
  185. package/tools/performance-audit/README.md +37 -0
  186. package/tools/performance-audit/build/index.d.ts +13 -0
  187. package/tools/performance-audit/build/index.d.ts.map +1 -0
  188. package/tools/performance-audit/build/index.js +311 -0
  189. package/tools/performance-audit/build/index.js.map +1 -0
  190. package/tools/performance-audit/build/index.test.d.ts +2 -0
  191. package/tools/performance-audit/build/index.test.d.ts.map +1 -0
  192. package/tools/performance-audit/build/index.test.js.map +1 -0
  193. package/tools/performance-audit/package.json +20 -0
  194. package/tools/quality-pipeline/build/index.js +55 -15
  195. package/tools/quality-pipeline/build/index.js.map +1 -1
  196. package/tools/render-analyzer/README.md +43 -0
  197. package/tools/render-analyzer/build/index.d.ts +25 -0
  198. package/tools/render-analyzer/build/index.d.ts.map +1 -0
  199. package/tools/render-analyzer/build/index.js +342 -0
  200. package/tools/render-analyzer/build/index.js.map +1 -0
  201. package/tools/render-analyzer/build/index.test.d.ts +2 -0
  202. package/tools/render-analyzer/build/index.test.d.ts.map +1 -0
  203. package/tools/render-analyzer/build/index.test.js.map +1 -0
  204. package/tools/render-analyzer/package.json +20 -0
  205. package/tools/shared/build/fs.d.ts +8 -0
  206. package/tools/shared/build/fs.d.ts.map +1 -0
  207. package/tools/shared/build/fs.js +45 -0
  208. package/tools/shared/build/fs.js.map +1 -0
  209. package/tools/shared/build/index.d.ts +1 -0
  210. package/tools/shared/build/index.d.ts.map +1 -1
  211. package/tools/shared/build/index.js +1 -0
  212. package/tools/shared/build/index.js.map +1 -1
  213. package/tools/storybook-generator/README.md +39 -0
  214. package/tools/storybook-generator/build/index.d.ts +13 -0
  215. package/tools/storybook-generator/build/index.d.ts.map +1 -0
  216. package/tools/storybook-generator/build/index.js +478 -0
  217. package/tools/storybook-generator/build/index.js.map +1 -0
  218. package/tools/storybook-generator/build/index.test.d.ts +2 -0
  219. package/tools/storybook-generator/build/index.test.d.ts.map +1 -0
  220. package/tools/storybook-generator/build/index.test.js.map +1 -0
  221. package/tools/storybook-generator/package.json +20 -0
  222. package/tools/test-gap-analyzer/README.md +41 -0
  223. package/tools/test-gap-analyzer/build/index.d.ts +20 -0
  224. package/tools/test-gap-analyzer/build/index.d.ts.map +1 -0
  225. package/tools/test-gap-analyzer/build/index.js +371 -0
  226. package/tools/test-gap-analyzer/build/index.js.map +1 -0
  227. package/tools/test-gap-analyzer/build/index.test.d.ts +2 -0
  228. package/tools/test-gap-analyzer/build/index.test.d.ts.map +1 -0
  229. package/tools/test-gap-analyzer/build/index.test.js.map +1 -0
  230. package/tools/test-gap-analyzer/package.json +20 -0
  231. package/tools/typescript-enforcer/build/scanner.d.ts.map +1 -1
  232. package/tools/typescript-enforcer/build/scanner.js +13 -1
  233. package/tools/typescript-enforcer/build/scanner.js.map +1 -1
  234. package/tools/typescript-enforcer/build/types.d.ts +1 -0
  235. package/tools/typescript-enforcer/build/types.d.ts.map +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"18-detect-boundary-violations.js","sourceRoot":"","sources":["../../src/tools/18-detect-boundary-violations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SuggestModuleSplittingOutput, AnalyzerConfig } from '../types.js';
2
+ export declare function suggestModuleSplitting(appPath: string, config?: Partial<AnalyzerConfig>): Promise<SuggestModuleSplittingOutput>;
3
+ //# sourceMappingURL=19-suggest-module-splitting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"19-suggest-module-splitting.d.ts","sourceRoot":"","sources":["../../src/tools/19-suggest-module-splitting.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,4BAA4B,EAAe,cAAc,EAAE,MAAM,aAAa,CAAC;AAM7F,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,OAAO,CAAC,4BAA4B,CAAC,CA4GvC"}
@@ -0,0 +1,160 @@
1
+ // ============================================================================
2
+ // TOOL #19: suggest-module-splitting
3
+ // Detects large or generic files that should be split
4
+ // ============================================================================
5
+ import * as path from 'path';
6
+ import { findSourceFiles, readFileContent, getFileSize, resolveSourceDir } from '../utils/file-scanner.js';
7
+ import { parseFile, extractExports } from '../utils/ast-parser.js';
8
+ import { isKitchenSinkFile, suggestUtilitySplits, } from '../utils/refactor-helpers.js';
9
+ const LARGE_FILE_THRESHOLD_BYTES = 10 * 1024; // 10KB
10
+ const LARGE_LINE_THRESHOLD = 200;
11
+ const MANY_EXPORTS_THRESHOLD = 10;
12
+ export async function suggestModuleSplitting(appPath, config) {
13
+ const srcPath = resolveSourceDir(appPath);
14
+ const files = await findSourceFiles(srcPath);
15
+ const mergedConfig = {
16
+ largeUtilLines: config?.largeUtilLines ?? 200,
17
+ };
18
+ if (files.length === 0) {
19
+ return { splits: [] };
20
+ }
21
+ const splits = [];
22
+ for (const file of files) {
23
+ const content = readFileContent(file);
24
+ if (!content)
25
+ continue;
26
+ const basename = path.basename(file, path.extname(file));
27
+ const relPath = path.relative(srcPath, file);
28
+ const fileSize = getFileSize(file);
29
+ const lineCount = content.split('\n').length;
30
+ // Check 1: Kitchen sink files (utils.js, helpers.js, etc.)
31
+ if (isKitchenSinkFile(file)) {
32
+ const suggestedSplits = suggestUtilitySplits(file, content);
33
+ if (suggestedSplits.length >= 2) {
34
+ const proposedFiles = suggestedSplits.map((s) => `${basename}/${s.category}.ts`);
35
+ splits.push({
36
+ file: relPath,
37
+ suggestion: `Split "${basename}" into ${suggestedSplits.length} domain-specific modules`,
38
+ reason: `Kitchen sink file with ${suggestedSplits.length} distinct categories: ${suggestedSplits.map((s) => s.category).join(', ')}`,
39
+ proposedFiles,
40
+ });
41
+ }
42
+ }
43
+ // Check 2: Large files
44
+ if (lineCount > mergedConfig.largeUtilLines || fileSize > LARGE_FILE_THRESHOLD_BYTES) {
45
+ const parsed = parseFile(file);
46
+ if (parsed) {
47
+ const exports = extractExports(parsed.ast);
48
+ if (exports.length >= MANY_EXPORTS_THRESHOLD) {
49
+ const exportNames = exports.map((e) => e.name);
50
+ // Group exports by likely domain
51
+ const groups = groupExportsByDomain(exportNames);
52
+ if (groups.length >= 2) {
53
+ const proposedFiles = groups.map((g) => `${basename}/${g.domain}.ts`);
54
+ splits.push({
55
+ file: relPath,
56
+ suggestion: `Split large file (${lineCount} lines, ${exports.length} exports) into domain modules`,
57
+ reason: `File is too large (${lineCount} lines) with ${exports.length} exports spanning ${groups.length} domains`,
58
+ proposedFiles,
59
+ });
60
+ }
61
+ }
62
+ }
63
+ }
64
+ // Check 3: Files with many exports (even if not large)
65
+ const parsed = parseFile(file);
66
+ if (parsed) {
67
+ const exports = extractExports(parsed.ast);
68
+ if (exports.length >= MANY_EXPORTS_THRESHOLD * 2) {
69
+ const groups = groupExportsByDomain(exports.map((e) => e.name));
70
+ if (groups.length >= 3) {
71
+ const proposedFiles = groups.map((g) => `${basename}/${g.domain}.ts`);
72
+ splits.push({
73
+ file: relPath,
74
+ suggestion: `Split ${exports.length} exports into ${groups.length} focused modules`,
75
+ reason: `Too many exports (${exports.length}) - consider splitting by responsibility`,
76
+ proposedFiles,
77
+ });
78
+ }
79
+ }
80
+ }
81
+ // Check 4: Generic barrel/index files that re-export everything
82
+ if (basename === 'index' && lineCount > 50) {
83
+ const parsed = parseFile(file);
84
+ if (parsed) {
85
+ const exports = extractExports(parsed.ast);
86
+ if (exports.length > 5) {
87
+ splits.push({
88
+ file: relPath,
89
+ suggestion: 'Consider removing barrel file and using direct imports',
90
+ reason: `Barrel file with ${exports.length} re-exports can cause circular dependencies and slow builds`,
91
+ proposedFiles: [],
92
+ });
93
+ }
94
+ }
95
+ }
96
+ }
97
+ // Deduplicate by file path
98
+ const seen = new Set();
99
+ const uniqueSplits = splits.filter((s) => {
100
+ if (seen.has(s.file))
101
+ return false;
102
+ seen.add(s.file);
103
+ return true;
104
+ });
105
+ return { splits: uniqueSplits };
106
+ }
107
+ /**
108
+ * Group export names by likely domain/category
109
+ */
110
+ function groupExportsByDomain(exportNames) {
111
+ const domains = {
112
+ date: [],
113
+ string: [],
114
+ validation: [],
115
+ formatting: [],
116
+ array: [],
117
+ object: [],
118
+ network: [],
119
+ storage: [],
120
+ dom: [],
121
+ other: [],
122
+ };
123
+ for (const name of exportNames) {
124
+ const lower = name.toLowerCase();
125
+ if (lower.includes('date') || lower.includes('time') || lower.includes('moment') || lower.includes('dayjs')) {
126
+ domains.date.push(name);
127
+ }
128
+ else if (lower.includes('format') || lower.includes('parse') || lower.includes('convert')) {
129
+ domains.formatting.push(name);
130
+ }
131
+ else if (lower.includes('valid') || lower.includes('check') || lower.includes('verify') || lower.includes('is') || lower.includes('has') || lower.includes('can')) {
132
+ domains.validation.push(name);
133
+ }
134
+ else if (lower.includes('trim') || lower.includes('capitalize') || lower.includes('slug') || lower.includes('text') || lower.includes('string') || lower.includes('replace')) {
135
+ domains.string.push(name);
136
+ }
137
+ else if (lower.includes('sort') || lower.includes('filter') || lower.includes('map') || lower.includes('reduce') || lower.includes('group') || lower.includes('unique') || lower.includes('flatten') || lower.includes('chunk')) {
138
+ domains.array.push(name);
139
+ }
140
+ else if (lower.includes('merge') || lower.includes('clone') || lower.includes('pick') || lower.includes('omit') || lower.includes('get') || lower.includes('set') || lower.includes('deep')) {
141
+ domains.object.push(name);
142
+ }
143
+ else if (lower.includes('fetch') || lower.includes('request') || lower.includes('api') || lower.includes('http') || lower.includes('axios') || lower.includes('xhr')) {
144
+ domains.network.push(name);
145
+ }
146
+ else if (lower.includes('store') || lower.includes('cache') || lower.includes('local') || lower.includes('session') || lower.includes('cookie') || lower.includes('storage')) {
147
+ domains.storage.push(name);
148
+ }
149
+ else if (lower.includes('dom') || lower.includes('element') || lower.includes('scroll') || lower.includes('resize') || lower.includes('event') || lower.includes('click') || lower.includes('focus')) {
150
+ domains.dom.push(name);
151
+ }
152
+ else {
153
+ domains.other.push(name);
154
+ }
155
+ }
156
+ return Object.entries(domains)
157
+ .filter(([, names]) => names.length > 0)
158
+ .map(([domain, names]) => ({ domain, names }));
159
+ }
160
+ //# sourceMappingURL=19-suggest-module-splitting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"19-suggest-module-splitting.js","sourceRoot":"","sources":["../../src/tools/19-suggest-module-splitting.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,qCAAqC;AACrC,sDAAsD;AACtD,+EAA+E;AAE/E,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC3G,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EACL,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,8BAA8B,CAAC;AAGtC,MAAM,0BAA0B,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,OAAO;AACrD,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACjC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAe,EACf,MAAgC;IAEhC,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG;QACnB,cAAc,EAAE,MAAM,EAAE,cAAc,IAAI,GAAG;KAC9C,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACxB,CAAC;IAED,MAAM,MAAM,GAAkB,EAAE,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAE7C,2DAA2D;QAC3D,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,eAAe,GAAG,oBAAoB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC5D,IAAI,eAAe,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBAChC,MAAM,aAAa,GAAG,eAAe,CAAC,GAAG,CACvC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC,QAAQ,KAAK,CACtC,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,OAAO;oBACb,UAAU,EAAE,UAAU,QAAQ,UAAU,eAAe,CAAC,MAAM,0BAA0B;oBACxF,MAAM,EAAE,0BAA0B,eAAe,CAAC,MAAM,yBAAyB,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACpI,aAAa;iBACd,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,IAAI,SAAS,GAAG,YAAY,CAAC,cAAc,IAAI,QAAQ,GAAG,0BAA0B,EAAE,CAAC;YACrF,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC3C,IAAI,OAAO,CAAC,MAAM,IAAI,sBAAsB,EAAE,CAAC;oBAC7C,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC/C,iCAAiC;oBACjC,MAAM,MAAM,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;oBACjD,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;wBACvB,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,CACpC,CAAC;wBACF,MAAM,CAAC,IAAI,CAAC;4BACV,IAAI,EAAE,OAAO;4BACb,UAAU,EAAE,qBAAqB,SAAS,WAAW,OAAO,CAAC,MAAM,+BAA+B;4BAClG,MAAM,EAAE,sBAAsB,SAAS,gBAAgB,OAAO,CAAC,MAAM,qBAAqB,MAAM,CAAC,MAAM,UAAU;4BACjH,aAAa;yBACd,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,uDAAuD;QACvD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC3C,IAAI,OAAO,CAAC,MAAM,IAAI,sBAAsB,GAAG,CAAC,EAAE,CAAC;gBACjD,MAAM,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChE,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;oBACvB,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAC9B,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,CACpC,CAAC;oBACF,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,OAAO;wBACb,UAAU,EAAE,SAAS,OAAO,CAAC,MAAM,iBAAiB,MAAM,CAAC,MAAM,kBAAkB;wBACnF,MAAM,EAAE,qBAAqB,OAAO,CAAC,MAAM,0CAA0C;wBACrF,aAAa;qBACd,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,gEAAgE;QAChE,IAAI,QAAQ,KAAK,OAAO,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,MAAM,CAAC,IAAI,CAAC;wBACV,IAAI,EAAE,OAAO;wBACb,UAAU,EAAE,wDAAwD;wBACpE,MAAM,EAAE,oBAAoB,OAAO,CAAC,MAAM,6DAA6D;wBACvG,aAAa,EAAE,EAAE;qBAClB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACvC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QACnC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,WAAqB;IACjD,MAAM,OAAO,GAA6B;QACxC,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;QACV,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,EAAE;QACd,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,GAAG,EAAE,EAAE;QACP,KAAK,EAAE,EAAE;KACV,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAEjC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5G,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC5F,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACpK,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/K,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAClO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9L,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACvK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/K,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACvM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;SAC3B,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;SACvC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { NamingStandardizerOutput, AnalyzerConfig } from '../types.js';
2
+ export declare function namingStandardizer(appPath: string, config?: Partial<AnalyzerConfig>): Promise<NamingStandardizerOutput>;
3
+ //# sourceMappingURL=20-naming-standardizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20-naming-standardizer.d.ts","sourceRoot":"","sources":["../../src/tools/20-naming-standardizer.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,wBAAwB,EAAc,cAAc,EAAE,MAAM,aAAa,CAAC;AAyCxF,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,OAAO,CAAC,wBAAwB,CAAC,CA8HnC"}
@@ -0,0 +1,162 @@
1
+ // ============================================================================
2
+ // TOOL #20: naming-standardizer
3
+ // Suggests better file/folder naming conventions
4
+ // ============================================================================
5
+ import * as path from 'path';
6
+ import { findSourceFiles, getDirectoriesAtDepth, resolveSourceDir } from '../utils/file-scanner.js';
7
+ import { toKebabCase, toCamelCase, toPascalCase, } from '../utils/refactor-helpers.js';
8
+ // Recommended conventions
9
+ const FILE_CONVENTION = 'camelCase'; // React convention: camelCase for files
10
+ const FOLDER_CONVENTION = 'kebab-case'; // Folders in kebab-case
11
+ // Files that should stay PascalCase (React components)
12
+ const PASCALCASE_EXCEPTIONS = [
13
+ /\.tsx?$/,
14
+ /\.jsx?$/,
15
+ ];
16
+ // Folder names that should NOT be renamed (standard conventions)
17
+ const PRESERVED_FOLDERS = new Set([
18
+ 'node_modules',
19
+ '.git',
20
+ 'build',
21
+ 'dist',
22
+ 'public',
23
+ 'src',
24
+ 'assets',
25
+ 'components',
26
+ 'hooks',
27
+ 'utils',
28
+ 'lib',
29
+ 'types',
30
+ 'config',
31
+ 'constants',
32
+ 'api',
33
+ 'services',
34
+ 'pages',
35
+ 'views',
36
+ 'features',
37
+ 'shared',
38
+ 'store',
39
+ 'context',
40
+ 'styles',
41
+ 'pages',
42
+ 'layouts',
43
+ ]);
44
+ export async function namingStandardizer(appPath, config) {
45
+ const srcPath = resolveSourceDir(appPath);
46
+ const files = await findSourceFiles(srcPath);
47
+ const renames = [];
48
+ // Analyze file naming
49
+ for (const file of files) {
50
+ const basename = path.basename(file);
51
+ const ext = path.extname(file);
52
+ const nameWithoutExt = basename.replace(ext, '');
53
+ const relPath = path.relative(srcPath, file);
54
+ const dirname = path.dirname(relPath);
55
+ // Skip node_modules, build, etc.
56
+ if (relPath.includes('node_modules') || relPath.includes('build'))
57
+ continue;
58
+ // Check if this is a React component file (should be PascalCase)
59
+ const isComponent = /^[A-Z]/.test(nameWithoutExt) && PASCALCASE_EXCEPTIONS.some((re) => re.test(basename));
60
+ if (isComponent) {
61
+ // Components should be PascalCase
62
+ const pascal = toPascalCase(nameWithoutExt);
63
+ if (nameWithoutExt !== pascal) {
64
+ renames.push({
65
+ from: relPath,
66
+ to: path.join(dirname, pascal + ext),
67
+ reason: `Component file should use PascalCase: "${pascal}${ext}"`,
68
+ });
69
+ }
70
+ }
71
+ else {
72
+ // Non-component files should be camelCase
73
+ const camel = toCamelCase(nameWithoutExt);
74
+ if (nameWithoutExt !== camel) {
75
+ renames.push({
76
+ from: relPath,
77
+ to: path.join(dirname, camel + ext),
78
+ reason: `Non-component file should use camelCase: "${camel}${ext}"`,
79
+ });
80
+ }
81
+ }
82
+ // Check for generic names
83
+ const genericNames = ['index', 'utils', 'helpers', 'common', 'lib', 'misc', 'temp', 'untitled'];
84
+ if (genericNames.includes(nameWithoutExt.toLowerCase()) && ext !== '.css' && ext !== '.scss') {
85
+ renames.push({
86
+ from: relPath,
87
+ to: relPath, // Don't suggest a specific rename, just flag it
88
+ reason: `Generic filename "${basename}" - consider a more descriptive name`,
89
+ });
90
+ }
91
+ // Check for inconsistent separators
92
+ if (nameWithoutExt.includes('_') && !nameWithoutExt.includes('-')) {
93
+ const kebab = toKebabCase(nameWithoutExt);
94
+ if (nameWithoutExt !== kebab) {
95
+ renames.push({
96
+ from: relPath,
97
+ to: path.join(dirname, kebab + ext),
98
+ reason: `Inconsistent naming: use "${kebab}${ext}" instead of "${basename}"`,
99
+ });
100
+ }
101
+ }
102
+ // Check for SCREAMING_SNAKE_CASE in non-config files
103
+ if (/^[A-Z][A-Z0-9_]+$/.test(nameWithoutExt) && !relPath.includes('config') && !relPath.includes('constants')) {
104
+ const camel = toCamelCase(nameWithoutExt);
105
+ renames.push({
106
+ from: relPath,
107
+ to: path.join(dirname, camel + ext),
108
+ reason: `SCREAMING_SNAKE_CASE is only for constants/config: use "${camel}${ext}"`,
109
+ });
110
+ }
111
+ // Check for spaces in filenames
112
+ if (basename.includes(' ')) {
113
+ const kebab = toKebabCase(nameWithoutExt);
114
+ renames.push({
115
+ from: relPath,
116
+ to: path.join(dirname, kebab + ext),
117
+ reason: `Filename contains spaces: use "${kebab}${ext}"`,
118
+ });
119
+ }
120
+ }
121
+ // Analyze folder naming
122
+ const dirs = getDirectoriesAtDepth(srcPath, 5);
123
+ for (const dir of dirs) {
124
+ const parts = dir.split(path.sep);
125
+ const lastPart = parts[parts.length - 1];
126
+ if (PRESERVED_FOLDERS.has(lastPart))
127
+ continue;
128
+ // Folder names should be kebab-case
129
+ const kebab = toKebabCase(lastPart);
130
+ if (lastPart !== kebab && lastPart !== toCamelCase(lastPart)) {
131
+ renames.push({
132
+ from: dir,
133
+ to: path.join(...parts.slice(0, -1), kebab),
134
+ reason: `Folder should use kebab-case: "${kebab}"`,
135
+ });
136
+ }
137
+ }
138
+ // Deduplicate renames
139
+ const seen = new Set();
140
+ const uniqueRenames = renames.filter((r) => {
141
+ // Don't include renames where from === to (just warnings)
142
+ if (r.from === r.to && r.reason.includes('Generic filename')) {
143
+ // Keep these as warnings
144
+ }
145
+ else if (r.from === r.to) {
146
+ return false;
147
+ }
148
+ const key = r.from;
149
+ if (seen.has(key))
150
+ return false;
151
+ seen.add(key);
152
+ return true;
153
+ });
154
+ return {
155
+ renames: uniqueRenames,
156
+ conventions: {
157
+ files: FILE_CONVENTION,
158
+ folders: FOLDER_CONVENTION,
159
+ },
160
+ };
161
+ }
162
+ //# sourceMappingURL=20-naming-standardizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"20-naming-standardizer.js","sourceRoot":"","sources":["../../src/tools/20-naming-standardizer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { GenerateRefactorPlanOutput, AnalyzerConfig } from '../types.js';
2
+ export declare function generateRefactorPlan(appPath: string, config?: Partial<AnalyzerConfig>): Promise<GenerateRefactorPlanOutput>;
3
+ //# sourceMappingURL=21-generate-refactor-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"21-generate-refactor-plan.d.ts","sourceRoot":"","sources":["../../src/tools/21-generate-refactor-plan.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,0BAA0B,EAAgB,cAAc,EAAE,MAAM,aAAa,CAAC;AAE5F,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,OAAO,CAAC,0BAA0B,CAAC,CAsHrC"}
@@ -0,0 +1,108 @@
1
+ // ============================================================================
2
+ // TOOL #21: generate-refactor-plan
3
+ // Combines all outputs from tools 13-20 into a single unified refactor plan
4
+ // ============================================================================
5
+ import { detectFeatures } from './13-detect-features.js';
6
+ import { classifyFiles } from './14-classify-files.js';
7
+ import { detectSharedModules } from './15-detect-shared-modules.js';
8
+ import { designTargetStructure } from './16-design-target-structure.js';
9
+ import { mapFilesToTarget } from './17-map-files-to-target.js';
10
+ import { detectBoundaryViolations } from './18-detect-boundary-violations.js';
11
+ import { suggestModuleSplitting } from './19-suggest-module-splitting.js';
12
+ import { namingStandardizer } from './20-naming-standardizer.js';
13
+ export async function generateRefactorPlan(appPath, config) {
14
+ // Run all tools in parallel where possible
15
+ const [featuresResult, classificationResult, sharedResult, violationsResult, splitsResult, namingResult,] = await Promise.all([
16
+ detectFeatures(appPath, config),
17
+ classifyFiles(appPath, config),
18
+ detectSharedModules(appPath, config),
19
+ detectBoundaryViolations(appPath, config),
20
+ suggestModuleSplitting(appPath, config),
21
+ namingStandardizer(appPath, config),
22
+ ]);
23
+ // Design target structure based on detected features
24
+ const structureResult = await designTargetStructure(appPath, config, featuresResult.features);
25
+ // Map files to target structure
26
+ const mappingResult = await mapFilesToTarget(appPath, config);
27
+ // Generate ordered refactor steps
28
+ const steps = [];
29
+ let order = 1;
30
+ // Step 1: Fix boundary violations first (prerequisite for clean moves)
31
+ if (violationsResult.violations.length > 0) {
32
+ steps.push({
33
+ order: order++,
34
+ action: 'fix-boundary-violations',
35
+ description: `Fix ${violationsResult.violations.length} boundary violations (cross-feature imports, circular deps, etc.)`,
36
+ affectedFiles: [
37
+ ...new Set(violationsResult.violations.flatMap((v) => [v.from, v.to])),
38
+ ],
39
+ priority: 'high',
40
+ });
41
+ }
42
+ // Step 2: Split large/generic modules
43
+ if (splitsResult.splits.length > 0) {
44
+ steps.push({
45
+ order: order++,
46
+ action: 'split-modules',
47
+ description: `Split ${splitsResult.splits.length} large/generic files into focused modules`,
48
+ affectedFiles: splitsResult.splits.map((s) => s.file),
49
+ priority: 'high',
50
+ });
51
+ }
52
+ // Step 3: Create target folder structure
53
+ steps.push({
54
+ order: order++,
55
+ action: 'create-structure',
56
+ description: `Create feature-based folder structure with ${featuresResult.features.length} features`,
57
+ affectedFiles: [],
58
+ priority: 'medium',
59
+ });
60
+ // Step 4: Move files to target locations
61
+ if (mappingResult.moves.length > 0) {
62
+ steps.push({
63
+ order: order++,
64
+ action: 'move-files',
65
+ description: `Move ${mappingResult.moves.length} files to their target locations`,
66
+ affectedFiles: mappingResult.moves.map((m) => m.from),
67
+ priority: 'medium',
68
+ });
69
+ }
70
+ // Step 5: Rename files for consistency
71
+ if (namingResult.renames.length > 0) {
72
+ steps.push({
73
+ order: order++,
74
+ action: 'rename-files',
75
+ description: `Rename ${namingResult.renames.length} files/folders for consistent naming`,
76
+ affectedFiles: namingResult.renames.map((r) => r.from),
77
+ priority: 'low',
78
+ });
79
+ }
80
+ // Step 6: Update imports
81
+ if (mappingResult.moves.length > 0) {
82
+ steps.push({
83
+ order: order++,
84
+ action: 'update-imports',
85
+ description: `Update import paths after file moves`,
86
+ affectedFiles: mappingResult.moves.map((m) => m.to),
87
+ priority: 'medium',
88
+ });
89
+ }
90
+ // Calculate estimated effort
91
+ const estimatedEffort = {
92
+ filesToMove: mappingResult.moves.length,
93
+ filesToSplit: splitsResult.splits.length,
94
+ filesToRename: namingResult.renames.filter((r) => r.from !== r.to).length,
95
+ violationsToFix: violationsResult.violations.filter((v) => v.severity === 'error').length,
96
+ };
97
+ return {
98
+ features: featuresResult.features,
99
+ targetStructure: structureResult.structure,
100
+ fileMoves: mappingResult.moves,
101
+ splits: splitsResult.splits,
102
+ renames: namingResult.renames,
103
+ violations: violationsResult.violations,
104
+ steps,
105
+ estimatedEffort,
106
+ };
107
+ }
108
+ //# sourceMappingURL=21-generate-refactor-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"21-generate-refactor-plan.js","sourceRoot":"","sources":["../../src/tools/21-generate-refactor-plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { RefactorFolderStructureOutput, AnalyzerConfig } from '../types.js';
2
+ export declare function refactorFolderStructure(appPath: string, config?: Partial<AnalyzerConfig>): Promise<RefactorFolderStructureOutput>;
3
+ //# sourceMappingURL=22-refactor-folder-structure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"22-refactor-folder-structure.d.ts","sourceRoot":"","sources":["../../src/tools/22-refactor-folder-structure.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,6BAA6B,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEjF,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAC/B,OAAO,CAAC,6BAA6B,CAAC,CA4HxC"}
@@ -0,0 +1,98 @@
1
+ // ============================================================================
2
+ // TOOL #22: refactor-folder-structure (AGGREGATOR)
3
+ // Top-level tool that calls all refactor tools + existing analysis tools
4
+ // and produces a comprehensive structured plan
5
+ // ============================================================================
6
+ import { detectFeatures } from './13-detect-features.js';
7
+ import { detectSharedModules } from './15-detect-shared-modules.js';
8
+ import { generateRefactorPlan } from './21-generate-refactor-plan.js';
9
+ export async function refactorFolderStructure(appPath, config) {
10
+ // Run the comprehensive refactor plan (which calls tools 13-20 internally)
11
+ const plan = await generateRefactorPlan(appPath, config);
12
+ // Also run individual tools for detailed output
13
+ const [featuresResult, sharedResult] = await Promise.all([
14
+ detectFeatures(appPath, config),
15
+ detectSharedModules(appPath, config),
16
+ ]);
17
+ // Calculate overall complexity
18
+ const totalMoves = plan.fileMoves.length;
19
+ const totalSplits = plan.splits.length;
20
+ const totalViolations = plan.violations.length;
21
+ const errorViolations = plan.violations.filter((v) => v.severity === 'error').length;
22
+ let overallComplexity;
23
+ if (totalMoves < 10 && totalSplits < 3 && errorViolations === 0) {
24
+ overallComplexity = 'low';
25
+ }
26
+ else if (totalMoves < 50 && totalSplits < 10 && errorViolations < 5) {
27
+ overallComplexity = 'medium';
28
+ }
29
+ else {
30
+ overallComplexity = 'high';
31
+ }
32
+ // Generate improvements list
33
+ const improvements = [];
34
+ if (plan.features.length > 0) {
35
+ improvements.push(`Organize code into ${plan.features.length} feature modules: ${plan.features.join(', ')}`);
36
+ }
37
+ if (totalMoves > 0) {
38
+ improvements.push(`Move ${totalMoves} files to feature-based structure for better discoverability`);
39
+ }
40
+ if (sharedResult.shared.length > 0) {
41
+ improvements.push(`Extract ${sharedResult.shared.length} shared modules to prevent code duplication`);
42
+ }
43
+ if (totalSplits > 0) {
44
+ improvements.push(`Split ${totalSplits} large/generic files into focused, single-responsibility modules`);
45
+ }
46
+ if (plan.renames.length > 0) {
47
+ improvements.push(`Standardize naming for ${plan.renames.length} files/folders for consistency`);
48
+ }
49
+ if (totalViolations === 0) {
50
+ improvements.push('No architectural boundary violations detected');
51
+ }
52
+ // Generate warnings
53
+ const warnings = [];
54
+ if (errorViolations > 0) {
55
+ warnings.push(`${errorViolations} critical boundary violations must be fixed before refactoring`);
56
+ }
57
+ if (plan.violations.some((v) => v.type === 'circular-dependency')) {
58
+ warnings.push('Circular dependencies detected - these must be resolved before moving files');
59
+ }
60
+ if (totalMoves > 100) {
61
+ warnings.push(`Large number of file moves (${totalMoves}) - consider incremental migration`);
62
+ }
63
+ if (plan.features.length === 0) {
64
+ warnings.push('No clear features detected - file may need manual feature assignment');
65
+ }
66
+ const unmapped = plan.fileMoves.filter(() => false); // unmapped handled in map-files-to-target
67
+ if (plan.fileMoves.length === 0 && plan.features.length > 0) {
68
+ warnings.push('Files may already be well-organized or need manual review');
69
+ }
70
+ // Build feature details
71
+ const featureDetails = {};
72
+ for (const feature of plan.features) {
73
+ featureDetails[feature] = featuresResult.featureMap[feature] || [];
74
+ }
75
+ return {
76
+ summary: {
77
+ appPath,
78
+ analysisDate: new Date().toISOString(),
79
+ featuresDetected: plan.features.length,
80
+ filesToMove: totalMoves,
81
+ filesToSplit: totalSplits,
82
+ violationsFound: totalViolations,
83
+ overallComplexity,
84
+ },
85
+ features: plan.features,
86
+ featureDetails,
87
+ structure: plan.targetStructure,
88
+ moves: plan.fileMoves,
89
+ splits: plan.splits,
90
+ renames: plan.renames,
91
+ sharedModules: sharedResult.shared,
92
+ violations: plan.violations,
93
+ refactorSteps: plan.steps,
94
+ improvements,
95
+ warnings,
96
+ };
97
+ }
98
+ //# sourceMappingURL=22-refactor-folder-structure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"22-refactor-folder-structure.js","sourceRoot":"","sources":["../../src/tools/22-refactor-folder-structure.ts"],"names":[],"mappings":"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"}