@jterrats/smart-deployment 1.0.5 → 1.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/README.md +3 -2
- package/lib/ai/wave-validation-prompt.d.ts +2 -0
- package/lib/ai/wave-validation-prompt.js +56 -0
- package/lib/ai/wave-validation-prompt.js.map +1 -0
- package/lib/ai/wave-validation-report.d.ts +2 -0
- package/lib/ai/wave-validation-report.js +96 -0
- package/lib/ai/wave-validation-report.js.map +1 -0
- package/lib/ai/wave-validation-response-parser.d.ts +8 -0
- package/lib/ai/wave-validation-response-parser.js +112 -0
- package/lib/ai/wave-validation-response-parser.js.map +1 -0
- package/lib/ai/wave-validation-result-synthesis.d.ts +6 -0
- package/lib/ai/wave-validation-result-synthesis.js +49 -0
- package/lib/ai/wave-validation-result-synthesis.js.map +1 -0
- package/lib/ai/wave-validation-service.d.ts +1 -55
- package/lib/ai/wave-validation-service.js +11 -359
- package/lib/ai/wave-validation-service.js.map +1 -1
- package/lib/ai/wave-validation-transport.d.ts +7 -0
- package/lib/ai/wave-validation-transport.js +10 -0
- package/lib/ai/wave-validation-transport.js.map +1 -0
- package/lib/analysis/analysis-reporter.d.ts +29 -0
- package/lib/analysis/analysis-reporter.js +84 -1
- package/lib/analysis/analysis-reporter.js.map +1 -1
- package/lib/analysis/analyze-context-service.d.ts +1 -1
- package/lib/analysis/analyze-context-service.js +2 -0
- package/lib/analysis/analyze-context-service.js.map +1 -1
- package/lib/analysis/project-analysis-service.d.ts +2 -0
- package/lib/analysis/project-analysis-service.js +2 -0
- package/lib/analysis/project-analysis-service.js.map +1 -1
- package/lib/commands/start.d.ts +1 -0
- package/lib/commands/start.js +14 -1
- package/lib/commands/start.js.map +1 -1
- package/lib/commands/status.d.ts +2 -0
- package/lib/commands/status.js +1 -0
- package/lib/commands/status.js.map +1 -1
- package/lib/commands/validate.d.ts +3 -3
- package/lib/commands/validate.js +4 -4
- package/lib/commands/validate.js.map +1 -1
- package/lib/constants/api-version.d.ts +2 -2
- package/lib/constants/api-version.js +2 -2
- package/lib/constants/deployment-order.js +11 -8
- package/lib/constants/deployment-order.js.map +1 -1
- package/lib/dependencies/circular-dependency-detector.d.ts +1 -31
- package/lib/dependencies/circular-dependency-detector.js +7 -156
- package/lib/dependencies/circular-dependency-detector.js.map +1 -1
- package/lib/dependencies/cycle-break-suggestions.d.ts +3 -0
- package/lib/dependencies/cycle-break-suggestions.js +63 -0
- package/lib/dependencies/cycle-break-suggestions.js.map +1 -0
- package/lib/dependencies/cycle-discovery.d.ts +16 -0
- package/lib/dependencies/cycle-discovery.js +70 -0
- package/lib/dependencies/cycle-discovery.js.map +1 -0
- package/lib/dependencies/dependency-graph-builder.d.ts +0 -65
- package/lib/dependencies/dependency-graph-builder.js +19 -233
- package/lib/dependencies/dependency-graph-builder.js.map +1 -1
- package/lib/dependencies/dependency-graph-intake.d.ts +17 -0
- package/lib/dependencies/dependency-graph-intake.js +20 -0
- package/lib/dependencies/dependency-graph-intake.js.map +1 -0
- package/lib/dependencies/dependency-graph-stats.d.ts +4 -0
- package/lib/dependencies/dependency-graph-stats.js +82 -0
- package/lib/dependencies/dependency-graph-stats.js.map +1 -0
- package/lib/dependencies/dependency-graph-validation.d.ts +16 -0
- package/lib/dependencies/dependency-graph-validation.js +78 -0
- package/lib/dependencies/dependency-graph-validation.js.map +1 -0
- package/lib/dependencies/dependency-impact-analyzer.d.ts +1 -22
- package/lib/dependencies/dependency-impact-analyzer.js +12 -110
- package/lib/dependencies/dependency-impact-analyzer.js.map +1 -1
- package/lib/dependencies/dependency-impact-scoring.d.ts +5 -0
- package/lib/dependencies/dependency-impact-scoring.js +24 -0
- package/lib/dependencies/dependency-impact-scoring.js.map +1 -0
- package/lib/dependencies/dependency-impact-traversal.d.ts +18 -0
- package/lib/dependencies/dependency-impact-traversal.js +74 -0
- package/lib/dependencies/dependency-impact-traversal.js.map +1 -0
- package/lib/dependencies/dependency-resolution-classifier.d.ts +19 -0
- package/lib/dependencies/dependency-resolution-classifier.js +67 -0
- package/lib/dependencies/dependency-resolution-classifier.js.map +1 -0
- package/lib/dependencies/dependency-resolver.d.ts +1 -48
- package/lib/dependencies/dependency-resolver.js +12 -181
- package/lib/dependencies/dependency-resolver.js.map +1 -1
- package/lib/dependencies/dynamic-query-dependency-references.d.ts +3 -0
- package/lib/dependencies/dynamic-query-dependency-references.js +41 -0
- package/lib/dependencies/dynamic-query-dependency-references.js.map +1 -0
- package/lib/dependencies/topological-dependency-sorter.d.ts +10 -0
- package/lib/dependencies/topological-dependency-sorter.js +84 -0
- package/lib/dependencies/topological-dependency-sorter.js.map +1 -0
- package/lib/deployment/cycle-remediation-runner.d.ts +1 -0
- package/lib/deployment/cycle-remediation-runner.js +5 -1
- package/lib/deployment/cycle-remediation-runner.js.map +1 -1
- package/lib/deployment/deployment-runner.d.ts +3 -1
- package/lib/deployment/deployment-runner.js +6 -1
- package/lib/deployment/deployment-runner.js.map +1 -1
- package/lib/deployment/deployment-status-service.d.ts +2 -0
- package/lib/deployment/deployment-status-service.js +2 -0
- package/lib/deployment/deployment-status-service.js.map +1 -1
- package/lib/deployment/deployment-validation-service.js +1 -1
- package/lib/deployment/deployment-validation-service.js.map +1 -1
- package/lib/deployment/dynamic-query-target-validator.d.ts +24 -0
- package/lib/deployment/dynamic-query-target-validator.js +65 -0
- package/lib/deployment/dynamic-query-target-validator.js.map +1 -0
- package/lib/deployment/sf-cli-integration.d.ts +1 -0
- package/lib/deployment/sf-cli-integration.js +1 -1
- package/lib/deployment/sf-cli-integration.js.map +1 -1
- package/lib/deployment/sf-cli-metadata-lookup.d.ts +4 -0
- package/lib/deployment/sf-cli-metadata-lookup.js +26 -0
- package/lib/deployment/sf-cli-metadata-lookup.js.map +1 -0
- package/lib/deployment/start-execution-service.d.ts +5 -0
- package/lib/deployment/start-execution-service.js +26 -6
- package/lib/deployment/start-execution-service.js.map +1 -1
- package/lib/deployment/wave-graph-state.d.ts +6 -0
- package/lib/deployment/wave-graph-state.js +89 -0
- package/lib/deployment/wave-graph-state.js.map +1 -0
- package/lib/deployment/wave-manifest-service.d.ts +1 -0
- package/lib/deployment/wave-manifest-service.js +1 -1
- package/lib/deployment/wave-manifest-service.js.map +1 -1
- package/lib/errors/deployment-error.js +1 -1
- package/lib/errors/deployment-error.js.map +1 -1
- package/lib/parsers/apex-class-dependencies.d.ts +4 -0
- package/lib/parsers/apex-class-dependencies.js +122 -0
- package/lib/parsers/apex-class-dependencies.js.map +1 -0
- package/lib/parsers/apex-class-lexical.d.ts +3 -0
- package/lib/parsers/apex-class-lexical.js +101 -0
- package/lib/parsers/apex-class-lexical.js.map +1 -0
- package/lib/parsers/apex-class-names.d.ts +18 -0
- package/lib/parsers/apex-class-names.js +93 -0
- package/lib/parsers/apex-class-names.js.map +1 -0
- package/lib/parsers/apex-class-parser-model.d.ts +59 -0
- package/lib/parsers/apex-class-parser-model.js +2 -0
- package/lib/parsers/apex-class-parser-model.js.map +1 -0
- package/lib/parsers/apex-class-parser.d.ts +3 -29
- package/lib/parsers/apex-class-parser.js +10 -395
- package/lib/parsers/apex-class-parser.js.map +1 -1
- package/lib/parsers/apex-class-symbols.d.ts +2 -0
- package/lib/parsers/apex-class-symbols.js +61 -0
- package/lib/parsers/apex-class-symbols.js.map +1 -0
- package/lib/parsers/apex-dynamic-query-analysis.d.ts +2 -0
- package/lib/parsers/apex-dynamic-query-analysis.js +150 -0
- package/lib/parsers/apex-dynamic-query-analysis.js.map +1 -0
- package/lib/parsers/custom-metadata-dynamic-query-analysis.d.ts +2 -0
- package/lib/parsers/custom-metadata-dynamic-query-analysis.js +50 -0
- package/lib/parsers/custom-metadata-dynamic-query-analysis.js.map +1 -0
- package/lib/parsers/custom-metadata-parser.d.ts +2 -0
- package/lib/parsers/custom-metadata-parser.js +3 -0
- package/lib/parsers/custom-metadata-parser.js.map +1 -1
- package/lib/parsers/custom-object-dependency-builder.d.ts +3 -0
- package/lib/parsers/custom-object-dependency-builder.js +103 -0
- package/lib/parsers/custom-object-dependency-builder.js.map +1 -0
- package/lib/parsers/custom-object-parser.js +1 -208
- package/lib/parsers/custom-object-parser.js.map +1 -1
- package/lib/parsers/custom-object-reference-helpers.d.ts +4 -0
- package/lib/parsers/custom-object-reference-helpers.js +92 -0
- package/lib/parsers/custom-object-reference-helpers.js.map +1 -0
- package/lib/parsers/dynamic-query-reference.d.ts +16 -0
- package/lib/parsers/dynamic-query-reference.js +65 -0
- package/lib/parsers/dynamic-query-reference.js.map +1 -0
- package/lib/parsers/layout-action-analysis.d.ts +6 -0
- package/lib/parsers/layout-action-analysis.js +36 -0
- package/lib/parsers/layout-action-analysis.js.map +1 -0
- package/lib/parsers/layout-parser.js +4 -272
- package/lib/parsers/layout-parser.js.map +1 -1
- package/lib/parsers/layout-reference-analysis.d.ts +9 -0
- package/lib/parsers/layout-reference-analysis.js +70 -0
- package/lib/parsers/layout-reference-analysis.js.map +1 -0
- package/lib/parsers/layout-result-assembly.d.ts +5 -0
- package/lib/parsers/layout-result-assembly.js +35 -0
- package/lib/parsers/layout-result-assembly.js.map +1 -0
- package/lib/parsers/layout-section-analysis.d.ts +7 -0
- package/lib/parsers/layout-section-analysis.js +9 -0
- package/lib/parsers/layout-section-analysis.js.map +1 -0
- package/lib/parsers/lwc-code-analysis.d.ts +10 -0
- package/lib/parsers/lwc-code-analysis.js +161 -0
- package/lib/parsers/lwc-code-analysis.js.map +1 -0
- package/lib/parsers/lwc-metadata-analysis.d.ts +6 -0
- package/lib/parsers/lwc-metadata-analysis.js +112 -0
- package/lib/parsers/lwc-metadata-analysis.js.map +1 -0
- package/lib/parsers/lwc-parser.d.ts +3 -27
- package/lib/parsers/lwc-parser.js +6 -377
- package/lib/parsers/lwc-parser.js.map +1 -1
- package/lib/parsers/lwc-result-assembly.d.ts +4 -0
- package/lib/parsers/lwc-result-assembly.js +47 -0
- package/lib/parsers/lwc-result-assembly.js.map +1 -0
- package/lib/presentation/status-command-presenter.d.ts +1 -0
- package/lib/presentation/status-command-presenter.js +20 -0
- package/lib/presentation/status-command-presenter.js.map +1 -1
- package/lib/scanner/forceignore-parser.d.ts +1 -0
- package/lib/scanner/forceignore-parser.js +14 -3
- package/lib/scanner/forceignore-parser.js.map +1 -1
- package/lib/scanner/structure-validator.js +1 -1
- package/lib/services/metadata-scanner-service.d.ts +2 -0
- package/lib/services/metadata-scanner-service.js +9 -2
- package/lib/services/metadata-scanner-service.js.map +1 -1
- package/lib/services/scanners/additional-metadata-scanner.d.ts +2 -0
- package/lib/services/scanners/additional-metadata-scanner.js +183 -0
- package/lib/services/scanners/additional-metadata-scanner.js.map +1 -0
- package/lib/services/scanners/automation-ai-metadata-scanner.d.ts +1 -0
- package/lib/services/scanners/automation-ai-metadata-scanner.js +11 -0
- package/lib/services/scanners/automation-ai-metadata-scanner.js.map +1 -1
- package/lib/services/scanners/code-metadata-scanner.js +14 -1
- package/lib/services/scanners/code-metadata-scanner.js.map +1 -1
- package/lib/services/scanners/data-metadata-scanner.js +24 -8
- package/lib/services/scanners/data-metadata-scanner.js.map +1 -1
- package/lib/types/metadata.d.ts +1 -1
- package/lib/utils/cache-entry-serializer.d.ts +7 -0
- package/lib/utils/cache-entry-serializer.js +15 -0
- package/lib/utils/cache-entry-serializer.js.map +1 -0
- package/lib/utils/cache-expiry-policy.d.ts +7 -0
- package/lib/utils/cache-expiry-policy.js +34 -0
- package/lib/utils/cache-expiry-policy.js.map +1 -0
- package/lib/utils/cache-key-derivation.d.ts +11 -0
- package/lib/utils/cache-key-derivation.js +28 -0
- package/lib/utils/cache-key-derivation.js.map +1 -0
- package/lib/utils/cache-lock-lifecycle.d.ts +15 -0
- package/lib/utils/cache-lock-lifecycle.js +84 -0
- package/lib/utils/cache-lock-lifecycle.js.map +1 -0
- package/lib/utils/cache-logger.d.ts +8 -0
- package/lib/utils/cache-logger.js +19 -0
- package/lib/utils/cache-logger.js.map +1 -0
- package/lib/utils/cache-manager.d.ts +1 -2
- package/lib/utils/cache-manager.js +7 -253
- package/lib/utils/cache-manager.js.map +1 -1
- package/lib/utils/cache-storage.d.ts +20 -0
- package/lib/utils/cache-storage.js +83 -0
- package/lib/utils/cache-storage.js.map +1 -0
- package/lib/validators/xml-metadata-validator.js +1 -1
- package/lib/waves/priority-wave-generator.js +8 -2
- package/lib/waves/priority-wave-generator.js.map +1 -1
- package/lib/waves/test-optimizer-discovery.d.ts +12 -0
- package/lib/waves/test-optimizer-discovery.js +46 -0
- package/lib/waves/test-optimizer-discovery.js.map +1 -0
- package/lib/waves/test-optimizer-matching.d.ts +6 -0
- package/lib/waves/test-optimizer-matching.js +43 -0
- package/lib/waves/test-optimizer-matching.js.map +1 -0
- package/lib/waves/test-optimizer-model.d.ts +92 -0
- package/lib/waves/test-optimizer-model.js +2 -0
- package/lib/waves/test-optimizer-model.js.map +1 -0
- package/lib/waves/test-optimizer-scoring.d.ts +11 -0
- package/lib/waves/test-optimizer-scoring.js +53 -0
- package/lib/waves/test-optimizer-scoring.js.map +1 -0
- package/lib/waves/test-optimizer.d.ts +2 -102
- package/lib/waves/test-optimizer.js +9 -154
- package/lib/waves/test-optimizer.js.map +1 -1
- package/lib/waves/wave-builder.d.ts +0 -11
- package/lib/waves/wave-builder.js +19 -193
- package/lib/waves/wave-builder.js.map +1 -1
- package/lib/waves/wave-graph.d.ts +25 -0
- package/lib/waves/wave-graph.js +138 -0
- package/lib/waves/wave-graph.js.map +1 -0
- package/lib/waves/wave-metadata.d.ts +4 -0
- package/lib/waves/wave-metadata.js +36 -0
- package/lib/waves/wave-metadata.js.map +1 -0
- package/lib/waves/wave-priority-policy.d.ts +5 -0
- package/lib/waves/wave-priority-policy.js +83 -0
- package/lib/waves/wave-priority-policy.js.map +1 -0
- package/lib/waves/wave-topology.d.ts +28 -0
- package/lib/waves/wave-topology.js +65 -0
- package/lib/waves/wave-topology.js.map +1 -0
- package/messages/start.json +5 -5
- package/messages/validate.json +1 -1
- package/npm-shrinkwrap.json +342 -751
- package/oclif.lock +83 -262
- package/oclif.manifest.json +7 -7
- package/package.json +6 -2
|
@@ -81,6 +81,7 @@ export declare class DependencyImpactAnalyzer {
|
|
|
81
81
|
private graph;
|
|
82
82
|
private reverseGraph;
|
|
83
83
|
private options;
|
|
84
|
+
private traversal;
|
|
84
85
|
constructor(graph: DependencyGraph, reverseGraph: DependencyGraph, options?: ImpactAnalysisOptions);
|
|
85
86
|
/**
|
|
86
87
|
* Analyze impact of changes to one or more components
|
|
@@ -94,33 +95,12 @@ export declare class DependencyImpactAnalyzer {
|
|
|
94
95
|
* Calculate impact for a single component
|
|
95
96
|
*/
|
|
96
97
|
private calculateImpact;
|
|
97
|
-
private analyzeDependentTraversal;
|
|
98
|
-
/**
|
|
99
|
-
* Find all dependents (transitive closure) of a component using BFS
|
|
100
|
-
*/
|
|
101
|
-
private findAllDependents;
|
|
102
|
-
/**
|
|
103
|
-
* Calculate impact radius (maximum distance to affected component)
|
|
104
|
-
*/
|
|
105
|
-
private calculateImpactRadius;
|
|
106
|
-
/**
|
|
107
|
-
* Calculate risk score (0-100) based on number of affected components
|
|
108
|
-
*/
|
|
109
|
-
private calculateRiskScore;
|
|
110
|
-
/**
|
|
111
|
-
* Get impact level based on risk score
|
|
112
|
-
*/
|
|
113
|
-
private static getImpactLevel;
|
|
114
98
|
/**
|
|
115
99
|
* @ac US-032-AC-3: Identify critical components
|
|
116
100
|
*
|
|
117
101
|
* Find components with many dependents
|
|
118
102
|
*/
|
|
119
103
|
private identifyCriticalComponents;
|
|
120
|
-
/**
|
|
121
|
-
* Calculate overall impact level from individual impacts
|
|
122
|
-
*/
|
|
123
|
-
private calculateOverallImpactLevel;
|
|
124
104
|
/**
|
|
125
105
|
* @ac US-032-AC-5: Suggest test scope based on impact
|
|
126
106
|
*
|
|
@@ -137,7 +117,6 @@ export declare class DependencyImpactAnalyzer {
|
|
|
137
117
|
private findTestClass;
|
|
138
118
|
private collectImpactAggregate;
|
|
139
119
|
private mergeComponentImpact;
|
|
140
|
-
private collectTraversableDependents;
|
|
141
120
|
private collectCriticalComponentCandidates;
|
|
142
121
|
private getDependentCount;
|
|
143
122
|
private collectTestBuckets;
|
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
* @issue #32
|
|
12
12
|
*/
|
|
13
13
|
import { getLogger } from '../utils/logger.js';
|
|
14
|
-
import {
|
|
14
|
+
import { calculateOverallImpactLevel, calculateRiskScore, getImpactLevel } from './dependency-impact-scoring.js';
|
|
15
|
+
import { DependencyImpactTraversal } from './dependency-impact-traversal.js';
|
|
15
16
|
const logger = getLogger('DependencyImpactAnalyzer');
|
|
16
17
|
/**
|
|
17
18
|
* Dependency Impact Analyzer
|
|
@@ -35,6 +36,7 @@ export class DependencyImpactAnalyzer {
|
|
|
35
36
|
graph;
|
|
36
37
|
reverseGraph;
|
|
37
38
|
options;
|
|
39
|
+
traversal;
|
|
38
40
|
constructor(graph, reverseGraph, options = {}) {
|
|
39
41
|
this.graph = graph;
|
|
40
42
|
this.reverseGraph = reverseGraph;
|
|
@@ -43,6 +45,10 @@ export class DependencyImpactAnalyzer {
|
|
|
43
45
|
includeTests: options.includeTests ?? true,
|
|
44
46
|
criticalThreshold: options.criticalThreshold ?? 10,
|
|
45
47
|
};
|
|
48
|
+
this.traversal = new DependencyImpactTraversal(this.reverseGraph, {
|
|
49
|
+
maxDepth: this.options.maxDepth,
|
|
50
|
+
includeTests: this.options.includeTests,
|
|
51
|
+
});
|
|
46
52
|
logger.debug('Initialized DependencyImpactAnalyzer', {
|
|
47
53
|
nodes: this.graph.size,
|
|
48
54
|
criticalThreshold: this.options.criticalThreshold,
|
|
@@ -59,7 +65,7 @@ export class DependencyImpactAnalyzer {
|
|
|
59
65
|
const startTime = Date.now();
|
|
60
66
|
const aggregate = this.collectImpactAggregate(changedComponents);
|
|
61
67
|
const criticalComponents = this.identifyCriticalComponents();
|
|
62
|
-
const overallImpactLevel =
|
|
68
|
+
const overallImpactLevel = calculateOverallImpactLevel(aggregate.impacts);
|
|
63
69
|
const testScope = this.generateTestScope(Array.from(aggregate.allAffected), aggregate.impacts);
|
|
64
70
|
const duration = Date.now() - startTime;
|
|
65
71
|
logger.info('Impact analysis completed', {
|
|
@@ -83,9 +89,9 @@ export class DependencyImpactAnalyzer {
|
|
|
83
89
|
*/
|
|
84
90
|
calculateImpact(nodeId) {
|
|
85
91
|
const directDependents = Array.from(this.reverseGraph.get(nodeId) ?? []);
|
|
86
|
-
const traversal = this.
|
|
87
|
-
const riskScore =
|
|
88
|
-
const impactLevel =
|
|
92
|
+
const traversal = this.traversal.analyzeDependents(nodeId);
|
|
93
|
+
const riskScore = calculateRiskScore(directDependents.length, traversal.affected.size, this.options.criticalThreshold);
|
|
94
|
+
const impactLevel = getImpactLevel(riskScore);
|
|
89
95
|
return {
|
|
90
96
|
nodeId,
|
|
91
97
|
directDependents,
|
|
@@ -96,86 +102,6 @@ export class DependencyImpactAnalyzer {
|
|
|
96
102
|
isCritical: directDependents.length >= this.options.criticalThreshold,
|
|
97
103
|
};
|
|
98
104
|
}
|
|
99
|
-
analyzeDependentTraversal(nodeId) {
|
|
100
|
-
const affected = this.findAllDependents(nodeId);
|
|
101
|
-
return {
|
|
102
|
-
affected,
|
|
103
|
-
impactRadius: this.calculateImpactRadius(nodeId, affected),
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Find all dependents (transitive closure) of a component using BFS
|
|
108
|
-
*/
|
|
109
|
-
findAllDependents(nodeId) {
|
|
110
|
-
const affected = new Set();
|
|
111
|
-
const queue = [{ nodeId, depth: 0 }];
|
|
112
|
-
const visited = new Set();
|
|
113
|
-
while (queue.length > 0) {
|
|
114
|
-
const { nodeId: current, depth } = queue.shift();
|
|
115
|
-
if (visited.has(current) || depth > this.options.maxDepth) {
|
|
116
|
-
continue;
|
|
117
|
-
}
|
|
118
|
-
visited.add(current);
|
|
119
|
-
affected.add(current);
|
|
120
|
-
const dependents = this.collectTraversableDependents(current);
|
|
121
|
-
for (const dependent of dependents) {
|
|
122
|
-
if (!visited.has(dependent)) {
|
|
123
|
-
queue.push({ nodeId: dependent, depth: depth + 1 });
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
// Remove the original node from affected set
|
|
128
|
-
affected.delete(nodeId);
|
|
129
|
-
return affected;
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Calculate impact radius (maximum distance to affected component)
|
|
133
|
-
*/
|
|
134
|
-
calculateImpactRadius(nodeId, affected) {
|
|
135
|
-
let maxRadius = 0;
|
|
136
|
-
const queue = [{ nodeId, distance: 0 }];
|
|
137
|
-
const visited = new Set();
|
|
138
|
-
while (queue.length > 0) {
|
|
139
|
-
const { nodeId: current, distance } = queue.shift();
|
|
140
|
-
if (visited.has(current)) {
|
|
141
|
-
continue;
|
|
142
|
-
}
|
|
143
|
-
visited.add(current);
|
|
144
|
-
maxRadius = Math.max(maxRadius, distance);
|
|
145
|
-
const dependents = this.reverseGraph.get(current) ?? new Set();
|
|
146
|
-
for (const dependent of dependents) {
|
|
147
|
-
if (affected.has(dependent) && !visited.has(dependent)) {
|
|
148
|
-
queue.push({ nodeId: dependent, distance: distance + 1 });
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
return maxRadius;
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Calculate risk score (0-100) based on number of affected components
|
|
156
|
-
*/
|
|
157
|
-
calculateRiskScore(directDependents, totalAffected) {
|
|
158
|
-
// Risk factors:
|
|
159
|
-
// - Direct dependents (40% weight)
|
|
160
|
-
// - Total affected (60% weight)
|
|
161
|
-
const directScore = Math.min((directDependents / this.options.criticalThreshold) * 40, 40);
|
|
162
|
-
const totalScore = Math.min((totalAffected / (this.options.criticalThreshold * 3)) * 60, 60);
|
|
163
|
-
return Math.round(directScore + totalScore);
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Get impact level based on risk score
|
|
167
|
-
*/
|
|
168
|
-
static getImpactLevel(riskScore) {
|
|
169
|
-
if (riskScore >= 80)
|
|
170
|
-
return 'critical';
|
|
171
|
-
if (riskScore >= 60)
|
|
172
|
-
return 'high';
|
|
173
|
-
if (riskScore >= 40)
|
|
174
|
-
return 'medium';
|
|
175
|
-
if (riskScore >= 20)
|
|
176
|
-
return 'low';
|
|
177
|
-
return 'minimal';
|
|
178
|
-
}
|
|
179
105
|
/**
|
|
180
106
|
* @ac US-032-AC-3: Identify critical components
|
|
181
107
|
*
|
|
@@ -190,16 +116,6 @@ export class DependencyImpactAnalyzer {
|
|
|
190
116
|
});
|
|
191
117
|
return critical;
|
|
192
118
|
}
|
|
193
|
-
/**
|
|
194
|
-
* Calculate overall impact level from individual impacts
|
|
195
|
-
*/
|
|
196
|
-
calculateOverallImpactLevel(impacts) {
|
|
197
|
-
let maxScore = 0;
|
|
198
|
-
for (const impact of impacts.values()) {
|
|
199
|
-
maxScore = Math.max(maxScore, impact.riskScore);
|
|
200
|
-
}
|
|
201
|
-
return DependencyImpactAnalyzer.getImpactLevel(maxScore);
|
|
202
|
-
}
|
|
203
119
|
/**
|
|
204
120
|
* @ac US-032-AC-5: Suggest test scope based on impact
|
|
205
121
|
*
|
|
@@ -253,25 +169,11 @@ export class DependencyImpactAnalyzer {
|
|
|
253
169
|
const impact = this.calculateImpact(nodeId);
|
|
254
170
|
impacts.set(nodeId, impact);
|
|
255
171
|
allAffected.add(nodeId);
|
|
256
|
-
const transitiveAffected = this.findAllDependents(nodeId);
|
|
172
|
+
const transitiveAffected = this.traversal.findAllDependents(nodeId);
|
|
257
173
|
for (const affectedNode of transitiveAffected) {
|
|
258
174
|
allAffected.add(affectedNode);
|
|
259
175
|
}
|
|
260
176
|
}
|
|
261
|
-
collectTraversableDependents(nodeId) {
|
|
262
|
-
const dependents = this.reverseGraph.get(nodeId) ?? new Set();
|
|
263
|
-
const traversable = [];
|
|
264
|
-
for (const dependent of dependents) {
|
|
265
|
-
if (!shouldTraverseDependencyKind(DEFAULT_GRAPH_DEPENDENCY_KIND)) {
|
|
266
|
-
continue;
|
|
267
|
-
}
|
|
268
|
-
if (!this.options.includeTests && this.isTestClass(dependent)) {
|
|
269
|
-
continue;
|
|
270
|
-
}
|
|
271
|
-
traversable.push(dependent);
|
|
272
|
-
}
|
|
273
|
-
return traversable;
|
|
274
|
-
}
|
|
275
177
|
collectCriticalComponentCandidates() {
|
|
276
178
|
const critical = [];
|
|
277
179
|
for (const [nodeId, dependents] of this.reverseGraph.entries()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-impact-analyzer.js","sourceRoot":"","sources":["../../src/dependencies/dependency-impact-analyzer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dependency-impact-analyzer.js","sourceRoot":"","sources":["../../src/dependencies/dependency-impact-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { NodeId } from '../types/dependency.js';
|
|
2
|
+
import type { ComponentImpact, ImpactLevel } from './dependency-impact-analyzer.js';
|
|
3
|
+
export declare function calculateRiskScore(directDependents: number, totalAffected: number, criticalThreshold: number): number;
|
|
4
|
+
export declare function getImpactLevel(riskScore: number): ImpactLevel;
|
|
5
|
+
export declare function calculateOverallImpactLevel(impacts: ReadonlyMap<NodeId, ComponentImpact>): ImpactLevel;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export function calculateRiskScore(directDependents, totalAffected, criticalThreshold) {
|
|
2
|
+
const directScore = Math.min((directDependents / criticalThreshold) * 40, 40);
|
|
3
|
+
const totalScore = Math.min((totalAffected / (criticalThreshold * 3)) * 60, 60);
|
|
4
|
+
return Math.round(directScore + totalScore);
|
|
5
|
+
}
|
|
6
|
+
export function getImpactLevel(riskScore) {
|
|
7
|
+
if (riskScore >= 80)
|
|
8
|
+
return 'critical';
|
|
9
|
+
if (riskScore >= 60)
|
|
10
|
+
return 'high';
|
|
11
|
+
if (riskScore >= 40)
|
|
12
|
+
return 'medium';
|
|
13
|
+
if (riskScore >= 20)
|
|
14
|
+
return 'low';
|
|
15
|
+
return 'minimal';
|
|
16
|
+
}
|
|
17
|
+
export function calculateOverallImpactLevel(impacts) {
|
|
18
|
+
let maxScore = 0;
|
|
19
|
+
for (const impact of impacts.values()) {
|
|
20
|
+
maxScore = Math.max(maxScore, impact.riskScore);
|
|
21
|
+
}
|
|
22
|
+
return getImpactLevel(maxScore);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=dependency-impact-scoring.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-impact-scoring.js","sourceRoot":"","sources":["../../src/dependencies/dependency-impact-scoring.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,kBAAkB,CAAC,gBAAwB,EAAE,aAAqB,EAAE,iBAAyB;IAC3G,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,GAAG,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAEhF,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,IAAI,SAAS,IAAI,EAAE;QAAE,OAAO,UAAU,CAAC;IACvC,IAAI,SAAS,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IACnC,IAAI,SAAS,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IACrC,IAAI,SAAS,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IAClC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,OAA6C;IACvF,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACtC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { DependencyGraph, NodeId } from '../types/dependency.js';
|
|
2
|
+
export type ImpactTraversalOptions = {
|
|
3
|
+
maxDepth: number;
|
|
4
|
+
includeTests: boolean;
|
|
5
|
+
};
|
|
6
|
+
export type ImpactTraversal = {
|
|
7
|
+
affected: Set<NodeId>;
|
|
8
|
+
impactRadius: number;
|
|
9
|
+
};
|
|
10
|
+
export declare class DependencyImpactTraversal {
|
|
11
|
+
private readonly reverseGraph;
|
|
12
|
+
private readonly options;
|
|
13
|
+
constructor(reverseGraph: DependencyGraph, options: ImpactTraversalOptions);
|
|
14
|
+
analyzeDependents(nodeId: NodeId): ImpactTraversal;
|
|
15
|
+
findAllDependents(nodeId: NodeId): Set<NodeId>;
|
|
16
|
+
private calculateImpactRadius;
|
|
17
|
+
private collectTraversableDependents;
|
|
18
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { DEFAULT_GRAPH_DEPENDENCY_KIND, shouldTraverseDependencyKind } from './dependency-semantics.js';
|
|
2
|
+
export class DependencyImpactTraversal {
|
|
3
|
+
reverseGraph;
|
|
4
|
+
options;
|
|
5
|
+
constructor(reverseGraph, options) {
|
|
6
|
+
this.reverseGraph = reverseGraph;
|
|
7
|
+
this.options = options;
|
|
8
|
+
}
|
|
9
|
+
analyzeDependents(nodeId) {
|
|
10
|
+
const affected = this.findAllDependents(nodeId);
|
|
11
|
+
return {
|
|
12
|
+
affected,
|
|
13
|
+
impactRadius: this.calculateImpactRadius(nodeId, affected),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
findAllDependents(nodeId) {
|
|
17
|
+
const affected = new Set();
|
|
18
|
+
const queue = [{ nodeId, depth: 0 }];
|
|
19
|
+
const visited = new Set();
|
|
20
|
+
while (queue.length > 0) {
|
|
21
|
+
const { nodeId: current, depth } = queue.shift();
|
|
22
|
+
if (visited.has(current) || depth > this.options.maxDepth) {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
visited.add(current);
|
|
26
|
+
affected.add(current);
|
|
27
|
+
for (const dependent of this.collectTraversableDependents(current)) {
|
|
28
|
+
if (!visited.has(dependent)) {
|
|
29
|
+
queue.push({ nodeId: dependent, depth: depth + 1 });
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
affected.delete(nodeId);
|
|
34
|
+
return affected;
|
|
35
|
+
}
|
|
36
|
+
calculateImpactRadius(nodeId, affected) {
|
|
37
|
+
let maxRadius = 0;
|
|
38
|
+
const queue = [{ nodeId, distance: 0 }];
|
|
39
|
+
const visited = new Set();
|
|
40
|
+
while (queue.length > 0) {
|
|
41
|
+
const { nodeId: current, distance } = queue.shift();
|
|
42
|
+
if (visited.has(current)) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
visited.add(current);
|
|
46
|
+
maxRadius = Math.max(maxRadius, distance);
|
|
47
|
+
const dependents = this.reverseGraph.get(current) ?? new Set();
|
|
48
|
+
for (const dependent of dependents) {
|
|
49
|
+
if (affected.has(dependent) && !visited.has(dependent)) {
|
|
50
|
+
queue.push({ nodeId: dependent, distance: distance + 1 });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return maxRadius;
|
|
55
|
+
}
|
|
56
|
+
collectTraversableDependents(nodeId) {
|
|
57
|
+
const dependents = this.reverseGraph.get(nodeId) ?? new Set();
|
|
58
|
+
const traversable = [];
|
|
59
|
+
for (const dependent of dependents) {
|
|
60
|
+
if (!shouldTraverseDependencyKind(DEFAULT_GRAPH_DEPENDENCY_KIND)) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (!this.options.includeTests && isTestClass(dependent)) {
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
traversable.push(dependent);
|
|
67
|
+
}
|
|
68
|
+
return traversable;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function isTestClass(nodeId) {
|
|
72
|
+
return nodeId.toLowerCase().includes('test');
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=dependency-impact-traversal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-impact-traversal.js","sourceRoot":"","sources":["../../src/dependencies/dependency-impact-traversal.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { NodeId, DependencyGraph } from '../types/dependency.js';
|
|
2
|
+
import type { MetadataComponent } from '../types/metadata.js';
|
|
3
|
+
export type DependencyFilterDecision = 'include' | 'exclude-managed' | 'exclude-optional';
|
|
4
|
+
export type DependencyResolutionClassifierOptions = {
|
|
5
|
+
includeOptional: boolean;
|
|
6
|
+
skipManaged: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare class DependencyResolutionClassifier {
|
|
9
|
+
private readonly components;
|
|
10
|
+
private readonly options;
|
|
11
|
+
constructor(components: ReadonlyMap<NodeId, MetadataComponent>, options: DependencyResolutionClassifierOptions);
|
|
12
|
+
shouldIncludeNode(nodeId: NodeId): boolean;
|
|
13
|
+
collectIncludedDependencies(nodeId: NodeId, dependencies: ReadonlySet<NodeId>): Set<NodeId>;
|
|
14
|
+
classifyDependency(nodeId: NodeId, dependencyId: NodeId): DependencyFilterDecision;
|
|
15
|
+
findOptionalDependencies(graph: DependencyGraph): NodeId[];
|
|
16
|
+
findManagedPackages(): NodeId[];
|
|
17
|
+
isManagedPackage(nodeId: NodeId): boolean;
|
|
18
|
+
private isOptionalDependency;
|
|
19
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { getComponentDependencyKind, isSoftDependencyKind, shouldIncludeDependencyInResolution, } from './dependency-semantics.js';
|
|
2
|
+
export class DependencyResolutionClassifier {
|
|
3
|
+
components;
|
|
4
|
+
options;
|
|
5
|
+
constructor(components, options) {
|
|
6
|
+
this.components = components;
|
|
7
|
+
this.options = options;
|
|
8
|
+
}
|
|
9
|
+
shouldIncludeNode(nodeId) {
|
|
10
|
+
return !(this.options.skipManaged && this.isManagedPackage(nodeId));
|
|
11
|
+
}
|
|
12
|
+
collectIncludedDependencies(nodeId, dependencies) {
|
|
13
|
+
const filteredDependencies = new Set();
|
|
14
|
+
for (const dependencyId of dependencies) {
|
|
15
|
+
if (this.classifyDependency(nodeId, dependencyId) === 'include') {
|
|
16
|
+
filteredDependencies.add(dependencyId);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return filteredDependencies;
|
|
20
|
+
}
|
|
21
|
+
classifyDependency(nodeId, dependencyId) {
|
|
22
|
+
if (this.options.skipManaged && this.isManagedPackage(dependencyId)) {
|
|
23
|
+
return 'exclude-managed';
|
|
24
|
+
}
|
|
25
|
+
if (!shouldIncludeDependencyInResolution(getComponentDependencyKind(this.components.get(nodeId), dependencyId), this.options.includeOptional)) {
|
|
26
|
+
return 'exclude-optional';
|
|
27
|
+
}
|
|
28
|
+
return 'include';
|
|
29
|
+
}
|
|
30
|
+
findOptionalDependencies(graph) {
|
|
31
|
+
if (this.options.includeOptional) {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
const optional = [];
|
|
35
|
+
for (const [nodeId, deps] of graph.entries()) {
|
|
36
|
+
for (const dep of deps) {
|
|
37
|
+
if (!this.isOptionalDependency(nodeId, dep)) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (this.options.skipManaged && this.isManagedPackage(dep)) {
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (!optional.includes(dep)) {
|
|
44
|
+
optional.push(dep);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return optional;
|
|
49
|
+
}
|
|
50
|
+
findManagedPackages() {
|
|
51
|
+
const managed = [];
|
|
52
|
+
for (const nodeId of this.components.keys()) {
|
|
53
|
+
if (this.isManagedPackage(nodeId)) {
|
|
54
|
+
managed.push(nodeId);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return managed;
|
|
58
|
+
}
|
|
59
|
+
isManagedPackage(nodeId) {
|
|
60
|
+
return nodeId.includes('__') || (this.components.get(nodeId)?.name.includes('__') ?? false);
|
|
61
|
+
}
|
|
62
|
+
isOptionalDependency(nodeId, dependencyId) {
|
|
63
|
+
const component = this.components.get(nodeId);
|
|
64
|
+
return isSoftDependencyKind(getComponentDependencyKind(component, dependencyId));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=dependency-resolution-classifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-resolution-classifier.js","sourceRoot":"","sources":["../../src/dependencies/dependency-resolution-classifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -88,6 +88,7 @@ export declare class DependencyResolver {
|
|
|
88
88
|
private graph;
|
|
89
89
|
private components;
|
|
90
90
|
private options;
|
|
91
|
+
private classifier;
|
|
91
92
|
private cachedResult?;
|
|
92
93
|
constructor(graph: DependencyGraph, components: Map<NodeId, MetadataComponent>, options?: ResolverOptions);
|
|
93
94
|
/**
|
|
@@ -110,63 +111,15 @@ export declare class DependencyResolver {
|
|
|
110
111
|
* Stage 2: apply manual ordering constraints after filtering.
|
|
111
112
|
*/
|
|
112
113
|
private applyOrderingConstraints;
|
|
113
|
-
/**
|
|
114
|
-
* Stage 3: perform topological ordering on the filtered graph.
|
|
115
|
-
*/
|
|
116
|
-
private topologicalSort;
|
|
117
114
|
/**
|
|
118
115
|
* Stage 4: project the deployment order into resolved entries.
|
|
119
116
|
*/
|
|
120
117
|
private buildResolvedMap;
|
|
121
|
-
/**
|
|
122
|
-
* Create the mutable state used by Kahn's topological traversal.
|
|
123
|
-
*/
|
|
124
|
-
private createTopologicalTraversalState;
|
|
125
|
-
/**
|
|
126
|
-
* Drain the topological queue and update in-degree state.
|
|
127
|
-
*/
|
|
128
|
-
private processTopologicalQueue;
|
|
129
|
-
/**
|
|
130
|
-
* Lower in-degree counts after resolving one node and enqueue newly unblocked nodes.
|
|
131
|
-
*/
|
|
132
|
-
private releaseResolvedDependencies;
|
|
133
|
-
/**
|
|
134
|
-
* Collect nodes that remain blocked after traversal.
|
|
135
|
-
*/
|
|
136
|
-
private collectUnresolvedNodes;
|
|
137
|
-
/**
|
|
138
|
-
* Find missing dependencies for a node
|
|
139
|
-
*/
|
|
140
|
-
private findMissingDependencies;
|
|
141
|
-
/**
|
|
142
|
-
* @ac US-033-AC-3: Handle optional dependencies
|
|
143
|
-
* Note: Current MetadataComponent doesn't track dependency types
|
|
144
|
-
*/
|
|
145
|
-
private findOptionalDependencies;
|
|
146
|
-
/**
|
|
147
|
-
* @ac US-033-AC-4: Skip managed package dependencies
|
|
148
|
-
*/
|
|
149
|
-
private findManagedPackages;
|
|
150
|
-
/**
|
|
151
|
-
* Check if a component is from a managed package
|
|
152
|
-
*/
|
|
153
|
-
private isManagedPackage;
|
|
154
|
-
/**
|
|
155
|
-
* Check if a dependency is optional (soft dependency)
|
|
156
|
-
* Note: Current MetadataComponent uses Set<string> for dependencies
|
|
157
|
-
* For now, we'll return false as type info is not available
|
|
158
|
-
*/
|
|
159
|
-
private isOptionalDependency;
|
|
160
118
|
/**
|
|
161
119
|
* @ac US-033-AC-6: Generate dependency report
|
|
162
120
|
*/
|
|
163
121
|
private generateReport;
|
|
164
122
|
private calculateDeploymentLevels;
|
|
165
|
-
private shouldIncludeNode;
|
|
166
|
-
private collectIncludedDependencies;
|
|
167
|
-
private classifyDependency;
|
|
168
|
-
private calculateInDegree;
|
|
169
|
-
private collectZeroDegreeNodes;
|
|
170
123
|
/**
|
|
171
124
|
* Get resolution status for a specific component
|
|
172
125
|
*/
|