@jterrats/smart-deployment 1.0.3 → 1.0.4

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.
Files changed (257) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +6 -0
  3. package/lib/ai/wave-validation-service.d.ts +21 -0
  4. package/lib/ai/wave-validation-service.js +189 -114
  5. package/lib/ai/wave-validation-service.js.map +1 -1
  6. package/lib/analysis/analysis-reporter.d.ts +12 -0
  7. package/lib/analysis/analysis-reporter.js +61 -0
  8. package/lib/analysis/analysis-reporter.js.map +1 -1
  9. package/lib/analysis/analyze-artifact-service.d.ts +25 -0
  10. package/lib/analysis/analyze-artifact-service.js +50 -0
  11. package/lib/analysis/analyze-artifact-service.js.map +1 -0
  12. package/lib/analysis/analyze-context-service.d.ts +25 -0
  13. package/lib/analysis/analyze-context-service.js +28 -0
  14. package/lib/analysis/analyze-context-service.js.map +1 -0
  15. package/lib/analysis/project-analysis-service.d.ts +48 -0
  16. package/lib/analysis/project-analysis-service.js +134 -0
  17. package/lib/analysis/project-analysis-service.js.map +1 -0
  18. package/lib/commands/analyze.d.ts +0 -2
  19. package/lib/commands/analyze.js +31 -162
  20. package/lib/commands/analyze.js.map +1 -1
  21. package/lib/commands/config.d.ts +0 -4
  22. package/lib/commands/config.js +25 -95
  23. package/lib/commands/config.js.map +1 -1
  24. package/lib/commands/resume.js +6 -16
  25. package/lib/commands/resume.js.map +1 -1
  26. package/lib/commands/start.d.ts +0 -11
  27. package/lib/commands/start.js +38 -550
  28. package/lib/commands/start.js.map +1 -1
  29. package/lib/commands/status.js +36 -12
  30. package/lib/commands/status.js.map +1 -1
  31. package/lib/commands/validate.d.ts +3 -0
  32. package/lib/commands/validate.js +5 -7
  33. package/lib/commands/validate.js.map +1 -1
  34. package/lib/config/config-mutation-service.d.ts +21 -0
  35. package/lib/config/config-mutation-service.js +61 -0
  36. package/lib/config/config-mutation-service.js.map +1 -0
  37. package/lib/dependencies/circular-dependency-detector.d.ts +5 -0
  38. package/lib/dependencies/circular-dependency-detector.js +67 -72
  39. package/lib/dependencies/circular-dependency-detector.js.map +1 -1
  40. package/lib/dependencies/dependency-depth-calculator.d.ts +28 -0
  41. package/lib/dependencies/dependency-depth-calculator.js +86 -39
  42. package/lib/dependencies/dependency-depth-calculator.js.map +1 -1
  43. package/lib/dependencies/dependency-graph-builder.d.ts +45 -13
  44. package/lib/dependencies/dependency-graph-builder.js +228 -123
  45. package/lib/dependencies/dependency-graph-builder.js.map +1 -1
  46. package/lib/dependencies/dependency-impact-analyzer.d.ts +13 -0
  47. package/lib/dependencies/dependency-impact-analyzer.js +146 -102
  48. package/lib/dependencies/dependency-impact-analyzer.js.map +1 -1
  49. package/lib/dependencies/dependency-merger.d.ts +10 -0
  50. package/lib/dependencies/dependency-merger.js +123 -61
  51. package/lib/dependencies/dependency-merger.js.map +1 -1
  52. package/lib/dependencies/dependency-resolver.d.ts +34 -9
  53. package/lib/dependencies/dependency-resolver.js +181 -112
  54. package/lib/dependencies/dependency-resolver.js.map +1 -1
  55. package/lib/dependencies/dependency-semantics.d.ts +20 -0
  56. package/lib/dependencies/dependency-semantics.js +55 -0
  57. package/lib/dependencies/dependency-semantics.js.map +1 -0
  58. package/lib/dependencies/graph-visualizer.d.ts +6 -1
  59. package/lib/dependencies/graph-visualizer.js +38 -4
  60. package/lib/dependencies/graph-visualizer.js.map +1 -1
  61. package/lib/dependencies/heuristic-inference.d.ts +2 -53
  62. package/lib/dependencies/heuristic-inference.js +8 -317
  63. package/lib/dependencies/heuristic-inference.js.map +1 -1
  64. package/lib/dependencies/heuristic-patterns.d.ts +14 -0
  65. package/lib/dependencies/heuristic-patterns.js +247 -0
  66. package/lib/dependencies/heuristic-patterns.js.map +1 -0
  67. package/lib/deployment/cycle-remediation-runner.d.ts +36 -0
  68. package/lib/deployment/cycle-remediation-runner.js +262 -0
  69. package/lib/deployment/cycle-remediation-runner.js.map +1 -0
  70. package/lib/deployment/deployment-context-service.d.ts +24 -0
  71. package/lib/deployment/deployment-context-service.js +17 -0
  72. package/lib/deployment/deployment-context-service.js.map +1 -0
  73. package/lib/deployment/deployment-runner.d.ts +37 -0
  74. package/lib/deployment/deployment-runner.js +94 -0
  75. package/lib/deployment/deployment-runner.js.map +1 -0
  76. package/lib/deployment/deployment-status-service.d.ts +5 -0
  77. package/lib/deployment/deployment-status-service.js +39 -18
  78. package/lib/deployment/deployment-status-service.js.map +1 -1
  79. package/lib/deployment/deployment-validation-service.d.ts +5 -2
  80. package/lib/deployment/deployment-validation-service.js +48 -45
  81. package/lib/deployment/deployment-validation-service.js.map +1 -1
  82. package/lib/deployment/resume-deployment-service.d.ts +14 -0
  83. package/lib/deployment/resume-deployment-service.js +25 -0
  84. package/lib/deployment/resume-deployment-service.js.map +1 -0
  85. package/lib/deployment/start-execution-service.d.ts +44 -0
  86. package/lib/deployment/start-execution-service.js +94 -0
  87. package/lib/deployment/start-execution-service.js.map +1 -0
  88. package/lib/deployment/test-executor.d.ts +60 -1
  89. package/lib/deployment/test-executor.js +180 -12
  90. package/lib/deployment/test-executor.js.map +1 -1
  91. package/lib/deployment/test-plan-service.d.ts +8 -0
  92. package/lib/deployment/test-plan-service.js +26 -0
  93. package/lib/deployment/test-plan-service.js.map +1 -0
  94. package/lib/deployment/wave-manifest-service.d.ts +11 -0
  95. package/lib/deployment/wave-manifest-service.js +41 -0
  96. package/lib/deployment/wave-manifest-service.js.map +1 -0
  97. package/lib/parsers/apex-class-parser.js +180 -98
  98. package/lib/parsers/apex-class-parser.js.map +1 -1
  99. package/lib/parsers/apex-trigger-parser.js +56 -7
  100. package/lib/parsers/apex-trigger-parser.js.map +1 -1
  101. package/lib/parsers/aura-parser.js +2 -2
  102. package/lib/parsers/aura-parser.js.map +1 -1
  103. package/lib/parsers/bot-parser.js +31 -4
  104. package/lib/parsers/bot-parser.js.map +1 -1
  105. package/lib/parsers/custom-metadata-parser.js +37 -3
  106. package/lib/parsers/custom-metadata-parser.js.map +1 -1
  107. package/lib/parsers/custom-object-parser.js +284 -150
  108. package/lib/parsers/custom-object-parser.js.map +1 -1
  109. package/lib/parsers/email-template-parser.js +115 -58
  110. package/lib/parsers/email-template-parser.js.map +1 -1
  111. package/lib/parsers/flexipage-parser.js +41 -16
  112. package/lib/parsers/flexipage-parser.js.map +1 -1
  113. package/lib/parsers/flow-parser.js +73 -63
  114. package/lib/parsers/flow-parser.js.map +1 -1
  115. package/lib/parsers/genai-prompt-parser.js +16 -4
  116. package/lib/parsers/genai-prompt-parser.js.map +1 -1
  117. package/lib/parsers/layout-parser.d.ts +11 -0
  118. package/lib/parsers/layout-parser.js +143 -68
  119. package/lib/parsers/layout-parser.js.map +1 -1
  120. package/lib/parsers/lwc-parser.d.ts +0 -9
  121. package/lib/parsers/lwc-parser.js +245 -100
  122. package/lib/parsers/lwc-parser.js.map +1 -1
  123. package/lib/parsers/parser-utils.d.ts +3 -0
  124. package/lib/parsers/parser-utils.js +16 -0
  125. package/lib/parsers/parser-utils.js.map +1 -0
  126. package/lib/parsers/permission-set-parser.d.ts +6 -0
  127. package/lib/parsers/permission-set-parser.js +31 -40
  128. package/lib/parsers/permission-set-parser.js.map +1 -1
  129. package/lib/parsers/profile-parser.d.ts +13 -0
  130. package/lib/parsers/profile-parser.js +39 -34
  131. package/lib/parsers/profile-parser.js.map +1 -1
  132. package/lib/parsers/visualforce-parser.js +2 -1
  133. package/lib/parsers/visualforce-parser.js.map +1 -1
  134. package/lib/presentation/analyze-command-presenter.d.ts +10 -0
  135. package/lib/presentation/analyze-command-presenter.js +30 -0
  136. package/lib/presentation/analyze-command-presenter.js.map +1 -0
  137. package/lib/presentation/config-command-presenter.d.ts +15 -0
  138. package/lib/presentation/config-command-presenter.js +50 -0
  139. package/lib/presentation/config-command-presenter.js.map +1 -0
  140. package/lib/presentation/project-analysis-presenter.d.ts +9 -0
  141. package/lib/presentation/project-analysis-presenter.js +9 -0
  142. package/lib/presentation/project-analysis-presenter.js.map +1 -0
  143. package/lib/presentation/resume-command-presenter.d.ts +7 -0
  144. package/lib/presentation/resume-command-presenter.js +12 -0
  145. package/lib/presentation/resume-command-presenter.js.map +1 -0
  146. package/lib/presentation/start-command-presenter.d.ts +15 -0
  147. package/lib/presentation/start-command-presenter.js +29 -0
  148. package/lib/presentation/start-command-presenter.js.map +1 -0
  149. package/lib/presentation/status-command-presenter.d.ts +7 -0
  150. package/lib/presentation/status-command-presenter.js +16 -0
  151. package/lib/presentation/status-command-presenter.js.map +1 -0
  152. package/lib/presentation/validate-command-presenter.d.ts +9 -0
  153. package/lib/presentation/validate-command-presenter.js +50 -0
  154. package/lib/presentation/validate-command-presenter.js.map +1 -0
  155. package/lib/services/metadata-scanner-service.d.ts +8 -12
  156. package/lib/services/metadata-scanner-service.js +55 -533
  157. package/lib/services/metadata-scanner-service.js.map +1 -1
  158. package/lib/services/scanners/automation-ai-metadata-scanner.d.ts +4 -0
  159. package/lib/services/scanners/automation-ai-metadata-scanner.js +61 -0
  160. package/lib/services/scanners/automation-ai-metadata-scanner.js.map +1 -0
  161. package/lib/services/scanners/code-metadata-scanner.d.ts +23 -0
  162. package/lib/services/scanners/code-metadata-scanner.js +149 -0
  163. package/lib/services/scanners/code-metadata-scanner.js.map +1 -0
  164. package/lib/services/scanners/data-metadata-scanner.d.ts +3 -0
  165. package/lib/services/scanners/data-metadata-scanner.js +82 -0
  166. package/lib/services/scanners/data-metadata-scanner.js.map +1 -0
  167. package/lib/services/scanners/experience-metadata-scanner.d.ts +5 -0
  168. package/lib/services/scanners/experience-metadata-scanner.js +123 -0
  169. package/lib/services/scanners/experience-metadata-scanner.js.map +1 -0
  170. package/lib/services/scanners/scanner-runtime.d.ts +11 -0
  171. package/lib/services/scanners/scanner-runtime.js +115 -0
  172. package/lib/services/scanners/scanner-runtime.js.map +1 -0
  173. package/lib/services/scanners/security-metadata-scanner.d.ts +3 -0
  174. package/lib/services/scanners/security-metadata-scanner.js +71 -0
  175. package/lib/services/scanners/security-metadata-scanner.js.map +1 -0
  176. package/lib/types/dependency.d.ts +11 -1
  177. package/lib/types/metadata.d.ts +17 -0
  178. package/lib/types/salesforce/flow/actions.d.ts +108 -0
  179. package/lib/types/salesforce/flow/actions.js +2 -0
  180. package/lib/types/salesforce/flow/actions.js.map +1 -0
  181. package/lib/types/salesforce/flow/common.d.ts +36 -0
  182. package/lib/types/salesforce/flow/common.js +5 -0
  183. package/lib/types/salesforce/flow/common.js.map +1 -0
  184. package/lib/types/salesforce/flow/metadata.d.ts +37 -0
  185. package/lib/types/salesforce/flow/metadata.js +2 -0
  186. package/lib/types/salesforce/flow/metadata.js.map +1 -0
  187. package/lib/types/salesforce/flow/records.d.ts +38 -0
  188. package/lib/types/salesforce/flow/records.js +2 -0
  189. package/lib/types/salesforce/flow/records.js.map +1 -0
  190. package/lib/types/salesforce/flow/resources.d.ts +44 -0
  191. package/lib/types/salesforce/flow/resources.js +2 -0
  192. package/lib/types/salesforce/flow/resources.js.map +1 -0
  193. package/lib/types/salesforce/flow/screens.d.ts +56 -0
  194. package/lib/types/salesforce/flow/screens.js +2 -0
  195. package/lib/types/salesforce/flow/screens.js.map +1 -0
  196. package/lib/types/salesforce/flow/start.d.ts +24 -0
  197. package/lib/types/salesforce/flow/start.js +2 -0
  198. package/lib/types/salesforce/flow/start.js.map +1 -0
  199. package/lib/types/salesforce/flow.d.ts +9 -514
  200. package/lib/types/salesforce/flow.js +1 -1
  201. package/lib/types/salesforce/object/core.d.ts +68 -0
  202. package/lib/types/salesforce/object/core.js +5 -0
  203. package/lib/types/salesforce/object/core.js.map +1 -0
  204. package/lib/types/salesforce/object/field.d.ts +155 -0
  205. package/lib/types/salesforce/object/field.js +5 -0
  206. package/lib/types/salesforce/object/field.js.map +1 -0
  207. package/lib/types/salesforce/object/filter.d.ts +16 -0
  208. package/lib/types/salesforce/object/filter.js +5 -0
  209. package/lib/types/salesforce/object/filter.js.map +1 -0
  210. package/lib/types/salesforce/object/policy.d.ts +27 -0
  211. package/lib/types/salesforce/object/policy.js +5 -0
  212. package/lib/types/salesforce/object/policy.js.map +1 -0
  213. package/lib/types/salesforce/object/record.d.ts +44 -0
  214. package/lib/types/salesforce/object/record.js +5 -0
  215. package/lib/types/salesforce/object/record.js.map +1 -0
  216. package/lib/types/salesforce/object/view.d.ts +71 -0
  217. package/lib/types/salesforce/object/view.js +5 -0
  218. package/lib/types/salesforce/object/view.js.map +1 -0
  219. package/lib/types/salesforce/object/weblink.d.ts +70 -0
  220. package/lib/types/salesforce/object/weblink.js +5 -0
  221. package/lib/types/salesforce/object/weblink.js.map +1 -0
  222. package/lib/types/salesforce/object.d.ts +7 -423
  223. package/lib/types/salesforce/object.js +7 -1
  224. package/lib/types/salesforce/object.js.map +1 -1
  225. package/lib/utils/cache-manager.d.ts +16 -15
  226. package/lib/utils/cache-manager.js +290 -188
  227. package/lib/utils/cache-manager.js.map +1 -1
  228. package/lib/utils/logger.d.ts +8 -0
  229. package/lib/utils/logger.js +82 -69
  230. package/lib/utils/logger.js.map +1 -1
  231. package/lib/validators/xml/xml-reference-rules.d.ts +3 -0
  232. package/lib/validators/xml/xml-reference-rules.js +173 -0
  233. package/lib/validators/xml/xml-reference-rules.js.map +1 -0
  234. package/lib/validators/xml/xml-report-formatter.d.ts +2 -0
  235. package/lib/validators/xml/xml-report-formatter.js +47 -0
  236. package/lib/validators/xml/xml-report-formatter.js.map +1 -0
  237. package/lib/validators/xml/xml-schema-rules.d.ts +3 -0
  238. package/lib/validators/xml/xml-schema-rules.js +75 -0
  239. package/lib/validators/xml/xml-schema-rules.js.map +1 -0
  240. package/lib/validators/xml/xml-validation-types.d.ts +25 -0
  241. package/lib/validators/xml/xml-validation-types.js +2 -0
  242. package/lib/validators/xml/xml-validation-types.js.map +1 -0
  243. package/lib/validators/xml-metadata-validator.d.ts +2 -63
  244. package/lib/validators/xml-metadata-validator.js +7 -338
  245. package/lib/validators/xml-metadata-validator.js.map +1 -1
  246. package/lib/waves/test-optimizer.d.ts +13 -0
  247. package/lib/waves/test-optimizer.js +124 -63
  248. package/lib/waves/test-optimizer.js.map +1 -1
  249. package/lib/waves/wave-builder.d.ts +17 -21
  250. package/lib/waves/wave-builder.js +199 -135
  251. package/lib/waves/wave-builder.js.map +1 -1
  252. package/lib/waves/wave-splitter.d.ts +12 -8
  253. package/lib/waves/wave-splitter.js +156 -115
  254. package/lib/waves/wave-splitter.js.map +1 -1
  255. package/npm-shrinkwrap.json +2 -2
  256. package/oclif.manifest.json +1 -1
  257. package/package.json +1 -1
