@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
@@ -0,0 +1,94 @@
1
+ import { TestPlanService } from './test-plan-service.js';
2
+ import { WaveManifestService } from './wave-manifest-service.js';
3
+ export class DeploymentRunner {
4
+ testPlanService;
5
+ waveManifestService;
6
+ constructor(dependencies = {}) {
7
+ this.testPlanService = dependencies.testPlanService ?? new TestPlanService();
8
+ this.waveManifestService = dependencies.waveManifestService ?? new WaveManifestService();
9
+ }
10
+ async execute(params) {
11
+ const { deploymentId, targetOrg, sourcePath, orderedWaves, componentMap, skipTests, testExecutor, tracker, stateManager, sfCli, aiContext, log, } = params;
12
+ await this.forEachSequentially(orderedWaves, async (wave) => {
13
+ log(`\n🌊 Deploying Wave ${wave.number}/${orderedWaves.length} (${wave.components.length} components)...`);
14
+ const manifestPath = await this.waveManifestService.generateManifest({
15
+ baseDir: sourcePath ?? process.cwd(),
16
+ waveNumber: wave.number,
17
+ components: wave.components,
18
+ componentMap,
19
+ });
20
+ const testPlan = this.testPlanService.resolveTestPlan(wave, skipTests, testExecutor);
21
+ tracker.startTracking(deploymentId, wave.number, orderedWaves.length);
22
+ const result = await sfCli.deploy({
23
+ manifestPath,
24
+ targetOrg,
25
+ testLevel: testPlan.testLevel,
26
+ tests: testPlan.testLevel === 'RunSpecifiedTests' ? testPlan.tests : undefined,
27
+ });
28
+ tracker.updateProgress(deploymentId, result);
29
+ if (!result.success) {
30
+ await stateManager.saveState({
31
+ deploymentId,
32
+ targetOrg,
33
+ timestamp: new Date().toISOString(),
34
+ totalWaves: orderedWaves.length,
35
+ completedWaves: Array.from({ length: Math.max(0, wave.number - 1) }, (_, i) => i + 1),
36
+ currentWave: wave.number,
37
+ failedWave: {
38
+ waveNumber: wave.number,
39
+ error: result.output,
40
+ timestamp: new Date().toISOString(),
41
+ },
42
+ metadata: {
43
+ lastKnownStatus: result.status,
44
+ testsRun: result.testsRun,
45
+ testFailures: result.testFailures,
46
+ testLevel: testPlan.testLevel,
47
+ ...this.buildAIMetadata(aiContext),
48
+ },
49
+ });
50
+ throw new Error(`Wave ${wave.number} failed: ${result.output}`);
51
+ }
52
+ await stateManager.saveState({
53
+ deploymentId,
54
+ targetOrg,
55
+ timestamp: new Date().toISOString(),
56
+ totalWaves: orderedWaves.length,
57
+ completedWaves: Array.from({ length: wave.number }, (_, i) => i + 1),
58
+ currentWave: wave.number,
59
+ metadata: {
60
+ lastKnownStatus: result.status,
61
+ testsRun: result.testsRun,
62
+ testFailures: result.testFailures,
63
+ testLevel: testPlan.testLevel,
64
+ ...this.buildAIMetadata(aiContext),
65
+ },
66
+ });
67
+ log(`✅ Wave ${wave.number} deployed successfully`);
68
+ });
69
+ await stateManager.clearState();
70
+ log('\n✅ All waves deployed successfully!');
71
+ }
72
+ buildAIMetadata(aiContext) {
73
+ if (aiContext === undefined) {
74
+ return {};
75
+ }
76
+ return {
77
+ aiProvider: aiContext.provider,
78
+ aiModel: aiContext.model,
79
+ aiFallback: aiContext.fallback,
80
+ aiAdjustments: aiContext.aiAdjustments,
81
+ aiUnknownTypes: aiContext.unknownTypes,
82
+ aiInferenceFallback: aiContext.inferenceFallback,
83
+ aiInferredDependencies: aiContext.inferredDependencies,
84
+ };
85
+ }
86
+ async forEachSequentially(items, callback) {
87
+ let chain = Promise.resolve();
88
+ items.forEach((item, index) => {
89
+ chain = chain.then(async () => callback(item, index));
90
+ });
91
+ await chain;
92
+ }
93
+ }
94
+ //# sourceMappingURL=deployment-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deployment-runner.js","sourceRoot":"","sources":["../../src/deployment/deployment-runner.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { type CycleRemediationStatusSummary } from './deployment-state-summary.js';
1
2
  import { StateManager } from './state-manager.js';
