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.
- package/README.md +146 -42
- package/package.json +12 -4
- package/tools/accessibility-checker/build/index.js +9 -5
- package/tools/accessibility-checker/build/index.js.map +1 -1
- package/tools/accessibility-checker/build/rules.d.ts.map +1 -1
- package/tools/accessibility-checker/build/rules.js +325 -94
- package/tools/accessibility-checker/build/rules.js.map +1 -1
- package/tools/code-modernizer/build/tools/01-convert-to-typescript.d.ts.map +1 -1
- package/tools/code-modernizer/build/tools/01-convert-to-typescript.js +65 -50
- package/tools/code-modernizer/build/tools/01-convert-to-typescript.js.map +1 -1
- package/tools/code-modernizer/build/types.d.ts +1 -0
- package/tools/code-modernizer/build/types.d.ts.map +1 -1
- package/tools/code-modernizer/build/utils/ast-parser.d.ts.map +1 -1
- package/tools/code-modernizer/build/utils/ast-parser.js +30 -14
- package/tools/code-modernizer/build/utils/ast-parser.js.map +1 -1
- package/tools/code-modernizer/build/utils/type-generator.d.ts +1 -1
- package/tools/code-modernizer/build/utils/type-generator.d.ts.map +1 -1
- package/tools/code-modernizer/build/utils/type-generator.js +72 -23
- package/tools/code-modernizer/build/utils/type-generator.js.map +1 -1
- package/tools/component-factory/build/index.js +59 -7
- package/tools/component-factory/build/index.js.map +1 -1
- package/tools/component-fixer/README.md +44 -0
- package/tools/component-fixer/build/index.d.ts +3 -0
- package/tools/component-fixer/build/index.d.ts.map +1 -0
- package/tools/component-fixer/build/index.js +647 -0
- package/tools/component-fixer/build/index.js.map +1 -0
- package/tools/component-fixer/build/index.test.d.ts +2 -0
- package/tools/component-fixer/build/index.test.d.ts.map +1 -0
- package/tools/component-fixer/build/index.test.js.map +1 -0
- package/tools/component-fixer/package.json +20 -0
- package/tools/component-reviewer/README.md +54 -0
- package/tools/component-reviewer/build/index.d.ts +39 -0
- package/tools/component-reviewer/build/index.d.ts.map +1 -0
- package/tools/component-reviewer/build/index.js +946 -0
- package/tools/component-reviewer/build/index.js.map +1 -0
- package/tools/component-reviewer/build/index.test.d.ts +2 -0
- package/tools/component-reviewer/build/index.test.d.ts.map +1 -0
- package/tools/component-reviewer/build/index.test.js.map +1 -0
- package/tools/component-reviewer/package.json +20 -0
- package/tools/dep-auditor/build/index.d.ts +1 -0
- package/tools/dep-auditor/build/index.d.ts.map +1 -1
- package/tools/dep-auditor/build/index.js +71 -16
- package/tools/dep-auditor/build/index.js.map +1 -1
- package/tools/generate-tests/build/analyzer.d.ts +14 -0
- package/tools/generate-tests/build/analyzer.d.ts.map +1 -1
- package/tools/generate-tests/build/analyzer.js +96 -42
- package/tools/generate-tests/build/analyzer.js.map +1 -1
- package/tools/generate-tests/build/generators.d.ts.map +1 -1
- package/tools/generate-tests/build/generators.js +304 -79
- package/tools/generate-tests/build/generators.js.map +1 -1
- package/tools/generate-tests/build/index.js +29 -10
- package/tools/generate-tests/build/index.js.map +1 -1
- package/tools/json-viewer/build/index.js +29 -6
- package/tools/json-viewer/build/index.js.map +1 -1
- package/tools/legacy-analyzer/README.md +66 -0
- package/tools/legacy-analyzer/build/index.d.ts +3 -0
- package/tools/legacy-analyzer/build/index.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/index.js +209 -0
- package/tools/legacy-analyzer/build/index.js.map +1 -0
- package/tools/legacy-analyzer/build/index.test.d.ts +2 -0
- package/tools/legacy-analyzer/build/index.test.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/index.test.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/01-detect-project-tech.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/01-detect-project-tech.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/01-detect-project-tech.js +115 -0
- package/tools/legacy-analyzer/build/tools/01-detect-project-tech.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/02-analyze-folder-structure.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/02-analyze-folder-structure.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/02-analyze-folder-structure.js +85 -0
- package/tools/legacy-analyzer/build/tools/02-analyze-folder-structure.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/03-analyze-components.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/03-analyze-components.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/03-analyze-components.js +87 -0
- package/tools/legacy-analyzer/build/tools/03-analyze-components.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/04-analyze-state-management.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/04-analyze-state-management.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/04-analyze-state-management.js +133 -0
- package/tools/legacy-analyzer/build/tools/04-analyze-state-management.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/05-analyze-api-layer.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/05-analyze-api-layer.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/05-analyze-api-layer.js +160 -0
- package/tools/legacy-analyzer/build/tools/05-analyze-api-layer.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/06-analyze-routing.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/06-analyze-routing.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/06-analyze-routing.js +150 -0
- package/tools/legacy-analyzer/build/tools/06-analyze-routing.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/07-analyze-styling.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/07-analyze-styling.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/07-analyze-styling.js +131 -0
- package/tools/legacy-analyzer/build/tools/07-analyze-styling.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/08-analyze-assets.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/08-analyze-assets.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/08-analyze-assets.js +85 -0
- package/tools/legacy-analyzer/build/tools/08-analyze-assets.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/09-detect-anti-patterns.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/09-detect-anti-patterns.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/09-detect-anti-patterns.js +329 -0
- package/tools/legacy-analyzer/build/tools/09-detect-anti-patterns.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/10-detect-duplication.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/10-detect-duplication.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/10-detect-duplication.js +192 -0
- package/tools/legacy-analyzer/build/tools/10-detect-duplication.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/11-analyze-dependencies-usage.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/11-analyze-dependencies-usage.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/11-analyze-dependencies-usage.js +232 -0
- package/tools/legacy-analyzer/build/tools/11-analyze-dependencies-usage.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/12-analyze-legacy-app.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/12-analyze-legacy-app.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/12-analyze-legacy-app.js +247 -0
- package/tools/legacy-analyzer/build/tools/12-analyze-legacy-app.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/13-detect-features.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/13-detect-features.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/13-detect-features.js +141 -0
- package/tools/legacy-analyzer/build/tools/13-detect-features.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/14-classify-files.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/14-classify-files.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/14-classify-files.js +76 -0
- package/tools/legacy-analyzer/build/tools/14-classify-files.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/15-detect-shared-modules.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/15-detect-shared-modules.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/15-detect-shared-modules.js +70 -0
- package/tools/legacy-analyzer/build/tools/15-detect-shared-modules.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/16-design-target-structure.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/16-design-target-structure.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/16-design-target-structure.js +26 -0
- package/tools/legacy-analyzer/build/tools/16-design-target-structure.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/17-map-files-to-target.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/17-map-files-to-target.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/17-map-files-to-target.js +108 -0
- package/tools/legacy-analyzer/build/tools/17-map-files-to-target.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/18-detect-boundary-violations.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/18-detect-boundary-violations.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/18-detect-boundary-violations.js +137 -0
- package/tools/legacy-analyzer/build/tools/18-detect-boundary-violations.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/19-suggest-module-splitting.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/19-suggest-module-splitting.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/19-suggest-module-splitting.js +160 -0
- package/tools/legacy-analyzer/build/tools/19-suggest-module-splitting.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/20-naming-standardizer.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/20-naming-standardizer.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/20-naming-standardizer.js +162 -0
- package/tools/legacy-analyzer/build/tools/20-naming-standardizer.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/21-generate-refactor-plan.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/21-generate-refactor-plan.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/21-generate-refactor-plan.js +108 -0
- package/tools/legacy-analyzer/build/tools/21-generate-refactor-plan.js.map +1 -0
- package/tools/legacy-analyzer/build/tools/22-refactor-folder-structure.d.ts +3 -0
- package/tools/legacy-analyzer/build/tools/22-refactor-folder-structure.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/tools/22-refactor-folder-structure.js +98 -0
- package/tools/legacy-analyzer/build/tools/22-refactor-folder-structure.js.map +1 -0
- package/tools/legacy-analyzer/build/types.d.ts +413 -0
- package/tools/legacy-analyzer/build/types.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/types.js +12 -0
- package/tools/legacy-analyzer/build/types.js.map +1 -0
- package/tools/legacy-analyzer/build/utils/ast-parser.d.ts +34 -0
- package/tools/legacy-analyzer/build/utils/ast-parser.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/utils/ast-parser.js +394 -0
- package/tools/legacy-analyzer/build/utils/ast-parser.js.map +1 -0
- package/tools/legacy-analyzer/build/utils/file-scanner.d.ts +51 -0
- package/tools/legacy-analyzer/build/utils/file-scanner.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/utils/file-scanner.js +174 -0
- package/tools/legacy-analyzer/build/utils/file-scanner.js.map +1 -0
- package/tools/legacy-analyzer/build/utils/import-tracker.d.ts +38 -0
- package/tools/legacy-analyzer/build/utils/import-tracker.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/utils/import-tracker.js +194 -0
- package/tools/legacy-analyzer/build/utils/import-tracker.js.map +1 -0
- package/tools/legacy-analyzer/build/utils/refactor-helpers.d.ts +88 -0
- package/tools/legacy-analyzer/build/utils/refactor-helpers.d.ts.map +1 -0
- package/tools/legacy-analyzer/build/utils/refactor-helpers.js +538 -0
- package/tools/legacy-analyzer/build/utils/refactor-helpers.js.map +1 -0
- package/tools/legacy-analyzer/package.json +20 -0
- package/tools/lighthouse-runner/README.md +45 -0
- package/tools/lighthouse-runner/build/index.d.ts +6 -0
- package/tools/lighthouse-runner/build/index.d.ts.map +1 -0
- package/tools/lighthouse-runner/build/index.js +295 -0
- package/tools/lighthouse-runner/build/index.js.map +1 -0
- package/tools/lighthouse-runner/build/index.test.d.ts +2 -0
- package/tools/lighthouse-runner/build/index.test.d.ts.map +1 -0
- package/tools/lighthouse-runner/build/index.test.js.map +1 -0
- package/tools/lighthouse-runner/package.json +20 -0
- package/tools/monorepo-manager/build/utils.d.ts.map +1 -1
- package/tools/monorepo-manager/build/utils.js +12 -9
- package/tools/monorepo-manager/build/utils.js.map +1 -1
- package/tools/performance-audit/README.md +37 -0
- package/tools/performance-audit/build/index.d.ts +13 -0
- package/tools/performance-audit/build/index.d.ts.map +1 -0
- package/tools/performance-audit/build/index.js +311 -0
- package/tools/performance-audit/build/index.js.map +1 -0
- package/tools/performance-audit/build/index.test.d.ts +2 -0
- package/tools/performance-audit/build/index.test.d.ts.map +1 -0
- package/tools/performance-audit/build/index.test.js.map +1 -0
- package/tools/performance-audit/package.json +20 -0
- package/tools/quality-pipeline/build/index.js +55 -15
- package/tools/quality-pipeline/build/index.js.map +1 -1
- package/tools/render-analyzer/README.md +43 -0
- package/tools/render-analyzer/build/index.d.ts +25 -0
- package/tools/render-analyzer/build/index.d.ts.map +1 -0
- package/tools/render-analyzer/build/index.js +342 -0
- package/tools/render-analyzer/build/index.js.map +1 -0
- package/tools/render-analyzer/build/index.test.d.ts +2 -0
- package/tools/render-analyzer/build/index.test.d.ts.map +1 -0
- package/tools/render-analyzer/build/index.test.js.map +1 -0
- package/tools/render-analyzer/package.json +20 -0
- package/tools/shared/build/fs.d.ts +8 -0
- package/tools/shared/build/fs.d.ts.map +1 -0
- package/tools/shared/build/fs.js +45 -0
- package/tools/shared/build/fs.js.map +1 -0
- package/tools/shared/build/index.d.ts +1 -0
- package/tools/shared/build/index.d.ts.map +1 -1
- package/tools/shared/build/index.js +1 -0
- package/tools/shared/build/index.js.map +1 -1
- package/tools/storybook-generator/README.md +39 -0
- package/tools/storybook-generator/build/index.d.ts +13 -0
- package/tools/storybook-generator/build/index.d.ts.map +1 -0
- package/tools/storybook-generator/build/index.js +478 -0
- package/tools/storybook-generator/build/index.js.map +1 -0
- package/tools/storybook-generator/build/index.test.d.ts +2 -0
- package/tools/storybook-generator/build/index.test.d.ts.map +1 -0
- package/tools/storybook-generator/build/index.test.js.map +1 -0
- package/tools/storybook-generator/package.json +20 -0
- package/tools/test-gap-analyzer/README.md +41 -0
- package/tools/test-gap-analyzer/build/index.d.ts +20 -0
- package/tools/test-gap-analyzer/build/index.d.ts.map +1 -0
- package/tools/test-gap-analyzer/build/index.js +371 -0
- package/tools/test-gap-analyzer/build/index.js.map +1 -0
- package/tools/test-gap-analyzer/build/index.test.d.ts +2 -0
- package/tools/test-gap-analyzer/build/index.test.d.ts.map +1 -0
- package/tools/test-gap-analyzer/build/index.test.js.map +1 -0
- package/tools/test-gap-analyzer/package.json +20 -0
- package/tools/typescript-enforcer/build/scanner.d.ts.map +1 -1
- package/tools/typescript-enforcer/build/scanner.js +13 -1
- package/tools/typescript-enforcer/build/scanner.js.map +1 -1
- package/tools/typescript-enforcer/build/types.d.ts +1 -0
- package/tools/typescript-enforcer/build/types.d.ts.map +1 -1
- package/mcp-publisher +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { McpServerBase } from '@mcp-showcase/shared';
|
|
2
|
+
import { McpServerBase, safeReadJson } from '@mcp-showcase/shared';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import * as path from 'path';
|
|
5
5
|
import * as os from 'os';
|
|
@@ -176,6 +176,28 @@ class JsonViewerServer extends McpServerBase {
|
|
|
176
176
|
},
|
|
177
177
|
required: ['data'],
|
|
178
178
|
}, this.handleViewJson.bind(this));
|
|
179
|
+
this.addTool('view_json_file', 'Read a JSON file from disk and open an interactive HTML viewer — no need to paste raw JSON.', {
|
|
180
|
+
type: 'object',
|
|
181
|
+
properties: {
|
|
182
|
+
path: { type: 'string', description: 'Absolute or relative path to the JSON file' },
|
|
183
|
+
label: { type: 'string', description: 'Label for this viewer (defaults to the filename)' },
|
|
184
|
+
open: { type: 'boolean', description: 'Automatically open in browser (default: true)', default: true },
|
|
185
|
+
},
|
|
186
|
+
required: ['path'],
|
|
187
|
+
}, async (args) => {
|
|
188
|
+
const { path: filePath, label, open = true } = args;
|
|
189
|
+
try {
|
|
190
|
+
const resolved = path.resolve(filePath);
|
|
191
|
+
if (!fs.existsSync(resolved))
|
|
192
|
+
throw new Error(`File not found: ${resolved}`);
|
|
193
|
+
const raw = fs.readFileSync(resolved, 'utf-8');
|
|
194
|
+
const derivedLabel = label ?? path.basename(resolved);
|
|
195
|
+
return this.handleViewJson({ data: raw, label: derivedLabel, open });
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
return this.error(error);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
179
201
|
this.addTool('list_responses', 'List all saved JSON responses with timestamps and metadata.', {
|
|
180
202
|
type: 'object',
|
|
181
203
|
properties: {
|
|
@@ -244,10 +266,9 @@ class JsonViewerServer extends McpServerBase {
|
|
|
244
266
|
.sort().reverse().slice(0, limit);
|
|
245
267
|
const responses = [];
|
|
246
268
|
for (const file of files) {
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
catch { /* skip corrupted */ }
|
|
269
|
+
const entry = safeReadJson(path.join(RESPONSES_DIR, file));
|
|
270
|
+
if (entry)
|
|
271
|
+
responses.push(entry);
|
|
251
272
|
}
|
|
252
273
|
return this.success({ total: responses.length, responses });
|
|
253
274
|
}
|
|
@@ -262,7 +283,9 @@ class JsonViewerServer extends McpServerBase {
|
|
|
262
283
|
const metaPath = path.join(RESPONSES_DIR, `${id}.meta.json`);
|
|
263
284
|
if (!fs.existsSync(metaPath))
|
|
264
285
|
throw new Error(`Response not found: ${id}`);
|
|
265
|
-
const meta =
|
|
286
|
+
const meta = safeReadJson(metaPath);
|
|
287
|
+
if (!meta)
|
|
288
|
+
throw new Error(`Could not read metadata for: ${id}`);
|
|
266
289
|
if (!fs.existsSync(meta.htmlPath))
|
|
267
290
|
throw new Error(`HTML viewer not found for: ${id}`);
|
|
268
291
|
const cmd = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# legacy-analyzer
|
|
2
|
+
|
|
3
|
+
MCP server with 22 analysis sub-tools that produce a health score (0–100) and prioritized migration hints for any React-based app — CRA, Vite, Next.js (app or pages router), Remix, Gatsby.
|
|
4
|
+
|
|
5
|
+
## Tools (22)
|
|
6
|
+
|
|
7
|
+
| Tool | What it does |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `analyze-legacy-app` | Run all 22 tools and produce a unified health report |
|
|
10
|
+
| `detect-project-tech` | Detect React version, language, framework, major deps |
|
|
11
|
+
| `analyze-folder-structure` | Flat vs feature-based, standard folders, nesting depth |
|
|
12
|
+
| `analyze-components` | Count, large (>300L), complex (multiple responsibilities) |
|
|
13
|
+
| `analyze-state-management` | Redux, Context, Zustand, local state patterns |
|
|
14
|
+
| `analyze-api-layer` | HTTP clients, centralized vs scattered, duplicate endpoints |
|
|
15
|
+
| `analyze-routing` | Router library, flat vs nested, lazy loading |
|
|
16
|
+
| `analyze-styling` | CSS/SCSS/Tailwind, inline styles, hardcoded colors |
|
|
17
|
+
| `analyze-assets` | Large images/videos, assets inside src, unused assets |
|
|
18
|
+
| `detect-anti-patterns` | Prop drilling, tight coupling, god components, a11y |
|
|
19
|
+
| `detect-duplication` | Duplicate components (Jaccard similarity), duplicate utils |
|
|
20
|
+
| `analyze-dependencies-usage` | Import anti-patterns, UI package usage |
|
|
21
|
+
| `detect-features` | Identify logical domains via file names + import clustering |
|
|
22
|
+
| `classify-files` | Feature-specific vs shared vs utility vs config |
|
|
23
|
+
| `detect-shared-modules` | Files imported by multiple features |
|
|
24
|
+
| `design-target-structure` | Suggest scalable feature-based folder structure |
|
|
25
|
+
| `map-files-to-target` | Map current files to proposed structure |
|
|
26
|
+
| `detect-boundary-violations` | Cross-feature imports, deep relative imports |
|
|
27
|
+
| `suggest-module-splitting` | Split large/generic files into focused modules |
|
|
28
|
+
| `naming-standardizer` | Suggest consistent file and folder naming |
|
|
29
|
+
| `generate-refactor-plan` | Combine all outputs into a structured refactor plan |
|
|
30
|
+
| `refactor-folder-structure` | Aggregated restructure plan |
|
|
31
|
+
|
|
32
|
+
## Usage
|
|
33
|
+
|
|
34
|
+
```sh
|
|
35
|
+
# Full health audit
|
|
36
|
+
echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"analyze-legacy-app","arguments":{"path":"/path/to/your/app"}}}' \
|
|
37
|
+
| node build/index.js
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Output
|
|
41
|
+
|
|
42
|
+
```json
|
|
43
|
+
{
|
|
44
|
+
"success": true,
|
|
45
|
+
"summary": { "healthScore": 72, "totalIssues": 18 },
|
|
46
|
+
"tech": { "framework": "Next.js", "reactVersion": "18", "language": "TypeScript" },
|
|
47
|
+
"migrationHints": [
|
|
48
|
+
{ "priority": "high", "category": "API Layer", "description": "..." }
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Framework support
|
|
54
|
+
|
|
55
|
+
Automatically detects the correct source directory:
|
|
56
|
+
- `src/` → CRA, Vite
|
|
57
|
+
- `app/` → Next.js App Router
|
|
58
|
+
- `pages/` → Next.js Pages Router
|
|
59
|
+
- root → bare React projects
|
|
60
|
+
|
|
61
|
+
## Build & test
|
|
62
|
+
|
|
63
|
+
```sh
|
|
64
|
+
npm run build
|
|
65
|
+
npm test
|
|
66
|
+
```
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { McpServerBase } from '@mcp-showcase/shared';
|
|
3
|
+
import { detectProjectTech } from './tools/01-detect-project-tech.js';
|
|
4
|
+
import { analyzeFolderStructure } from './tools/02-analyze-folder-structure.js';
|
|
5
|
+
import { analyzeComponents } from './tools/03-analyze-components.js';
|
|
6
|
+
import { analyzeStateManagement } from './tools/04-analyze-state-management.js';
|
|
7
|
+
import { analyzeApiLayer } from './tools/05-analyze-api-layer.js';
|
|
8
|
+
import { analyzeRouting } from './tools/06-analyze-routing.js';
|
|
9
|
+
import { analyzeStyling } from './tools/07-analyze-styling.js';
|
|
10
|
+
import { analyzeAssets } from './tools/08-analyze-assets.js';
|
|
11
|
+
import { detectAntiPatterns } from './tools/09-detect-anti-patterns.js';
|
|
12
|
+
import { detectDuplication } from './tools/10-detect-duplication.js';
|
|
13
|
+
import { analyzeDependenciesUsage } from './tools/11-analyze-dependencies-usage.js';
|
|
14
|
+
import { analyzeLegacyApp } from './tools/12-analyze-legacy-app.js';
|
|
15
|
+
import { detectFeatures } from './tools/13-detect-features.js';
|
|
16
|
+
import { classifyFiles } from './tools/14-classify-files.js';
|
|
17
|
+
import { detectSharedModules } from './tools/15-detect-shared-modules.js';
|
|
18
|
+
import { designTargetStructure } from './tools/16-design-target-structure.js';
|
|
19
|
+
import { mapFilesToTarget } from './tools/17-map-files-to-target.js';
|
|
20
|
+
import { detectBoundaryViolations } from './tools/18-detect-boundary-violations.js';
|
|
21
|
+
import { suggestModuleSplitting } from './tools/19-suggest-module-splitting.js';
|
|
22
|
+
import { namingStandardizer } from './tools/20-naming-standardizer.js';
|
|
23
|
+
import { generateRefactorPlan } from './tools/21-generate-refactor-plan.js';
|
|
24
|
+
import { refactorFolderStructure } from './tools/22-refactor-folder-structure.js';
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// TOOL DEFINITIONS
|
|
27
|
+
// ============================================================================
|
|
28
|
+
const CONFIG_SCHEMA = {
|
|
29
|
+
type: 'object',
|
|
30
|
+
description: 'Optional configuration overrides',
|
|
31
|
+
properties: {
|
|
32
|
+
largeComponentLines: { type: 'number', description: 'Line count threshold for large components (default: 300)' },
|
|
33
|
+
largeUtilLines: { type: 'number', description: 'Line count threshold for large utility files (default: 200)' },
|
|
34
|
+
largeAssetImageKB: { type: 'number', description: 'Size threshold in KB for large images (default: 100)' },
|
|
35
|
+
largeAssetVideoMB: { type: 'number', description: 'Size threshold in MB for large videos (default: 1)' },
|
|
36
|
+
propDrillingDepth: { type: 'number', description: 'Depth threshold for prop drilling detection (default: 3)' },
|
|
37
|
+
duplicationThreshold: { type: 'number', description: 'Similarity threshold 0-1 for duplication detection (default: 0.8)' },
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
const TOOLS = [
|
|
41
|
+
{
|
|
42
|
+
name: 'detect-project-tech',
|
|
43
|
+
description: 'Detect React version, language (JS/TS), framework (CRA/Vite/Next.js/Remix/Gatsby/React Native), and major dependencies',
|
|
44
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'analyze-folder-structure',
|
|
48
|
+
description: 'Analyze folder structure: flat vs feature-based, presence of standard folders, nesting depth',
|
|
49
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
name: 'analyze-components',
|
|
53
|
+
description: 'Scan all components: count, large components (>300 lines), complex components with multiple responsibilities',
|
|
54
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'analyze-state-management',
|
|
58
|
+
description: 'Detect Redux, Context API, local state patterns, normalized state, derived state, Reselect usage',
|
|
59
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: 'analyze-api-layer',
|
|
63
|
+
description: 'Detect HTTP client usage (axios/fetch/superagent/ky), Next.js API routes, centralized vs scattered pattern, endpoint duplication',
|
|
64
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'analyze-routing',
|
|
68
|
+
description: 'Detect react-router usage, route structure (flat vs nested), lazy loading usage',
|
|
69
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
name: 'analyze-styling',
|
|
73
|
+
description: 'Detect CSS/SCSS/Tailwind/styled-components, inline styles, hardcoded colors, duplicate classes',
|
|
74
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'analyze-assets',
|
|
78
|
+
description: 'Detect large images/videos, assets inside src, unused assets',
|
|
79
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
name: 'detect-anti-patterns',
|
|
83
|
+
description: 'Detect prop drilling, tight coupling, duplicated logic, large utility files, god components',
|
|
84
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'detect-duplication',
|
|
88
|
+
description: 'Detect duplicate components, duplicate utility functions, similar file structures',
|
|
89
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
name: 'analyze-dependencies-usage',
|
|
93
|
+
description: 'Deep analysis of external libraries, internal imports, UI package usage, import anti-patterns',
|
|
94
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
name: 'analyze-legacy-app',
|
|
98
|
+
description: 'Complete analysis for any React-based app (CRA, Vite, Next.js, Remix, Gatsby). Runs all 22 sub-tools and produces a unified health score (0-100) with prioritized migration hints.',
|
|
99
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: 'detect-features',
|
|
103
|
+
description: 'Identify logical features/domains in the app using file names, routing, folder grouping, and import clustering',
|
|
104
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: 'classify-files',
|
|
108
|
+
description: 'Classify each file into feature-specific, shared, utility, or config type',
|
|
109
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
name: 'detect-shared-modules',
|
|
113
|
+
description: 'Identify files used across multiple features (shared modules)',
|
|
114
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: 'design-target-structure',
|
|
118
|
+
description: 'Generate scalable folder structure suggestion based on feature-based architecture',
|
|
119
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
name: 'map-files-to-target',
|
|
123
|
+
description: 'Map existing files to new target structure',
|
|
124
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: 'detect-boundary-violations',
|
|
128
|
+
description: 'Detect cross-feature imports, deep relative imports, and tight coupling issues',
|
|
129
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: 'suggest-module-splitting',
|
|
133
|
+
description: 'Suggest splitting large or generic files into smaller modules',
|
|
134
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
name: 'naming-standardizer',
|
|
138
|
+
description: 'Suggest better file and folder naming conventions',
|
|
139
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
name: 'generate-refactor-plan',
|
|
143
|
+
description: 'Combine all analysis outputs into a single structured refactor plan',
|
|
144
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
name: 'refactor-folder-structure',
|
|
148
|
+
description: 'Aggregator: calls all refactoring suggestion tools and produces final structured plan',
|
|
149
|
+
inputSchema: { type: 'object', properties: { path: { type: 'string', description: 'Path to app root directory (CRA, Vite, Next.js, Remix, Gatsby, plain React)' }, config: CONFIG_SCHEMA }, required: ['path'] },
|
|
150
|
+
},
|
|
151
|
+
];
|
|
152
|
+
const HANDLERS = {
|
|
153
|
+
'detect-project-tech': detectProjectTech,
|
|
154
|
+
'analyze-folder-structure': analyzeFolderStructure,
|
|
155
|
+
'analyze-components': analyzeComponents,
|
|
156
|
+
'analyze-state-management': analyzeStateManagement,
|
|
157
|
+
'analyze-api-layer': analyzeApiLayer,
|
|
158
|
+
'analyze-routing': analyzeRouting,
|
|
159
|
+
'analyze-styling': analyzeStyling,
|
|
160
|
+
'analyze-assets': analyzeAssets,
|
|
161
|
+
'detect-anti-patterns': detectAntiPatterns,
|
|
162
|
+
'detect-duplication': detectDuplication,
|
|
163
|
+
'analyze-dependencies-usage': analyzeDependenciesUsage,
|
|
164
|
+
'analyze-legacy-app': analyzeLegacyApp,
|
|
165
|
+
'detect-features': detectFeatures,
|
|
166
|
+
'classify-files': classifyFiles,
|
|
167
|
+
'detect-shared-modules': detectSharedModules,
|
|
168
|
+
'design-target-structure': designTargetStructure,
|
|
169
|
+
'map-files-to-target': mapFilesToTarget,
|
|
170
|
+
'detect-boundary-violations': detectBoundaryViolations,
|
|
171
|
+
'suggest-module-splitting': suggestModuleSplitting,
|
|
172
|
+
'naming-standardizer': namingStandardizer,
|
|
173
|
+
'generate-refactor-plan': generateRefactorPlan,
|
|
174
|
+
'refactor-folder-structure': refactorFolderStructure,
|
|
175
|
+
};
|
|
176
|
+
// ============================================================================
|
|
177
|
+
// SERVER
|
|
178
|
+
// ============================================================================
|
|
179
|
+
class LegacyAnalyzerServer extends McpServerBase {
|
|
180
|
+
constructor() {
|
|
181
|
+
super({ name: 'legacy-analyzer', version: '1.0.0' });
|
|
182
|
+
}
|
|
183
|
+
registerTools() {
|
|
184
|
+
for (const tool of TOOLS) {
|
|
185
|
+
const toolName = tool.name;
|
|
186
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
187
|
+
this.addTool(toolName, tool.description, tool.inputSchema, (args) => this.dispatchTool(toolName, args));
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
async dispatchTool(name, args) {
|
|
191
|
+
const { path: appPath, config } = args;
|
|
192
|
+
const handler = HANDLERS[name];
|
|
193
|
+
if (!handler) {
|
|
194
|
+
return this.error(new Error(`Unknown tool: ${name}`));
|
|
195
|
+
}
|
|
196
|
+
try {
|
|
197
|
+
const result = await handler(appPath, config);
|
|
198
|
+
return this.success(result);
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
return this.error(error);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
// ============================================================================
|
|
206
|
+
// ENTRY POINT
|
|
207
|
+
// ============================================================================
|
|
208
|
+
new LegacyAnalyzerServer().run().catch(console.error);
|
|
209
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"01-detect-project-tech.d.ts","sourceRoot":"","sources":["../../src/tools/01-detect-project-tech.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAkB,MAAM,aAAa,CAAC;AAiCrF,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA6ErH"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// TOOL #1: detect-project-tech
|
|
3
|
+
// Detects React version, language, framework (CRA/Next/Vite/Remix/Gatsby/Expo),
|
|
4
|
+
// and major dependencies — works for any React-based app
|
|
5
|
+
// ============================================================================
|
|
6
|
+
import { readPackageJson, hasConfigFile } from '../utils/file-scanner.js';
|
|
7
|
+
const MAJOR_DEPS = [
|
|
8
|
+
// Core
|
|
9
|
+
'react', 'react-dom', 'react-scripts',
|
|
10
|
+
// State management
|
|
11
|
+
'redux', '@reduxjs/toolkit', 'react-redux', 'zustand', 'jotai', 'recoil', 'mobx',
|
|
12
|
+
// Routing
|
|
13
|
+
'react-router-dom', 'react-router',
|
|
14
|
+
// Data fetching
|
|
15
|
+
'axios', 'swr', 'react-query', '@tanstack/react-query',
|
|
16
|
+
// Styling
|
|
17
|
+
'styled-components', '@emotion/react', '@emotion/styled', 'tailwindcss',
|
|
18
|
+
// Forms
|
|
19
|
+
'formik', 'react-hook-form',
|
|
20
|
+
// Validation
|
|
21
|
+
'zod', 'yup',
|
|
22
|
+
// Utilities
|
|
23
|
+
'lodash', 'ramda',
|
|
24
|
+
// Date
|
|
25
|
+
'moment', 'dayjs', 'date-fns',
|
|
26
|
+
// Async/reactive
|
|
27
|
+
'rxjs',
|
|
28
|
+
// GraphQL
|
|
29
|
+
'graphql', '@apollo/client', 'urql',
|
|
30
|
+
// Real-time
|
|
31
|
+
'socket.io-client',
|
|
32
|
+
// i18n
|
|
33
|
+
'react-intl', 'react-i18next',
|
|
34
|
+
// Meta-frameworks
|
|
35
|
+
'next', 'gatsby',
|
|
36
|
+
];
|
|
37
|
+
export async function detectProjectTech(appPath, config) {
|
|
38
|
+
const pkg = readPackageJson(appPath);
|
|
39
|
+
if (!pkg) {
|
|
40
|
+
return {
|
|
41
|
+
framework: 'unknown',
|
|
42
|
+
reactVersion: 'unknown',
|
|
43
|
+
language: 'JavaScript',
|
|
44
|
+
hasCRAConfig: false,
|
|
45
|
+
majorDependencies: [],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const allDeps = {
|
|
49
|
+
...pkg.dependencies,
|
|
50
|
+
...pkg.devDependencies,
|
|
51
|
+
};
|
|
52
|
+
// Detect React version
|
|
53
|
+
let reactVersion = 'unknown';
|
|
54
|
+
const reactDep = allDeps['react'] || '';
|
|
55
|
+
const versionMatch = reactDep.match(/(\d+)\./);
|
|
56
|
+
if (versionMatch) {
|
|
57
|
+
reactVersion = versionMatch[1];
|
|
58
|
+
}
|
|
59
|
+
// Detect language
|
|
60
|
+
const hasTypeScript = !!(allDeps['typescript'] || allDeps['@types/react']);
|
|
61
|
+
const hasTSConfig = hasConfigFile(appPath, ['tsconfig.json']);
|
|
62
|
+
const language = (hasTypeScript || hasTSConfig) ? 'TypeScript' : 'JavaScript';
|
|
63
|
+
// Detect CRA
|
|
64
|
+
const hasReactScripts = !!allDeps['react-scripts'];
|
|
65
|
+
const hasCRAConfig = hasConfigFile(appPath, [
|
|
66
|
+
'config-overrides',
|
|
67
|
+
'.env',
|
|
68
|
+
'.env.local',
|
|
69
|
+
'.env.development',
|
|
70
|
+
'.env.production',
|
|
71
|
+
]);
|
|
72
|
+
const isCRA = hasReactScripts || hasCRAConfig;
|
|
73
|
+
// Detect framework (order matters — check specific before generic)
|
|
74
|
+
let framework = 'unknown';
|
|
75
|
+
if (allDeps['next'])
|
|
76
|
+
framework = 'Next.js';
|
|
77
|
+
else if (allDeps['@remix-run/react'] || allDeps['@remix-run/node'])
|
|
78
|
+
framework = 'Remix';
|
|
79
|
+
else if (allDeps['gatsby'])
|
|
80
|
+
framework = 'Gatsby';
|
|
81
|
+
else if (allDeps['expo'] || allDeps['react-native'])
|
|
82
|
+
framework = 'React Native / Expo';
|
|
83
|
+
else if (isCRA)
|
|
84
|
+
framework = 'CRA';
|
|
85
|
+
else if (allDeps['vite'] || allDeps['@vitejs/plugin-react'] || hasConfigFile(appPath, ['vite.config.ts', 'vite.config.js']))
|
|
86
|
+
framework = 'Vite';
|
|
87
|
+
else if (allDeps['react'])
|
|
88
|
+
framework = 'React';
|
|
89
|
+
// Next.js app router vs pages router
|
|
90
|
+
let routerType;
|
|
91
|
+
if (framework === 'Next.js') {
|
|
92
|
+
const hasAppDir = hasConfigFile(appPath, ['app', 'src/app']);
|
|
93
|
+
const hasPagesDir = hasConfigFile(appPath, ['pages', 'src/pages']);
|
|
94
|
+
if (hasAppDir)
|
|
95
|
+
routerType = 'app-router';
|
|
96
|
+
else if (hasPagesDir)
|
|
97
|
+
routerType = 'pages-router';
|
|
98
|
+
}
|
|
99
|
+
void routerType; // used by analyze-routing
|
|
100
|
+
// Detect major dependencies
|
|
101
|
+
const majorDependencies = [];
|
|
102
|
+
for (const dep of MAJOR_DEPS) {
|
|
103
|
+
if (allDeps[dep]) {
|
|
104
|
+
majorDependencies.push(dep);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
framework,
|
|
109
|
+
reactVersion,
|
|
110
|
+
language,
|
|
111
|
+
hasCRAConfig: isCRA,
|
|
112
|
+
majorDependencies,
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=01-detect-project-tech.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"01-detect-project-tech.js","sourceRoot":"","sources":["../../src/tools/01-detect-project-tech.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,+BAA+B;AAC/B,gFAAgF;AAChF,yDAAyD;AACzD,+EAA+E;AAG/E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAmB,MAAM,0BAA0B,CAAC;AAG3F,MAAM,UAAU,GAAG;IACjB,OAAO;IACP,OAAO,EAAE,WAAW,EAAE,eAAe;IACrC,mBAAmB;IACnB,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM;IAChF,UAAU;IACV,kBAAkB,EAAE,cAAc;IAClC,gBAAgB;IAChB,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,uBAAuB;IACtD,UAAU;IACV,mBAAmB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,aAAa;IACvE,QAAQ;IACR,QAAQ,EAAE,iBAAiB;IAC3B,aAAa;IACb,KAAK,EAAE,KAAK;IACZ,YAAY;IACZ,QAAQ,EAAE,OAAO;IACjB,OAAO;IACP,QAAQ,EAAE,OAAO,EAAE,UAAU;IAC7B,iBAAiB;IACjB,MAAM;IACN,UAAU;IACV,SAAS,EAAE,gBAAgB,EAAE,MAAM;IACnC,YAAY;IACZ,kBAAkB;IAClB,OAAO;IACP,YAAY,EAAE,eAAe;IAC7B,kBAAkB;IAClB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAe,EAAE,MAAgC;IACvF,MAAM,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IAErC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;YACL,SAAS,EAAE,SAAS;YACpB,YAAY,EAAE,SAAS;YACvB,QAAQ,EAAE,YAAY;YACtB,YAAY,EAAE,KAAK;YACnB,iBAAiB,EAAE,EAAE;SACtB,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG;QACd,GAAI,GAAG,CAAC,YAAmD;QAC3D,GAAI,GAAG,CAAC,eAAsD;KAC/D,CAAC;IAEF,uBAAuB;IACvB,IAAI,YAAY,GAAG,SAAS,CAAC;IAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACxC,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/C,IAAI,YAAY,EAAE,CAAC;QACjB,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,kBAAkB;IAClB,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAgC,CAAC,aAAa,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC;IAE3G,aAAa;IACb,MAAM,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,EAAE;QAC1C,kBAAkB;QAClB,MAAM;QACN,YAAY;QACZ,kBAAkB;QAClB,iBAAiB;KAClB,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,eAAe,IAAI,YAAY,CAAC;IAE9C,mEAAmE;IACnE,IAAI,SAAS,GAAG,SAAS,CAAC;IAC1B,IAAI,OAAO,CAAC,MAAM,CAAC;QAAE,SAAS,GAAG,SAAS,CAAC;SACtC,IAAI,OAAO,CAAC,kBAAkB,CAAC,IAAI,OAAO,CAAC,iBAAiB,CAAC;QAAE,SAAS,GAAG,OAAO,CAAC;SACnF,IAAI,OAAO,CAAC,QAAQ,CAAC;QAAE,SAAS,GAAG,QAAQ,CAAC;SAC5C,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC;QAAE,SAAS,GAAG,qBAAqB,CAAC;SAClF,IAAI,KAAK;QAAE,SAAS,GAAG,KAAK,CAAC;SAC7B,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,sBAAsB,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC;QAAE,SAAS,GAAG,MAAM,CAAC;SAC3I,IAAI,OAAO,CAAC,OAAO,CAAC;QAAE,SAAS,GAAG,OAAO,CAAC;IAE/C,qCAAqC;IACrC,IAAI,UAA8B,CAAC;IACnC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QAC7D,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;QACnE,IAAI,SAAS;YAAE,UAAU,GAAG,YAAY,CAAC;aACpC,IAAI,WAAW;YAAE,UAAU,GAAG,cAAc,CAAC;IACpD,CAAC;IACD,KAAK,UAAU,CAAC,CAAC,0BAA0B;IAE3C,4BAA4B;IAC5B,MAAM,iBAAiB,GAAa,EAAE,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACjB,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO;QACL,SAAS;QACT,YAAY;QACZ,QAAQ;QACR,YAAY,EAAE,KAAK;QACnB,iBAAiB;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"02-analyze-folder-structure.d.ts","sourceRoot":"","sources":["../../src/tools/02-analyze-folder-structure.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAiBzE,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAiF9H"}
|