mcp-react-toolkit 1.0.1 → 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 +12 -4
  3. package/tools/accessibility-checker/build/index.js +9 -5
  4. package/tools/accessibility-checker/build/index.js.map +1 -1
  5. package/tools/accessibility-checker/build/rules.d.ts.map +1 -1
  6. package/tools/accessibility-checker/build/rules.js +325 -94
  7. package/tools/accessibility-checker/build/rules.js.map +1 -1
  8. package/tools/code-modernizer/build/tools/01-convert-to-typescript.d.ts.map +1 -1
  9. package/tools/code-modernizer/build/tools/01-convert-to-typescript.js +65 -50
  10. package/tools/code-modernizer/build/tools/01-convert-to-typescript.js.map +1 -1
  11. package/tools/code-modernizer/build/types.d.ts +1 -0
  12. package/tools/code-modernizer/build/types.d.ts.map +1 -1
  13. package/tools/code-modernizer/build/utils/ast-parser.d.ts.map +1 -1
  14. package/tools/code-modernizer/build/utils/ast-parser.js +30 -14
  15. package/tools/code-modernizer/build/utils/ast-parser.js.map +1 -1
  16. package/tools/code-modernizer/build/utils/type-generator.d.ts +1 -1
  17. package/tools/code-modernizer/build/utils/type-generator.d.ts.map +1 -1
  18. package/tools/code-modernizer/build/utils/type-generator.js +72 -23
  19. package/tools/code-modernizer/build/utils/type-generator.js.map +1 -1
  20. package/tools/component-factory/build/index.js +59 -7
  21. package/tools/component-factory/build/index.js.map +1 -1
  22. package/tools/component-fixer/README.md +44 -0
  23. package/tools/component-fixer/build/index.d.ts +3 -0
  24. package/tools/component-fixer/build/index.d.ts.map +1 -0
  25. package/tools/component-fixer/build/index.js +647 -0
  26. package/tools/component-fixer/build/index.js.map +1 -0
  27. package/tools/component-fixer/build/index.test.d.ts +2 -0
  28. package/tools/component-fixer/build/index.test.d.ts.map +1 -0
  29. package/tools/component-fixer/build/index.test.js.map +1 -0
  30. package/tools/component-fixer/package.json +20 -0
  31. package/tools/component-reviewer/README.md +54 -0
  32. package/tools/component-reviewer/build/index.d.ts +39 -0
  33. package/tools/component-reviewer/build/index.d.ts.map +1 -0
  34. package/tools/component-reviewer/build/index.js +946 -0
  35. package/tools/component-reviewer/build/index.js.map +1 -0
  36. package/tools/component-reviewer/build/index.test.d.ts +2 -0
  37. package/tools/component-reviewer/build/index.test.d.ts.map +1 -0
  38. package/tools/component-reviewer/build/index.test.js.map +1 -0
  39. package/tools/component-reviewer/package.json +20 -0
  40. package/tools/dep-auditor/build/index.d.ts +1 -0
  41. package/tools/dep-auditor/build/index.d.ts.map +1 -1
  42. package/tools/dep-auditor/build/index.js +71 -16
  43. package/tools/dep-auditor/build/index.js.map +1 -1
  44. package/tools/generate-tests/build/analyzer.d.ts +14 -0
  45. package/tools/generate-tests/build/analyzer.d.ts.map +1 -1
  46. package/tools/generate-tests/build/analyzer.js +96 -42
  47. package/tools/generate-tests/build/analyzer.js.map +1 -1
  48. package/tools/generate-tests/build/generators.d.ts.map +1 -1
  49. package/tools/generate-tests/build/generators.js +304 -79
  50. package/tools/generate-tests/build/generators.js.map +1 -1
  51. package/tools/generate-tests/build/index.js +29 -10
  52. package/tools/generate-tests/build/index.js.map +1 -1
  53. package/tools/json-viewer/build/index.js +29 -6
  54. package/tools/json-viewer/build/index.js.map +1 -1
  55. package/tools/legacy-analyzer/README.md +66 -0
  56. package/tools/legacy-analyzer/build/index.d.ts +3 -0
  57. package/tools/legacy-analyzer/build/index.d.ts.map +1 -0
  58. package/tools/legacy-analyzer/build/index.js +209 -0
  59. package/tools/legacy-analyzer/build/index.js.map +1 -0
  60. package/tools/legacy-analyzer/build/index.test.d.ts +2 -0
  61. package/tools/legacy-analyzer/build/index.test.d.ts.map +1 -0
  62. package/tools/legacy-analyzer/build/index.test.js.map +1 -0
  63. package/tools/legacy-analyzer/build/tools/01-detect-project-tech.d.ts +3 -0
  64. package/tools/legacy-analyzer/build/tools/01-detect-project-tech.d.ts.map +1 -0
  65. package/tools/legacy-analyzer/build/tools/01-detect-project-tech.js +115 -0
  66. package/tools/legacy-analyzer/build/tools/01-detect-project-tech.js.map +1 -0
  67. package/tools/legacy-analyzer/build/tools/02-analyze-folder-structure.d.ts +3 -0
  68. package/tools/legacy-analyzer/build/tools/02-analyze-folder-structure.d.ts.map +1 -0
  69. package/tools/legacy-analyzer/build/tools/02-analyze-folder-structure.js +85 -0
  70. package/tools/legacy-analyzer/build/tools/02-analyze-folder-structure.js.map +1 -0
  71. package/tools/legacy-analyzer/build/tools/03-analyze-components.d.ts +3 -0
  72. package/tools/legacy-analyzer/build/tools/03-analyze-components.d.ts.map +1 -0
  73. package/tools/legacy-analyzer/build/tools/03-analyze-components.js +87 -0
  74. package/tools/legacy-analyzer/build/tools/03-analyze-components.js.map +1 -0
  75. package/tools/legacy-analyzer/build/tools/04-analyze-state-management.d.ts +3 -0
  76. package/tools/legacy-analyzer/build/tools/04-analyze-state-management.d.ts.map +1 -0
  77. package/tools/legacy-analyzer/build/tools/04-analyze-state-management.js +133 -0
  78. package/tools/legacy-analyzer/build/tools/04-analyze-state-management.js.map +1 -0
  79. package/tools/legacy-analyzer/build/tools/05-analyze-api-layer.d.ts +3 -0
  80. package/tools/legacy-analyzer/build/tools/05-analyze-api-layer.d.ts.map +1 -0
  81. package/tools/legacy-analyzer/build/tools/05-analyze-api-layer.js +160 -0
  82. package/tools/legacy-analyzer/build/tools/05-analyze-api-layer.js.map +1 -0
  83. package/tools/legacy-analyzer/build/tools/06-analyze-routing.d.ts +3 -0
  84. package/tools/legacy-analyzer/build/tools/06-analyze-routing.d.ts.map +1 -0
  85. package/tools/legacy-analyzer/build/tools/06-analyze-routing.js +150 -0
  86. package/tools/legacy-analyzer/build/tools/06-analyze-routing.js.map +1 -0
  87. package/tools/legacy-analyzer/build/tools/07-analyze-styling.d.ts +3 -0
  88. package/tools/legacy-analyzer/build/tools/07-analyze-styling.d.ts.map +1 -0
  89. package/tools/legacy-analyzer/build/tools/07-analyze-styling.js +131 -0
  90. package/tools/legacy-analyzer/build/tools/07-analyze-styling.js.map +1 -0
  91. package/tools/legacy-analyzer/build/tools/08-analyze-assets.d.ts +3 -0
  92. package/tools/legacy-analyzer/build/tools/08-analyze-assets.d.ts.map +1 -0
  93. package/tools/legacy-analyzer/build/tools/08-analyze-assets.js +85 -0
  94. package/tools/legacy-analyzer/build/tools/08-analyze-assets.js.map +1 -0
  95. package/tools/legacy-analyzer/build/tools/09-detect-anti-patterns.d.ts +3 -0
  96. package/tools/legacy-analyzer/build/tools/09-detect-anti-patterns.d.ts.map +1 -0
  97. package/tools/legacy-analyzer/build/tools/09-detect-anti-patterns.js +329 -0
  98. package/tools/legacy-analyzer/build/tools/09-detect-anti-patterns.js.map +1 -0
  99. package/tools/legacy-analyzer/build/tools/10-detect-duplication.d.ts +3 -0
  100. package/tools/legacy-analyzer/build/tools/10-detect-duplication.d.ts.map +1 -0
  101. package/tools/legacy-analyzer/build/tools/10-detect-duplication.js +192 -0
  102. package/tools/legacy-analyzer/build/tools/10-detect-duplication.js.map +1 -0
  103. package/tools/legacy-analyzer/build/tools/11-analyze-dependencies-usage.d.ts +3 -0
  104. package/tools/legacy-analyzer/build/tools/11-analyze-dependencies-usage.d.ts.map +1 -0
  105. package/tools/legacy-analyzer/build/tools/11-analyze-dependencies-usage.js +232 -0
  106. package/tools/legacy-analyzer/build/tools/11-analyze-dependencies-usage.js.map +1 -0
  107. package/tools/legacy-analyzer/build/tools/12-analyze-legacy-app.d.ts +3 -0
  108. package/tools/legacy-analyzer/build/tools/12-analyze-legacy-app.d.ts.map +1 -0
  109. package/tools/legacy-analyzer/build/tools/12-analyze-legacy-app.js +247 -0
  110. package/tools/legacy-analyzer/build/tools/12-analyze-legacy-app.js.map +1 -0
  111. package/tools/legacy-analyzer/build/tools/13-detect-features.d.ts +3 -0
  112. package/tools/legacy-analyzer/build/tools/13-detect-features.d.ts.map +1 -0
  113. package/tools/legacy-analyzer/build/tools/13-detect-features.js +141 -0
  114. package/tools/legacy-analyzer/build/tools/13-detect-features.js.map +1 -0
  115. package/tools/legacy-analyzer/build/tools/14-classify-files.d.ts +3 -0
  116. package/tools/legacy-analyzer/build/tools/14-classify-files.d.ts.map +1 -0
  117. package/tools/legacy-analyzer/build/tools/14-classify-files.js +76 -0
  118. package/tools/legacy-analyzer/build/tools/14-classify-files.js.map +1 -0
  119. package/tools/legacy-analyzer/build/tools/15-detect-shared-modules.d.ts +3 -0
  120. package/tools/legacy-analyzer/build/tools/15-detect-shared-modules.d.ts.map +1 -0
  121. package/tools/legacy-analyzer/build/tools/15-detect-shared-modules.js +70 -0
  122. package/tools/legacy-analyzer/build/tools/15-detect-shared-modules.js.map +1 -0
  123. package/tools/legacy-analyzer/build/tools/16-design-target-structure.d.ts +3 -0
  124. package/tools/legacy-analyzer/build/tools/16-design-target-structure.d.ts.map +1 -0
  125. package/tools/legacy-analyzer/build/tools/16-design-target-structure.js +26 -0
  126. package/tools/legacy-analyzer/build/tools/16-design-target-structure.js.map +1 -0
  127. package/tools/legacy-analyzer/build/tools/17-map-files-to-target.d.ts +3 -0
  128. package/tools/legacy-analyzer/build/tools/17-map-files-to-target.d.ts.map +1 -0
  129. package/tools/legacy-analyzer/build/tools/17-map-files-to-target.js +108 -0
  130. package/tools/legacy-analyzer/build/tools/17-map-files-to-target.js.map +1 -0
  131. package/tools/legacy-analyzer/build/tools/18-detect-boundary-violations.d.ts +3 -0
  132. package/tools/legacy-analyzer/build/tools/18-detect-boundary-violations.d.ts.map +1 -0
  133. package/tools/legacy-analyzer/build/tools/18-detect-boundary-violations.js +137 -0
  134. package/tools/legacy-analyzer/build/tools/18-detect-boundary-violations.js.map +1 -0
  135. package/tools/legacy-analyzer/build/tools/19-suggest-module-splitting.d.ts +3 -0
  136. package/tools/legacy-analyzer/build/tools/19-suggest-module-splitting.d.ts.map +1 -0
  137. package/tools/legacy-analyzer/build/tools/19-suggest-module-splitting.js +160 -0
  138. package/tools/legacy-analyzer/build/tools/19-suggest-module-splitting.js.map +1 -0
  139. package/tools/legacy-analyzer/build/tools/20-naming-standardizer.d.ts +3 -0
  140. package/tools/legacy-analyzer/build/tools/20-naming-standardizer.d.ts.map +1 -0
  141. package/tools/legacy-analyzer/build/tools/20-naming-standardizer.js +162 -0
  142. package/tools/legacy-analyzer/build/tools/20-naming-standardizer.js.map +1 -0
  143. package/tools/legacy-analyzer/build/tools/21-generate-refactor-plan.d.ts +3 -0
  144. package/tools/legacy-analyzer/build/tools/21-generate-refactor-plan.d.ts.map +1 -0
  145. package/tools/legacy-analyzer/build/tools/21-generate-refactor-plan.js +108 -0
  146. package/tools/legacy-analyzer/build/tools/21-generate-refactor-plan.js.map +1 -0
  147. package/tools/legacy-analyzer/build/tools/22-refactor-folder-structure.d.ts +3 -0
  148. package/tools/legacy-analyzer/build/tools/22-refactor-folder-structure.d.ts.map +1 -0
  149. package/tools/legacy-analyzer/build/tools/22-refactor-folder-structure.js +98 -0
  150. package/tools/legacy-analyzer/build/tools/22-refactor-folder-structure.js.map +1 -0
  151. package/tools/legacy-analyzer/build/types.d.ts +413 -0
  152. package/tools/legacy-analyzer/build/types.d.ts.map +1 -0
  153. package/tools/legacy-analyzer/build/types.js +12 -0
  154. package/tools/legacy-analyzer/build/types.js.map +1 -0
  155. package/tools/legacy-analyzer/build/utils/ast-parser.d.ts +34 -0
  156. package/tools/legacy-analyzer/build/utils/ast-parser.d.ts.map +1 -0
  157. package/tools/legacy-analyzer/build/utils/ast-parser.js +394 -0
  158. package/tools/legacy-analyzer/build/utils/ast-parser.js.map +1 -0
  159. package/tools/legacy-analyzer/build/utils/file-scanner.d.ts +51 -0
  160. package/tools/legacy-analyzer/build/utils/file-scanner.d.ts.map +1 -0
  161. package/tools/legacy-analyzer/build/utils/file-scanner.js +174 -0
  162. package/tools/legacy-analyzer/build/utils/file-scanner.js.map +1 -0
  163. package/tools/legacy-analyzer/build/utils/import-tracker.d.ts +38 -0
  164. package/tools/legacy-analyzer/build/utils/import-tracker.d.ts.map +1 -0
  165. package/tools/legacy-analyzer/build/utils/import-tracker.js +194 -0
  166. package/tools/legacy-analyzer/build/utils/import-tracker.js.map +1 -0
  167. package/tools/legacy-analyzer/build/utils/refactor-helpers.d.ts +88 -0
  168. package/tools/legacy-analyzer/build/utils/refactor-helpers.d.ts.map +1 -0
  169. package/tools/legacy-analyzer/build/utils/refactor-helpers.js +538 -0
  170. package/tools/legacy-analyzer/build/utils/refactor-helpers.js.map +1 -0
  171. package/tools/legacy-analyzer/package.json +20 -0
  172. package/tools/lighthouse-runner/README.md +45 -0
  173. package/tools/lighthouse-runner/build/index.d.ts +6 -0
  174. package/tools/lighthouse-runner/build/index.d.ts.map +1 -0
  175. package/tools/lighthouse-runner/build/index.js +295 -0
  176. package/tools/lighthouse-runner/build/index.js.map +1 -0
  177. package/tools/lighthouse-runner/build/index.test.d.ts +2 -0
  178. package/tools/lighthouse-runner/build/index.test.d.ts.map +1 -0
  179. package/tools/lighthouse-runner/build/index.test.js.map +1 -0
  180. package/tools/lighthouse-runner/package.json +20 -0
  181. package/tools/monorepo-manager/build/utils.d.ts.map +1 -1
  182. package/tools/monorepo-manager/build/utils.js +12 -9
  183. package/tools/monorepo-manager/build/utils.js.map +1 -1
  184. package/tools/performance-audit/README.md +37 -0
  185. package/tools/performance-audit/build/index.d.ts +13 -0
  186. package/tools/performance-audit/build/index.d.ts.map +1 -0
  187. package/tools/performance-audit/build/index.js +311 -0
  188. package/tools/performance-audit/build/index.js.map +1 -0
  189. package/tools/performance-audit/build/index.test.d.ts +2 -0
  190. package/tools/performance-audit/build/index.test.d.ts.map +1 -0
  191. package/tools/performance-audit/build/index.test.js.map +1 -0
  192. package/tools/performance-audit/package.json +20 -0
  193. package/tools/quality-pipeline/build/index.js +55 -15
  194. package/tools/quality-pipeline/build/index.js.map +1 -1
  195. package/tools/render-analyzer/README.md +43 -0
  196. package/tools/render-analyzer/build/index.d.ts +25 -0
  197. package/tools/render-analyzer/build/index.d.ts.map +1 -0
  198. package/tools/render-analyzer/build/index.js +342 -0
  199. package/tools/render-analyzer/build/index.js.map +1 -0
  200. package/tools/render-analyzer/build/index.test.d.ts +2 -0
  201. package/tools/render-analyzer/build/index.test.d.ts.map +1 -0
  202. package/tools/render-analyzer/build/index.test.js.map +1 -0
  203. package/tools/render-analyzer/package.json +20 -0
  204. package/tools/shared/build/fs.d.ts +8 -0
  205. package/tools/shared/build/fs.d.ts.map +1 -0
  206. package/tools/shared/build/fs.js +45 -0
  207. package/tools/shared/build/fs.js.map +1 -0
  208. package/tools/shared/build/index.d.ts +1 -0
  209. package/tools/shared/build/index.d.ts.map +1 -1
  210. package/tools/shared/build/index.js +1 -0
  211. package/tools/shared/build/index.js.map +1 -1
  212. package/tools/storybook-generator/README.md +39 -0
  213. package/tools/storybook-generator/build/index.d.ts +13 -0
  214. package/tools/storybook-generator/build/index.d.ts.map +1 -0
  215. package/tools/storybook-generator/build/index.js +478 -0
  216. package/tools/storybook-generator/build/index.js.map +1 -0
  217. package/tools/storybook-generator/build/index.test.d.ts +2 -0
  218. package/tools/storybook-generator/build/index.test.d.ts.map +1 -0
  219. package/tools/storybook-generator/build/index.test.js.map +1 -0
  220. package/tools/storybook-generator/package.json +20 -0
  221. package/tools/test-gap-analyzer/README.md +41 -0
  222. package/tools/test-gap-analyzer/build/index.d.ts +20 -0
  223. package/tools/test-gap-analyzer/build/index.d.ts.map +1 -0
  224. package/tools/test-gap-analyzer/build/index.js +371 -0
  225. package/tools/test-gap-analyzer/build/index.js.map +1 -0
  226. package/tools/test-gap-analyzer/build/index.test.d.ts +2 -0
  227. package/tools/test-gap-analyzer/build/index.test.d.ts.map +1 -0
  228. package/tools/test-gap-analyzer/build/index.test.js.map +1 -0
  229. package/tools/test-gap-analyzer/package.json +20 -0
  230. package/tools/typescript-enforcer/build/scanner.d.ts.map +1 -1
  231. package/tools/typescript-enforcer/build/scanner.js +13 -1
  232. package/tools/typescript-enforcer/build/scanner.js.map +1 -1
  233. package/tools/typescript-enforcer/build/types.d.ts +1 -0
  234. package/tools/typescript-enforcer/build/types.d.ts.map +1 -1
  235. package/mcp-publisher +0 -0