2
3
  export type DeploymentStatusSummary = {
3
4
  hasState: boolean;
@@ -12,6 +13,8 @@ export type DeploymentStatusSummary = {
12
13
  failedWaveError?: string;
13
14
  resumable: boolean;
14
15
  testStatus: 'unknown' | 'pending' | 'not-run';
16
+ testStatusText: string;
17
+ cycleRemediation?: CycleRemediationStatusSummary;
15
18
  timestamp?: string;
16
19
  stateFilePath: string;
17
20
  };
@@ -33,4 +36,6 @@ export declare class DeploymentStatusService {
33
36
  private expandRemainingWaves;
34
37
  private normalizeStatus;
35
38
  private normalizeTestStatus;
39
+ private toDisplayStatus;
40
+ private estimateTimeRemainingSeconds;
36
41
  }
@@ -1,5 +1,5 @@
1
1
  import { getLogger } from '../utils/logger.js';
2
- import { summarizeDeploymentState } from './deployment-state-summary.js';
2
+ import { formatDeploymentStatus, summarizeDeploymentState, } from './deployment-state-summary.js';
3
3
  import { StateManager } from './state-manager.js';
4
4
  const logger = getLogger('DeploymentStatusService');
5
5
  export class DeploymentStatusService {
@@ -19,6 +19,7 @@ export class DeploymentStatusService {
19
19
  remainingWaves: [],
20
20
  resumable: false,
21
21
  testStatus: 'unknown',
22
+ testStatusText: 'Not started',
22
23
  stateFilePath: this.stateManager.getStateFilePath(),
23
24
  };
24
25
  }
@@ -42,6 +43,8 @@ export class DeploymentStatusService {
42
43
  failedWaveError: summary.failureReason,
43
44
  resumable: summary.canResume,
44
45
  testStatus: this.normalizeTestStatus(summary.testStatus),
46
+ testStatusText: summary.testStatus,
47
+ cycleRemediation: summary.cycleRemediation,
45
48
  timestamp: summary.lastUpdated,
46
49
  stateFilePath: this.stateManager.getStateFilePath(),
47
50
  };
@@ -79,23 +82,22 @@ export class DeploymentStatusService {
79
82
  if (!summary.hasState) {
80
83
  return ['No deployment state found.', `Expected state file: ${summary.stateFilePath}`].join('\n');
81
84
  }
82
- const lines = [
83
- `Status: ${summary.status}`,
84
- `Deployment ID: ${summary.deploymentId ?? 'unknown'}`,
85
- `Target Org: ${summary.targetOrg ?? 'unknown'}`,
86
- `Current Wave: ${summary.currentWave}/${summary.totalWaves}`,
87
- `Completed Waves: ${summary.completedWaves.length > 0 ? summary.completedWaves.join(', ') : 'none'}`,
88
- `Remaining Waves: ${summary.remainingWaves.length > 0 ? summary.remainingWaves.join(', ') : 'none'}`,
89
- `Test Status: ${summary.testStatus}`,
90
- `Updated: ${summary.timestamp ?? 'unknown'}`,
91
- ];
92
- if (summary.failedWaveNumber !== undefined) {
93
- lines.push(`Failed Wave: ${summary.failedWaveNumber}`);
94
- }
95
- if (summary.failedWaveError) {
96
- lines.push(`Failure: ${summary.failedWaveError}`);
97
- }
98
- return lines.join('\n');
85
+ return formatDeploymentStatus({
86
+ deploymentId: summary.deploymentId ?? 'unknown',
87
+ targetOrg: summary.targetOrg ?? 'unknown',
88
+ status: this.toDisplayStatus(summary.status),
89
+ currentWave: summary.currentWave,
90
+ totalWaves: summary.totalWaves,
91
+ completedWaves: summary.completedWaves,
92
+ remainingWaves: summary.remainingWaves.length,
93
+ canResume: summary.resumable,
94
+ etaSeconds: this.estimateTimeRemainingSeconds(summary),
95
+ testStatus: summary.testStatusText,
96
+ lastUpdated: summary.timestamp ?? 'unknown',
97
+ failedWaveNumber: summary.failedWaveNumber,
98
+ failureReason: summary.failedWaveError,
99
+ cycleRemediation: summary.cycleRemediation,
100
+ }).join('\n');
99
101
  }
100
102
  expandRemainingWaves(currentWave, remainingCount, totalWaves) {
101
103
  return Array.from({ length: remainingCount }, (_, index) => currentWave + index).filter((wave) => wave <= totalWaves);
@@ -124,5 +126,24 @@ export class DeploymentStatusService {
124
126
  }
125
127
  return 'pending';
126
128
  }
129
+ toDisplayStatus(status) {
130
+ switch (status) {
131
+ case 'not-started':
132
+ return 'Not Started';
133
+ case 'in-progress':
134
+ return 'In Progress';
135
+ case 'failed':
136
+ return 'Failed';
137
+ default:
138
+ return 'Completed';
139
+ }
140
+ }
141
+ estimateTimeRemainingSeconds(summary) {
142
+ const remainingCount = summary.remainingWaves.length;
143
+ if (remainingCount === 0) {
144
+ return 0;
145
+ }
146
+ return remainingCount * 60;
147
+ }
127
148
  }
