@girardelli/architect 5.0.0 → 8.1.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/dist/{cli.d.ts → src/adapters/cli.d.ts} +1 -2
- package/dist/{cli.js → src/adapters/cli.js} +191 -213
- package/dist/src/adapters/cli.js.map +1 -0
- package/dist/src/adapters/github-action.d.ts +9 -0
- package/dist/src/adapters/github-action.js +94 -0
- package/dist/src/adapters/github-action.js.map +1 -0
- package/dist/src/adapters/html-reporter/scripts.d.ts +5 -0
- package/dist/src/adapters/html-reporter/scripts.js +400 -0
- package/dist/src/adapters/html-reporter/scripts.js.map +1 -0
- package/dist/src/adapters/html-reporter/sections/agents.d.ts +2 -0
- package/dist/src/adapters/html-reporter/sections/agents.js +260 -0
- package/dist/src/adapters/html-reporter/sections/agents.js.map +1 -0
- package/dist/src/adapters/html-reporter/sections/anti-patterns.d.ts +13 -0
- package/dist/src/adapters/html-reporter/sections/anti-patterns.js +64 -0
- package/dist/src/adapters/html-reporter/sections/anti-patterns.js.map +1 -0
- package/dist/src/adapters/html-reporter/sections/header.d.ts +3 -0
- package/dist/src/adapters/html-reporter/sections/header.js +30 -0
- package/dist/src/adapters/html-reporter/sections/header.js.map +1 -0
- package/dist/src/adapters/html-reporter/sections/layers.d.ts +9 -0
- package/dist/src/adapters/html-reporter/sections/layers.js +143 -0
- package/dist/src/adapters/html-reporter/sections/layers.js.map +1 -0
- package/dist/src/adapters/html-reporter/sections/overview.d.ts +2 -0
- package/dist/src/adapters/html-reporter/sections/overview.js +58 -0
- package/dist/src/adapters/html-reporter/sections/overview.js.map +1 -0
- package/dist/src/adapters/html-reporter/sections/refactoring-plan.d.ts +3 -0
- package/dist/src/adapters/html-reporter/sections/refactoring-plan.js +151 -0
- package/dist/src/adapters/html-reporter/sections/refactoring-plan.js.map +1 -0
- package/dist/src/adapters/html-reporter/sections/score.d.ts +7 -0
- package/dist/src/adapters/html-reporter/sections/score.js +70 -0
- package/dist/src/adapters/html-reporter/sections/score.js.map +1 -0
- package/dist/src/adapters/html-reporter/sections/suggestions.d.ts +7 -0
- package/dist/src/adapters/html-reporter/sections/suggestions.js +34 -0
- package/dist/src/adapters/html-reporter/sections/suggestions.js.map +1 -0
- package/dist/src/adapters/html-reporter/styles.d.ts +1 -0
- package/dist/src/adapters/html-reporter/styles.js +526 -0
- package/dist/src/adapters/html-reporter/styles.js.map +1 -0
- package/dist/src/adapters/html-reporter/utils_adapters.d.ts +20 -0
- package/dist/src/adapters/html-reporter/utils_adapters.js +32 -0
- package/dist/src/adapters/html-reporter/utils_adapters.js.map +1 -0
- package/dist/src/adapters/html-reporter/utils_sections.d.ts +7 -0
- package/dist/src/adapters/html-reporter/utils_sections.js +58 -0
- package/dist/src/adapters/html-reporter/utils_sections.js.map +1 -0
- package/dist/src/adapters/html-reporter.d.ts +10 -0
- package/dist/src/adapters/html-reporter.js +97 -0
- package/dist/src/adapters/html-reporter.js.map +1 -0
- package/dist/src/adapters/progress-logger.d.ts +55 -0
- package/dist/src/adapters/progress-logger.js +200 -0
- package/dist/src/adapters/progress-logger.js.map +1 -0
- package/dist/{refactor-reporter.d.ts → src/adapters/refactor-reporter.d.ts} +1 -2
- package/dist/{refactor-reporter.js → src/adapters/refactor-reporter.js} +1 -1
- package/dist/src/adapters/refactor-reporter.js.map +1 -0
- package/dist/{reporter.d.ts → src/adapters/reporter.d.ts} +1 -2
- package/dist/src/adapters/reporter.js.map +1 -0
- package/dist/src/core/GenesisTerminal.d.ts +8 -0
- package/dist/src/core/GenesisTerminal.js +105 -0
- package/dist/src/core/GenesisTerminal.js.map +1 -0
- package/dist/{index.d.ts → src/core/architect.d.ts} +4 -18
- package/dist/{index.js → src/core/architect.js} +22 -21
- package/dist/src/core/architect.js.map +1 -0
- package/dist/tests/architect-adapter-enrichment.test.d.ts +1 -0
- package/dist/tests/architect-adapter-enrichment.test.js +11 -0
- package/dist/tests/architect-adapter-enrichment.test.js.map +1 -0
- package/dist/tests/github-action.test.d.ts +1 -0
- package/dist/tests/github-action.test.js +92 -0
- package/dist/tests/github-action.test.js.map +1 -0
- package/package.json +15 -65
- package/src/adapters/cli.ts +492 -0
- package/src/adapters/github-action.ts +109 -0
- package/src/adapters/html-reporter/scripts.ts +402 -0
- package/src/adapters/html-reporter/sections/agents.ts +267 -0
- package/src/adapters/html-reporter/sections/anti-patterns.ts +81 -0
- package/src/adapters/html-reporter/sections/header.ts +35 -0
- package/src/adapters/html-reporter/sections/layers.ts +165 -0
- package/src/adapters/html-reporter/sections/overview.ts +64 -0
- package/src/adapters/html-reporter/sections/refactoring-plan.ts +166 -0
- package/src/adapters/html-reporter/sections/score.ts +80 -0
- package/src/adapters/html-reporter/sections/suggestions.ts +39 -0
- package/src/adapters/html-reporter/styles.ts +525 -0
- package/src/adapters/html-reporter/utils_adapters.ts +39 -0
- package/src/adapters/html-reporter/utils_sections.ts +55 -0
- package/src/adapters/html-reporter.ts +102 -0
- package/src/adapters/progress-logger.ts +236 -0
- package/src/{refactor-reporter.ts → adapters/refactor-reporter.ts} +2 -2
- package/src/{reporter.ts → adapters/reporter.ts} +1 -1
- package/src/core/GenesisTerminal.ts +127 -0
- package/src/{index.ts → core/architect.ts} +27 -45
- package/tests/github-action.test.ts +109 -0
- package/tsconfig.json +12 -19
- package/CONTRIBUTING.md +0 -140
- package/LICENSE +0 -21
- package/PROJECT_STRUCTURE.txt +0 -168
- package/README.md +0 -257
- package/architect-run.sh +0 -431
- package/assets/banner-v3.html +0 -561
- package/dist/agent-generator/context-enricher.d.ts +0 -58
- package/dist/agent-generator/context-enricher.d.ts.map +0 -1
- package/dist/agent-generator/context-enricher.js +0 -613
- package/dist/agent-generator/context-enricher.js.map +0 -1
- package/dist/agent-generator/domain-inferrer.d.ts +0 -52
- package/dist/agent-generator/domain-inferrer.d.ts.map +0 -1
- package/dist/agent-generator/domain-inferrer.js +0 -585
- package/dist/agent-generator/domain-inferrer.js.map +0 -1
- package/dist/agent-generator/framework-detector.d.ts +0 -40
- package/dist/agent-generator/framework-detector.d.ts.map +0 -1
- package/dist/agent-generator/framework-detector.js +0 -611
- package/dist/agent-generator/framework-detector.js.map +0 -1
- package/dist/agent-generator/index.d.ts +0 -47
- package/dist/agent-generator/index.d.ts.map +0 -1
- package/dist/agent-generator/index.js +0 -545
- package/dist/agent-generator/index.js.map +0 -1
- package/dist/agent-generator/stack-detector.d.ts +0 -14
- package/dist/agent-generator/stack-detector.d.ts.map +0 -1
- package/dist/agent-generator/stack-detector.js +0 -124
- package/dist/agent-generator/stack-detector.js.map +0 -1
- package/dist/agent-generator/templates/core/agents.d.ts +0 -17
- package/dist/agent-generator/templates/core/agents.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/agents.js +0 -1256
- package/dist/agent-generator/templates/core/agents.js.map +0 -1
- package/dist/agent-generator/templates/core/architecture-rules.d.ts +0 -7
- package/dist/agent-generator/templates/core/architecture-rules.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/architecture-rules.js +0 -274
- package/dist/agent-generator/templates/core/architecture-rules.js.map +0 -1
- package/dist/agent-generator/templates/core/general-rules.d.ts +0 -8
- package/dist/agent-generator/templates/core/general-rules.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/general-rules.js +0 -301
- package/dist/agent-generator/templates/core/general-rules.js.map +0 -1
- package/dist/agent-generator/templates/core/hooks-generator.d.ts +0 -21
- package/dist/agent-generator/templates/core/hooks-generator.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/hooks-generator.js +0 -233
- package/dist/agent-generator/templates/core/hooks-generator.js.map +0 -1
- package/dist/agent-generator/templates/core/index-md.d.ts +0 -7
- package/dist/agent-generator/templates/core/index-md.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/index-md.js +0 -246
- package/dist/agent-generator/templates/core/index-md.js.map +0 -1
- package/dist/agent-generator/templates/core/orchestrator.d.ts +0 -8
- package/dist/agent-generator/templates/core/orchestrator.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/orchestrator.js +0 -422
- package/dist/agent-generator/templates/core/orchestrator.js.map +0 -1
- package/dist/agent-generator/templates/core/preflight.d.ts +0 -8
- package/dist/agent-generator/templates/core/preflight.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/preflight.js +0 -213
- package/dist/agent-generator/templates/core/preflight.js.map +0 -1
- package/dist/agent-generator/templates/core/quality-gates.d.ts +0 -11
- package/dist/agent-generator/templates/core/quality-gates.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/quality-gates.js +0 -254
- package/dist/agent-generator/templates/core/quality-gates.js.map +0 -1
- package/dist/agent-generator/templates/core/security-rules.d.ts +0 -7
- package/dist/agent-generator/templates/core/security-rules.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/security-rules.js +0 -528
- package/dist/agent-generator/templates/core/security-rules.js.map +0 -1
- package/dist/agent-generator/templates/core/skills-generator.d.ts +0 -19
- package/dist/agent-generator/templates/core/skills-generator.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/skills-generator.js +0 -546
- package/dist/agent-generator/templates/core/skills-generator.js.map +0 -1
- package/dist/agent-generator/templates/core/workflow-fix-bug.d.ts +0 -7
- package/dist/agent-generator/templates/core/workflow-fix-bug.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/workflow-fix-bug.js +0 -237
- package/dist/agent-generator/templates/core/workflow-fix-bug.js.map +0 -1
- package/dist/agent-generator/templates/core/workflow-new-feature.d.ts +0 -8
- package/dist/agent-generator/templates/core/workflow-new-feature.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/workflow-new-feature.js +0 -321
- package/dist/agent-generator/templates/core/workflow-new-feature.js.map +0 -1
- package/dist/agent-generator/templates/core/workflow-review.d.ts +0 -7
- package/dist/agent-generator/templates/core/workflow-review.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/workflow-review.js +0 -104
- package/dist/agent-generator/templates/core/workflow-review.js.map +0 -1
- package/dist/agent-generator/templates/domain/index.d.ts +0 -22
- package/dist/agent-generator/templates/domain/index.d.ts.map +0 -1
- package/dist/agent-generator/templates/domain/index.js +0 -1176
- package/dist/agent-generator/templates/domain/index.js.map +0 -1
- package/dist/agent-generator/templates/stack/index.d.ts +0 -8
- package/dist/agent-generator/templates/stack/index.d.ts.map +0 -1
- package/dist/agent-generator/templates/stack/index.js +0 -695
- package/dist/agent-generator/templates/stack/index.js.map +0 -1
- package/dist/agent-generator/templates/template-helpers.d.ts +0 -75
- package/dist/agent-generator/templates/template-helpers.d.ts.map +0 -1
- package/dist/agent-generator/templates/template-helpers.js +0 -726
- package/dist/agent-generator/templates/template-helpers.js.map +0 -1
- package/dist/agent-generator/types.d.ts +0 -196
- package/dist/agent-generator/types.d.ts.map +0 -1
- package/dist/agent-generator/types.js +0 -27
- package/dist/agent-generator/types.js.map +0 -1
- package/dist/analyzer.d.ts +0 -38
- package/dist/analyzer.d.ts.map +0 -1
- package/dist/analyzer.js +0 -383
- package/dist/analyzer.js.map +0 -1
- package/dist/analyzers/forecast.d.ts +0 -85
- package/dist/analyzers/forecast.d.ts.map +0 -1
- package/dist/analyzers/forecast.js +0 -337
- package/dist/analyzers/forecast.js.map +0 -1
- package/dist/analyzers/git-cache.d.ts +0 -7
- package/dist/analyzers/git-cache.d.ts.map +0 -1
- package/dist/analyzers/git-cache.js +0 -41
- package/dist/analyzers/git-cache.js.map +0 -1
- package/dist/analyzers/git-history.d.ts +0 -113
- package/dist/analyzers/git-history.d.ts.map +0 -1
- package/dist/analyzers/git-history.js +0 -333
- package/dist/analyzers/git-history.js.map +0 -1
- package/dist/analyzers/index.d.ts +0 -10
- package/dist/analyzers/index.d.ts.map +0 -1
- package/dist/analyzers/index.js +0 -7
- package/dist/analyzers/index.js.map +0 -1
- package/dist/analyzers/temporal-scorer.d.ts +0 -72
- package/dist/analyzers/temporal-scorer.d.ts.map +0 -1
- package/dist/analyzers/temporal-scorer.js +0 -140
- package/dist/analyzers/temporal-scorer.js.map +0 -1
- package/dist/anti-patterns.d.ts +0 -24
- package/dist/anti-patterns.d.ts.map +0 -1
- package/dist/anti-patterns.js +0 -230
- package/dist/anti-patterns.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/config.d.ts +0 -12
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -110
- package/dist/config.js.map +0 -1
- package/dist/diagram.d.ts +0 -9
- package/dist/diagram.d.ts.map +0 -1
- package/dist/diagram.js +0 -116
- package/dist/diagram.js.map +0 -1
- package/dist/html-reporter.d.ts +0 -47
- package/dist/html-reporter.d.ts.map +0 -1
- package/dist/html-reporter.js +0 -1747
- package/dist/html-reporter.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/project-summarizer.d.ts +0 -38
- package/dist/project-summarizer.d.ts.map +0 -1
- package/dist/project-summarizer.js +0 -463
- package/dist/project-summarizer.js.map +0 -1
- package/dist/refactor-engine.d.ts +0 -18
- package/dist/refactor-engine.d.ts.map +0 -1
- package/dist/refactor-engine.js +0 -86
- package/dist/refactor-engine.js.map +0 -1
- package/dist/refactor-reporter.d.ts.map +0 -1
- package/dist/refactor-reporter.js.map +0 -1
- package/dist/reporter.d.ts.map +0 -1
- package/dist/reporter.js.map +0 -1
- package/dist/rules/barrel-optimizer.d.ts +0 -13
- package/dist/rules/barrel-optimizer.d.ts.map +0 -1
- package/dist/rules/barrel-optimizer.js +0 -77
- package/dist/rules/barrel-optimizer.js.map +0 -1
- package/dist/rules/dead-code-detector.d.ts +0 -21
- package/dist/rules/dead-code-detector.d.ts.map +0 -1
- package/dist/rules/dead-code-detector.js +0 -117
- package/dist/rules/dead-code-detector.js.map +0 -1
- package/dist/rules/hub-splitter.d.ts +0 -13
- package/dist/rules/hub-splitter.d.ts.map +0 -1
- package/dist/rules/hub-splitter.js +0 -110
- package/dist/rules/hub-splitter.js.map +0 -1
- package/dist/rules/import-organizer.d.ts +0 -13
- package/dist/rules/import-organizer.d.ts.map +0 -1
- package/dist/rules/import-organizer.js +0 -85
- package/dist/rules/import-organizer.js.map +0 -1
- package/dist/rules/module-grouper.d.ts +0 -13
- package/dist/rules/module-grouper.d.ts.map +0 -1
- package/dist/rules/module-grouper.js +0 -110
- package/dist/rules/module-grouper.js.map +0 -1
- package/dist/scanner.d.ts +0 -31
- package/dist/scanner.d.ts.map +0 -1
- package/dist/scanner.js +0 -328
- package/dist/scanner.js.map +0 -1
- package/dist/scorer.d.ts +0 -27
- package/dist/scorer.d.ts.map +0 -1
- package/dist/scorer.js +0 -229
- package/dist/scorer.js.map +0 -1
- package/dist/types.d.ts +0 -186
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/examples/sample-report.md +0 -207
- package/jest.config.js +0 -18
- package/src/agent-generator/context-enricher.ts +0 -672
- package/src/agent-generator/domain-inferrer.ts +0 -635
- package/src/agent-generator/framework-detector.ts +0 -669
- package/src/agent-generator/index.ts +0 -634
- package/src/agent-generator/stack-detector.ts +0 -115
- package/src/agent-generator/templates/core/agents.ts +0 -1296
- package/src/agent-generator/templates/core/architecture-rules.ts +0 -287
- package/src/agent-generator/templates/core/general-rules.ts +0 -306
- package/src/agent-generator/templates/core/hooks-generator.ts +0 -242
- package/src/agent-generator/templates/core/index-md.ts +0 -260
- package/src/agent-generator/templates/core/orchestrator.ts +0 -459
- package/src/agent-generator/templates/core/preflight.ts +0 -215
- package/src/agent-generator/templates/core/quality-gates.ts +0 -256
- package/src/agent-generator/templates/core/security-rules.ts +0 -543
- package/src/agent-generator/templates/core/skills-generator.ts +0 -585
- package/src/agent-generator/templates/core/workflow-fix-bug.ts +0 -239
- package/src/agent-generator/templates/core/workflow-new-feature.ts +0 -323
- package/src/agent-generator/templates/core/workflow-review.ts +0 -106
- package/src/agent-generator/templates/domain/index.ts +0 -1201
- package/src/agent-generator/templates/stack/index.ts +0 -705
- package/src/agent-generator/templates/template-helpers.ts +0 -776
- package/src/agent-generator/types.ts +0 -232
- package/src/analyzer.ts +0 -447
- package/src/analyzers/forecast.ts +0 -496
- package/src/analyzers/git-cache.ts +0 -52
- package/src/analyzers/git-history.ts +0 -488
- package/src/analyzers/index.ts +0 -33
- package/src/analyzers/temporal-scorer.ts +0 -227
- package/src/anti-patterns.ts +0 -287
- package/src/cli.ts +0 -517
- package/src/config.ts +0 -123
- package/src/diagram.ts +0 -144
- package/src/html-reporter.ts +0 -1830
- package/src/project-summarizer.ts +0 -521
- package/src/refactor-engine.ts +0 -117
- package/src/rules/barrel-optimizer.ts +0 -97
- package/src/rules/dead-code-detector.ts +0 -132
- package/src/rules/hub-splitter.ts +0 -123
- package/src/rules/import-organizer.ts +0 -98
- package/src/rules/module-grouper.ts +0 -124
- package/src/scanner.ts +0 -344
- package/src/scorer.ts +0 -254
- package/src/types.ts +0 -193
- package/tests/agent-generator.test.ts +0 -427
- package/tests/analyzers-integration.test.ts +0 -174
- package/tests/anti-patterns.test.ts +0 -94
- package/tests/context-enricher.test.ts +0 -971
- package/tests/fixtures/monorepo/package.json +0 -6
- package/tests/fixtures/monorepo/packages/app/package.json +0 -12
- package/tests/fixtures/monorepo/packages/app/src/index.ts +0 -6
- package/tests/fixtures/monorepo/packages/core/package.json +0 -7
- package/tests/fixtures/monorepo/packages/core/src/index.ts +0 -7
- package/tests/forecast.test.ts +0 -509
- package/tests/framework-detector.test.ts +0 -1172
- package/tests/git-history.test.ts +0 -254
- package/tests/monorepo-scan.test.ts +0 -170
- package/tests/scanner.test.ts +0 -54
- package/tests/scorer.test.ts +0 -674
- package/tests/stack-detector.test.ts +0 -241
- package/tests/template-generation.test.ts +0 -706
- package/tests/template-helpers.test.ts +0 -1152
- package/tests/temporal-scorer.test.ts +0 -307
- /package/dist/{reporter.js → src/adapters/reporter.js} +0 -0
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { basename, dirname } from 'path';
|
|
2
|
-
/**
|
|
3
|
-
* Import Organizer Rule (Tier 1)
|
|
4
|
-
* Detects files that import from too many different modules (cross-boundary).
|
|
5
|
-
* Suggests dependency injection or facade patterns.
|
|
6
|
-
*/
|
|
7
|
-
export class ImportOrganizerRule {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.name = 'import-organizer';
|
|
10
|
-
this.tier = 1;
|
|
11
|
-
}
|
|
12
|
-
analyze(report, projectPath) {
|
|
13
|
-
const steps = [];
|
|
14
|
-
// Find files that import from many different directories
|
|
15
|
-
const crossBoundary = {};
|
|
16
|
-
for (const edge of report.dependencyGraph.edges) {
|
|
17
|
-
const fromDir = dirname(edge.from);
|
|
18
|
-
const toDir = dirname(edge.to);
|
|
19
|
-
if (!crossBoundary[edge.from]) {
|
|
20
|
-
crossBoundary[edge.from] = { targets: new Set(), dirs: new Set() };
|
|
21
|
-
}
|
|
22
|
-
crossBoundary[edge.from].targets.add(edge.to);
|
|
23
|
-
if (fromDir !== toDir) {
|
|
24
|
-
crossBoundary[edge.from].dirs.add(toDir);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
// Files importing from 3+ different directories
|
|
28
|
-
const violators = Object.entries(crossBoundary)
|
|
29
|
-
.filter(([_, data]) => data.dirs.size >= 3)
|
|
30
|
-
.sort((a, b) => b[1].dirs.size - a[1].dirs.size);
|
|
31
|
-
for (const [file, data] of violators) {
|
|
32
|
-
const operations = [];
|
|
33
|
-
const fileName = basename(file);
|
|
34
|
-
const fileDir = dirname(file);
|
|
35
|
-
// Suggest creating a facade/service layer
|
|
36
|
-
const ext = fileName.split('.').pop() || 'py';
|
|
37
|
-
const nameBase = fileName.replace(/\.[^.]+$/, '');
|
|
38
|
-
const facadePath = `${fileDir}/${nameBase}_deps.${ext}`;
|
|
39
|
-
operations.push({
|
|
40
|
-
type: 'CREATE',
|
|
41
|
-
path: facadePath,
|
|
42
|
-
description: `Create dependency facade \`${basename(facadePath)}\` — centralizes ${data.dirs.size} cross-module imports`,
|
|
43
|
-
content: this.generateFacadeContent(ext, Array.from(data.targets), Array.from(data.dirs)),
|
|
44
|
-
});
|
|
45
|
-
operations.push({
|
|
46
|
-
type: 'MODIFY',
|
|
47
|
-
path: file,
|
|
48
|
-
description: `Refactor \`${fileName}\` to import from local facade instead of ${data.dirs.size} different modules`,
|
|
49
|
-
});
|
|
50
|
-
steps.push({
|
|
51
|
-
id: 0,
|
|
52
|
-
tier: 1,
|
|
53
|
-
rule: this.name,
|
|
54
|
-
priority: data.dirs.size >= 5 ? 'HIGH' : 'MEDIUM',
|
|
55
|
-
title: `Reduce cross-boundary imports: ${fileName}`,
|
|
56
|
-
description: `\`${file}\` imports from ${data.dirs.size} different modules: ` +
|
|
57
|
-
`${Array.from(data.dirs).map((d) => `\`${d}\``).join(', ')}. ` +
|
|
58
|
-
`Consider using a facade or dependency injection.`,
|
|
59
|
-
rationale: `Files with imports scattered across many modules have high afferent coupling. ` +
|
|
60
|
-
`A facade centralizes these dependencies, making the file easier to test (mock one facade) ` +
|
|
61
|
-
`and reducing the impact of changes in dependent modules.`,
|
|
62
|
-
operations,
|
|
63
|
-
scoreImpact: [
|
|
64
|
-
{ metric: 'cohesion', before: report.score.breakdown.cohesion, after: Math.min(95, report.score.breakdown.cohesion + 5) },
|
|
65
|
-
{ metric: 'coupling', before: report.score.breakdown.coupling, after: Math.min(95, report.score.breakdown.coupling + 5) },
|
|
66
|
-
],
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
return steps;
|
|
70
|
-
}
|
|
71
|
-
generateFacadeContent(ext, targets, dirs) {
|
|
72
|
-
if (ext === 'py') {
|
|
73
|
-
const imports = targets
|
|
74
|
-
.map((t) => `# from ${t.replace(/\//g, '.')} import ...`)
|
|
75
|
-
.join('\n');
|
|
76
|
-
return `"""Dependency facade — centralizes cross-module imports."""\n\n${imports}\n\n# Re-export what ${dirs.length} modules need\n`;
|
|
77
|
-
}
|
|
78
|
-
// JS/TS
|
|
79
|
-
const imports = targets
|
|
80
|
-
.map((t) => `// export { ... } from '${t}';`)
|
|
81
|
-
.join('\n');
|
|
82
|
-
return `/**\n * Dependency facade — centralizes cross-module imports.\n */\n\n${imports}\n`;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
//# sourceMappingURL=import-organizer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"import-organizer.js","sourceRoot":"","sources":["../../src/rules/import-organizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { AnalysisReport, RefactorRule, RefactorStep } from '../types.js';
|
|
2
|
-
/**
|
|
3
|
-
* Module Grouper Rule (Tier 1)
|
|
4
|
-
* Analyzes which files are frequently imported together and suggests
|
|
5
|
-
* grouping them into cohesive modules/packages.
|
|
6
|
-
*/
|
|
7
|
-
export declare class ModuleGrouperRule implements RefactorRule {
|
|
8
|
-
name: string;
|
|
9
|
-
tier: 1;
|
|
10
|
-
analyze(report: AnalysisReport, projectPath: string): RefactorStep[];
|
|
11
|
-
private suggestModuleName;
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=module-grouper.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module-grouper.d.ts","sourceRoot":"","sources":["../../src/rules/module-grouper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAiB,MAAM,aAAa,CAAC;AAExF;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IACpD,IAAI,SAAoB;IACxB,IAAI,EAAG,CAAC,CAAU;IAElB,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY,EAAE;IAqGpE,OAAO,CAAC,iBAAiB;CAU1B"}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { basename, dirname, join } from 'path';
|
|
2
|
-
/**
|
|
3
|
-
* Module Grouper Rule (Tier 1)
|
|
4
|
-
* Analyzes which files are frequently imported together and suggests
|
|
5
|
-
* grouping them into cohesive modules/packages.
|
|
6
|
-
*/
|
|
7
|
-
export class ModuleGrouperRule {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.name = 'module-grouper';
|
|
10
|
-
this.tier = 1;
|
|
11
|
-
}
|
|
12
|
-
analyze(report, projectPath) {
|
|
13
|
-
const steps = [];
|
|
14
|
-
// Build co-import matrix: which files are imported together?
|
|
15
|
-
const coImportCount = {};
|
|
16
|
-
// For each source file, see what it imports
|
|
17
|
-
const importsBySource = {};
|
|
18
|
-
for (const edge of report.dependencyGraph.edges) {
|
|
19
|
-
if (!importsBySource[edge.from])
|
|
20
|
-
importsBySource[edge.from] = [];
|
|
21
|
-
importsBySource[edge.from].push(edge.to);
|
|
22
|
-
}
|
|
23
|
-
// Count co-imports
|
|
24
|
-
for (const [source, targets] of Object.entries(importsBySource)) {
|
|
25
|
-
for (let i = 0; i < targets.length; i++) {
|
|
26
|
-
for (let j = i + 1; j < targets.length; j++) {
|
|
27
|
-
const a = targets[i];
|
|
28
|
-
const b = targets[j];
|
|
29
|
-
if (!coImportCount[a])
|
|
30
|
-
coImportCount[a] = {};
|
|
31
|
-
if (!coImportCount[b])
|
|
32
|
-
coImportCount[b] = {};
|
|
33
|
-
coImportCount[a][b] = (coImportCount[a][b] || 0) + 1;
|
|
34
|
-
coImportCount[b][a] = (coImportCount[b][a] || 0) + 1;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
// Find clusters: files that are always imported together
|
|
39
|
-
const clusters = [];
|
|
40
|
-
const visited = new Set();
|
|
41
|
-
for (const [fileA, partners] of Object.entries(coImportCount)) {
|
|
42
|
-
if (visited.has(fileA))
|
|
43
|
-
continue;
|
|
44
|
-
const strongPartners = Object.entries(partners)
|
|
45
|
-
.filter(([_, count]) => count >= 2)
|
|
46
|
-
.sort((a, b) => b[1] - a[1]);
|
|
47
|
-
if (strongPartners.length >= 2) {
|
|
48
|
-
const cluster = [fileA, ...strongPartners.map(([f]) => f)];
|
|
49
|
-
const inSameDir = cluster.every((f) => dirname(f) === dirname(cluster[0]));
|
|
50
|
-
// Only suggest if NOT already in the same directory
|
|
51
|
-
if (!inSameDir) {
|
|
52
|
-
const score = strongPartners.reduce((sum, [_, c]) => sum + c, 0);
|
|
53
|
-
clusters.push({ files: cluster, coImportScore: score });
|
|
54
|
-
cluster.forEach((f) => visited.add(f));
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
// Generate steps for each cluster
|
|
59
|
-
for (const cluster of clusters.slice(0, 3)) {
|
|
60
|
-
const operations = [];
|
|
61
|
-
const clusterName = this.suggestModuleName(cluster.files);
|
|
62
|
-
const targetDir = `${dirname(cluster.files[0])}/${clusterName}`;
|
|
63
|
-
// Create new module directory
|
|
64
|
-
operations.push({
|
|
65
|
-
type: 'CREATE',
|
|
66
|
-
path: `${targetDir}/__init__.py`,
|
|
67
|
-
description: `Create new module \`${clusterName}/\` to group ${cluster.files.length} co-dependent files`,
|
|
68
|
-
content: `"""Module ${clusterName} — grouped by co-import pattern."""\n`,
|
|
69
|
-
});
|
|
70
|
-
// Move files
|
|
71
|
-
for (const file of cluster.files) {
|
|
72
|
-
const newPath = join(targetDir, basename(file));
|
|
73
|
-
operations.push({
|
|
74
|
-
type: 'MOVE',
|
|
75
|
-
path: file,
|
|
76
|
-
newPath,
|
|
77
|
-
description: `Move \`${basename(file)}\` → \`${clusterName}/${basename(file)}\``,
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
steps.push({
|
|
81
|
-
id: 0,
|
|
82
|
-
tier: 1,
|
|
83
|
-
rule: this.name,
|
|
84
|
-
priority: 'MEDIUM',
|
|
85
|
-
title: `Group co-dependent files into \`${clusterName}/\``,
|
|
86
|
-
description: `Files ${cluster.files.map((f) => `\`${basename(f)}\``).join(', ')} ` +
|
|
87
|
-
`are frequently imported together (co-import score: ${cluster.coImportScore}). ` +
|
|
88
|
-
`Grouping them improves cohesion.`,
|
|
89
|
-
rationale: `Files that are frequently imported together belong in the same module. ` +
|
|
90
|
-
`This improves discoverability and reduces the cognitive load of understanding ` +
|
|
91
|
-
`which files work together.`,
|
|
92
|
-
operations,
|
|
93
|
-
scoreImpact: [
|
|
94
|
-
{ metric: 'cohesion', before: report.score.breakdown.cohesion, after: Math.min(95, report.score.breakdown.cohesion + 10) },
|
|
95
|
-
{ metric: 'modularity', before: report.score.breakdown.modularity, after: Math.min(95, report.score.breakdown.modularity + 5) },
|
|
96
|
-
],
|
|
97
|
-
});
|
|
98
|
-
}
|
|
99
|
-
return steps;
|
|
100
|
-
}
|
|
101
|
-
suggestModuleName(files) {
|
|
102
|
-
// Try to infer a common theme from filenames
|
|
103
|
-
const names = files.map((f) => basename(f).replace(/\.[^.]+$/, '').toLowerCase());
|
|
104
|
-
const commonParts = names[0].split(/[_-]/).filter((part) => names.every((n) => n.includes(part)));
|
|
105
|
-
if (commonParts.length > 0)
|
|
106
|
-
return commonParts[0];
|
|
107
|
-
return 'shared';
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
//# sourceMappingURL=module-grouper.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"module-grouper.js","sourceRoot":"","sources":["../../src/rules/module-grouper.ts"],"names":[],"mappings":"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"}
|
package/dist/scanner.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { ProjectInfo, ArchitectConfig } from './types.js';
|
|
2
|
-
export declare class ProjectScanner {
|
|
3
|
-
private projectPath;
|
|
4
|
-
private config;
|
|
5
|
-
private frameworks;
|
|
6
|
-
constructor(projectPath: string, config: ArchitectConfig);
|
|
7
|
-
scan(): ProjectInfo;
|
|
8
|
-
/**
|
|
9
|
-
* Detect npm/yarn/pnpm workspaces from root package.json.
|
|
10
|
-
* Reads the "workspaces" field and resolves each workspace to its package.json.
|
|
11
|
-
*/
|
|
12
|
-
private detectWorkspaces;
|
|
13
|
-
/**
|
|
14
|
-
* Resolve project name from nearest package.json or directory name
|
|
15
|
-
*/
|
|
16
|
-
private resolveProjectName;
|
|
17
|
-
private scanDirectory;
|
|
18
|
-
private isSourceFile;
|
|
19
|
-
private buildFileTree;
|
|
20
|
-
/**
|
|
21
|
-
* Detect frameworks ONLY from specified package.json files.
|
|
22
|
-
* Never reads package.json from node_modules.
|
|
23
|
-
* No string-matching fallback — only structured dependency key detection.
|
|
24
|
-
*/
|
|
25
|
-
private detectFrameworks;
|
|
26
|
-
private detectLanguages;
|
|
27
|
-
private detectLanguage;
|
|
28
|
-
private countLines;
|
|
29
|
-
private countTotalLines;
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=scanner.d.ts.map
|
package/dist/scanner.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAY,WAAW,EAAE,eAAe,EAAiB,MAAM,YAAY,CAAC;AAEnF,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,UAAU,CAA0B;gBAEhC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe;IAKxD,IAAI,IAAI,WAAW;IA8BnB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAsDxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAe1B,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,YAAY;IA8BpB,OAAO,CAAC,aAAa;IAyCrB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAiFxB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,cAAc;IA0BtB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,eAAe;CAGxB"}
|
package/dist/scanner.js
DELETED
|
@@ -1,328 +0,0 @@
|
|
|
1
|
-
import { globSync } from 'glob';
|
|
2
|
-
import { readFileSync, lstatSync, existsSync } from 'fs';
|
|
3
|
-
import { join, relative, extname } from 'path';
|
|
4
|
-
export class ProjectScanner {
|
|
5
|
-
constructor(projectPath, config) {
|
|
6
|
-
this.frameworks = new Set();
|
|
7
|
-
this.projectPath = projectPath;
|
|
8
|
-
this.config = config;
|
|
9
|
-
}
|
|
10
|
-
scan() {
|
|
11
|
-
const files = this.scanDirectory();
|
|
12
|
-
const fileTree = this.buildFileTree(files);
|
|
13
|
-
// Detect workspaces from root package.json
|
|
14
|
-
const workspaces = this.detectWorkspaces();
|
|
15
|
-
// Detect frameworks ONLY from root + workspace package.json files (never from node_modules)
|
|
16
|
-
const workspacePkgJsonPaths = [
|
|
17
|
-
join(this.projectPath, 'package.json'),
|
|
18
|
-
...workspaces.map(ws => join(ws.path, 'package.json')),
|
|
19
|
-
].filter(p => existsSync(p));
|
|
20
|
-
const frameworks = this.detectFrameworks(workspacePkgJsonPaths);
|
|
21
|
-
const languages = this.detectLanguages(files);
|
|
22
|
-
const totalLines = this.countTotalLines(files);
|
|
23
|
-
const projectName = this.resolveProjectName(workspacePkgJsonPaths);
|
|
24
|
-
return {
|
|
25
|
-
path: this.projectPath,
|
|
26
|
-
name: projectName,
|
|
27
|
-
frameworks: Array.from(frameworks),
|
|
28
|
-
totalFiles: files.length,
|
|
29
|
-
totalLines,
|
|
30
|
-
primaryLanguages: languages,
|
|
31
|
-
fileTree,
|
|
32
|
-
workspaces: workspaces.length > 0 ? workspaces : undefined,
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Detect npm/yarn/pnpm workspaces from root package.json.
|
|
37
|
-
* Reads the "workspaces" field and resolves each workspace to its package.json.
|
|
38
|
-
*/
|
|
39
|
-
detectWorkspaces() {
|
|
40
|
-
const rootPkgPath = join(this.projectPath, 'package.json');
|
|
41
|
-
if (!existsSync(rootPkgPath))
|
|
42
|
-
return [];
|
|
43
|
-
try {
|
|
44
|
-
const rootPkg = JSON.parse(readFileSync(rootPkgPath, 'utf-8'));
|
|
45
|
-
let workspaceGlobs = [];
|
|
46
|
-
if (Array.isArray(rootPkg.workspaces)) {
|
|
47
|
-
workspaceGlobs = rootPkg.workspaces;
|
|
48
|
-
}
|
|
49
|
-
else if (rootPkg.workspaces?.packages && Array.isArray(rootPkg.workspaces.packages)) {
|
|
50
|
-
workspaceGlobs = rootPkg.workspaces.packages;
|
|
51
|
-
}
|
|
52
|
-
if (workspaceGlobs.length === 0)
|
|
53
|
-
return [];
|
|
54
|
-
const workspaces = [];
|
|
55
|
-
for (const pattern of workspaceGlobs) {
|
|
56
|
-
// Resolve glob patterns like "packages/*"
|
|
57
|
-
const dirs = globSync(pattern, {
|
|
58
|
-
cwd: this.projectPath,
|
|
59
|
-
absolute: true,
|
|
60
|
-
});
|
|
61
|
-
for (const dir of dirs) {
|
|
62
|
-
const pkgPath = join(dir, 'package.json');
|
|
63
|
-
if (!existsSync(pkgPath))
|
|
64
|
-
continue;
|
|
65
|
-
try {
|
|
66
|
-
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
67
|
-
workspaces.push({
|
|
68
|
-
name: pkg.name || relative(this.projectPath, dir),
|
|
69
|
-
path: dir,
|
|
70
|
-
relativePath: relative(this.projectPath, dir),
|
|
71
|
-
description: pkg.description || '',
|
|
72
|
-
version: pkg.version || '0.0.0',
|
|
73
|
-
dependencies: pkg.dependencies || {},
|
|
74
|
-
devDependencies: pkg.devDependencies || {},
|
|
75
|
-
bin: pkg.bin || undefined,
|
|
76
|
-
main: pkg.main || undefined,
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
// Skip unparseable package.json
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return workspaces;
|
|
85
|
-
}
|
|
86
|
-
catch {
|
|
87
|
-
return [];
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Resolve project name from nearest package.json or directory name
|
|
92
|
-
*/
|
|
93
|
-
resolveProjectName(packageJsonPaths) {
|
|
94
|
-
for (const pkgPath of packageJsonPaths) {
|
|
95
|
-
try {
|
|
96
|
-
const content = readFileSync(pkgPath, 'utf-8');
|
|
97
|
-
const parsed = JSON.parse(content);
|
|
98
|
-
if (parsed.name) {
|
|
99
|
-
return parsed.name;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
catch {
|
|
103
|
-
// skip
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
return this.projectPath.split('/').pop() || 'project';
|
|
107
|
-
}
|
|
108
|
-
scanDirectory() {
|
|
109
|
-
const ignorePatterns = this.config.ignore || [];
|
|
110
|
-
const files = globSync('**/*', {
|
|
111
|
-
cwd: this.projectPath,
|
|
112
|
-
ignore: ignorePatterns,
|
|
113
|
-
absolute: true,
|
|
114
|
-
nodir: true,
|
|
115
|
-
});
|
|
116
|
-
return files.filter((f) => !lstatSync(f).isDirectory() && this.isSourceFile(f));
|
|
117
|
-
}
|
|
118
|
-
isSourceFile(filePath) {
|
|
119
|
-
const ext = extname(filePath).toLowerCase();
|
|
120
|
-
const sourceExtensions = [
|
|
121
|
-
'.js',
|
|
122
|
-
'.ts',
|
|
123
|
-
'.tsx',
|
|
124
|
-
'.jsx',
|
|
125
|
-
'.py',
|
|
126
|
-
'.java',
|
|
127
|
-
'.go',
|
|
128
|
-
'.rb',
|
|
129
|
-
'.php',
|
|
130
|
-
'.cs',
|
|
131
|
-
'.cpp',
|
|
132
|
-
'.c',
|
|
133
|
-
'.h',
|
|
134
|
-
'.rs',
|
|
135
|
-
'.kt',
|
|
136
|
-
'.scala',
|
|
137
|
-
'.groovy',
|
|
138
|
-
'.sql',
|
|
139
|
-
'.graphql',
|
|
140
|
-
'.json',
|
|
141
|
-
'.yaml',
|
|
142
|
-
'.yml',
|
|
143
|
-
'.xml',
|
|
144
|
-
];
|
|
145
|
-
return sourceExtensions.includes(ext);
|
|
146
|
-
}
|
|
147
|
-
buildFileTree(files) {
|
|
148
|
-
const root = {
|
|
149
|
-
path: this.projectPath,
|
|
150
|
-
name: this.projectPath.split('/').pop() || 'root',
|
|
151
|
-
type: 'directory',
|
|
152
|
-
};
|
|
153
|
-
for (const file of files) {
|
|
154
|
-
const relativePath = relative(this.projectPath, file);
|
|
155
|
-
const parts = relativePath.split('/');
|
|
156
|
-
let current = root;
|
|
157
|
-
for (let i = 0; i < parts.length; i++) {
|
|
158
|
-
const part = parts[i];
|
|
159
|
-
const isFile = i === parts.length - 1;
|
|
160
|
-
let child = (current.children || []).find((c) => c.name === part);
|
|
161
|
-
if (!child) {
|
|
162
|
-
child = {
|
|
163
|
-
path: join(current.path, part),
|
|
164
|
-
name: part,
|
|
165
|
-
type: isFile ? 'file' : 'directory',
|
|
166
|
-
extension: isFile ? extname(part) : undefined,
|
|
167
|
-
};
|
|
168
|
-
if (isFile) {
|
|
169
|
-
child.lines = this.countLines(file);
|
|
170
|
-
child.language = this.detectLanguage(file);
|
|
171
|
-
}
|
|
172
|
-
if (!current.children)
|
|
173
|
-
current.children = [];
|
|
174
|
-
current.children.push(child);
|
|
175
|
-
}
|
|
176
|
-
current = child;
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
return root;
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Detect frameworks ONLY from specified package.json files.
|
|
183
|
-
* Never reads package.json from node_modules.
|
|
184
|
-
* No string-matching fallback — only structured dependency key detection.
|
|
185
|
-
*/
|
|
186
|
-
detectFrameworks(packageJsonPaths) {
|
|
187
|
-
const frameworks = new Set();
|
|
188
|
-
for (const file of packageJsonPaths) {
|
|
189
|
-
if (!file.endsWith('package.json'))
|
|
190
|
-
continue;
|
|
191
|
-
// Safety: skip any path that includes node_modules
|
|
192
|
-
if (file.includes('node_modules'))
|
|
193
|
-
continue;
|
|
194
|
-
try {
|
|
195
|
-
const content = readFileSync(file, 'utf-8');
|
|
196
|
-
const parsed = JSON.parse(content);
|
|
197
|
-
const allDeps = {
|
|
198
|
-
...parsed.dependencies,
|
|
199
|
-
...parsed.devDependencies,
|
|
200
|
-
};
|
|
201
|
-
// Detect from actual dependency keys — no string fallback
|
|
202
|
-
if (allDeps['@nestjs/core'] || allDeps['@nestjs/common'])
|
|
203
|
-
frameworks.add('NestJS');
|
|
204
|
-
if (allDeps['react'] || allDeps['react-dom'])
|
|
205
|
-
frameworks.add('React');
|
|
206
|
-
if (allDeps['@angular/core'])
|
|
207
|
-
frameworks.add('Angular');
|
|
208
|
-
if (allDeps['vue'] || allDeps['@vue/core'])
|
|
209
|
-
frameworks.add('Vue.js');
|
|
210
|
-
if (allDeps['express'])
|
|
211
|
-
frameworks.add('Express.js');
|
|
212
|
-
if (allDeps['next'])
|
|
213
|
-
frameworks.add('Next.js');
|
|
214
|
-
if (allDeps['fastify'])
|
|
215
|
-
frameworks.add('Fastify');
|
|
216
|
-
if (allDeps['typeorm'])
|
|
217
|
-
frameworks.add('TypeORM');
|
|
218
|
-
if (allDeps['prisma'] || allDeps['@prisma/client'])
|
|
219
|
-
frameworks.add('Prisma');
|
|
220
|
-
if (allDeps['sequelize'])
|
|
221
|
-
frameworks.add('Sequelize');
|
|
222
|
-
if (allDeps['mongoose'])
|
|
223
|
-
frameworks.add('Mongoose');
|
|
224
|
-
if (allDeps['@modelcontextprotocol/sdk'])
|
|
225
|
-
frameworks.add('MCP SDK');
|
|
226
|
-
if (allDeps['probot'])
|
|
227
|
-
frameworks.add('Probot');
|
|
228
|
-
if (allDeps['hono'])
|
|
229
|
-
frameworks.add('Hono');
|
|
230
|
-
}
|
|
231
|
-
catch {
|
|
232
|
-
// Skip unparseable files — NO fallback string matching
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
// Check for pom.xml only at project root
|
|
236
|
-
const pomPath = join(this.projectPath, 'pom.xml');
|
|
237
|
-
if (existsSync(pomPath)) {
|
|
238
|
-
try {
|
|
239
|
-
const content = readFileSync(pomPath, 'utf-8');
|
|
240
|
-
if (content.includes('spring-boot'))
|
|
241
|
-
frameworks.add('Spring Boot');
|
|
242
|
-
if (content.includes('spring') && !content.includes('spring-boot'))
|
|
243
|
-
frameworks.add('Spring');
|
|
244
|
-
}
|
|
245
|
-
catch {
|
|
246
|
-
// skip
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
// Check for requirements.txt only at project root
|
|
250
|
-
const reqPath = join(this.projectPath, 'requirements.txt');
|
|
251
|
-
if (existsSync(reqPath)) {
|
|
252
|
-
try {
|
|
253
|
-
const content = readFileSync(reqPath, 'utf-8');
|
|
254
|
-
if (content.includes('django'))
|
|
255
|
-
frameworks.add('Django');
|
|
256
|
-
if (content.includes('flask'))
|
|
257
|
-
frameworks.add('Flask');
|
|
258
|
-
if (content.includes('fastapi'))
|
|
259
|
-
frameworks.add('FastAPI');
|
|
260
|
-
}
|
|
261
|
-
catch {
|
|
262
|
-
// skip
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
// Check for Gemfile only at project root
|
|
266
|
-
const gemPath = join(this.projectPath, 'Gemfile');
|
|
267
|
-
if (existsSync(gemPath)) {
|
|
268
|
-
try {
|
|
269
|
-
const content = readFileSync(gemPath, 'utf-8');
|
|
270
|
-
if (content.includes('rails'))
|
|
271
|
-
frameworks.add('Ruby on Rails');
|
|
272
|
-
}
|
|
273
|
-
catch {
|
|
274
|
-
// skip
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
// Check for go.mod only at project root
|
|
278
|
-
if (existsSync(join(this.projectPath, 'go.mod'))) {
|
|
279
|
-
frameworks.add('Go');
|
|
280
|
-
}
|
|
281
|
-
return frameworks;
|
|
282
|
-
}
|
|
283
|
-
detectLanguages(files) {
|
|
284
|
-
const languages = new Set();
|
|
285
|
-
for (const file of files) {
|
|
286
|
-
const lang = this.detectLanguage(file);
|
|
287
|
-
if (lang && lang !== 'Unknown')
|
|
288
|
-
languages.add(lang);
|
|
289
|
-
}
|
|
290
|
-
return Array.from(languages);
|
|
291
|
-
}
|
|
292
|
-
detectLanguage(filePath) {
|
|
293
|
-
const ext = extname(filePath).toLowerCase();
|
|
294
|
-
const languageMap = {
|
|
295
|
-
'.js': 'JavaScript',
|
|
296
|
-
'.ts': 'TypeScript',
|
|
297
|
-
'.tsx': 'TypeScript',
|
|
298
|
-
'.jsx': 'JavaScript',
|
|
299
|
-
'.py': 'Python',
|
|
300
|
-
'.java': 'Java',
|
|
301
|
-
'.go': 'Go',
|
|
302
|
-
'.rb': 'Ruby',
|
|
303
|
-
'.php': 'PHP',
|
|
304
|
-
'.cs': 'C#',
|
|
305
|
-
'.cpp': 'C++',
|
|
306
|
-
'.c': 'C',
|
|
307
|
-
'.rs': 'Rust',
|
|
308
|
-
'.kt': 'Kotlin',
|
|
309
|
-
'.scala': 'Scala',
|
|
310
|
-
'.sql': 'SQL',
|
|
311
|
-
'.graphql': 'GraphQL',
|
|
312
|
-
};
|
|
313
|
-
return languageMap[ext] || 'Unknown';
|
|
314
|
-
}
|
|
315
|
-
countLines(filePath) {
|
|
316
|
-
try {
|
|
317
|
-
const content = readFileSync(filePath, 'utf-8');
|
|
318
|
-
return content.split('\n').length;
|
|
319
|
-
}
|
|
320
|
-
catch {
|
|
321
|
-
return 0;
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
countTotalLines(files) {
|
|
325
|
-
return files.reduce((total, file) => total + this.countLines(file), 0);
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
//# sourceMappingURL=scanner.js.map
|
package/dist/scanner.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"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"}
|
package/dist/scorer.d.ts
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { ArchitectureScore, DependencyEdge, AntiPattern } from './types.js';
|
|
2
|
-
export declare class ArchitectureScorer {
|
|
3
|
-
private modularity;
|
|
4
|
-
private coupling;
|
|
5
|
-
private cohesion;
|
|
6
|
-
private layering;
|
|
7
|
-
/**
|
|
8
|
-
* Barrel/index files that naturally have many connections and should be
|
|
9
|
-
* excluded from coupling max-edge penalty calculations.
|
|
10
|
-
*/
|
|
11
|
-
private static readonly BARREL_FILES;
|
|
12
|
-
score(edges: DependencyEdge[], antiPatterns: AntiPattern[], totalFiles: number): ArchitectureScore;
|
|
13
|
-
private calculateModularity;
|
|
14
|
-
private calculateCoupling;
|
|
15
|
-
private findNodeWithMaxEdges;
|
|
16
|
-
private calculateCohesion;
|
|
17
|
-
/**
|
|
18
|
-
* Determines if a dependency is "internal" (cohesive).
|
|
19
|
-
* Two files are considered cohesive if they share the same top-level
|
|
20
|
-
* package/directory (e.g., deepguard/cli.py → deepguard/analyzer.py).
|
|
21
|
-
* This is crucial for Python flat packages where all files live in
|
|
22
|
-
* one directory but ARE cohesive.
|
|
23
|
-
*/
|
|
24
|
-
private isInternalDependency;
|
|
25
|
-
private calculateLayering;
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=scorer.d.ts.map
|
package/dist/scorer.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scorer.d.ts","sourceRoot":"","sources":["../src/scorer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,WAAW,EAAkB,MAAM,YAAY,CAAC;AAG5F,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,QAAQ,CAAa;IAE7B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAGjC;IAEH,KAAK,CACH,KAAK,EAAE,cAAc,EAAE,EACvB,YAAY,EAAE,WAAW,EAAE,EAC3B,UAAU,EAAE,MAAM,GACjB,iBAAiB;IA2DpB,OAAO,CAAC,mBAAmB;IAqB3B,OAAO,CAAC,iBAAiB;IAwCzB,OAAO,CAAC,oBAAoB;IAuB5B,OAAO,CAAC,iBAAiB;IA4BzB;;;;;;OAMG;IACH,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,iBAAiB;CAqC1B"}
|