@@ -33,6 +33,70 @@ const TYPE_DEPLOYMENT_ORDER = [
33
33
  'EmailTemplate',
34
34
  'FlexiPage',
35
35
  ];
36
+ function calculateInDegree(graph) {
37
+ const inDegree = new Map();
38
+ for (const [nodeId, deps] of graph.entries()) {
39
+ inDegree.set(nodeId, deps.size);
40
+ }
41
+ return inDegree;
42
+ }
43
+ function collectWaveCandidates(inDegree, processed) {
44
+ const candidates = [];
45
+ for (const [nodeId, degree] of inDegree.entries()) {
46
+ if (degree === 0 && !processed.has(nodeId)) {
47
+ candidates.push(nodeId);
48
+ }
49
+ }
50
+ return candidates;
51
+ }
52
+ function collectRemainingNodes(graph, processed) {
53
+ const remaining = [];
54
+ for (const nodeId of graph.keys()) {
55
+ if (!processed.has(nodeId)) {
56
+ remaining.push(nodeId);
57
+ }
58
+ }
59
+ return remaining;
60
+ }
61
+ function chunkArray(array, chunkSize) {
62
+ const chunks = [];
63
+ for (let i = 0; i < array.length; i += chunkSize) {
64
+ chunks.push(array.slice(i, i + chunkSize));
65
+ }
66
+ return chunks;
67
+ }
68
+ function getMetadataTypeDeploymentOrder(type) {
69
+ const order = TYPE_DEPLOYMENT_ORDER.indexOf(type);
70
+ return order === -1 ? 9999 : order;
71
+ }
72
+ function extractMetadataType(nodeId) {
73
+ return nodeId.split(':')[0];
74
+ }
75
+ function compareTypedDependencyRisk(left, right) {
76
+ if (left.inferred !== right.inferred) {
77
+ return left.inferred - right.inferred;
78
+ }
79
+ if (left.soft !== right.soft) {
80
+ return left.soft - right.soft;
81
+ }
82
+ if (left.hard !== right.hard) {
83
+ return right.hard - left.hard;
84
+ }
85
+ return 0;
86
+ }
87
+ function assembleWaveMetadata(components, hasCircularDeps) {
88
+ const types = new Set();
89
+ for (const component of components) {
90
+ types.add(extractMetadataType(component));
91
+ }
92
+ return {
93
+ componentCount: components.length,
94
+ types: Array.from(types),
95
+ maxDepth: 0,
96
+ hasCircularDeps,
97
+ estimatedTime: Math.ceil(components.length * 0.1),
98
+ };
99
+ }
36
100
  /**
37
101
  * Wave Builder
38
102
  *
@@ -58,12 +122,20 @@ const TYPE_DEPLOYMENT_ORDER = [
58
122
  */
