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
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ImportGraph, ImportInfo } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Build a complete import graph for all source files in a directory
|
|
4
|
+
*/
|
|
5
|
+
export declare function buildImportGraph(rootDir: string): Promise<ImportGraph>;
|
|
6
|
+
/**
|
|
7
|
+
* Resolve an import specifier to an actual file path
|
|
8
|
+
*/
|
|
9
|
+
export declare function resolveImportPath(fromFile: string, specifier: string, rootDir: string, allFiles: string[]): string | null;
|
|
10
|
+
/**
|
|
11
|
+
* Detect circular dependencies in the import graph
|
|
12
|
+
*/
|
|
13
|
+
export declare function detectCircularDependencies(graph: ImportGraph): string[][];
|
|
14
|
+
/**
|
|
15
|
+
* Find deep imports (../../../ pattern)
|
|
16
|
+
*/
|
|
17
|
+
export declare function findDeepImports(graph: ImportGraph): {
|
|
18
|
+
file: string;
|
|
19
|
+
import: string;
|
|
20
|
+
depth: number;
|
|
21
|
+
}[];
|
|
22
|
+
/**
|
|
23
|
+
* Detect cross-feature imports (importing from sibling feature folders)
|
|
24
|
+
*/
|
|
25
|
+
export declare function findCrossFeatureImports(graph: ImportGraph, rootDir: string, srcDir?: string): {
|
|
26
|
+
from: string;
|
|
27
|
+
to: string;
|
|
28
|
+
importPath: string;
|
|
29
|
+
}[];
|
|
30
|
+
/**
|
|
31
|
+
* Find unused imports in a file
|
|
32
|
+
*/
|
|
33
|
+
export declare function findUnusedImports(content: string, imports: ImportInfo[]): string[];
|
|
34
|
+
/**
|
|
35
|
+
* Calculate coupling between two files (how much A depends on B)
|
|
36
|
+
*/
|
|
37
|
+
export declare function calculateCoupling(graph: ImportGraph, fileA: string, fileB: string): number;
|
|
38
|
+
//# sourceMappingURL=import-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-tracker.d.ts","sourceRoot":"","sources":["../../src/utils/import-tracker.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE3D;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA6B5E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAAE,GACjB,MAAM,GAAG,IAAI,CAgCf;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,EAAE,EAAE,CAwCzE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAerG;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,MAAc,GACrB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EAAE,CAgCpD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,EAAE,CAgBlF;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAmB1F"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// IMPORT TRACKER - Build import dependency graph across codebase
|
|
3
|
+
// ============================================================================
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import { findSourceFiles } from './file-scanner.js';
|
|
6
|
+
import { parseFile, extractImports } from './ast-parser.js';
|
|
7
|
+
/**
|
|
8
|
+
* Build a complete import graph for all source files in a directory
|
|
9
|
+
*/
|
|
10
|
+
export async function buildImportGraph(rootDir) {
|
|
11
|
+
const files = await findSourceFiles(rootDir);
|
|
12
|
+
const graph = {};
|
|
13
|
+
// Initialize graph entries
|
|
14
|
+
for (const file of files) {
|
|
15
|
+
graph[file] = { imports: [], importedBy: [] };
|
|
16
|
+
}
|
|
17
|
+
// Parse each file and extract imports
|
|
18
|
+
for (const file of files) {
|
|
19
|
+
const parsed = parseFile(file);
|
|
20
|
+
if (!parsed)
|
|
21
|
+
continue;
|
|
22
|
+
const imports = extractImports(parsed.ast);
|
|
23
|
+
graph[file].imports = imports;
|
|
24
|
+
// Resolve import paths and build reverse mapping
|
|
25
|
+
for (const imp of imports) {
|
|
26
|
+
const resolved = resolveImportPath(file, imp.source, rootDir, files);
|
|
27
|
+
if (resolved && graph[resolved]) {
|
|
28
|
+
if (!graph[resolved].importedBy.includes(file)) {
|
|
29
|
+
graph[resolved].importedBy.push(file);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return graph;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Resolve an import specifier to an actual file path
|
|
38
|
+
*/
|
|
39
|
+
export function resolveImportPath(fromFile, specifier, rootDir, allFiles) {
|
|
40
|
+
// Skip node_modules imports
|
|
41
|
+
if (!specifier.startsWith('.') && !specifier.startsWith('/')) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
const fromDir = path.dirname(fromFile);
|
|
45
|
+
let resolved;
|
|
46
|
+
if (specifier.startsWith('.')) {
|
|
47
|
+
// Relative import
|
|
48
|
+
resolved = path.resolve(fromDir, specifier);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
// Absolute import (from root)
|
|
52
|
+
resolved = path.resolve(rootDir, specifier.startsWith('/') ? specifier.slice(1) : specifier);
|
|
53
|
+
}
|
|
54
|
+
// Try with extensions
|
|
55
|
+
const extensions = ['.js', '.jsx', '.ts', '.tsx', '/index.js', '/index.jsx', '/index.ts', '/index.tsx'];
|
|
56
|
+
for (const ext of extensions) {
|
|
57
|
+
const candidate = resolved + ext;
|
|
58
|
+
if (allFiles.includes(candidate)) {
|
|
59
|
+
return candidate;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Try exact match
|
|
63
|
+
if (allFiles.includes(resolved)) {
|
|
64
|
+
return resolved;
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Detect circular dependencies in the import graph
|
|
70
|
+
*/
|
|
71
|
+
export function detectCircularDependencies(graph) {
|
|
72
|
+
const cycles = [];
|
|
73
|
+
const visited = new Set();
|
|
74
|
+
const recursionStack = new Set();
|
|
75
|
+
function dfs(file, currentPath) {
|
|
76
|
+
if (recursionStack.has(file)) {
|
|
77
|
+
// Found a cycle
|
|
78
|
+
const cycleStart = currentPath.indexOf(file);
|
|
79
|
+
if (cycleStart !== -1) {
|
|
80
|
+
cycles.push(currentPath.slice(cycleStart));
|
|
81
|
+
}
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (visited.has(file))
|
|
85
|
+
return;
|
|
86
|
+
visited.add(file);
|
|
87
|
+
recursionStack.add(file);
|
|
88
|
+
currentPath.push(file);
|
|
89
|
+
for (const imp of graph[file]?.imports || []) {
|
|
90
|
+
for (const [filePath, data] of Object.entries(graph)) {
|
|
91
|
+
if (data.importedBy.includes(file) || filePath === imp.source) {
|
|
92
|
+
dfs(filePath, [...currentPath]);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
currentPath.pop();
|
|
97
|
+
recursionStack.delete(file);
|
|
98
|
+
}
|
|
99
|
+
for (const file of Object.keys(graph)) {
|
|
100
|
+
if (!visited.has(file)) {
|
|
101
|
+
dfs(file, []);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return cycles;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Find deep imports (../../../ pattern)
|
|
108
|
+
*/
|
|
109
|
+
export function findDeepImports(graph) {
|
|
110
|
+
const deepImports = [];
|
|
111
|
+
for (const [file, data] of Object.entries(graph)) {
|
|
112
|
+
for (const imp of data.imports) {
|
|
113
|
+
if (imp.source.startsWith('.')) {
|
|
114
|
+
const depth = (imp.source.match(/\.\.\//g) || []).length;
|
|
115
|
+
if (depth >= 2) {
|
|
116
|
+
deepImports.push({ file, import: imp.source, depth });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return deepImports.sort((a, b) => b.depth - a.depth);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Detect cross-feature imports (importing from sibling feature folders)
|
|
125
|
+
*/
|
|
126
|
+
export function findCrossFeatureImports(graph, rootDir, srcDir = 'src') {
|
|
127
|
+
const crossFeature = [];
|
|
128
|
+
const srcPath = path.join(rootDir, srcDir);
|
|
129
|
+
for (const [file, data] of Object.entries(graph)) {
|
|
130
|
+
const relFile = path.relative(srcPath, file);
|
|
131
|
+
const fileParts = relFile.split(path.sep);
|
|
132
|
+
if (fileParts.length < 2)
|
|
133
|
+
continue;
|
|
134
|
+
for (const imp of data.imports) {
|
|
135
|
+
if (!imp.source.startsWith('.'))
|
|
136
|
+
continue;
|
|
137
|
+
const resolved = resolveImportPath(file, imp.source, rootDir, Object.keys(graph));
|
|
138
|
+
if (!resolved)
|
|
139
|
+
continue;
|
|
140
|
+
const relResolved = path.relative(srcPath, resolved);
|
|
141
|
+
const resolvedParts = relResolved.split(path.sep);
|
|
142
|
+
if (resolvedParts.length < 2)
|
|
143
|
+
continue;
|
|
144
|
+
if (fileParts[0] !== resolvedParts[0] && !resolvedParts[0].startsWith('components') && !resolvedParts[0].startsWith('utils')) {
|
|
145
|
+
crossFeature.push({
|
|
146
|
+
from: file,
|
|
147
|
+
to: resolved,
|
|
148
|
+
importPath: imp.source,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return crossFeature;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Find unused imports in a file
|
|
157
|
+
*/
|
|
158
|
+
export function findUnusedImports(content, imports) {
|
|
159
|
+
const unused = [];
|
|
160
|
+
for (const imp of imports) {
|
|
161
|
+
for (const spec of imp.specifiers) {
|
|
162
|
+
const cleanName = spec.replace('* as ', '');
|
|
163
|
+
const regex = new RegExp(`\\b${escapeRegex(cleanName)}\\b`, 'g');
|
|
164
|
+
const matches = content.match(regex);
|
|
165
|
+
if (!matches || matches.length <= 1) {
|
|
166
|
+
unused.push(`${spec} from '${imp.source}'`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return unused;
|
|
171
|
+
}
|
|
172
|
+
function escapeRegex(str) {
|
|
173
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Calculate coupling between two files (how much A depends on B)
|
|
177
|
+
*/
|
|
178
|
+
export function calculateCoupling(graph, fileA, fileB) {
|
|
179
|
+
const importsFromA = graph[fileA]?.imports || [];
|
|
180
|
+
const importsFromB = graph[fileB]?.imports || [];
|
|
181
|
+
let score = 0;
|
|
182
|
+
for (const imp of importsFromA) {
|
|
183
|
+
if (imp.source.includes(path.basename(fileB, path.extname(fileB)))) {
|
|
184
|
+
score += 1;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
for (const imp of importsFromB) {
|
|
188
|
+
if (imp.source.includes(path.basename(fileA, path.extname(fileA)))) {
|
|
189
|
+
score += 1;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return score;
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=import-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-tracker.js","sourceRoot":"","sources":["../../src/utils/import-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import type { ImportGraph } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Detect feature name from a file path
|
|
4
|
+
*/
|
|
5
|
+
export declare function detectFeatureFromPath(filePath: string, rootDir: string): string | null;
|
|
6
|
+
/**
|
|
7
|
+
* Detect feature from route path
|
|
8
|
+
*/
|
|
9
|
+
export declare function detectFeatureFromRoute(routePath: string): string | null;
|
|
10
|
+
/**
|
|
11
|
+
* Cluster files by their import relationships to detect features
|
|
12
|
+
*/
|
|
13
|
+
export declare function detectFeaturesByImportClustering(rootDir: string): Promise<Record<string, string[]>>;
|
|
14
|
+
/**
|
|
15
|
+
* Extract route paths from routing files
|
|
16
|
+
*/
|
|
17
|
+
export declare function extractRoutePaths(rootDir: string): Promise<{
|
|
18
|
+
path: string;
|
|
19
|
+
component: string;
|
|
20
|
+
}[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Classify a file type based on its path and content
|
|
23
|
+
*/
|
|
24
|
+
export declare function classifyFileType(filePath: string, rootDir: string): 'feature' | 'shared' | 'utility' | 'config';
|
|
25
|
+
/**
|
|
26
|
+
* Standard subdirectories for each feature
|
|
27
|
+
*/
|
|
28
|
+
export declare const FEATURE_SUBDIRS: string[];
|
|
29
|
+
/**
|
|
30
|
+
* Standard shared layer directories
|
|
31
|
+
*/
|
|
32
|
+
export declare const SHARED_DIRS: string[];
|
|
33
|
+
/**
|
|
34
|
+
* Standard app-level directories
|
|
35
|
+
*/
|
|
36
|
+
export declare const APP_DIRS: string[];
|
|
37
|
+
/**
|
|
38
|
+
* Generate target path for a file based on its classification
|
|
39
|
+
*/
|
|
40
|
+
export declare function generateTargetPath(filePath: string, rootDir: string, features: string[], featureMap: Record<string, string[]>): string;
|
|
41
|
+
/**
|
|
42
|
+
* Convert string to kebab-case
|
|
43
|
+
*/
|
|
44
|
+
export declare function toKebabCase(str: string): string;
|
|
45
|
+
/**
|
|
46
|
+
* Convert string to PascalCase
|
|
47
|
+
*/
|
|
48
|
+
export declare function toPascalCase(str: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* Convert string to camelCase
|
|
51
|
+
*/
|
|
52
|
+
export declare function toCamelCase(str: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Detect current naming convention of a file
|
|
55
|
+
*/
|
|
56
|
+
export declare function detectNamingConvention(filePath: string): 'kebab-case' | 'camelCase' | 'PascalCase' | 'SCREAMING_SNAKE' | 'snake_case';
|
|
57
|
+
/**
|
|
58
|
+
* Suggest better name for a file based on its content and context
|
|
59
|
+
*/
|
|
60
|
+
export declare function suggestFileName(filePath: string, content: string): string | null;
|
|
61
|
+
/**
|
|
62
|
+
* Get the feature a file belongs to based on its path
|
|
63
|
+
*/
|
|
64
|
+
export declare function getFileFeature(filePath: string, rootDir: string): string | null;
|
|
65
|
+
/**
|
|
66
|
+
* Check if an import crosses feature boundaries
|
|
67
|
+
*/
|
|
68
|
+
export declare function isCrossFeatureImport(fromFile: string, importSource: string, rootDir: string, allFiles: string[]): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Calculate import depth (number of ../ traversals)
|
|
71
|
+
*/
|
|
72
|
+
export declare function getImportDepth(importSource: string): number;
|
|
73
|
+
/**
|
|
74
|
+
* Check if files are tightly coupled (mutual imports with many connections)
|
|
75
|
+
*/
|
|
76
|
+
export declare function areTightlyCoupled(graph: ImportGraph, fileA: string, fileB: string, threshold?: number): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Detect if a file is a "kitchen sink" utility file
|
|
79
|
+
*/
|
|
80
|
+
export declare function isKitchenSinkFile(filePath: string): boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Suggest splits for a utility file based on exported functions
|
|
83
|
+
*/
|
|
84
|
+
export declare function suggestUtilitySplits(filePath: string, content: string): {
|
|
85
|
+
category: string;
|
|
86
|
+
functions: string[];
|
|
87
|
+
}[];
|
|
88
|
+
//# sourceMappingURL=refactor-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refactor-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/refactor-helpers.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,aAAa,CAAC;AA4I3D;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAyBtF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUvE;AAED;;GAEG;AACH,wBAAsB,gCAAgC,CACpD,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAsCnC;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,CAAC,CA6BvG;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAmD7C;AAMD;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,EAA8D,CAAC;AAEnG;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,EAA+D,CAAC;AAEhG;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,MAAM,EAAqC,CAAC;AAEnE;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAAE,EAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACnC,MAAM,CA+BR;AA6BD;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG/C;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,GAAG,iBAAiB,GAAG,YAAY,CAUrI;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,MAAM,GAAG,IAAI,CAuBf;AAMD;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAmB/E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAWT;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAG3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAU,GACpB,OAAO,CAgBT;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAI3D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,EAAE,CA6C7C"}
|