@evolith/smart-cli 0.0.2-beta → 0.0.3-beta
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/app.module.js +0 -2
- package/dist/app.module.js.map +1 -1
- package/dist/app.module.spec.d.ts +1 -0
- package/dist/app.module.spec.js +305 -0
- package/dist/app.module.spec.js.map +1 -0
- package/dist/commands/adr/adr.command.spec.d.ts +1 -0
- package/dist/commands/adr/adr.command.spec.js +409 -0
- package/dist/commands/adr/adr.command.spec.js.map +1 -0
- package/dist/commands/architecture/scaffold.command.spec.d.ts +1 -0
- package/dist/commands/architecture/scaffold.command.spec.js +207 -0
- package/dist/commands/architecture/scaffold.command.spec.js.map +1 -0
- package/dist/commands/completion/completion.command.spec.d.ts +1 -0
- package/dist/commands/completion/completion.command.spec.js +240 -0
- package/dist/commands/completion/completion.command.spec.js.map +1 -0
- package/dist/commands/docs/docs.command.spec.d.ts +1 -0
- package/dist/commands/docs/docs.command.spec.js +87 -0
- package/dist/commands/docs/docs.command.spec.js.map +1 -0
- package/dist/commands/drift/drift.command.spec.d.ts +1 -0
- package/dist/commands/drift/drift.command.spec.js +327 -0
- package/dist/commands/drift/drift.command.spec.js.map +1 -0
- package/dist/commands/history/history.command.spec.d.ts +1 -0
- package/dist/commands/history/history.command.spec.js +392 -0
- package/dist/commands/history/history.command.spec.js.map +1 -0
- package/dist/commands/init/agents.command.spec.js +398 -0
- package/dist/commands/init/agents.command.spec.js.map +1 -1
- package/dist/commands/init/init.command.spec.d.ts +1 -0
- package/dist/commands/init/init.command.spec.js +272 -0
- package/dist/commands/init/init.command.spec.js.map +1 -0
- package/dist/commands/init/upgrade.command.spec.d.ts +1 -0
- package/dist/commands/init/upgrade.command.spec.js +378 -0
- package/dist/commands/init/upgrade.command.spec.js.map +1 -0
- package/dist/commands/mcp/mcp-serve.command.spec.d.ts +1 -0
- package/dist/commands/mcp/mcp-serve.command.spec.js +58 -0
- package/dist/commands/mcp/mcp-serve.command.spec.js.map +1 -0
- package/dist/commands/sdlc/generate-domain.command.spec.d.ts +1 -0
- package/dist/commands/sdlc/generate-domain.command.spec.js +47 -0
- package/dist/commands/sdlc/generate-domain.command.spec.js.map +1 -0
- package/dist/commands/sdlc/handoff.command.spec.d.ts +1 -0
- package/dist/commands/sdlc/handoff.command.spec.js +395 -0
- package/dist/commands/sdlc/handoff.command.spec.js.map +1 -0
- package/dist/commands/sdlc/sdlc.command.spec.d.ts +1 -0
- package/dist/commands/sdlc/sdlc.command.spec.js +45 -0
- package/dist/commands/sdlc/sdlc.command.spec.js.map +1 -0
- package/dist/commands/standards/standards.command.spec.d.ts +1 -0
- package/dist/commands/standards/standards.command.spec.js +311 -0
- package/dist/commands/standards/standards.command.spec.js.map +1 -0
- package/dist/commands/validate/validate.command.spec.d.ts +1 -0
- package/dist/commands/validate/validate.command.spec.js +368 -0
- package/dist/commands/validate/validate.command.spec.js.map +1 -0
- package/dist/core/abstractions/providers/logger.provider.spec.d.ts +1 -0
- package/dist/core/abstractions/providers/logger.provider.spec.js +212 -0
- package/dist/core/abstractions/providers/logger.provider.spec.js.map +1 -0
- package/dist/core/di/container.spec.js +164 -0
- package/dist/core/di/container.spec.js.map +1 -1
- package/dist/core/mcp/metrics.service.spec.d.ts +1 -0
- package/dist/core/mcp/metrics.service.spec.js +159 -0
- package/dist/core/mcp/metrics.service.spec.js.map +1 -0
- package/dist/core/mcp/prompts/index.js +36 -0
- package/dist/core/mcp/prompts/index.js.map +1 -1
- package/dist/core/mcp/prompts/index.spec.d.ts +1 -0
- package/dist/core/mcp/prompts/index.spec.js +150 -0
- package/dist/core/mcp/prompts/index.spec.js.map +1 -0
- package/dist/core/mcp/resources/index.js +16 -0
- package/dist/core/mcp/resources/index.js.map +1 -1
- package/dist/core/mcp/resources/index.spec.d.ts +1 -0
- package/dist/core/mcp/resources/index.spec.js +212 -0
- package/dist/core/mcp/resources/index.spec.js.map +1 -0
- package/dist/core/mcp/server.d.ts +2 -1
- package/dist/core/mcp/server.js +256 -5
- package/dist/core/mcp/server.js.map +1 -1
- package/dist/core/mcp/server.spec.d.ts +1 -0
- package/dist/core/mcp/server.spec.js +563 -0
- package/dist/core/mcp/server.spec.js.map +1 -0
- package/dist/core/mcp/tools/agent.spec.d.ts +1 -0
- package/dist/core/mcp/tools/agent.spec.js +171 -0
- package/dist/core/mcp/tools/agent.spec.js.map +1 -0
- package/dist/core/mcp/tools/architecture.d.ts +2 -0
- package/dist/core/mcp/tools/architecture.js +68 -0
- package/dist/core/mcp/tools/architecture.js.map +1 -1
- package/dist/core/mcp/tools/architecture.spec.d.ts +1 -0
- package/dist/core/mcp/tools/architecture.spec.js +145 -0
- package/dist/core/mcp/tools/architecture.spec.js.map +1 -0
- package/dist/core/mcp/tools/moscow.d.ts +30 -0
- package/dist/core/mcp/tools/moscow.js +113 -0
- package/dist/core/mcp/tools/moscow.js.map +1 -0
- package/dist/core/mcp/tools/moscow.spec.d.ts +1 -0
- package/dist/core/mcp/tools/moscow.spec.js +209 -0
- package/dist/core/mcp/tools/moscow.spec.js.map +1 -0
- package/dist/core/mcp/tools/sdlc.js +2 -1
- package/dist/core/mcp/tools/sdlc.js.map +1 -1
- package/dist/core/mcp/tools/sdlc.spec.d.ts +1 -0
- package/dist/core/mcp/tools/sdlc.spec.js +170 -0
- package/dist/core/mcp/tools/sdlc.spec.js.map +1 -0
- package/dist/core/mcp/tools/validate.spec.d.ts +1 -0
- package/dist/core/mcp/tools/validate.spec.js +130 -0
- package/dist/core/mcp/tools/validate.spec.js.map +1 -0
- package/dist/core/mcp/watcher.service.spec.js +109 -8
- package/dist/core/mcp/watcher.service.spec.js.map +1 -1
- package/dist/core/observability/error-reporter.spec.d.ts +1 -0
- package/dist/core/observability/error-reporter.spec.js +291 -0
- package/dist/core/observability/error-reporter.spec.js.map +1 -0
- package/dist/core/observability/structured-logger.spec.d.ts +1 -0
- package/dist/core/observability/structured-logger.spec.js +197 -0
- package/dist/core/observability/structured-logger.spec.js.map +1 -0
- package/dist/core/observability/timing.spec.d.ts +1 -0
- package/dist/core/observability/timing.spec.js +216 -0
- package/dist/core/observability/timing.spec.js.map +1 -0
- package/dist/core/upgrade/satellite-upgrade.service.spec.js +121 -101
- package/dist/core/upgrade/satellite-upgrade.service.spec.js.map +1 -1
- package/dist/core/validators/deep-architecture-analyzer.d.ts +58 -0
- package/dist/core/validators/deep-architecture-analyzer.js +333 -0
- package/dist/core/validators/deep-architecture-analyzer.js.map +1 -0
- package/dist/core/validators/deep-architecture-analyzer.spec.d.ts +1 -0
- package/dist/core/validators/deep-architecture-analyzer.spec.js +216 -0
- package/dist/core/validators/deep-architecture-analyzer.spec.js.map +1 -0
- package/dist/core/validators/phase-gate-validator.service.js +3 -1
- package/dist/core/validators/phase-gate-validator.service.js.map +1 -1
- package/dist/core/validators/ruleset-validator-architecture.spec.js +2 -2
- package/dist/core/validators/ruleset-validator-architecture.spec.js.map +1 -1
- package/dist/core/validators/ruleset-validator.service.js +7 -7
- package/dist/core/validators/ruleset-validator.service.js.map +1 -1
- package/dist/core/validators/ruleset-validator.service.spec.js +347 -0
- package/dist/core/validators/ruleset-validator.service.spec.js.map +1 -1
- package/dist/domain/services/index.d.ts +1 -0
- package/dist/domain/services/index.js +3 -1
- package/dist/domain/services/index.js.map +1 -1
- package/dist/domain/services/moscow-prioritization.service.d.ts +44 -0
- package/dist/domain/services/moscow-prioritization.service.js +213 -0
- package/dist/domain/services/moscow-prioritization.service.js.map +1 -0
- package/dist/domain/services/moscow-prioritization.service.spec.d.ts +1 -0
- package/dist/domain/services/moscow-prioritization.service.spec.js +285 -0
- package/dist/domain/services/moscow-prioritization.service.spec.js.map +1 -0
- package/dist/domain/services/standards.service.spec.js +461 -1
- package/dist/domain/services/standards.service.spec.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.DeepArchitectureAnalyzer = void 0;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
const fs = __importStar(require("fs-extra"));
|
|
39
|
+
const LAYER_ORDER = ['domain', 'application', 'infrastructure', 'presentation'];
|
|
40
|
+
const LAYER_PATTERNS = {
|
|
41
|
+
domain: [
|
|
42
|
+
/\/domain\//,
|
|
43
|
+
/\/entities\//,
|
|
44
|
+
/\/value-objects\//,
|
|
45
|
+
/\/aggregates\//,
|
|
46
|
+
/\/domain-services\//,
|
|
47
|
+
/\/repositories\/(interfaces|ports)\//,
|
|
48
|
+
],
|
|
49
|
+
application: [
|
|
50
|
+
/\/application\//,
|
|
51
|
+
/\/use-cases\//,
|
|
52
|
+
/\/services\//,
|
|
53
|
+
/\/commands\//,
|
|
54
|
+
/\/queries\//,
|
|
55
|
+
/\/handlers\//,
|
|
56
|
+
],
|
|
57
|
+
infrastructure: [
|
|
58
|
+
/\/infrastructure\//,
|
|
59
|
+
/\/adapters\//,
|
|
60
|
+
/\/persistence\//,
|
|
61
|
+
/\/external\//,
|
|
62
|
+
/\/database\//,
|
|
63
|
+
/\/repositories\/(impl|implementations)\//,
|
|
64
|
+
],
|
|
65
|
+
presentation: [
|
|
66
|
+
/\/presentation\//,
|
|
67
|
+
/\/api\//,
|
|
68
|
+
/\/controllers\//,
|
|
69
|
+
/\/routes\//,
|
|
70
|
+
/\/graphql\//,
|
|
71
|
+
/\/rest\//,
|
|
72
|
+
],
|
|
73
|
+
};
|
|
74
|
+
class DeepArchitectureAnalyzer {
|
|
75
|
+
constructor(baseDir) {
|
|
76
|
+
this.importGraph = new Map();
|
|
77
|
+
this.baseDir = baseDir;
|
|
78
|
+
}
|
|
79
|
+
async analyze() {
|
|
80
|
+
await this.buildImportGraph();
|
|
81
|
+
const layerViolations = this.detectLayerViolations();
|
|
82
|
+
const contextViolations = this.detectContextViolations();
|
|
83
|
+
const couplingMetrics = this.calculateCouplingMetrics();
|
|
84
|
+
const dependencyInversionIssues = this.detectDependencyInversionIssues();
|
|
85
|
+
return {
|
|
86
|
+
layerViolations,
|
|
87
|
+
contextViolations,
|
|
88
|
+
couplingMetrics,
|
|
89
|
+
dependencyInversionIssues,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
async buildImportGraph() {
|
|
93
|
+
const srcDir = path.join(this.baseDir, 'src');
|
|
94
|
+
if (!(await fs.pathExists(srcDir)))
|
|
95
|
+
return;
|
|
96
|
+
const files = await this.findSourceFiles(srcDir);
|
|
97
|
+
for (const file of files) {
|
|
98
|
+
const imports = await this.extractImports(file);
|
|
99
|
+
const relativeFile = path.relative(this.baseDir, file);
|
|
100
|
+
this.importGraph.set(relativeFile, {
|
|
101
|
+
file: relativeFile,
|
|
102
|
+
imports,
|
|
103
|
+
layer: this.detectLayer(relativeFile),
|
|
104
|
+
context: this.detectContext(relativeFile),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async findSourceFiles(dir) {
|
|
109
|
+
const files = [];
|
|
110
|
+
const entries = await fs.readdir(dir);
|
|
111
|
+
for (const entry of entries) {
|
|
112
|
+
const fullPath = path.join(dir, entry);
|
|
113
|
+
const stat = await fs.stat(fullPath);
|
|
114
|
+
if (stat.isDirectory() && !entry.startsWith('.') && entry !== 'node_modules' && entry !== 'dist' && entry !== 'build') {
|
|
115
|
+
files.push(...await this.findSourceFiles(fullPath));
|
|
116
|
+
}
|
|
117
|
+
else if (stat.isFile() && (entry.endsWith('.ts') || entry.endsWith('.tsx') || entry.endsWith('.js') || entry.endsWith('.jsx'))) {
|
|
118
|
+
files.push(fullPath);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return files;
|
|
122
|
+
}
|
|
123
|
+
async extractImports(filePath) {
|
|
124
|
+
try {
|
|
125
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
126
|
+
const imports = [];
|
|
127
|
+
const importRegex = /(?:import\s+(?:.*?\s+from\s+)?['"]([^'"]+)['"]|require\s*\(\s*['"]([^'"]+)['"]\s*\))/g;
|
|
128
|
+
let match;
|
|
129
|
+
while ((match = importRegex.exec(content)) !== null) {
|
|
130
|
+
const importPath = match[1] || match[2];
|
|
131
|
+
if (importPath && !importPath.startsWith('node:') && !importPath.startsWith('http')) {
|
|
132
|
+
imports.push(importPath);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return imports;
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return [];
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
detectLayer(filePath) {
|
|
142
|
+
for (const [layer, patterns] of Object.entries(LAYER_PATTERNS)) {
|
|
143
|
+
for (const pattern of patterns) {
|
|
144
|
+
if (pattern.test(filePath)) {
|
|
145
|
+
return layer;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
detectContext(filePath) {
|
|
152
|
+
const srcIndex = filePath.indexOf('src/');
|
|
153
|
+
if (srcIndex === -1)
|
|
154
|
+
return undefined;
|
|
155
|
+
const afterSrc = filePath.slice(srcIndex + 4);
|
|
156
|
+
const parts = afterSrc.split('/');
|
|
157
|
+
if (parts.length >= 2) {
|
|
158
|
+
const potentialContext = parts[0];
|
|
159
|
+
if (!LAYER_ORDER.includes(potentialContext) && !['index.ts', 'main.ts', 'app.ts'].includes(potentialContext)) {
|
|
160
|
+
return potentialContext;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return undefined;
|
|
164
|
+
}
|
|
165
|
+
detectLayerViolations() {
|
|
166
|
+
const violations = [];
|
|
167
|
+
for (const [fromFile, node] of this.importGraph.entries()) {
|
|
168
|
+
if (!node.layer)
|
|
169
|
+
continue;
|
|
170
|
+
const fromLayerIndex = LAYER_ORDER.indexOf(node.layer);
|
|
171
|
+
if (fromLayerIndex === -1)
|
|
172
|
+
continue;
|
|
173
|
+
for (const importPath of node.imports) {
|
|
174
|
+
const resolvedPath = this.resolveImport(fromFile, importPath);
|
|
175
|
+
if (!resolvedPath)
|
|
176
|
+
continue;
|
|
177
|
+
const targetNode = this.importGraph.get(resolvedPath);
|
|
178
|
+
if (!targetNode?.layer)
|
|
179
|
+
continue;
|
|
180
|
+
const toLayerIndex = LAYER_ORDER.indexOf(targetNode.layer);
|
|
181
|
+
if (toLayerIndex === -1)
|
|
182
|
+
continue;
|
|
183
|
+
if (toLayerIndex < fromLayerIndex) {
|
|
184
|
+
violations.push({
|
|
185
|
+
ruleId: 'ARCH-LAYER-01',
|
|
186
|
+
fromLayer: node.layer,
|
|
187
|
+
toLayer: targetNode.layer,
|
|
188
|
+
fromFile,
|
|
189
|
+
toFile: resolvedPath,
|
|
190
|
+
severity: 'MUST',
|
|
191
|
+
blocking: true,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return violations;
|
|
197
|
+
}
|
|
198
|
+
detectContextViolations() {
|
|
199
|
+
const violations = [];
|
|
200
|
+
const contextFiles = new Map();
|
|
201
|
+
for (const [file, node] of this.importGraph.entries()) {
|
|
202
|
+
if (node.context) {
|
|
203
|
+
if (!contextFiles.has(node.context)) {
|
|
204
|
+
contextFiles.set(node.context, []);
|
|
205
|
+
}
|
|
206
|
+
contextFiles.get(node.context).push(file);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
for (const [fromFile, node] of this.importGraph.entries()) {
|
|
210
|
+
if (!node.context)
|
|
211
|
+
continue;
|
|
212
|
+
for (const importPath of node.imports) {
|
|
213
|
+
const resolvedPath = this.resolveImport(fromFile, importPath);
|
|
214
|
+
if (!resolvedPath)
|
|
215
|
+
continue;
|
|
216
|
+
const targetNode = this.importGraph.get(resolvedPath);
|
|
217
|
+
if (!targetNode?.context || targetNode.context === node.context)
|
|
218
|
+
continue;
|
|
219
|
+
const targetContextFiles = contextFiles.get(targetNode.context) || [];
|
|
220
|
+
if (targetContextFiles.includes(resolvedPath)) {
|
|
221
|
+
violations.push({
|
|
222
|
+
ruleId: 'ARCH-CTX-01',
|
|
223
|
+
fromContext: node.context,
|
|
224
|
+
toContext: targetNode.context,
|
|
225
|
+
fromFile,
|
|
226
|
+
toFile: resolvedPath,
|
|
227
|
+
severity: 'MUST',
|
|
228
|
+
blocking: true,
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return violations;
|
|
234
|
+
}
|
|
235
|
+
calculateCouplingMetrics() {
|
|
236
|
+
const afferent = {};
|
|
237
|
+
const efferent = {};
|
|
238
|
+
for (const [file, node] of this.importGraph.entries()) {
|
|
239
|
+
if (!node.context)
|
|
240
|
+
continue;
|
|
241
|
+
if (!afferent[node.context])
|
|
242
|
+
afferent[node.context] = 0;
|
|
243
|
+
if (!efferent[node.context])
|
|
244
|
+
efferent[node.context] = 0;
|
|
245
|
+
}
|
|
246
|
+
for (const [fromFile, node] of this.importGraph.entries()) {
|
|
247
|
+
if (!node.context)
|
|
248
|
+
continue;
|
|
249
|
+
for (const importPath of node.imports) {
|
|
250
|
+
const resolvedPath = this.resolveImport(fromFile, importPath);
|
|
251
|
+
if (!resolvedPath)
|
|
252
|
+
continue;
|
|
253
|
+
const targetNode = this.importGraph.get(resolvedPath);
|
|
254
|
+
if (!targetNode?.context || targetNode.context === node.context)
|
|
255
|
+
continue;
|
|
256
|
+
efferent[node.context] = (efferent[node.context] || 0) + 1;
|
|
257
|
+
afferent[targetNode.context] = (afferent[targetNode.context] || 0) + 1;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
const instability = {};
|
|
261
|
+
const allContexts = new Set([...Object.keys(afferent), ...Object.keys(efferent)]);
|
|
262
|
+
for (const context of allContexts) {
|
|
263
|
+
const ce = efferent[context] || 0;
|
|
264
|
+
const ca = afferent[context] || 0;
|
|
265
|
+
const total = ce + ca;
|
|
266
|
+
instability[context] = total > 0 ? ce / total : 0;
|
|
267
|
+
}
|
|
268
|
+
return {
|
|
269
|
+
afferentCoupling: afferent,
|
|
270
|
+
efferentCoupling: efferent,
|
|
271
|
+
instability,
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
detectDependencyInversionIssues() {
|
|
275
|
+
const issues = [];
|
|
276
|
+
for (const [file, node] of this.importGraph.entries()) {
|
|
277
|
+
if (node.layer !== 'domain')
|
|
278
|
+
continue;
|
|
279
|
+
for (const importPath of node.imports) {
|
|
280
|
+
if (importPath.includes('typeorm') || importPath.includes('prisma') || importPath.includes('mongoose') || importPath.includes('sequelize')) {
|
|
281
|
+
issues.push({
|
|
282
|
+
ruleId: 'ARCH-DI-01',
|
|
283
|
+
file,
|
|
284
|
+
issue: `Domain layer directly imports ORM library: ${importPath}`,
|
|
285
|
+
severity: 'MUST',
|
|
286
|
+
blocking: true,
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
if (importPath.includes('express') || importPath.includes('fastify') || importPath.includes('koa') || importPath.includes('hono')) {
|
|
290
|
+
issues.push({
|
|
291
|
+
ruleId: 'ARCH-DI-02',
|
|
292
|
+
file,
|
|
293
|
+
issue: `Domain layer directly imports web framework: ${importPath}`,
|
|
294
|
+
severity: 'MUST',
|
|
295
|
+
blocking: true,
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
if (importPath.startsWith('@nestjs')) {
|
|
299
|
+
issues.push({
|
|
300
|
+
ruleId: 'ARCH-DI-03',
|
|
301
|
+
file,
|
|
302
|
+
issue: `Domain layer imports NestJS framework: ${importPath}`,
|
|
303
|
+
severity: 'SHOULD',
|
|
304
|
+
blocking: false,
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
return issues;
|
|
310
|
+
}
|
|
311
|
+
resolveImport(fromFile, importPath) {
|
|
312
|
+
if (importPath.startsWith('.')) {
|
|
313
|
+
const fromDir = path.dirname(fromFile);
|
|
314
|
+
let resolved = path.normalize(path.join(fromDir, importPath));
|
|
315
|
+
if (!resolved.endsWith('.ts') && !resolved.endsWith('.js')) {
|
|
316
|
+
const tsPath = `${resolved}.ts`;
|
|
317
|
+
if (this.importGraph.has(tsPath))
|
|
318
|
+
return tsPath;
|
|
319
|
+
const indexPath = path.join(resolved, 'index.ts');
|
|
320
|
+
if (this.importGraph.has(indexPath))
|
|
321
|
+
return indexPath;
|
|
322
|
+
const jsPath = `${resolved}.js`;
|
|
323
|
+
if (this.importGraph.has(jsPath))
|
|
324
|
+
return jsPath;
|
|
325
|
+
}
|
|
326
|
+
if (this.importGraph.has(resolved))
|
|
327
|
+
return resolved;
|
|
328
|
+
}
|
|
329
|
+
return null;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
exports.DeepArchitectureAnalyzer = DeepArchitectureAnalyzer;
|
|
333
|
+
//# sourceMappingURL=deep-architecture-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep-architecture-analyzer.js","sourceRoot":"","sources":["../../../src/core/validators/deep-architecture-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const deep_architecture_analyzer_1 = require("./deep-architecture-analyzer");
|
|
37
|
+
const fs = __importStar(require("fs-extra"));
|
|
38
|
+
jest.mock('fs-extra');
|
|
39
|
+
const mockFs = fs;
|
|
40
|
+
describe('DeepArchitectureAnalyzer', () => {
|
|
41
|
+
let analyzer;
|
|
42
|
+
const testDir = '/test/repo';
|
|
43
|
+
beforeEach(() => {
|
|
44
|
+
jest.clearAllMocks();
|
|
45
|
+
analyzer = new deep_architecture_analyzer_1.DeepArchitectureAnalyzer(testDir);
|
|
46
|
+
});
|
|
47
|
+
describe('analyze', () => {
|
|
48
|
+
it('should return empty results when src directory does not exist', async () => {
|
|
49
|
+
mockFs.pathExists.mockResolvedValue(false);
|
|
50
|
+
const result = await analyzer.analyze();
|
|
51
|
+
expect(result.layerViolations).toHaveLength(0);
|
|
52
|
+
expect(result.contextViolations).toHaveLength(0);
|
|
53
|
+
expect(result.dependencyInversionIssues).toHaveLength(0);
|
|
54
|
+
});
|
|
55
|
+
it('should detect dependency inversion issues for ORM imports', async () => {
|
|
56
|
+
mockFs.pathExists.mockResolvedValue(true);
|
|
57
|
+
mockFs.readdir.mockImplementation(async (dir) => {
|
|
58
|
+
if (dir.includes('src'))
|
|
59
|
+
return ['domain'];
|
|
60
|
+
if (dir.includes('domain'))
|
|
61
|
+
return ['user.entity.ts'];
|
|
62
|
+
return [];
|
|
63
|
+
});
|
|
64
|
+
mockFs.stat.mockImplementation(async (file) => {
|
|
65
|
+
if (file.endsWith('.ts') || file.endsWith('.js')) {
|
|
66
|
+
return { isDirectory: () => false, isFile: () => true };
|
|
67
|
+
}
|
|
68
|
+
return { isDirectory: () => true, isFile: () => false };
|
|
69
|
+
});
|
|
70
|
+
mockFs.readFile.mockImplementation(async (file) => {
|
|
71
|
+
if (file.includes('user.entity.ts'))
|
|
72
|
+
return "import { Entity } from 'typeorm';";
|
|
73
|
+
return '';
|
|
74
|
+
});
|
|
75
|
+
const result = await analyzer.analyze();
|
|
76
|
+
const diIssues = result.dependencyInversionIssues;
|
|
77
|
+
expect(diIssues.some((i) => i.ruleId === 'ARCH-DI-01')).toBe(true);
|
|
78
|
+
});
|
|
79
|
+
it('should detect NestJS imports in domain layer', async () => {
|
|
80
|
+
mockFs.pathExists.mockResolvedValue(true);
|
|
81
|
+
mockFs.readdir.mockImplementation(async (dir) => {
|
|
82
|
+
if (dir.includes('src'))
|
|
83
|
+
return ['domain'];
|
|
84
|
+
if (dir.includes('domain'))
|
|
85
|
+
return ['user.entity.ts'];
|
|
86
|
+
return [];
|
|
87
|
+
});
|
|
88
|
+
mockFs.stat.mockImplementation(async (file) => {
|
|
89
|
+
if (file.endsWith('.ts') || file.endsWith('.js')) {
|
|
90
|
+
return { isDirectory: () => false, isFile: () => true };
|
|
91
|
+
}
|
|
92
|
+
return { isDirectory: () => true, isFile: () => false };
|
|
93
|
+
});
|
|
94
|
+
mockFs.readFile.mockImplementation(async (file) => {
|
|
95
|
+
if (file.includes('user.entity.ts'))
|
|
96
|
+
return "import { Injectable } from '@nestjs/common';";
|
|
97
|
+
return '';
|
|
98
|
+
});
|
|
99
|
+
const result = await analyzer.analyze();
|
|
100
|
+
const diIssues = result.dependencyInversionIssues;
|
|
101
|
+
expect(diIssues.some((i) => i.ruleId === 'ARCH-DI-03')).toBe(true);
|
|
102
|
+
});
|
|
103
|
+
it('should detect web framework imports in domain layer', async () => {
|
|
104
|
+
mockFs.pathExists.mockResolvedValue(true);
|
|
105
|
+
mockFs.readdir.mockImplementation(async (dir) => {
|
|
106
|
+
if (dir.includes('src'))
|
|
107
|
+
return ['domain'];
|
|
108
|
+
if (dir.includes('domain'))
|
|
109
|
+
return ['user.entity.ts'];
|
|
110
|
+
return [];
|
|
111
|
+
});
|
|
112
|
+
mockFs.stat.mockImplementation(async (file) => {
|
|
113
|
+
if (file.endsWith('.ts') || file.endsWith('.js')) {
|
|
114
|
+
return { isDirectory: () => false, isFile: () => true };
|
|
115
|
+
}
|
|
116
|
+
return { isDirectory: () => true, isFile: () => false };
|
|
117
|
+
});
|
|
118
|
+
mockFs.readFile.mockImplementation(async (file) => {
|
|
119
|
+
if (file.includes('user.entity.ts'))
|
|
120
|
+
return "import { Request } from 'express';";
|
|
121
|
+
return '';
|
|
122
|
+
});
|
|
123
|
+
const result = await analyzer.analyze();
|
|
124
|
+
const diIssues = result.dependencyInversionIssues;
|
|
125
|
+
expect(diIssues.some((i) => i.ruleId === 'ARCH-DI-02')).toBe(true);
|
|
126
|
+
});
|
|
127
|
+
it('should handle files with no imports', async () => {
|
|
128
|
+
mockFs.pathExists.mockResolvedValue(true);
|
|
129
|
+
mockFs.readdir.mockImplementation(async (dir) => {
|
|
130
|
+
if (dir.includes('src'))
|
|
131
|
+
return ['domain'];
|
|
132
|
+
if (dir.includes('domain'))
|
|
133
|
+
return ['empty.entity.ts'];
|
|
134
|
+
return [];
|
|
135
|
+
});
|
|
136
|
+
mockFs.stat.mockImplementation(async (file) => {
|
|
137
|
+
if (file.endsWith('.ts') || file.endsWith('.js')) {
|
|
138
|
+
return { isDirectory: () => false, isFile: () => true };
|
|
139
|
+
}
|
|
140
|
+
return { isDirectory: () => true, isFile: () => false };
|
|
141
|
+
});
|
|
142
|
+
mockFs.readFile.mockResolvedValue('export class Empty {}');
|
|
143
|
+
const result = await analyzer.analyze();
|
|
144
|
+
expect(result.layerViolations).toHaveLength(0);
|
|
145
|
+
expect(result.dependencyInversionIssues).toHaveLength(0);
|
|
146
|
+
});
|
|
147
|
+
it('should skip node_modules and dist directories', async () => {
|
|
148
|
+
mockFs.pathExists.mockResolvedValue(true);
|
|
149
|
+
mockFs.readdir.mockImplementation(async (dir) => {
|
|
150
|
+
if (dir.includes('src'))
|
|
151
|
+
return ['domain', 'node_modules', 'dist'];
|
|
152
|
+
if (dir.includes('domain'))
|
|
153
|
+
return ['user.entity.ts'];
|
|
154
|
+
return [];
|
|
155
|
+
});
|
|
156
|
+
mockFs.stat.mockImplementation(async (file) => {
|
|
157
|
+
if (file.endsWith('.ts') || file.endsWith('.js')) {
|
|
158
|
+
return { isDirectory: () => false, isFile: () => true };
|
|
159
|
+
}
|
|
160
|
+
return { isDirectory: () => true, isFile: () => false };
|
|
161
|
+
});
|
|
162
|
+
mockFs.readFile.mockResolvedValue('export class User {}');
|
|
163
|
+
const result = await analyzer.analyze();
|
|
164
|
+
expect(result).toBeDefined();
|
|
165
|
+
});
|
|
166
|
+
it('should calculate coupling metrics for multiple contexts', async () => {
|
|
167
|
+
mockFs.pathExists.mockResolvedValue(true);
|
|
168
|
+
mockFs.readdir.mockImplementation(async (dir) => {
|
|
169
|
+
if (dir.includes('src'))
|
|
170
|
+
return ['orders', 'billing'];
|
|
171
|
+
if (dir.includes('orders'))
|
|
172
|
+
return ['order.service.ts'];
|
|
173
|
+
if (dir.includes('billing'))
|
|
174
|
+
return ['invoice.service.ts'];
|
|
175
|
+
return [];
|
|
176
|
+
});
|
|
177
|
+
mockFs.stat.mockImplementation(async (file) => {
|
|
178
|
+
if (file.endsWith('.ts') || file.endsWith('.js')) {
|
|
179
|
+
return { isDirectory: () => false, isFile: () => true };
|
|
180
|
+
}
|
|
181
|
+
return { isDirectory: () => true, isFile: () => false };
|
|
182
|
+
});
|
|
183
|
+
mockFs.readFile.mockImplementation(async (file) => {
|
|
184
|
+
if (file.includes('order.service'))
|
|
185
|
+
return "import { Invoice } from '../../billing/invoice.service';";
|
|
186
|
+
return '';
|
|
187
|
+
});
|
|
188
|
+
const result = await analyzer.analyze();
|
|
189
|
+
expect(Object.keys(result.couplingMetrics.instability).length).toBeGreaterThanOrEqual(0);
|
|
190
|
+
});
|
|
191
|
+
it('should handle require() syntax in imports', async () => {
|
|
192
|
+
mockFs.pathExists.mockResolvedValue(true);
|
|
193
|
+
mockFs.readdir.mockImplementation(async (dir) => {
|
|
194
|
+
if (dir.includes('src'))
|
|
195
|
+
return ['domain'];
|
|
196
|
+
if (dir.includes('domain'))
|
|
197
|
+
return ['user.entity.js'];
|
|
198
|
+
return [];
|
|
199
|
+
});
|
|
200
|
+
mockFs.stat.mockImplementation(async (file) => {
|
|
201
|
+
if (file.endsWith('.ts') || file.endsWith('.js')) {
|
|
202
|
+
return { isDirectory: () => false, isFile: () => true };
|
|
203
|
+
}
|
|
204
|
+
return { isDirectory: () => true, isFile: () => false };
|
|
205
|
+
});
|
|
206
|
+
mockFs.readFile.mockImplementation(async (file) => {
|
|
207
|
+
if (file.includes('user.entity.js'))
|
|
208
|
+
return "const db = require('prisma');";
|
|
209
|
+
return '';
|
|
210
|
+
});
|
|
211
|
+
const result = await analyzer.analyze();
|
|
212
|
+
expect(result).toBeDefined();
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
//# sourceMappingURL=deep-architecture-analyzer.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deep-architecture-analyzer.spec.js","sourceRoot":"","sources":["../../../src/core/validators/deep-architecture-analyzer.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -166,6 +166,7 @@ class PhaseGateValidatorService {
|
|
|
166
166
|
'Discovery Canvas': path.join(projectPath, 'reference', 'governance', 'sdlc', '04-artifact-templates', 'discovery-canvas-template.md'),
|
|
167
167
|
'Business Case ROI': path.join(projectPath, 'reference', 'governance', 'sdlc', '04-artifact-templates', 'business-case-roi-template.md'),
|
|
168
168
|
'Ballpark Estimation': path.join(projectPath, 'reference', 'governance', 'sdlc', '04-artifact-templates', 'ballpark-estimation-template.md'),
|
|
169
|
+
'MoSCoW Prioritization Matrix': path.join(projectPath, '.evolith', 'moscow', 'phase-0.json'),
|
|
169
170
|
'ADR Registry': path.join(projectPath, 'reference', 'architecture', 'adrs', 'adr-matrix.json'),
|
|
170
171
|
'Functional Stories': path.join(projectPath, 'reference', 'governance', 'sdlc', '04-artifact-templates', 'functional-story-template.md'),
|
|
171
172
|
'Bounded Context Map': path.join(projectPath, 'reference', 'architecture', 'contexts', 'bounded-context-map.md'),
|
|
@@ -215,7 +216,8 @@ class PhaseGateValidatorService {
|
|
|
215
216
|
const criterionText = criterion.criterion.toLowerCase();
|
|
216
217
|
if (criterionText.includes('scope is ambiguous') || criterionText.includes('funding')) {
|
|
217
218
|
const prdEvidence = evidenceResults.find(e => e.artifact === 'PRD');
|
|
218
|
-
|
|
219
|
+
const moscowEvidence = evidenceResults.find(e => e.artifact === 'MoSCoW Prioritization Matrix');
|
|
220
|
+
return !prdEvidence?.found || !moscowEvidence?.found;
|
|
219
221
|
}
|
|
220
222
|
if (criterionText.includes('architecture decisions are undocumented')) {
|
|
221
223
|
const adrEvidence = evidenceResults.find(e => e.artifact === 'ADR Registry');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase-gate-validator.service.js","sourceRoot":"","sources":["../../../src/core/validators/phase-gate-validator.service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"phase-gate-validator.service.js","sourceRoot":"","sources":["../../../src/core/validators/phase-gate-validator.service.ts"],"names":[],"mappings":"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"}
|