128
149
  //# sourceMappingURL=deployment-status-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"deployment-status-service.js","sourceRoot":"","sources":["../../src/deployment/deployment-status-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deployment-status-service.js","sourceRoot":"","sources":["../../src/deployment/deployment-status-service.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { MetadataDependencyKind } from '../types/metadata.js';
1
2
  export type DeploymentValidationIssue = {
2
3
  severity: 'error' | 'warning';
3
4
  message: string;
@@ -7,6 +8,8 @@ export type DeploymentValidationIssue = {
7
8
  export type DeploymentValidationSummary = {
8
9
  valid: boolean;
9
10
  components: number;
11
+ dependencies: number;
12
+ dependencyBreakdown: Record<MetadataDependencyKind, number>;
10
13
  totalWaves: number;
11
14
  estimatedTime: number;
12
15
  xmlFilesValidated: number;
@@ -18,11 +21,11 @@ export type DeploymentValidationSummary = {
18
21
  aiFallback?: boolean;
19
22
  };
20
23
  export declare class DeploymentValidationService {
21
- private readonly scanner;
24
+ private readonly projectAnalysisService;
22
25
  private readonly xmlValidator;
23
26
  validateProject(sourcePath?: string, options?: {
24
27
  useAI?: boolean;
25
28
  }): Promise<DeploymentValidationSummary>;
26
- formatSummary(summary: DeploymentValidationSummary): string;
29
+ private createWaveDependencyRiskIssues;
27
30
  private findXmlMetadataFiles;
28
31
  }
@@ -1,24 +1,26 @@
1
1
  import * as path from 'node:path';
2
2
  import { glob as globAsync } from 'glob';
3
- import { MetadataScannerService } from '../services/metadata-scanner-service.js';
3
+ import { ProjectAnalysisService } from '../analysis/project-analysis-service.js';
4
4
  import { getLogger } from '../utils/logger.js';
5
5
  import { XmlMetadataValidator } from '../validators/xml-metadata-validator.js';
6
6
  import { WaveValidationService } from '../ai/wave-validation-service.js';
7
- import { WaveBuilder } from '../waves/wave-builder.js';
8
7
  import { validateWaveOrder } from '../waves/wave-executor.js';
9
8
  const logger = getLogger('DeploymentValidationService');
10
9
  export class DeploymentValidationService {
11
- scanner = new MetadataScannerService();
10
+ projectAnalysisService = new ProjectAnalysisService();
12
11
  xmlValidator = new XmlMetadataValidator();
13
12
  async validateProject(sourcePath, options = {}) {
14
- const scanResult = await this.scanner.scan({ sourcePath });
15
- const waveBuilder = new WaveBuilder({
16
- maxComponentsPerWave: 10_000,
17
- respectTypeOrder: true,
18
- handleCircularDeps: true,
19
- });
20
- const waveResult = waveBuilder.generateWaves(scanResult.dependencyResult.graph);
13
+ const analysis = await this.projectAnalysisService.buildAnalysis({ sourcePath });
14
+ const { scanResult, waveResult } = analysis;
21
15
  const issues = [];
16
+ const dependencyBreakdown = scanResult.dependencyResult.edges.reduce((accumulator, edge) => ({
17
+ ...accumulator,
18
+ [edge.type]: accumulator[edge.type] + 1,
19
+ }), {
20
+ hard: 0,
21
+ soft: 0,
22
+ inferred: 0,
23
+ });
22
24
  issues.push(...scanResult.errors.map((message) => ({ severity: 'error', message })), ...scanResult.warnings.map((message) => ({ severity: 'warning', message })));
23
25
  if (!validateWaveOrder(waveResult.waves)) {
24
26
  issues.push({
@@ -38,6 +40,7 @@ export class DeploymentValidationService {
38
40
  message: `${waveResult.unplacedComponents.length} component(s) required manual placement.`,
39
41
  });
40
42
  }
43
+ issues.push(...this.createWaveDependencyRiskIssues(scanResult.dependencyResult.edges, waveResult.waves));
41
44
  const xmlFiles = await this.findXmlMetadataFiles(scanResult.projectRoot);
42
45
  const xmlResults = await this.xmlValidator.validateFiles(xmlFiles);
43
46
  for (const result of xmlResults) {
@@ -98,6 +101,8 @@ export class DeploymentValidationService {
98
101
  return {
99
102
  valid,
100
103
  components: scanResult.components.length,
104
+ dependencies: scanResult.dependencyResult.stats.totalDependencies,
105
+ dependencyBreakdown,
101
106
  totalWaves: waveResult.waves.length,
102
107
  estimatedTime: waveResult.stats.totalEstimatedTime,
103
108
  xmlFilesValidated: xmlFiles.length,
@@ -109,42 +114,40 @@ export class DeploymentValidationService {
109
114
  aiFallback,
110
115
  };
111
116
  }
112
- formatSummary(summary) {
113
- const lines = [
114
- `Validation: ${summary.valid ? 'PASSED' : 'FAILED'}`,
115
- `Components: ${summary.components}`,
116
- `Waves: ${summary.totalWaves}`,
117
- `Estimated Time: ${summary.estimatedTime}s`,
118
- `XML Files Validated: ${summary.xmlFilesValidated}`,
119
- ];
120
- if (summary.aiAnalyzed !== undefined) {
121
- lines.push(`AI Validation: ${summary.aiAnalyzed ? 'ENABLED' : 'UNAVAILABLE'}`);
122
- }
123
- if (summary.aiProvider) {
124
- lines.push(`AI Provider: ${summary.aiProvider}`);
125
- }
126
- if (summary.aiModel) {
127
- lines.push(`AI Model: ${summary.aiModel}`);
128
- }
129
- if (summary.aiFallback !== undefined) {
130
- lines.push(`AI Fallback: ${summary.aiFallback ? 'YES' : 'NO'}`);
131
- }
132
- if (summary.overallRisk) {
133
- lines.push(`AI Overall Risk: ${summary.overallRisk.toUpperCase()}`);
134
- }
135
- if (summary.issues.length > 0) {
136
- lines.push('');
137
- lines.push('Issues:');
138
- for (const issue of summary.issues) {
139
- const location = issue.filePath
140
- ? ` (${issue.filePath})`
141
- : issue.waveNumber !== undefined
142
- ? ` (wave ${issue.waveNumber})`
143
- : '';
144
- lines.push(`- [${issue.severity}] ${issue.message}${location}`);
117
+ createWaveDependencyRiskIssues(edges, waves) {
118
+ return waves.flatMap((wave) => {
119
+ const waveComponents = new Set(wave.components);
120
+ let softCount = 0;
121
+ let inferredCount = 0;
122
+ for (const edge of edges) {
123
+ if (!waveComponents.has(edge.from)) {
124
+ continue;
125
+ }
126
+ if (edge.type === 'soft') {
127
+ softCount += 1;
128
+ }
129
+ else if (edge.type === 'inferred') {
130
+ inferredCount += 1;
131
+ }
145
132
  }
146
- }
147
- return lines.join('\n');
133
+ if (softCount === 0 && inferredCount === 0) {
134
+ return [];
135
+ }
136
+ const parts = [];
137
+ if (softCount > 0) {
138
+ parts.push(`${softCount} soft dependenc${softCount === 1 ? 'y' : 'ies'}`);
139
+ }
140
+ if (inferredCount > 0) {
141
+ parts.push(`${inferredCount} inferred dependenc${inferredCount === 1 ? 'y' : 'ies'}`);
142
+ }
143
+ return [
144
+ {
145
+ severity: 'warning',
146
+ waveNumber: wave.number,
147
+ message: `Wave ${wave.number} contains ${parts.join(' and ')} that should be reviewed before deployment.`,
148
+ },
149
+ ];
150
+ });
148
151
  }
149
152
  async findXmlMetadataFiles(projectRoot) {
150
153
  const files = await globAsync('**/*-meta.xml', {
@@ -1 +1 @@
1
- {"version":3,"file":"deployment-validation-service.js","sourceRoot":"","sources":["../../src/deployment/deployment-validation-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deployment-validation-service.js","sourceRoot":"","sources":["../../src/deployment/deployment-validation-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { StateManager } from './state-manager.js';
2
+ export type ResumeRetryStrategy = 'standard' | 'quick' | 'validate-only';
3
+ export type ResumePreparation = {
4
+ deploymentId: string;
5
+ currentWave: number;
6
+ totalWaves: number;
7
+ remainingWaves: number;
8
+ failureReason?: string;
9
+ };
10
+ export declare class ResumeDeploymentService {
11
+ private readonly stateManager;
12
+ constructor(stateManager?: StateManager);
13
+ prepareResume(retryStrategy: ResumeRetryStrategy): Promise<ResumePreparation>;
14
+ }
@@ -0,0 +1,25 @@
1
+ import { createResumedState, summarizeDeploymentState } from './deployment-state-summary.js';
2
+ import { StateManager } from './state-manager.js';
3
+ export class ResumeDeploymentService {
4
+ stateManager;
5
+ constructor(stateManager = new StateManager()) {
6
+ this.stateManager = stateManager;
7
+ }
8
+ async prepareResume(retryStrategy) {
9
+ const state = await this.stateManager.loadState();
10
+ if (!state?.failedWave) {
11
+ throw new Error('No failed deployment state found to resume');
12
+ }
13
+ const summary = summarizeDeploymentState(state);
14
+ const resumedState = createResumedState(state, retryStrategy);
15
+ await this.stateManager.saveState(resumedState);
16
+ return {
17
+ deploymentId: summary.deploymentId,
18
+ currentWave: summary.currentWave,
19
+ totalWaves: summary.totalWaves,
20
+ remainingWaves: summary.remainingWaves,
21
+ failureReason: summary.failureReason,
22
+ };
23
+ }
24
+ }
25
+ //# sourceMappingURL=resume-deployment-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume-deployment-service.js","sourceRoot":"","sources":["../../src/deployment/resume-deployment-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAYlD,MAAM,OAAO,uBAAuB;IACE;IAApC,YAAoC,eAA6B,IAAI,YAAY,EAAE;QAA/C,iBAAY,GAAZ,YAAY,CAAmC;IAAG,CAAC;IAEhF,KAAK,CAAC,aAAa,CAAC,aAAkC;QAC3D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;QAElD,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,OAAO,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAE9D,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAEhD,OAAO;YACL,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,44 @@
1
+ import { CycleRemediationRunner } from './cycle-remediation-runner.js';
2
+ import { DeploymentContext } from './deployment-context-service.js';
3
+ import { DeploymentRunner } from './deployment-runner.js';
4
+ import { DeploymentTracker } from './deployment-tracker.js';
5
+ import { SfCliIntegration } from './sf-cli-integration.js';
6
+ import { StateManager } from './state-manager.js';
7
+ import { TestPlanService } from './test-plan-service.js';
8
+ export type StartExecutionOptions = {
9
+ dryRun: boolean;
10
+ validateOnly: boolean;
11
+ allowCycleRemediation: boolean;
12
+ skipTests: boolean;
13
+ targetOrg?: string;
14
+ sourcePath?: string;
15
+ deploymentContext: DeploymentContext;
16
+ log: (message: string) => void;
17
+ };
18
+ export type StartExecutionResult = {
19
+ kind: 'skipped';
20
+ reason: 'dry-run' | 'validate-only';
21
+ } | {
22
+ kind: 'executed';
23
+ };
24
+ type StartExecutionServiceDependencies = {
25
+ testPlanService?: TestPlanService;
26
+ cycleRemediationRunner?: CycleRemediationRunner;
27
+ deploymentRunner?: DeploymentRunner;
28
+ createSfCli?: () => SfCliIntegration;
29
+ createStateManager?: (baseDir?: string) => StateManager;
30
+ createTracker?: () => DeploymentTracker;
31
+ createDeploymentId?: () => string;
32
+ };
33
+ export declare class StartExecutionService {
34
+ private readonly testPlanService;
35
+ private readonly cycleRemediationRunner;
36
+ private readonly deploymentRunner;
37
+ private readonly createSfCli;
38
+ private readonly createStateManager;
39
+ private readonly createTracker;
40
+ private readonly createDeploymentId;
41
+ constructor(dependencies?: StartExecutionServiceDependencies);
42
+ execute(options: StartExecutionOptions): Promise<StartExecutionResult>;
43
+ }
44
+ export {};
@@ -0,0 +1,94 @@
1
+ import { CycleRemediationPlanner } from '../dependencies/cycle-remediation-planner.js';
2
+ import { CycleRemediationRunner } from './cycle-remediation-runner.js';
3
+ import { DeploymentRunner } from './deployment-runner.js';
4
+ import { DeploymentTracker } from './deployment-tracker.js';
5
+ import { SfCliIntegration } from './sf-cli-integration.js';
6
+ import { StateManager } from './state-manager.js';
7
+ import { TestPlanService } from './test-plan-service.js';
8
+ export class StartExecutionService {
9
+ testPlanService;
10
+ cycleRemediationRunner;
11
+ deploymentRunner;
12
+ createSfCli;
13
+ createStateManager;
14
+ createTracker;
15
+ createDeploymentId;
16
+ constructor(dependencies = {}) {
17
+ this.testPlanService = dependencies.testPlanService ?? new TestPlanService();
18
+ this.cycleRemediationRunner = dependencies.cycleRemediationRunner ?? new CycleRemediationRunner();
19
+ this.deploymentRunner = dependencies.deploymentRunner ?? new DeploymentRunner();
20
+ this.createSfCli = dependencies.createSfCli ?? (() => new SfCliIntegration());
21
+ this.createStateManager =
22
+ dependencies.createStateManager ??
23
+ ((baseDir) => new StateManager({ baseDir: baseDir ?? process.cwd() }));
24
+ this.createTracker = dependencies.createTracker ?? (() => new DeploymentTracker());
25
+ this.createDeploymentId = dependencies.createDeploymentId ?? (() => `deployment-${Date.now()}`);
26
+ }
27
+ async execute(options) {
28
+ if (options.dryRun) {
29
+ return { kind: 'skipped', reason: 'dry-run' };
30
+ }
31
+ if (options.validateOnly) {
32
+ return { kind: 'skipped', reason: 'validate-only' };
33
+ }
34
+ const { scanResult, orderedWaves, aiContext } = options.deploymentContext;
35
+ const testExecutor = this.testPlanService.createExecutor(scanResult.components);
36
+ const planner = new CycleRemediationPlanner(scanResult.dependencyResult.graph, {
37
+ components: scanResult.dependencyResult.components,
38
+ });
39
+ const remediationPlan = planner.createPlan();
40
+ if (remediationPlan.cycles.length > 0) {
41
+ options.log(`♻️ Detected ${remediationPlan.cycles.length} circular dependency cycle(s).`);
42
+ if (!options.allowCycleRemediation) {
43
+ throw new Error('Circular dependencies detected. Re-run with --allow-cycle-remediation for supported ApexClass cycles or resolve them manually.');
44
+ }
45
+ if (!remediationPlan.supported) {
46
+ throw new Error([
47
+ 'Cycle remediation was requested, but one or more cycles are not safely supported.',
48
+ ...remediationPlan.warnings,
49
+ ].join('\n'));
50
+ }
51
+ }
52
+ const sfCli = this.createSfCli();
53
+ const stateManager = this.createStateManager(options.sourcePath);
54
+ const tracker = this.createTracker();
55
+ const deploymentId = this.createDeploymentId();
56
+ if (remediationPlan.cycles.length > 0) {
57
+ if (!options.targetOrg) {
58
+ throw new Error('The --target-org flag is required for cycle remediation deployments.');
59
+ }
60
+ await this.cycleRemediationRunner.execute({
61
+ deploymentId,
62
+ targetOrg: options.targetOrg,
63
+ sourcePath: options.sourcePath,
64
+ stateManager,
65
+ tracker,
66
+ plan: remediationPlan,
67
+ sfCli,
68
+ skipTests: options.skipTests,
69
+ componentMap: scanResult.dependencyResult.components,
70
+ log: options.log,
71
+ });
72
+ return { kind: 'executed' };
73
+ }
74
+ if (!options.targetOrg) {
75
+ throw new Error('The --target-org flag is required for real deployments.');
76
+ }
77
+ await this.deploymentRunner.execute({
78
+ deploymentId,
79
+ targetOrg: options.targetOrg,
80
+ sourcePath: options.sourcePath,
81
+ orderedWaves,
82
+ componentMap: scanResult.dependencyResult.components,
83
+ skipTests: options.skipTests,
84
+ testExecutor,
85
+ tracker,
86
+ stateManager,
87
+ sfCli,
88
+ aiContext,
89
+ log: options.log,
90
+ });
91
+ return { kind: 'executed' };
92
+ }
93
+ }
94
+ //# sourceMappingURL=start-execution-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-execution-service.js","sourceRoot":"","sources":["../../src/deployment/start-execution-service.ts"],"names":[],"mappings":"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"}