@@ -0,0 +1,394 @@
1
+ // @ts-nocheck
2
+ // ============================================================================
3
+ // AST PARSER - Parse JS/JSX/TS/TSX files to AST using @typescript-eslint
4
+ // ============================================================================
5
+ import * as path from 'path';
6
+ import { readFileContent } from './file-scanner.js';
7
+ // Lazy-load parser to avoid issues at module level
8
+ let parser = null;
9
+ function getParser() {
10
+ if (!parser) {
11
+ parser = require('@typescript-eslint/parser');
12
+ }
13
+ return parser;
14
+ }
15
+ /**
16
+ * Determine parser options based on file extension
17
+ */
18
+ function getParserOptions(filePath) {
19
+ const ext = path.extname(filePath).toLowerCase();
20
+ const isTS = ext === '.ts' || ext === '.tsx';
21
+ return {
22
+ ecmaVersion: 2022,
23
+ sourceType: 'module',
24
+ ecmaFeatures: {
25
+ jsx: ext === '.jsx' || ext === '.tsx',
26
+ },
27
+ ...(isTS && {
28
+ project: undefined,
29
+ warnOnUnsupportedTypeScriptVersion: false,
30
+ }),
31
+ };
32
+ }
33
+ /**
34
+ * Parse a file into an AST
35
+ */
36
+ export function parseFile(filePath) {
37
+ const content = readFileContent(filePath);
38
+ if (!content)
39
+ return null;
40
+ try {
41
+ const p = getParser();
42
+ const ast = p.parse(content, {
43
+ ...getParserOptions(filePath),
44
+ range: true,
45
+ loc: true,
46
+ comment: true,
47
+ });
48
+ return { filePath, content, ast };
49
+ }
50
+ catch (error) {
51
+ try {
52
+ const p = getParser();
53
+ const ast = p.parse(content, {
54
+ ecmaVersion: 2022,
55
+ sourceType: 'module',
56
+ ecmaFeatures: { jsx: true },
57
+ range: true,
58
+ loc: true,
59
+ comment: true,
60
+ });
61
+ return { filePath, content, ast };
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ }
67
+ }
68
+ /**
69
+ * Extract import declarations from AST
70
+ */
71
+ export function extractImports(ast) {
72
+ const imports = [];
73
+ function walk(node) {
74
+ if (!node || typeof node !== 'object')
75
+ return;
76
+ if (node.type === 'ImportDeclaration') {
77
+ const source = node.source?.value || '';
78
+ const specifiers = [];
79
+ let isDefault = false;
80
+ for (const spec of node.specifiers || []) {
81
+ if (spec.type === 'ImportDefaultSpecifier') {
82
+ specifiers.push(spec.local?.name || '');
83
+ isDefault = true;
84
+ }
85
+ else if (spec.type === 'ImportSpecifier') {
86
+ specifiers.push(spec.imported?.name || spec.local?.name || '');
87
+ }
88
+ else if (spec.type === 'ImportNamespaceSpecifier') {
89
+ specifiers.push(`* as ${spec.local?.name || ''}`);
90
+ }
91
+ }
92
+ imports.push({
93
+ source,
94
+ specifiers,
95
+ isDefault,
96
+ line: node.loc?.start?.line || 0,
97
+ });
98
+ }
99
+ for (const key of Object.keys(node)) {
100
+ if (key === 'parent' || key === 'loc' || key === 'range')
101
+ continue;
102
+ const child = node[key];
103
+ if (Array.isArray(child)) {
104
+ for (const item of child)
105
+ walk(item);
106
+ }
107
+ else if (child && typeof child === 'object' && child.type) {
108
+ walk(child);
109
+ }
110
+ }
111
+ }
112
+ walk(ast);
113
+ return imports;
114
+ }
115
+ /**
116
+ * Extract export declarations from AST
117
+ */
118
+ export function extractExports(ast) {
119
+ const exports = [];
120
+ function walk(node) {
121
+ if (!node || typeof node !== 'object')
122
+ return;
123
+ if (node.type === 'ExportDefaultDeclaration') {
124
+ const decl = node.declaration;
125
+ let name = 'default';
126
+ if (decl?.type === 'FunctionDeclaration' || decl?.type === 'ClassDeclaration') {
127
+ name = decl.id?.name || 'default';
128
+ }
129
+ else if (decl?.type === 'Identifier') {
130
+ name = decl.name;
131
+ }
132
+ exports.push({ name, isDefault: true, line: node.loc?.start?.line || 0 });
133
+ }
134
+ if (node.type === 'ExportNamedDeclaration') {
135
+ if (node.declaration) {
136
+ const decl = node.declaration;
137
+ if (decl.type === 'VariableDeclaration') {
138
+ for (const d of decl.declarations || []) {
139
+ if (d.id?.name) {
140
+ exports.push({ name: d.id.name, isDefault: false, line: node.loc?.start?.line || 0 });
141
+ }
142
+ }
143
+ }
144
+ else if (decl.id?.name) {
145
+ exports.push({ name: decl.id.name, isDefault: false, line: node.loc?.start?.line || 0 });
146
+ }
147
+ }
148
+ for (const spec of node.specifiers || []) {
149
+ const name = spec.exported?.name || spec.local?.name || '';
150
+ if (name) {
151
+ exports.push({ name, isDefault: false, line: node.loc?.start?.line || 0 });
152
+ }
153
+ }
154
+ }
155
+ for (const key of Object.keys(node)) {
156
+ if (key === 'parent' || key === 'loc' || key === 'range')
157
+ continue;
158
+ const child = node[key];
159
+ if (Array.isArray(child)) {
160
+ for (const item of child)
161
+ walk(item);
162
+ }
163
+ else if (child && typeof child === 'object' && child.type) {
164
+ walk(child);
165
+ }
166
+ }
167
+ }
168
+ walk(ast);
169
+ return exports;
170
+ }
171
+ /**
172
+ * Extract function declarations from AST
173
+ */
174
+ export function extractFunctions(ast) {
175
+ const functions = [];
176
+ const exportedNames = new Set();
177
+ function collectExports(node) {
178
+ if (!node || typeof node !== 'object')
179
+ return;
180
+ if (node.type === 'ExportNamedDeclaration' && node.declaration) {
181
+ const decl = node.declaration;
182
+ if (decl.type === 'FunctionDeclaration' && decl.id?.name) {
183
+ exportedNames.add(decl.id.name);
184
+ }
185
+ else if (decl.type === 'VariableDeclaration') {
186
+ for (const d of decl.declarations || []) {
187
+ if (d.id?.name)
188
+ exportedNames.add(d.id.name);
189
+ }
190
+ }
191
+ }
192
+ if (node.type === 'ExportDefaultDeclaration' && node.declaration?.id?.name) {
193
+ exportedNames.add(node.declaration.id.name);
194
+ }
195
+ for (const key of Object.keys(node)) {
196
+ if (key === 'parent' || key === 'loc' || key === 'range')
197
+ continue;
198
+ const child = node[key];
199
+ if (Array.isArray(child)) {
200
+ for (const item of child)
201
+ collectExports(item);
202
+ }
203
+ else if (child && typeof child === 'object' && child.type) {
204
+ collectExports(child);
205
+ }
206
+ }
207
+ }
208
+ collectExports(ast);
209
+ function walk(node) {
210
+ if (!node || typeof node !== 'object')
211
+ return;
212
+ if (node.type === 'FunctionDeclaration' && node.id?.name) {
213
+ const params = (node.params || []).map((p) => {
214
+ if (p.type === 'Identifier')
215
+ return p.name;
216
+ if (p.type === 'ObjectPattern')
217
+ return '{...}';
218
+ if (p.type === 'ArrayPattern')
219
+ return '[...]';
220
+ return '...';
221
+ });
222
+ const name = node.id.name;
223
+ functions.push({
224
+ name,
225
+ params,
226
+ line: node.loc?.start?.line || 0,
227
+ isExported: exportedNames.has(name),
228
+ isComponent: /^[A-Z]/.test(name),
229
+ });
230
+ }
231
+ if (node.type === 'VariableDeclarator' && node.init) {
232
+ const initType = node.init.type;
233
+ if ((initType === 'ArrowFunctionExpression' || initType === 'FunctionExpression') && node.id?.name) {
234
+ const params = (node.init.params || []).map((p) => {
235
+ if (p.type === 'Identifier')
236
+ return p.name;
237
+ if (p.type === 'ObjectPattern')
238
+ return '{...}';
239
+ return '...';
240
+ });
241
+ const name = node.id.name;
242
+ functions.push({
243
+ name,
244
+ params,
245
+ line: node.loc?.start?.line || 0,
246
+ isExported: exportedNames.has(name),
247
+ isComponent: /^[A-Z]/.test(name),
248
+ });
249
+ }
250
+ }
251
+ for (const key of Object.keys(node)) {
252
+ if (key === 'parent' || key === 'loc' || key === 'range')
253
+ continue;
254
+ const child = node[key];
255
+ if (Array.isArray(child)) {
256
+ for (const item of child)
257
+ walk(item);
258
+ }
259
+ else if (child && typeof child === 'object' && child.type) {
260
+ walk(child);
261
+ }
262
+ }
263
+ }
264
+ walk(ast);
265
+ return functions;
266
+ }
267
+ /**
268
+ * Extract JSX elements and calculate nesting depth
269
+ */
270
+ export function extractJSX(ast) {
271
+ const elements = [];
272
+ function walk(node, currentDepth = 0) {
273
+ if (!node || typeof node !== 'object')
274
+ return;
275
+ if (node.type === 'JSXElement' || node.type === 'JSXFragment') {
276
+ let tagName = 'Fragment';
277
+ if (node.type === 'JSXElement' && node.openingElement?.name) {
278
+ const name = node.openingElement.name;
279
+ if (name.type === 'JSXIdentifier') {
280
+ tagName = name.name;
281
+ }
282
+ else if (name.type === 'JSXMemberExpression') {
283
+ tagName = `${name.object?.name || ''}.${name.property?.name || ''}`;
284
+ }
285
+ }
286
+ const childrenCount = (node.children || []).filter((c) => c.type === 'JSXElement' || c.type === 'JSXFragment').length;
287
+ elements.push({
288
+ tagName,
289
+ depth: currentDepth,
290
+ line: node.loc?.start?.line || 0,
291
+ childrenCount,
292
+ });
293
+ for (const child of node.children || []) {
294
+ walk(child, currentDepth + 1);
295
+ }
296
+ }
297
+ for (const key of Object.keys(node)) {
298
+ if (key === 'parent' || key === 'loc' || key === 'range' || key === 'children')
299
+ continue;
300
+ const child = node[key];
301
+ if (Array.isArray(child)) {
302
+ for (const item of child)
303
+ walk(item, currentDepth);
304
+ }
305
+ else if (child && typeof child === 'object' && child.type) {
306
+ walk(child, currentDepth);
307
+ }
308
+ }
309
+ }
310
+ walk(ast);
311
+ return elements;
312
+ }
313
+ /**
314
+ * Extract React hook usage from AST
315
+ */
316
+ export function extractHooks(ast) {
317
+ const hooks = [];
318
+ function walk(node) {
319
+ if (!node || typeof node !== 'object')
320
+ return;
321
+ if (node.type === 'CallExpression' && node.callee?.type === 'Identifier') {
322
+ const name = node.callee.name;
323
+ if (/^use[A-Z]/.test(name)) {
324
+ hooks.push({
325
+ name,
326
+ line: node.loc?.start?.line || 0,
327
+ });
328
+ }
329
+ }
330
+ for (const key of Object.keys(node)) {
331
+ if (key === 'parent' || key === 'loc' || key === 'range')
332
+ continue;
333
+ const child = node[key];
334
+ if (Array.isArray(child)) {
335
+ for (const item of child)
336
+ walk(item);
337
+ }
338
+ else if (child && typeof child === 'object' && child.type) {
339
+ walk(child);
340
+ }
341
+ }
342
+ }
343
+ walk(ast);
344
+ return hooks;
345
+ }
346
+ /**
347
+ * Full component analysis of a file
348
+ */
349
+ export function analyzeComponent(filePath) {
350
+ const parsed = parseFile(filePath);
351
+ if (!parsed)
352
+ return null;
353
+ const { ast, content } = parsed;
354
+ const lines = content.split('\n').length;
355
+ const name = path.basename(filePath, path.extname(filePath));
356
+ const imports = extractImports(ast);
357
+ const exports = extractExports(ast);
358
+ const functions = extractFunctions(ast);
359
+ const jsxElements = extractJSX(ast);
360
+ const hooks = extractHooks(ast);
361
+ const jsxMaxDepth = jsxElements.length > 0 ? Math.max(...jsxElements.map((e) => e.depth)) : 0;
362
+ const props = [];
363
+ for (const fn of functions) {
364
+ if (fn.isComponent && fn.params.length > 0) {
365
+ props.push(...fn.params);
366
+ }
367
+ }
368
+ return {
369
+ filePath,
370
+ name,
371
+ lines,
372
+ imports,
373
+ exports,
374
+ functions,
375
+ jsxElements,
376
+ jsxMaxDepth,
377
+ hooks,
378
+ props,
379
+ };
380
+ }
381
+ /**
382
+ * Analyze multiple files in batch
383
+ */
384
+ export async function analyzeComponents(filePaths) {
385
+ const results = [];
386
+ for (const filePath of filePaths) {
387
+ const analysis = analyzeComponent(filePath);
388
+ if (analysis) {
389
+ results.push(analysis);
390
+ }
391
+ }
392
+ return results;
393
+ }
394
+ //# sourceMappingURL=ast-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-parser.js","sourceRoot":"","sources":["../../src/utils/ast-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Resolve the best source directory for a given app root.
3
+ * Handles CRA/Vite (src/), Next.js app router (app/), Next.js pages router (pages/),
4
+ * and apps where source is at root level.
5
+ */
6
+ export declare function resolveSourceDir(appPath: string): string;
7
+ /**
8
+ * Find all JS/JSX/TS/TSX files in a directory
9
+ */
10
+ export declare function findSourceFiles(rootDir: string): Promise<string[]>;
11
+ /**
12
+ * Find component files (files that likely export React components)
13
+ */
14
+ export declare function findComponentFiles(rootDir: string): Promise<string[]>;
15
+ /**
16
+ * Find CSS/SCSS/Less/style files
17
+ */
18
+ export declare function findStyleFiles(rootDir: string): Promise<string[]>;
19
+ /**
20
+ * Find asset files (images, videos, fonts)
21
+ */
22
+ export declare function findAssetFiles(rootDir: string): Promise<string[]>;
23
+ /**
24
+ * Get file size in bytes
25
+ */
26
+ export declare function getFileSize(filePath: string): number;
27
+ /**
28
+ * Read file content safely
29
+ */
30
+ export declare function readFileContent(filePath: string): string | null;
31
+ /**
32
+ * Check if a file exists
33
+ */
34
+ export declare function fileExists(filePath: string): boolean;
35
+ /**
36
+ * Get all directories at a specific depth from root
37
+ */
38
+ export declare function getDirectoriesAtDepth(rootDir: string, maxDepth?: number): string[];
39
+ /**
40
+ * Calculate directory nesting depth
41
+ */
42
+ export declare function calculateMaxDepth(rootDir: string): number;
43
+ /**
44
+ * Read package.json from a directory
45
+ */
46
+ export declare function readPackageJson(rootDir: string): Record<string, unknown> | null;
47
+ /**
48
+ * Check if directory contains specific config files
49
+ */
50
+ export declare function hasConfigFile(rootDir: string, filenames: string[]): boolean;
51
+ //# sourceMappingURL=file-scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-scanner.d.ts","sourceRoot":"","sources":["../../src/utils/file-scanner.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAcxD;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAqBxE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAO3E;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CASvE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAavE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOpD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM/D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAW,GAAG,MAAM,EAAE,CAuBtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAS/E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAE3E"}
@@ -0,0 +1,174 @@
1
+ // ============================================================================
2
+ // FILE SCANNER - File discovery utilities using glob patterns
3
+ // ============================================================================
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
6
+ import { glob } from 'glob';
7
+ /**
8
+ * Resolve the best source directory for a given app root.
9
+ * Handles CRA/Vite (src/), Next.js app router (app/), Next.js pages router (pages/),
10
+ * and apps where source is at root level.
11
+ */
12
+ export function resolveSourceDir(appPath) {
13
+ // Priority: src/ > app/ (Next.js app router) > pages/ > root
14
+ for (const candidate of ['src', 'app', 'pages']) {
15
+ const dir = path.join(appPath, candidate);
16
+ if (fs.existsSync(dir) && fs.statSync(dir).isDirectory()) {
17
+ // Sanity check: must have at least one source file
18
+ const entries = fs.readdirSync(dir);
19
+ if (entries.some((e) => /\.(tsx?|jsx?)$/.test(e) || fs.statSync(path.join(dir, e)).isDirectory())) {
20
+ return dir;
21
+ }
22
+ }
23
+ }
24
+ // Fallback to src even if doesn't exist (will be empty)
25
+ return path.join(appPath, 'src');
26
+ }
27
+ /**
28
+ * Find all JS/JSX/TS/TSX files in a directory
29
+ */
30
+ export async function findSourceFiles(rootDir) {
31
+ const patterns = ['**/*.{js,jsx,ts,tsx}'];
32
+ const ignore = [
33
+ '**/node_modules/**',
34
+ '**/build/**',
35
+ '**/dist/**',
36
+ '**/.git/**',
37
+ '**/coverage/**',
38
+ '**/*.test.{js,jsx,ts,tsx}',
39
+ '**/*.spec.{js,jsx,ts,tsx}',
40
+ '**/*.stories.{js,jsx,ts,tsx}',
41
+ '**/*.d.ts',
42
+ ];
43
+ const files = await glob(patterns, {
44
+ cwd: rootDir,
45
+ ignore,
46
+ absolute: true,
47
+ });
48
+ return files.sort();
49
+ }
50
+ /**
51
+ * Find component files (files that likely export React components)
52
+ */
53
+ export async function findComponentFiles(rootDir) {
54
+ const allFiles = await findSourceFiles(rootDir);
55
+ return allFiles.filter((f) => {
56
+ const basename = path.basename(f, path.extname(f));
57
+ // Components typically start with uppercase
58
+ return /^[A-Z]/.test(basename);
59
+ });
60
+ }
61
+ /**
62
+ * Find CSS/SCSS/Less/style files
63
+ */
64
+ export async function findStyleFiles(rootDir) {
65
+ const patterns = ['**/*.{css,scss,less,sass,module.css,module.scss}'];
66
+ const ignore = ['**/node_modules/**', '**/build/**', '**/dist/**'];
67
+ return glob(patterns, {
68
+ cwd: rootDir,
69
+ ignore,
70
+ absolute: true,
71
+ });
72
+ }
73
+ /**
74
+ * Find asset files (images, videos, fonts)
75
+ */
76
+ export async function findAssetFiles(rootDir) {
77
+ const patterns = [
78
+ '**/*.{png,jpg,jpeg,gif,svg,webp,ico,bmp}',
79
+ '**/*.{mp4,webm,ogg,avi,mov}',
80
+ '**/*.{woff,woff2,ttf,eot,otf}',
81
+ ];
82
+ const ignore = ['**/node_modules/**', '**/build/**', '**/dist/**'];
83
+ return glob(patterns, {
84
+ cwd: rootDir,
85
+ ignore,
86
+ absolute: true,
87
+ });
88
+ }
89
+ /**
90
+ * Get file size in bytes
91
+ */
92
+ export function getFileSize(filePath) {
93
+ try {
94
+ const stats = fs.statSync(filePath);
95
+ return stats.size;
96
+ }
97
+ catch {
98
+ return 0;
99
+ }
100
+ }
101
+ /**
102
+ * Read file content safely
103
+ */
104
+ export function readFileContent(filePath) {
105
+ try {
106
+ return fs.readFileSync(filePath, 'utf-8');
107
+ }
108
+ catch {
109
+ return null;
110
+ }
111
+ }
112
+ /**
113
+ * Check if a file exists
114
+ */
115
+ export function fileExists(filePath) {
116
+ return fs.existsSync(filePath);
117
+ }
118
+ /**
119
+ * Get all directories at a specific depth from root
120
+ */
121
+ export function getDirectoriesAtDepth(rootDir, maxDepth = 10) {
122
+ const dirs = [];
123
+ function walk(currentDir, depth) {
124
+ if (depth > maxDepth)
125
+ return;
126
+ try {
127
+ const entries = fs.readdirSync(currentDir, { withFileTypes: true });
128
+ for (const entry of entries) {
129
+ if (entry.isDirectory() && entry.name !== 'node_modules' && entry.name !== '.git') {
130
+ const fullPath = path.join(currentDir, entry.name);
131
+ const relativePath = path.relative(rootDir, fullPath);
132
+ dirs.push(relativePath);
133
+ walk(fullPath, depth + 1);
134
+ }
135
+ }
136
+ }
137
+ catch {
138
+ // Skip unreadable directories
139
+ }
140
+ }
141
+ walk(rootDir, 1);
142
+ return dirs;
143
+ }
144
+ /**
145
+ * Calculate directory nesting depth
146
+ */
147
+ export function calculateMaxDepth(rootDir) {
148
+ const dirs = getDirectoriesAtDepth(rootDir, 20);
149
+ if (dirs.length === 0)
150
+ return 0;
151
+ return Math.max(...dirs.map((d) => d.split(path.sep).length));
152
+ }
153
+ /**
154
+ * Read package.json from a directory
155
+ */
156
+ export function readPackageJson(rootDir) {
157
+ const pkgPath = path.join(rootDir, 'package.json');
158
+ const content = readFileContent(pkgPath);
159
+ if (!content)
160
+ return null;
161
+ try {
162
+ return JSON.parse(content);
163
+ }
164
+ catch {
165
+ return null;
166
+ }
167
+ }
168
+ /**
169
+ * Check if directory contains specific config files
170
+ */
171
+ export function hasConfigFile(rootDir, filenames) {
172
+ return filenames.some((f) => fileExists(path.join(rootDir, f)));
173
+ }
174
+ //# sourceMappingURL=file-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-scanner.js","sourceRoot":"","sources":["../../src/utils/file-scanner.ts"],"names":[],"mappings":"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"}