59
123
  export class WaveBuilder {
60
124
  options;
125
+ edgeTypesByFrom;
61
126
  constructor(options = {}) {
62
127
  this.options = {
63
128
  maxComponentsPerWave: options.maxComponentsPerWave ?? 0,
64
129
  respectTypeOrder: options.respectTypeOrder ?? true,
65
130
  handleCircularDeps: options.handleCircularDeps ?? true,
131
+ dependencyEdges: options.dependencyEdges ?? [],
66
132
  };
133
+ this.edgeTypesByFrom = new Map();
134
+ for (const edge of this.options.dependencyEdges) {
135
+ const existing = this.edgeTypesByFrom.get(edge.from) ?? [];
136
+ existing.push(edge.type);
137
+ this.edgeTypesByFrom.set(edge.from, existing);
138
+ }
67
139
  logger.debug('Initialized WaveBuilder', {
68
140
  maxComponentsPerWave: this.options.maxComponentsPerWave,
69
141
  respectTypeOrder: this.options.respectTypeOrder,
@@ -76,170 +148,162 @@ export class WaveBuilder {
76
148
  */
77
149
  generateWaves(graph) {
78
150
  const startTime = Date.now();
79
- // Calculate in-degree for all nodes
80
- const inDegree = this.calculateInDegree(graph);
81
- const waves = [];
82
- const processed = new Set();
83
- const unplacedComponents = [];
84
- let waveNumber = 1;
85
- // Build waves using topological sort
86
- while (processed.size < graph.size) {
87
- // Find nodes with in-degree 0
88
- const currentWave = [];
89
- for (const [nodeId, degree] of inDegree.entries()) {
90
- if (degree === 0 && !processed.has(nodeId)) {
91
- currentWave.push(nodeId);
151
+ const policy = this.getPlacementPolicy();
152
+ const state = this.createPlacementState(graph);
153
+ while (state.processed.size < graph.size) {
154
+ const topologyStage = this.planTopologyStage(state, policy);
155
+ if (topologyStage.orderedCandidates.length === 0) {
156
+ const circularResolution = this.resolveCircularWave(graph, state.processed, state.nextWaveNumber, policy);
157
+ state.unplacedComponents.push(...circularResolution.remaining);
158
+ if (circularResolution.fallbackWave) {
159
+ state.waves.push(circularResolution.fallbackWave);
92
160
  }
93
- }
94
- // No progress - circular dependency
95
- if (currentWave.length === 0) {
96
- this.handleCircularWave(graph, processed, unplacedComponents, waves, waveNumber);
97
161
  break;
98
162
  }
99
- // Sort by type order if configured
100
- if (this.options.respectTypeOrder) {
101
- currentWave.sort((a, b) => this.compareByTypeOrder(a, b));
102
- }
103
- // Split into multiple waves if exceeds max size
104
- if (this.options.maxComponentsPerWave > 0 && currentWave.length > this.options.maxComponentsPerWave) {
105
- const chunks = this.chunkArray(currentWave, this.options.maxComponentsPerWave);
106
- for (const chunk of chunks) {
107
- waves.push({
108
- number: waveNumber++,
109
- components: chunk,
110
- metadata: this.generateWaveMetadata(chunk, false),
111
- });
112
- // Mark as processed
113
- for (const nodeId of chunk) {
114
- processed.add(nodeId);
115
- }
116
- }
117
- }
118
- else {
119
- // Add wave
120
- waves.push({
121
- number: waveNumber++,
122
- components: currentWave,
123
- metadata: this.generateWaveMetadata(currentWave, false),
124
- });
125
- // Mark as processed
126
- for (const nodeId of currentWave) {
127
- processed.add(nodeId);
128
- }
129
- }
130
- // Update in-degrees: reduce count for nodes that depended on current wave nodes
131
- for (const [nodeId, deps] of graph.entries()) {
132
- if (processed.has(nodeId))
133
- continue;
134
- // Count how many of its dependencies were in the current wave
135
- let removedDeps = 0;
136
- for (const dep of deps) {
137
- if (currentWave.includes(dep)) {
138
- removedDeps++;
139
- }
140
- }
141
- if (removedDeps > 0) {
142
- inDegree.set(nodeId, (inDegree.get(nodeId) ?? 0) - removedDeps);
143
- }
163
+ for (const chunk of topologyStage.chunks) {
164
+ state.waves.push(this.createWave(chunk, state.nextWaveNumber, false));
165
+ state.nextWaveNumber += 1;
166
+ this.markProcessed(state.processed, chunk);
144
167
  }
168
+ this.updateInDegreeForPlacedCandidates(graph, state.inDegree, state.processed, topologyStage.orderedCandidates);
145
169
  }
146
- // Calculate statistics
147
- const stats = this.calculateStats(waves);
170
+ const stats = this.calculateStats(state.waves);
148
171
  const duration = Date.now() - startTime;
149
172
  logger.info('Wave generation completed', {
150
- waves: waves.length,
151
- components: processed.size,
152
- unplaced: unplacedComponents.length,
173
+ waves: state.waves.length,
174
+ components: state.processed.size,
175
+ unplaced: state.unplacedComponents.length,
153
176
  durationMs: duration,
154
177
  });
155
- // Ensure waves are sorted by number before returning
156
- waves.sort((a, b) => a.number - b.number);
178
+ state.waves.sort((a, b) => a.number - b.number);
157
179
  return {
158
- waves,
180
+ waves: state.waves,
159
181
  totalComponents: graph.size,
160
- unplacedComponents,
182
+ unplacedComponents: state.unplacedComponents,
161
183
  circularDependencies: [],
162
184
  stats,
163
185
  };
164
186
  }
165
- /**
166
- * Calculate in-degree for all nodes
167
- * In-degree = number of dependencies this node has (how many nodes it depends on)
168
- * Nodes with in-degree 0 have no dependencies and can be deployed first
169
- */
170
- calculateInDegree(graph) {
171
- const inDegree = new Map();
172
- // Initialize all nodes with their dependency count
187
+ createPlacementState(graph) {
188
+ return {
189
+ inDegree: calculateInDegree(graph),
190
+ waves: [],
191
+ processed: new Set(),
192
+ unplacedComponents: [],
193
+ nextWaveNumber: 1,
194
+ };
195
+ }
196
+ getPlacementPolicy() {
197
+ return {
198
+ maxComponentsPerWave: this.options.maxComponentsPerWave,
199
+ respectTypeOrder: this.options.respectTypeOrder,
200
+ handleCircularDeps: this.options.handleCircularDeps,
201
+ };
202
+ }
203
+ selectWaveCandidates(inDegree, processed, policy) {
204
+ const candidates = collectWaveCandidates(inDegree, processed);
205
+ if (policy.respectTypeOrder) {
206
+ candidates.sort((left, right) => this.compareWavePriority(left, right));
207
+ }
208
+ return candidates;
209
+ }
210
+ planTopologyStage(state, policy) {
211
+ const orderedCandidates = this.selectWaveCandidates(state.inDegree, state.processed, policy);
212
+ return {
213
+ orderedCandidates,
214
+ chunks: this.createWaveChunks(orderedCandidates, policy.maxComponentsPerWave),
215
+ };
216
+ }
217
+ createWaveChunks(candidates, maxComponentsPerWave) {
218
+ if (maxComponentsPerWave > 0 && candidates.length > maxComponentsPerWave) {
219
+ return chunkArray(candidates, maxComponentsPerWave);
220
+ }
221
+ return [candidates];
222
+ }
223
+ createWave(components, waveNumber, hasCircularDeps) {
224
+ return {
225
+ number: waveNumber,
226
+ components,
227
+ metadata: this.assembleWaveMetadata(components, hasCircularDeps),
228
+ };
229
+ }
230
+ markProcessed(processed, components) {
231
+ for (const nodeId of components) {
232
+ processed.add(nodeId);
233
+ }
234
+ }
235
+ updateInDegreeForPlacedCandidates(graph, inDegree, processed, placedCandidates) {
173
236
  for (const [nodeId, deps] of graph.entries()) {
174
- inDegree.set(nodeId, deps.size);
237
+ if (processed.has(nodeId)) {
238
+ continue;
239
+ }
240
+ let removedDeps = 0;
241
+ for (const dep of deps) {
242
+ if (placedCandidates.includes(dep)) {
243
+ removedDeps += 1;
244
+ }
245
+ }
246
+ if (removedDeps > 0) {
247
+ inDegree.set(nodeId, (inDegree.get(nodeId) ?? 0) - removedDeps);
248
+ }
175
249
  }
176
- return inDegree;
177
250
  }
178
- handleCircularWave(graph, processed, unplacedComponents, waves, waveNumber) {
179
- const remaining = this.collectRemainingNodes(graph, processed);
180
- unplacedComponents.push(...remaining);
251
+ resolveCircularWave(graph, processed, waveNumber, policy) {
252
+ const remaining = collectRemainingNodes(graph, processed);
181
253
  logger.warn('Circular dependencies detected', {
182
254
  remaining: remaining.length,
183
255
  });
184
- if (this.options.handleCircularDeps) {
185
- waves.push({
186
- number: waveNumber,
187
- components: remaining,
188
- metadata: this.generateWaveMetadata(remaining, true),
189
- });
190
- }
191
- }
192
- collectRemainingNodes(graph, processed) {
193
- const remaining = [];
194
- for (const nodeId of graph.keys()) {
195
- if (!processed.has(nodeId)) {
196
- remaining.push(nodeId);
256
+ if (policy.handleCircularDeps) {
257
+ if (policy.respectTypeOrder) {
258
+ remaining.sort((left, right) => this.compareWavePriority(left, right));
197
259
  }
260
+ return {
261
+ remaining,
262
+ fallbackWave: this.createWave(remaining, waveNumber, true),
263
+ };
198
264
  }
199
- return remaining;
265
+ return { remaining };
200
266
  }
201
- /**
202
- * @ac US-038-AC-6: Generate wave metadata
203
- */
204
- generateWaveMetadata(components, hasCircularDeps) {
205
- const types = new Set();
206
- const maxDepth = 0;
207
- for (const component of components) {
208
- const [type] = component.split(':');
209
- types.add(type);
267
+ compareWavePriority(a, b) {
268
+ const priorityA = this.createWavePriorityProfile(a);
269
+ const priorityB = this.createWavePriorityProfile(b);
270
+ const typeOrderComparison = priorityA.typeOrder - priorityB.typeOrder;
271
+ if (typeOrderComparison !== 0) {
272
+ return typeOrderComparison;
210
273
  }
211
- // Estimate deployment time (rough estimate: 0.1s per component)
212
- const estimatedTime = Math.ceil(components.length * 0.1);
274
+ const riskComparison = compareTypedDependencyRisk(priorityA.riskProfile, priorityB.riskProfile);
275
+ if (riskComparison !== 0) {
276
+ return riskComparison;
277
+ }
278
+ return a.localeCompare(b);
279
+ }
280
+ createWavePriorityProfile(nodeId) {
281
+ const metadataType = extractMetadataType(nodeId);
213
282
  return {
214
- componentCount: components.length,
215
- types: Array.from(types),
216
- maxDepth,
217
- hasCircularDeps,
218
- estimatedTime,
283
+ typeOrder: getMetadataTypeDeploymentOrder(metadataType),
284
+ riskProfile: this.getDependencyRiskProfile(nodeId),
219
285
  };
220
286
  }
221
- /**
222
- * Compare nodes by type deployment order
223
- */
224
- compareByTypeOrder(a, b) {
225
- const typeA = a.split(':')[0];
226
- const typeB = b.split(':')[0];
227
- const orderA = TYPE_DEPLOYMENT_ORDER.indexOf(typeA);
228
- const orderB = TYPE_DEPLOYMENT_ORDER.indexOf(typeB);
229
- // If not in order list, put at end
230
- const finalOrderA = orderA === -1 ? 9999 : orderA;
231
- const finalOrderB = orderB === -1 ? 9999 : orderB;
232
- return finalOrderA - finalOrderB;
287
+ getDependencyRiskProfile(nodeId) {
288
+ const edgeTypes = this.edgeTypesByFrom.get(nodeId) ?? [];
289
+ return edgeTypes.reduce((accumulator, type) => ({
290
+ ...accumulator,
291
+ [type]: accumulator[type] + 1,
292
+ }), {
293
+ hard: 0,
294
+ soft: 0,
295
+ inferred: 0,
296
+ });
233
297
  }
234
- /**
235
- * Split array into chunks
236
- */
237
- chunkArray(array, chunkSize) {
238
- const chunks = [];
239
- for (let i = 0; i < array.length; i += chunkSize) {
240
- chunks.push(array.slice(i, i + chunkSize));
241
- }
242
- return chunks;
298
+ assembleWaveMetadata(components, hasCircularDeps) {
299
+ const assembly = assembleWaveMetadata(components, hasCircularDeps);
300
+ return {
301
+ componentCount: assembly.componentCount,
302
+ types: assembly.types,
303
+ maxDepth: assembly.maxDepth,
304
+ hasCircularDeps: assembly.hasCircularDeps,
305
+ estimatedTime: assembly.estimatedTime,
306
+ };
243
307
  }
244
308
  /**
245
309
  * Calculate wave statistics
@@ -1 +1 @@
1
- {"version":3,"file":"wave-builder.js","sourceRoot":"","sources":["../../src/waves/wave-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wave-builder.js","sourceRoot":"","sources":["../../src/waves/wave-builder.ts"],"names":[],"mappings":"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"}
@@ -110,19 +110,17 @@ export declare class WaveSplitter {
110
110
  * @ac US-039-AC-5: Report split decisions
111
111
  */
112
112
  splitWaves(waveResult: WaveResult, graph: DependencyGraph): SplitResult;
113
- /**
114
- * Check if wave needs to be split
115
- */
116
- private needsSplit;
117
- /**
118
- * Get reason for split
119
- */
120
- private getSplitReason;
113
+ private getSplitPolicy;
114
+ private assessWaveSplit;
121
115
  /**
122
116
  * @ac US-039-AC-4: Split CMT waves at 200 records
123
117
  * @ac US-039-AC-6: Ensure no dependency violations
124
118
  */
125
119
  private splitWave;
120
+ private planComponentSplit;
121
+ private assembleSubWaves;
122
+ private createSequentialSubWaves;
123
+ private countCustomMetadataComponents;
126
124
  /**
127
125
  * Sort components by dependency order
128
126
  */
@@ -147,8 +145,14 @@ export declare class WaveSplitter {
147
145
  * Validate split result (no dependency violations)
148
146
  */
149
147
  validateSplit(result: SplitResult, graph: DependencyGraph): boolean;
148
+ private findDependencyViolation;
150
149
  /**
151
150
  * Generate split report
152
151
  */
153
152
  generateReport(result: SplitResult): string;
153
+ private buildSplitStats;
154
+ private buildValidationStates;
155
+ private logDependencyViolation;
156
+ private buildReportContent;
157
+ private buildDecisionReportLines;
154
158
  }