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.
- package/README.md +146 -42
- package/package.json +13 -5
- package/server.json +20 -0
- 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
|
@@ -1,11 +1,55 @@
|
|
|
1
1
|
// ============================================================================
|
|
2
2
|
// CONVERT TO TYPESCRIPT
|
|
3
|
-
// Rename .js/.jsx to .ts/.tsx, add
|
|
3
|
+
// Rename .js/.jsx to .ts/.tsx, add TypeScript type annotations
|
|
4
4
|
// ============================================================================
|
|
5
5
|
import * as path from 'path';
|
|
6
6
|
import { parseFile, hasJSX, extractFunctions } from '../utils/ast-parser.js';
|
|
7
7
|
import { listFiles, renameFile, writeFile } from '../utils/file-ops.js';
|
|
8
|
-
import { generatePropsInterface,
|
|
8
|
+
import { generatePropsInterface, generateFileHeader } from '../utils/type-generator.js';
|
|
9
|
+
function buildTypedContent(content, functions, includeProps) {
|
|
10
|
+
const addedTypes = [];
|
|
11
|
+
let newContent = content;
|
|
12
|
+
if (!includeProps)
|
|
13
|
+
return { newContent, addedTypes };
|
|
14
|
+
// Collect all interfaces to inject after the last import line
|
|
15
|
+
const interfacesToInject = [];
|
|
16
|
+
for (const fn of functions) {
|
|
17
|
+
if (!fn.isComponent || fn.params.length === 0)
|
|
18
|
+
continue;
|
|
19
|
+
const param = fn.params[0];
|
|
20
|
+
// Only generate for destructured object params or named params
|
|
21
|
+
if (param === '{...}' || param === '[...]' || param === '...')
|
|
22
|
+
continue;
|
|
23
|
+
// Don't regenerate if interface already exists
|
|
24
|
+
const existingInterface = new RegExp(`interface\\s+${fn.name}Props\\s*\\{`);
|
|
25
|
+
if (existingInterface.test(content))
|
|
26
|
+
continue;
|
|
27
|
+
const iface = generatePropsInterface(fn.name, fn.params);
|
|
28
|
+
interfacesToInject.push(iface);
|
|
29
|
+
addedTypes.push(`${fn.name}Props`);
|
|
30
|
+
// Also annotate the function signature if it uses destructuring
|
|
31
|
+
if (param.startsWith('{') && !content.includes(`: ${fn.name}Props`)) {
|
|
32
|
+
const destructured = param; // e.g. {label,onClick,disabled}
|
|
33
|
+
// Try to replace the function signature to add type annotation
|
|
34
|
+
// Handles: function Foo({ ... }) and const Foo = ({ ... }) =>
|
|
35
|
+
const fnDeclPattern = new RegExp(`((?:export\\s+)?(?:default\\s+)?function\\s+${fn.name}\\s*\\()${destructured.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}(\\s*\\))`, 'g');
|
|
36
|
+
const arrowPattern = new RegExp(`((?:export\\s+)?const\\s+${fn.name}[^=]*=\\s*(?:React\\.memo\\(\\s*)?(?:React\\.forwardRef\\([^)]*,\\s*)?)\\(${destructured.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}(\\s*)\\)`, 'g');
|
|
37
|
+
const annotated = `${destructured}: ${fn.name}Props`;
|
|
38
|
+
newContent = newContent.replace(fnDeclPattern, `$1${annotated}$2`);
|
|
39
|
+
newContent = newContent.replace(arrowPattern, `$1(${annotated}$2)`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (interfacesToInject.length > 0) {
|
|
43
|
+
const header = generateFileHeader('convert-to-typescript');
|
|
44
|
+
const importLines = newContent.match(/^import\s.*$/gm) || [];
|
|
45
|
+
const insertPos = importLines.length > 0
|
|
46
|
+
? newContent.lastIndexOf(importLines[importLines.length - 1]) + importLines[importLines.length - 1].length
|
|
47
|
+
: 0;
|
|
48
|
+
const block = '\n\n' + header + interfacesToInject.join('\n\n') + '\n';
|
|
49
|
+
newContent = newContent.slice(0, insertPos) + block + newContent.slice(insertPos);
|
|
50
|
+
}
|
|
51
|
+
return { newContent, addedTypes };
|
|
52
|
+
}
|
|
9
53
|
export async function convertToTypeScript(input) {
|
|
10
54
|
const { path: projectPath, includeProps = true, dryRun = false } = input;
|
|
11
55
|
const convertedFiles = [];
|
|
@@ -32,62 +76,33 @@ export async function convertToTypeScript(input) {
|
|
|
32
76
|
const { content, ast } = parsed;
|
|
33
77
|
const containsJSX = hasJSX(ast);
|
|
34
78
|
const ext = path.extname(filePath);
|
|
35
|
-
|
|
36
|
-
if (ext === '.jsx') {
|
|
37
|
-
newExt = '.tsx';
|
|
38
|
-
}
|
|
39
|
-
else if (ext === '.js' && containsJSX) {
|
|
40
|
-
newExt = '.tsx';
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
newExt = '.ts';
|
|
44
|
-
}
|
|
79
|
+
const newExt = ext === '.jsx' ? '.tsx' : (containsJSX ? '.tsx' : '.ts');
|
|
45
80
|
const newPath = filePath.replace(ext, newExt);
|
|
46
81
|
const functions = extractFunctions(ast);
|
|
47
|
-
const addedTypes =
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
82
|
+
const { newContent, addedTypes } = buildTypedContent(content, functions, includeProps);
|
|
83
|
+
if (dryRun) {
|
|
84
|
+
convertedFiles.push({
|
|
85
|
+
originalPath: relativePath,
|
|
86
|
+
newPath: path.relative(projectPath, newPath),
|
|
87
|
+
addedTypes,
|
|
88
|
+
issues: [],
|
|
89
|
+
previewContent: newContent !== content ? newContent : undefined,
|
|
90
|
+
});
|
|
91
|
+
continue;
|
|
56
92
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
const type = generateParamType(param);
|
|
62
|
-
if (type !== 'unknown')
|
|
63
|
-
addedTypes.push(`${fn.name}(${param}: ${type})`);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
93
|
+
const renameResult = await renameFile(filePath, newPath);
|
|
94
|
+
if (!renameResult.success) {
|
|
95
|
+
errors.push(`Failed to rename ${relativePath}: ${renameResult.error}`);
|
|
96
|
+
continue;
|
|
66
97
|
}
|
|
67
|
-
if (
|
|
68
|
-
|
|
69
|
-
if (!renameResult.success) {
|
|
70
|
-
errors.push(`Failed to rename ${relativePath}: ${renameResult.error}`);
|
|
71
|
-
continue;
|
|
72
|
-
}
|
|
73
|
-
if (addedTypes.length > 0) {
|
|
74
|
-
const propsInterfaces = addedTypes.filter(t => t.includes('interface'));
|
|
75
|
-
if (propsInterfaces.length > 0) {
|
|
76
|
-
const header = generateFileHeader('convert-to-typescript');
|
|
77
|
-
const imports = newContent.match(/^import.*$/gm) || [];
|
|
78
|
-
const lastImportIndex = imports.length > 0
|
|
79
|
-
? newContent.lastIndexOf(imports[imports.length - 1]) + imports[imports.length - 1].length
|
|
80
|
-
: 0;
|
|
81
|
-
newContent = newContent.slice(0, lastImportIndex) + '\n\n' + propsInterfaces.join('\n\n') + '\n' + newContent.slice(lastImportIndex);
|
|
82
|
-
}
|
|
83
|
-
await writeFile(newPath, newContent);
|
|
84
|
-
}
|
|
98
|
+
if (newContent !== content) {
|
|
99
|
+
await writeFile(newPath, newContent);
|
|
85
100
|
}
|
|
86
101
|
convertedFiles.push({
|
|
87
102
|
originalPath: relativePath,
|
|
88
103
|
newPath: path.relative(projectPath, newPath),
|
|
89
104
|
addedTypes,
|
|
90
|
-
issues,
|
|
105
|
+
issues: [],
|
|
91
106
|
});
|
|
92
107
|
}
|
|
93
108
|
catch (error) {
|
|
@@ -97,7 +112,7 @@ export async function convertToTypeScript(input) {
|
|
|
97
112
|
return {
|
|
98
113
|
success: errors.length === 0,
|
|
99
114
|
convertedFiles,
|
|
100
|
-
skippedFiles
|
|
115
|
+
skippedFiles,
|
|
101
116
|
errors,
|
|
102
117
|
summary: {
|
|
103
118
|
totalFiles: jsFiles.length,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"01-convert-to-typescript.js","sourceRoot":"","sources":["../../src/tools/01-convert-to-typescript.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,wBAAwB;AACxB
|
|
1
|
+
{"version":3,"file":"01-convert-to-typescript.js","sourceRoot":"","sources":["../../src/tools/01-convert-to-typescript.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,EAAE,CAAC;CACL"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-parser.d.ts","sourceRoot":"","sources":["../../src/utils/ast-parser.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAmBxE,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAiB7D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,EAAE,CAsBzD;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAc5C;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"ast-parser.d.ts","sourceRoot":"","sources":["../../src/utils/ast-parser.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAmBxE,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAiB7D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,EAAE,CAsBzD;AAED,wBAAgB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAc5C;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,EAAE,CAoE7D"}
|
|
@@ -133,29 +133,45 @@ export function extractFunctions(ast) {
|
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
135
|
collectExports(ast);
|
|
136
|
+
function extractParamName(p) {
|
|
137
|
+
if (!p || typeof p !== 'object')
|
|
138
|
+
return '...';
|
|
139
|
+
const node = p;
|
|
140
|
+
if (node.type === 'Identifier')
|
|
141
|
+
return node.name;
|
|
142
|
+
if (node.type === 'ObjectPattern') {
|
|
143
|
+
const props = (node.properties ?? []).map(prop => {
|
|
144
|
+
if (!prop || typeof prop !== 'object')
|
|
145
|
+
return '';
|
|
146
|
+
const pNode = prop;
|
|
147
|
+
if (pNode.type === 'RestElement')
|
|
148
|
+
return '...rest';
|
|
149
|
+
const key = pNode.key;
|
|
150
|
+
return key?.name || '';
|
|
151
|
+
}).filter(Boolean);
|
|
152
|
+
return props.length > 0 ? `{${props.join(',')}}` : '{...}';
|
|
153
|
+
}
|
|
154
|
+
if (node.type === 'ArrayPattern')
|
|
155
|
+
return '[...]';
|
|
156
|
+
if (node.type === 'RestElement')
|
|
157
|
+
return '...rest';
|
|
158
|
+
if (node.type === 'AssignmentPattern') {
|
|
159
|
+
const left = node.left;
|
|
160
|
+
return left?.name || '...';
|
|
161
|
+
}
|
|
162
|
+
return '...';
|
|
163
|
+
}
|
|
136
164
|
function walk(node) {
|
|
137
165
|
if (!node || typeof node !== 'object')
|
|
138
166
|
return;
|
|
139
167
|
if (node.type === 'FunctionDeclaration' && node.id?.name) {
|
|
140
|
-
const params = (node.params || []).map(
|
|
141
|
-
if (p.type === 'Identifier')
|
|
142
|
-
return p.name;
|
|
143
|
-
if (p.type === 'ObjectPattern')
|
|
144
|
-
return '{...}';
|
|
145
|
-
return '...';
|
|
146
|
-
});
|
|
168
|
+
const params = (node.params || []).map(extractParamName);
|
|
147
169
|
functions.push({ name: node.id.name, params, line: node.loc?.start?.line || 0, isExported: exportedNames.has(node.id.name), isComponent: /^[A-Z]/.test(node.id.name) });
|
|
148
170
|
}
|
|
149
171
|
if (node.type === 'VariableDeclarator' && node.init) {
|
|
150
172
|
const initType = node.init.type;
|
|
151
173
|
if ((initType === 'ArrowFunctionExpression' || initType === 'FunctionExpression') && node.id?.name) {
|
|
152
|
-
const params = (node.init.params || []).map(
|
|
153
|
-
if (p.type === 'Identifier')
|
|
154
|
-
return p.name;
|
|
155
|
-
if (p.type === 'ObjectPattern')
|
|
156
|
-
return '{...}';
|
|
157
|
-
return '...';
|
|
158
|
-
});
|
|
174
|
+
const params = (node.init.params || []).map(extractParamName);
|
|
159
175
|
functions.push({ name: node.id.name, params, line: node.loc?.start?.line || 0, isExported: exportedNames.has(node.id.name), isComponent: /^[A-Z]/.test(node.id.name) });
|
|
160
176
|
}
|
|
161
177
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-parser.js","sourceRoot":"","sources":["../../src/utils/ast-parser.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ast-parser.js","sourceRoot":"","sources":["../../src/utils/ast-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare function generatePropsInterface(componentName: string,
|
|
1
|
+
export declare function generatePropsInterface(componentName: string, params: string[]): string;
|
|
2
2
|
export declare function generateParamType(paramName: string): string;
|
|
3
3
|
export declare function generateFileHeader(toolName: string): string;
|
|
4
4
|
//# sourceMappingURL=type-generator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-generator.d.ts","sourceRoot":"","sources":["../../src/utils/type-generator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"type-generator.d.ts","sourceRoot":"","sources":["../../src/utils/type-generator.ts"],"names":[],"mappings":"AA+BA,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CA4BtF;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK3D"}
|
|
@@ -1,36 +1,85 @@
|
|
|
1
1
|
// ============================================================================
|
|
2
2
|
// TYPE GENERATOR - Generate TypeScript type strings from AST analysis
|
|
3
3
|
// ============================================================================
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
function inferPropType(propName) {
|
|
5
|
+
const n = propName.toLowerCase().replace(/[?!]/g, '');
|
|
6
|
+
if (/^on[a-z]/.test(propName)) {
|
|
7
|
+
if (/change/.test(n))
|
|
8
|
+
return '(value: string) => void';
|
|
9
|
+
if (/submit/.test(n))
|
|
10
|
+
return '(event: React.FormEvent) => void';
|
|
11
|
+
if (/keydown|keyup|keypress/.test(n))
|
|
12
|
+
return '(event: React.KeyboardEvent) => void';
|
|
13
|
+
if (/mouse|hover/.test(n))
|
|
14
|
+
return '(event: React.MouseEvent) => void';
|
|
15
|
+
if (/focus|blur/.test(n))
|
|
16
|
+
return '(event: React.FocusEvent) => void';
|
|
17
|
+
return '() => void';
|
|
18
|
+
}
|
|
19
|
+
if (/children/.test(n))
|
|
20
|
+
return 'React.ReactNode';
|
|
21
|
+
if (/classname|class$/.test(n))
|
|
22
|
+
return 'string';
|
|
23
|
+
if (/style$/.test(n))
|
|
24
|
+
return 'React.CSSProperties';
|
|
25
|
+
if (/^(label|title|text|name|placeholder|description|message|caption|heading|subtitle)$/.test(n))
|
|
26
|
+
return 'string';
|
|
27
|
+
if (/^(id|key|slug|uid|uuid)$/.test(n))
|
|
28
|
+
return 'string';
|
|
29
|
+
if (/href|src|url|path$|link$/.test(n))
|
|
30
|
+
return 'string';
|
|
31
|
+
if (/type$|variant$|color$|size$|align$|justify$|position$|placement$|direction$/.test(n))
|
|
32
|
+
return 'string';
|
|
33
|
+
if (/^(count|num|index|size|width|height|limit|offset|total|min|max|step|rows|cols|tabindex)$/.test(n))
|
|
34
|
+
return 'number';
|
|
35
|
+
if (/^(disabled|hidden|visible|active|open|loading|checked|selected|required|readonly|autofocus|multiple|fullwidth|fullscreen|fluid|compact|inline|inverted|basic|circular|fitted|icon|labeled|negative|positive|toggle|animated|floating|pointing|scrolling|blurring|closeonescape|closeondimdisclick|dimmer)$/.test(n))
|
|
36
|
+
return 'boolean';
|
|
37
|
+
if (/disabled$|hidden$|visible$|active$|open$|loading$|checked$|selected$|required$|readonly$|autofocus$|multiple$/.test(n))
|
|
38
|
+
return 'boolean';
|
|
39
|
+
if (/items$|list$|options$|data$|entries$|values$|children$/.test(n))
|
|
40
|
+
return 'unknown[]';
|
|
41
|
+
if (/ref$/.test(n))
|
|
42
|
+
return 'React.Ref<HTMLElement>';
|
|
43
|
+
if (/^(event|e|evt)$/.test(n))
|
|
44
|
+
return 'React.SyntheticEvent';
|
|
45
|
+
if (/rest$|props$/.test(n))
|
|
46
|
+
return 'Record<string, unknown>';
|
|
47
|
+
return 'unknown';
|
|
48
|
+
}
|
|
49
|
+
export function generatePropsInterface(componentName, params) {
|
|
50
|
+
const propLines = [];
|
|
51
|
+
for (const param of params) {
|
|
52
|
+
// Destructured object: {label,onClick,disabled}
|
|
53
|
+
if (param.startsWith('{') && param.endsWith('}')) {
|
|
54
|
+
const inner = param.slice(1, -1);
|
|
55
|
+
const fields = inner.split(',').map(f => f.trim()).filter(f => f && f !== '...' && f !== '...rest');
|
|
56
|
+
for (const field of fields) {
|
|
57
|
+
const type = inferPropType(field);
|
|
58
|
+
propLines.push(` ${field}?: ${type};`);
|
|
59
|
+
}
|
|
60
|
+
if (inner.includes('...rest')) {
|
|
61
|
+
propLines.push(' [key: string]: unknown;');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else if (param === '...rest' || param === '...') {
|
|
65
|
+
propLines.push(' [key: string]: unknown;');
|
|
66
|
+
}
|
|
67
|
+
else if (param !== '{...}' && param !== '[...]') {
|
|
68
|
+
const type = inferPropType(param);
|
|
69
|
+
propLines.push(` ${param}?: ${type};`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (propLines.length === 0) {
|
|
73
|
+
propLines.push(' // TODO: Add prop types');
|
|
74
|
+
}
|
|
8
75
|
return `interface ${componentName}Props {\n${propLines.join('\n')}\n}`;
|
|
9
76
|
}
|
|
10
77
|
export function generateParamType(paramName) {
|
|
11
|
-
|
|
12
|
-
event: 'React.FormEvent',
|
|
13
|
-
e: 'React.ChangeEvent<HTMLInputElement>',
|
|
14
|
-
props: 'Props',
|
|
15
|
-
children: 'React.ReactNode',
|
|
16
|
-
id: 'string | number',
|
|
17
|
-
name: 'string',
|
|
18
|
-
value: 'string',
|
|
19
|
-
onClick: '() => void',
|
|
20
|
-
onChange: '(value: string) => void',
|
|
21
|
-
className: 'string',
|
|
22
|
-
style: 'React.CSSProperties',
|
|
23
|
-
loading: 'boolean',
|
|
24
|
-
disabled: 'boolean',
|
|
25
|
-
data: 'unknown',
|
|
26
|
-
index: 'number',
|
|
27
|
-
};
|
|
28
|
-
return commonTypes[paramName] || 'unknown';
|
|
78
|
+
return inferPropType(paramName);
|
|
29
79
|
}
|
|
30
80
|
export function generateFileHeader(toolName) {
|
|
31
81
|
return `// ============================================================================
|
|
32
82
|
// Generated by code-modernizer: ${toolName}
|
|
33
|
-
// Generated at: ${new Date().toISOString()}
|
|
34
83
|
// ============================================================================
|
|
35
84
|
`;
|
|
36
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-generator.js","sourceRoot":"","sources":["../../src/utils/type-generator.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,sEAAsE;AACtE,+EAA+E;AAE/E,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"type-generator.js","sourceRoot":"","sources":["../../src/utils/type-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { McpServerBase } from '@mcp-showcase/shared';
|
|
2
|
+
import { McpServerBase, safeReadJson, isNextJsProject } from '@mcp-showcase/shared';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import * as path from 'path';
|
|
5
5
|
import { execSync } from 'child_process';
|
|
@@ -201,6 +201,16 @@ class ComponentFactoryServer extends McpServerBase {
|
|
|
201
201
|
const templateContent = readTemplate(componentName);
|
|
202
202
|
const componentDir = path.join(outputPath, name);
|
|
203
203
|
const resolvedDir = path.resolve(componentDir);
|
|
204
|
+
// Prevent writes to dangerous root paths
|
|
205
|
+
const dangerousRoots = ['/', '/Users', '/home', '/etc', '/usr', '/var', '/tmp'];
|
|
206
|
+
if (dangerousRoots.includes(resolvedDir) || !path.isAbsolute(resolvedDir)) {
|
|
207
|
+
return this.error(new Error(`Refusing to write to unsafe path: ${resolvedDir}`));
|
|
208
|
+
}
|
|
209
|
+
// Warn if outputting into a Next.js app/ directory (would conflict with routing)
|
|
210
|
+
const appDirMarker = path.sep + 'app' + path.sep;
|
|
211
|
+
if (resolvedDir.includes(appDirMarker) && isNextJsProject(path.dirname(outputPath))) {
|
|
212
|
+
return this.error(new Error(`Cannot generate components inside app/ — this would conflict with Next.js routing. Use a components/ directory instead.`));
|
|
213
|
+
}
|
|
204
214
|
if (fs.existsSync(resolvedDir))
|
|
205
215
|
fs.rmSync(resolvedDir, { recursive: true, force: true });
|
|
206
216
|
fs.mkdirSync(resolvedDir, { recursive: true });
|
|
@@ -253,19 +263,61 @@ class ComponentFactoryServer extends McpServerBase {
|
|
|
253
263
|
const results = [];
|
|
254
264
|
for (const componentName of components) {
|
|
255
265
|
const result = await this.handleGenerateComponent({ name: componentName, outputPath, includeTests, includeStories, includeTypes: true, includeDocs: true });
|
|
256
|
-
results.push(
|
|
266
|
+
results.push(safeReadJson(result.content[0].text || '{}') ?? { success: false, component: componentName });
|
|
257
267
|
}
|
|
258
268
|
return this.success({ totalComponents: components.length, results, message: `Generated ${components.length} components` });
|
|
259
269
|
}
|
|
260
270
|
async handleCheckExists(args) {
|
|
261
271
|
const { name, outputPath } = args;
|
|
262
|
-
const
|
|
263
|
-
|
|
272
|
+
const resolved = path.resolve(outputPath);
|
|
273
|
+
// 1. Directory-per-component layout: outputPath/Name/Name.tsx
|
|
274
|
+
const componentDir = path.join(resolved, name);
|
|
275
|
+
const dirLayoutFile = path.join(componentDir, `${name}.tsx`);
|
|
276
|
+
if (fs.existsSync(dirLayoutFile)) {
|
|
277
|
+
return this.success({
|
|
278
|
+
exists: true,
|
|
279
|
+
layout: 'directory',
|
|
280
|
+
path: componentDir,
|
|
281
|
+
files: fs.readdirSync(componentDir),
|
|
282
|
+
message: `Component ${name} exists (directory layout at ${componentDir})`,
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
// 2. Flat layout: outputPath/Name.tsx or outputPath/name.tsx
|
|
286
|
+
const flatFile = fs.existsSync(path.join(resolved, `${name}.tsx`))
|
|
287
|
+
? path.join(resolved, `${name}.tsx`)
|
|
288
|
+
: fs.existsSync(path.join(resolved, `${name.toLowerCase()}.tsx`))
|
|
289
|
+
? path.join(resolved, `${name.toLowerCase()}.tsx`)
|
|
290
|
+
: null;
|
|
291
|
+
if (flatFile) {
|
|
292
|
+
return this.success({
|
|
293
|
+
exists: true,
|
|
294
|
+
layout: 'flat',
|
|
295
|
+
path: flatFile,
|
|
296
|
+
files: [path.basename(flatFile)],
|
|
297
|
+
message: `Component ${name} exists (flat layout at ${flatFile})`,
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
// 3. Index re-export: outputPath/Name/index.ts or outputPath/Name/index.tsx
|
|
301
|
+
const indexFile = fs.existsSync(path.join(componentDir, 'index.tsx'))
|
|
302
|
+
? path.join(componentDir, 'index.tsx')
|
|
303
|
+
: fs.existsSync(path.join(componentDir, 'index.ts'))
|
|
304
|
+
? path.join(componentDir, 'index.ts')
|
|
305
|
+
: null;
|
|
306
|
+
if (indexFile) {
|
|
307
|
+
return this.success({
|
|
308
|
+
exists: true,
|
|
309
|
+
layout: 'directory-index',
|
|
310
|
+
path: componentDir,
|
|
311
|
+
files: fs.readdirSync(componentDir),
|
|
312
|
+
message: `Component ${name} exists (index-based layout at ${componentDir})`,
|
|
313
|
+
});
|
|
314
|
+
}
|
|
264
315
|
return this.success({
|
|
265
|
-
exists,
|
|
316
|
+
exists: false,
|
|
317
|
+
layout: null,
|
|
266
318
|
path: componentDir,
|
|
267
|
-
files:
|
|
268
|
-
message:
|
|
319
|
+
files: [],
|
|
320
|
+
message: `Component ${name} does not exist at ${resolved}`,
|
|
269
321
|
});
|
|
270
322
|
}
|
|
271
323
|
async handleReviewComponent(args) {
|