@jterrats/smart-deployment 1.0.3

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 (395) hide show
  1. package/README.md +193 -0
  2. package/lib/ai/agentforce-error-handler.d.ts +81 -0
  3. package/lib/ai/agentforce-error-handler.js +196 -0
  4. package/lib/ai/agentforce-error-handler.js.map +1 -0
  5. package/lib/ai/agentforce-priority-service.d.ts +82 -0
  6. package/lib/ai/agentforce-priority-service.js +257 -0
  7. package/lib/ai/agentforce-priority-service.js.map +1 -0
  8. package/lib/ai/agentforce-service.d.ts +99 -0
  9. package/lib/ai/agentforce-service.js +300 -0
  10. package/lib/ai/agentforce-service.js.map +1 -0
  11. package/lib/ai/circuit-breaker.d.ts +115 -0
  12. package/lib/ai/circuit-breaker.js +277 -0
  13. package/lib/ai/circuit-breaker.js.map +1 -0
  14. package/lib/ai/dependency-inference-service.d.ts +76 -0
  15. package/lib/ai/dependency-inference-service.js +220 -0
  16. package/lib/ai/dependency-inference-service.js.map +1 -0
  17. package/lib/ai/llm-provider-factory.d.ts +15 -0
  18. package/lib/ai/llm-provider-factory.js +36 -0
  19. package/lib/ai/llm-provider-factory.js.map +1 -0
  20. package/lib/ai/llm-provider.d.ts +27 -0
  21. package/lib/ai/llm-provider.js +2 -0
  22. package/lib/ai/llm-provider.js.map +1 -0
  23. package/lib/ai/openai-service.d.ts +20 -0
  24. package/lib/ai/openai-service.js +89 -0
  25. package/lib/ai/openai-service.js.map +1 -0
  26. package/lib/ai/prompt-builder.d.ts +79 -0
  27. package/lib/ai/prompt-builder.js +180 -0
  28. package/lib/ai/prompt-builder.js.map +1 -0
  29. package/lib/ai/response-parser.d.ts +67 -0
  30. package/lib/ai/response-parser.js +234 -0
  31. package/lib/ai/response-parser.js.map +1 -0
  32. package/lib/ai/wave-validation-service.d.ts +111 -0
  33. package/lib/ai/wave-validation-service.js +381 -0
  34. package/lib/ai/wave-validation-service.js.map +1 -0
  35. package/lib/analysis/analysis-reporter.d.ts +56 -0
  36. package/lib/analysis/analysis-reporter.js +170 -0
  37. package/lib/analysis/analysis-reporter.js.map +1 -0
  38. package/lib/analytics/error-analytics.d.ts +80 -0
  39. package/lib/analytics/error-analytics.js +162 -0
  40. package/lib/analytics/error-analytics.js.map +1 -0
  41. package/lib/commands/analyze.d.ts +49 -0
  42. package/lib/commands/analyze.js +232 -0
  43. package/lib/commands/analyze.js.map +1 -0
  44. package/lib/commands/config.d.ts +42 -0
  45. package/lib/commands/config.js +219 -0
  46. package/lib/commands/config.js.map +1 -0
  47. package/lib/commands/resume.d.ts +26 -0
  48. package/lib/commands/resume.js +69 -0
  49. package/lib/commands/resume.js.map +1 -0
  50. package/lib/commands/start.d.ts +70 -0
  51. package/lib/commands/start.js +659 -0
  52. package/lib/commands/start.js.map +1 -0
  53. package/lib/commands/status.d.ts +37 -0
  54. package/lib/commands/status.js +69 -0
  55. package/lib/commands/status.js.map +1 -0
  56. package/lib/commands/validate.d.ts +33 -0
  57. package/lib/commands/validate.js +66 -0
  58. package/lib/commands/validate.js.map +1 -0
  59. package/lib/config/repo-config.d.ts +22 -0
  60. package/lib/config/repo-config.js +31 -0
  61. package/lib/config/repo-config.js.map +1 -0
  62. package/lib/constants/agentforce-limits.d.ts +174 -0
  63. package/lib/constants/agentforce-limits.js +262 -0
  64. package/lib/constants/agentforce-limits.js.map +1 -0
  65. package/lib/constants/api-version.d.ts +70 -0
  66. package/lib/constants/api-version.js +122 -0
  67. package/lib/constants/api-version.js.map +1 -0
  68. package/lib/constants/deployment-order.d.ts +68 -0
  69. package/lib/constants/deployment-order.js +162 -0
  70. package/lib/constants/deployment-order.js.map +1 -0
  71. package/lib/constants/salesforce-limits.d.ts +107 -0
  72. package/lib/constants/salesforce-limits.js +104 -0
  73. package/lib/constants/salesforce-limits.js.map +1 -0
  74. package/lib/dependencies/circular-dependency-detector.d.ts +137 -0
  75. package/lib/dependencies/circular-dependency-detector.js +329 -0
  76. package/lib/dependencies/circular-dependency-detector.js.map +1 -0
  77. package/lib/dependencies/cycle-remediation-planner.d.ts +50 -0
  78. package/lib/dependencies/cycle-remediation-planner.js +192 -0
  79. package/lib/dependencies/cycle-remediation-planner.js.map +1 -0
  80. package/lib/dependencies/dependency-cache.d.ts +134 -0
  81. package/lib/dependencies/dependency-cache.js +303 -0
  82. package/lib/dependencies/dependency-cache.js.map +1 -0
  83. package/lib/dependencies/dependency-depth-calculator.d.ts +145 -0
  84. package/lib/dependencies/dependency-depth-calculator.js +368 -0
  85. package/lib/dependencies/dependency-depth-calculator.js.map +1 -0
  86. package/lib/dependencies/dependency-graph-builder.d.ts +151 -0
  87. package/lib/dependencies/dependency-graph-builder.js +411 -0
  88. package/lib/dependencies/dependency-graph-builder.js.map +1 -0
  89. package/lib/dependencies/dependency-impact-analyzer.d.ts +145 -0
  90. package/lib/dependencies/dependency-impact-analyzer.js +330 -0
  91. package/lib/dependencies/dependency-impact-analyzer.js.map +1 -0
  92. package/lib/dependencies/dependency-merger.d.ts +122 -0
  93. package/lib/dependencies/dependency-merger.js +245 -0
  94. package/lib/dependencies/dependency-merger.js.map +1 -0
  95. package/lib/dependencies/dependency-resolver.d.ts +157 -0
  96. package/lib/dependencies/dependency-resolver.js +298 -0
  97. package/lib/dependencies/dependency-resolver.js.map +1 -0
  98. package/lib/dependencies/dependency-validator.d.ts +123 -0
  99. package/lib/dependencies/dependency-validator.js +291 -0
  100. package/lib/dependencies/dependency-validator.js.map +1 -0
  101. package/lib/dependencies/graph-visualizer.d.ts +110 -0
  102. package/lib/dependencies/graph-visualizer.js +262 -0
  103. package/lib/dependencies/graph-visualizer.js.map +1 -0
  104. package/lib/dependencies/heuristic-inference.d.ts +136 -0
  105. package/lib/dependencies/heuristic-inference.js +430 -0
  106. package/lib/dependencies/heuristic-inference.js.map +1 -0
  107. package/lib/deployment/cycle-source-editor.d.ts +34 -0
  108. package/lib/deployment/cycle-source-editor.js +121 -0
  109. package/lib/deployment/cycle-source-editor.js.map +1 -0
  110. package/lib/deployment/deployment-error-handler.d.ts +38 -0
  111. package/lib/deployment/deployment-error-handler.js +79 -0
  112. package/lib/deployment/deployment-error-handler.js.map +1 -0
  113. package/lib/deployment/deployment-reporter.d.ts +63 -0
  114. package/lib/deployment/deployment-reporter.js +150 -0
  115. package/lib/deployment/deployment-reporter.js.map +1 -0
  116. package/lib/deployment/deployment-state-summary.d.ts +38 -0
  117. package/lib/deployment/deployment-state-summary.js +209 -0
  118. package/lib/deployment/deployment-state-summary.js.map +1 -0
  119. package/lib/deployment/deployment-status-service.d.ts +36 -0
  120. package/lib/deployment/deployment-status-service.js +128 -0
  121. package/lib/deployment/deployment-status-service.js.map +1 -0
  122. package/lib/deployment/deployment-tracker.d.ts +42 -0
  123. package/lib/deployment/deployment-tracker.js +79 -0
  124. package/lib/deployment/deployment-tracker.js.map +1 -0
  125. package/lib/deployment/deployment-validation-service.d.ts +28 -0
  126. package/lib/deployment/deployment-validation-service.js +161 -0
  127. package/lib/deployment/deployment-validation-service.js.map +1 -0
  128. package/lib/deployment/retry-handler.d.ts +37 -0
  129. package/lib/deployment/retry-handler.js +86 -0
  130. package/lib/deployment/retry-handler.js.map +1 -0
  131. package/lib/deployment/sf-cli-integration.d.ts +42 -0
  132. package/lib/deployment/sf-cli-integration.js +105 -0
  133. package/lib/deployment/sf-cli-integration.js.map +1 -0
  134. package/lib/deployment/state-manager.d.ts +61 -0
  135. package/lib/deployment/state-manager.js +83 -0
  136. package/lib/deployment/state-manager.js.map +1 -0
  137. package/lib/deployment/test-executor.d.ts +41 -0
  138. package/lib/deployment/test-executor.js +87 -0
  139. package/lib/deployment/test-executor.js.map +1 -0
  140. package/lib/errors/base-error.d.ts +24 -0
  141. package/lib/errors/base-error.js +66 -0
  142. package/lib/errors/base-error.js.map +1 -0
  143. package/lib/errors/dependency-error.d.ts +37 -0
  144. package/lib/errors/dependency-error.js +76 -0
  145. package/lib/errors/dependency-error.js.map +1 -0
  146. package/lib/errors/deployment-error.d.ts +55 -0
  147. package/lib/errors/deployment-error.js +132 -0
  148. package/lib/errors/deployment-error.js.map +1 -0
  149. package/lib/errors/index.d.ts +45 -0
  150. package/lib/errors/index.js +71 -0
  151. package/lib/errors/index.js.map +1 -0
  152. package/lib/errors/network-error.d.ts +53 -0
  153. package/lib/errors/network-error.js +111 -0
  154. package/lib/errors/network-error.js.map +1 -0
  155. package/lib/errors/parsing-error.d.ts +41 -0
  156. package/lib/errors/parsing-error.js +69 -0
  157. package/lib/errors/parsing-error.js.map +1 -0
  158. package/lib/errors/validation-error-reporter.d.ts +34 -0
  159. package/lib/errors/validation-error-reporter.js +99 -0
  160. package/lib/errors/validation-error-reporter.js.map +1 -0
  161. package/lib/errors/validation-error.d.ts +58 -0
  162. package/lib/errors/validation-error.js +131 -0
  163. package/lib/errors/validation-error.js.map +1 -0
  164. package/lib/index.d.ts +2 -0
  165. package/lib/index.js +2 -0
  166. package/lib/index.js.map +1 -0
  167. package/lib/monitoring/performance-monitor.d.ts +98 -0
  168. package/lib/monitoring/performance-monitor.js +260 -0
  169. package/lib/monitoring/performance-monitor.js.map +1 -0
  170. package/lib/parsers/apex-class-parser.d.ts +47 -0
  171. package/lib/parsers/apex-class-parser.js +368 -0
  172. package/lib/parsers/apex-class-parser.js.map +1 -0
  173. package/lib/parsers/apex-trigger-parser.d.ts +48 -0
  174. package/lib/parsers/apex-trigger-parser.js +229 -0
  175. package/lib/parsers/apex-trigger-parser.js.map +1 -0
  176. package/lib/parsers/aura-parser.d.ts +55 -0
  177. package/lib/parsers/aura-parser.js +229 -0
  178. package/lib/parsers/aura-parser.js.map +1 -0
  179. package/lib/parsers/bot-parser.d.ts +65 -0
  180. package/lib/parsers/bot-parser.js +225 -0
  181. package/lib/parsers/bot-parser.js.map +1 -0
  182. package/lib/parsers/custom-metadata-parser.d.ts +94 -0
  183. package/lib/parsers/custom-metadata-parser.js +199 -0
  184. package/lib/parsers/custom-metadata-parser.js.map +1 -0
  185. package/lib/parsers/custom-object-parser.d.ts +62 -0
  186. package/lib/parsers/custom-object-parser.js +297 -0
  187. package/lib/parsers/custom-object-parser.js.map +1 -0
  188. package/lib/parsers/email-template-parser.d.ts +64 -0
  189. package/lib/parsers/email-template-parser.js +238 -0
  190. package/lib/parsers/email-template-parser.js.map +1 -0
  191. package/lib/parsers/error-resilient-parser.d.ts +110 -0
  192. package/lib/parsers/error-resilient-parser.js +277 -0
  193. package/lib/parsers/error-resilient-parser.js.map +1 -0
  194. package/lib/parsers/flexipage-parser.d.ts +64 -0
  195. package/lib/parsers/flexipage-parser.js +196 -0
  196. package/lib/parsers/flexipage-parser.js.map +1 -0
  197. package/lib/parsers/flow-parser.d.ts +54 -0
  198. package/lib/parsers/flow-parser.js +287 -0
  199. package/lib/parsers/flow-parser.js.map +1 -0
  200. package/lib/parsers/genai-prompt-parser.d.ts +67 -0
  201. package/lib/parsers/genai-prompt-parser.js +160 -0
  202. package/lib/parsers/genai-prompt-parser.js.map +1 -0
  203. package/lib/parsers/layout-parser.d.ts +64 -0
  204. package/lib/parsers/layout-parser.js +267 -0
  205. package/lib/parsers/layout-parser.js.map +1 -0
  206. package/lib/parsers/lwc-parser.d.ts +60 -0
  207. package/lib/parsers/lwc-parser.js +264 -0
  208. package/lib/parsers/lwc-parser.js.map +1 -0
  209. package/lib/parsers/permission-set-parser.d.ts +86 -0
  210. package/lib/parsers/permission-set-parser.js +152 -0
  211. package/lib/parsers/permission-set-parser.js.map +1 -0
  212. package/lib/parsers/profile-parser.d.ts +81 -0
  213. package/lib/parsers/profile-parser.js +141 -0
  214. package/lib/parsers/profile-parser.js.map +1 -0
  215. package/lib/parsers/visualforce-parser.d.ts +47 -0
  216. package/lib/parsers/visualforce-parser.js +180 -0
  217. package/lib/parsers/visualforce-parser.js.map +1 -0
  218. package/lib/provisioning/data-provisioner.d.ts +88 -0
  219. package/lib/provisioning/data-provisioner.js +257 -0
  220. package/lib/provisioning/data-provisioner.js.map +1 -0
  221. package/lib/scanner/custom-structure-scanner.d.ts +66 -0
  222. package/lib/scanner/custom-structure-scanner.js +229 -0
  223. package/lib/scanner/custom-structure-scanner.js.map +1 -0
  224. package/lib/scanner/forceignore-parser.d.ts +69 -0
  225. package/lib/scanner/forceignore-parser.js +195 -0
  226. package/lib/scanner/forceignore-parser.js.map +1 -0
  227. package/lib/scanner/metadata-format-scanner.d.ts +77 -0
  228. package/lib/scanner/metadata-format-scanner.js +282 -0
  229. package/lib/scanner/metadata-format-scanner.js.map +1 -0
  230. package/lib/scanner/monorepo-scanner.d.ts +71 -0
  231. package/lib/scanner/monorepo-scanner.js +225 -0
  232. package/lib/scanner/monorepo-scanner.js.map +1 -0
  233. package/lib/scanner/project-validator.d.ts +55 -0
  234. package/lib/scanner/project-validator.js +235 -0
  235. package/lib/scanner/project-validator.js.map +1 -0
  236. package/lib/scanner/sfdx-project-detector.d.ts +86 -0
  237. package/lib/scanner/sfdx-project-detector.js +240 -0
  238. package/lib/scanner/sfdx-project-detector.js.map +1 -0
  239. package/lib/scanner/structure-validator.d.ts +64 -0
  240. package/lib/scanner/structure-validator.js +296 -0
  241. package/lib/scanner/structure-validator.js.map +1 -0
  242. package/lib/services/metadata-scanner-service.d.ts +64 -0
  243. package/lib/services/metadata-scanner-service.js +651 -0
  244. package/lib/services/metadata-scanner-service.js.map +1 -0
  245. package/lib/types/agentforce.d.ts +157 -0
  246. package/lib/types/agentforce.js +2 -0
  247. package/lib/types/agentforce.js.map +1 -0
  248. package/lib/types/dependency.d.ts +98 -0
  249. package/lib/types/dependency.js +5 -0
  250. package/lib/types/dependency.js.map +1 -0
  251. package/lib/types/deployment-plan.d.ts +81 -0
  252. package/lib/types/deployment-plan.js +6 -0
  253. package/lib/types/deployment-plan.js.map +1 -0
  254. package/lib/types/deployment.d.ts +88 -0
  255. package/lib/types/deployment.js +5 -0
  256. package/lib/types/deployment.js.map +1 -0
  257. package/lib/types/graph.d.ts +35 -0
  258. package/lib/types/graph.js +5 -0
  259. package/lib/types/graph.js.map +1 -0
  260. package/lib/types/index.d.ts +12 -0
  261. package/lib/types/index.js +17 -0
  262. package/lib/types/index.js.map +1 -0
  263. package/lib/types/metadata.d.ts +101 -0
  264. package/lib/types/metadata.js +13 -0
  265. package/lib/types/metadata.js.map +1 -0
  266. package/lib/types/project.d.ts +156 -0
  267. package/lib/types/project.js +56 -0
  268. package/lib/types/project.js.map +1 -0
  269. package/lib/types/salesforce/apex.d.ts +94 -0
  270. package/lib/types/salesforce/apex.js +6 -0
  271. package/lib/types/salesforce/apex.js.map +1 -0
  272. package/lib/types/salesforce/aura.d.ts +150 -0
  273. package/lib/types/salesforce/aura.js +6 -0
  274. package/lib/types/salesforce/aura.js.map +1 -0
  275. package/lib/types/salesforce/bot.d.ts +293 -0
  276. package/lib/types/salesforce/bot.js +6 -0
  277. package/lib/types/salesforce/bot.js.map +1 -0
  278. package/lib/types/salesforce/common.d.ts +15 -0
  279. package/lib/types/salesforce/common.js +5 -0
  280. package/lib/types/salesforce/common.js.map +1 -0
  281. package/lib/types/salesforce/custom-metadata.d.ts +92 -0
  282. package/lib/types/salesforce/custom-metadata.js +6 -0
  283. package/lib/types/salesforce/custom-metadata.js.map +1 -0
  284. package/lib/types/salesforce/email.d.ts +56 -0
  285. package/lib/types/salesforce/email.js +6 -0
  286. package/lib/types/salesforce/email.js.map +1 -0
  287. package/lib/types/salesforce/flexipage.d.ts +149 -0
  288. package/lib/types/salesforce/flexipage.js +6 -0
  289. package/lib/types/salesforce/flexipage.js.map +1 -0
  290. package/lib/types/salesforce/flow.d.ts +516 -0
  291. package/lib/types/salesforce/flow.js +6 -0
  292. package/lib/types/salesforce/flow.js.map +1 -0
  293. package/lib/types/salesforce/genai.d.ts +67 -0
  294. package/lib/types/salesforce/genai.js +6 -0
  295. package/lib/types/salesforce/genai.js.map +1 -0
  296. package/lib/types/salesforce/index.d.ts +27 -0
  297. package/lib/types/salesforce/index.js +43 -0
  298. package/lib/types/salesforce/index.js.map +1 -0
  299. package/lib/types/salesforce/layout.d.ts +236 -0
  300. package/lib/types/salesforce/layout.js +6 -0
  301. package/lib/types/salesforce/layout.js.map +1 -0
  302. package/lib/types/salesforce/lwc.d.ts +123 -0
  303. package/lib/types/salesforce/lwc.js +6 -0
  304. package/lib/types/salesforce/lwc.js.map +1 -0
  305. package/lib/types/salesforce/object.d.ts +427 -0
  306. package/lib/types/salesforce/object.js +6 -0
  307. package/lib/types/salesforce/object.js.map +1 -0
  308. package/lib/types/salesforce/parser-types.d.ts +79 -0
  309. package/lib/types/salesforce/parser-types.js +80 -0
  310. package/lib/types/salesforce/parser-types.js.map +1 -0
  311. package/lib/types/salesforce/permission.d.ts +289 -0
  312. package/lib/types/salesforce/permission.js +6 -0
  313. package/lib/types/salesforce/permission.js.map +1 -0
  314. package/lib/types/salesforce/resource.d.ts +93 -0
  315. package/lib/types/salesforce/resource.js +6 -0
  316. package/lib/types/salesforce/resource.js.map +1 -0
  317. package/lib/types/salesforce/visualforce.d.ts +70 -0
  318. package/lib/types/salesforce/visualforce.js +6 -0
  319. package/lib/types/salesforce/visualforce.js.map +1 -0
  320. package/lib/utils/cache-manager.d.ts +158 -0
  321. package/lib/utils/cache-manager.js +429 -0
  322. package/lib/utils/cache-manager.js.map +1 -0
  323. package/lib/utils/deployment-plan-manager.d.ts +40 -0
  324. package/lib/utils/deployment-plan-manager.js +183 -0
  325. package/lib/utils/deployment-plan-manager.js.map +1 -0
  326. package/lib/utils/error-aggregator.d.ts +117 -0
  327. package/lib/utils/error-aggregator.js +268 -0
  328. package/lib/utils/error-aggregator.js.map +1 -0
  329. package/lib/utils/file-system.d.ts +62 -0
  330. package/lib/utils/file-system.js +167 -0
  331. package/lib/utils/file-system.js.map +1 -0
  332. package/lib/utils/functional.d.ts +52 -0
  333. package/lib/utils/functional.js +61 -0
  334. package/lib/utils/functional.js.map +1 -0
  335. package/lib/utils/graph-algorithms.d.ts +53 -0
  336. package/lib/utils/graph-algorithms.js +177 -0
  337. package/lib/utils/graph-algorithms.js.map +1 -0
  338. package/lib/utils/logger.d.ts +154 -0
  339. package/lib/utils/logger.js +327 -0
  340. package/lib/utils/logger.js.map +1 -0
  341. package/lib/utils/network-handler.d.ts +64 -0
  342. package/lib/utils/network-handler.js +147 -0
  343. package/lib/utils/network-handler.js.map +1 -0
  344. package/lib/utils/performance.d.ts +148 -0
  345. package/lib/utils/performance.js +294 -0
  346. package/lib/utils/performance.js.map +1 -0
  347. package/lib/utils/string.d.ts +197 -0
  348. package/lib/utils/string.js +331 -0
  349. package/lib/utils/string.js.map +1 -0
  350. package/lib/utils/xml.d.ts +97 -0
  351. package/lib/utils/xml.js +227 -0
  352. package/lib/utils/xml.js.map +1 -0
  353. package/lib/validators/xml-metadata-validator.d.ts +106 -0
  354. package/lib/validators/xml-metadata-validator.js +509 -0
  355. package/lib/validators/xml-metadata-validator.js.map +1 -0
  356. package/lib/waves/priority-wave-generator-ai.d.ts +85 -0
  357. package/lib/waves/priority-wave-generator-ai.js +191 -0
  358. package/lib/waves/priority-wave-generator-ai.js.map +1 -0
  359. package/lib/waves/priority-wave-generator.d.ts +47 -0
  360. package/lib/waves/priority-wave-generator.js +88 -0
  361. package/lib/waves/priority-wave-generator.js.map +1 -0
  362. package/lib/waves/test-optimizer.d.ts +155 -0
  363. package/lib/waves/test-optimizer.js +290 -0
  364. package/lib/waves/test-optimizer.js.map +1 -0
  365. package/lib/waves/wave-builder.d.ts +147 -0
  366. package/lib/waves/wave-builder.js +286 -0
  367. package/lib/waves/wave-builder.js.map +1 -0
  368. package/lib/waves/wave-diff-generator.d.ts +17 -0
  369. package/lib/waves/wave-diff-generator.js +6 -0
  370. package/lib/waves/wave-diff-generator.js.map +1 -0
  371. package/lib/waves/wave-executor.d.ts +33 -0
  372. package/lib/waves/wave-executor.js +50 -0
  373. package/lib/waves/wave-executor.js.map +1 -0
  374. package/lib/waves/wave-merger.d.ts +96 -0
  375. package/lib/waves/wave-merger.js +181 -0
  376. package/lib/waves/wave-merger.js.map +1 -0
  377. package/lib/waves/wave-metadata-generator.d.ts +13 -0
  378. package/lib/waves/wave-metadata-generator.js +12 -0
  379. package/lib/waves/wave-metadata-generator.js.map +1 -0
  380. package/lib/waves/wave-splitter.d.ts +154 -0
  381. package/lib/waves/wave-splitter.js +307 -0
  382. package/lib/waves/wave-splitter.js.map +1 -0
  383. package/lib/waves/wave-validator.d.ts +17 -0
  384. package/lib/waves/wave-validator.js +15 -0
  385. package/lib/waves/wave-validator.js.map +1 -0
  386. package/messages/analyze.json +18 -0
  387. package/messages/config.json +29 -0
  388. package/messages/resume.json +9 -0
  389. package/messages/start.json +24 -0
  390. package/messages/status.json +8 -0
  391. package/messages/validate.json +9 -0
  392. package/npm-shrinkwrap.json +25676 -0
  393. package/oclif.lock +11988 -0
  394. package/oclif.manifest.json +589 -0
  395. package/package.json +224 -0
@@ -0,0 +1,411 @@
1
+ /**
2
+ * Dependency Graph Builder
3
+ * Builds a dependency graph from parsed metadata components
4
+ *
5
+ * @ac US-028-AC-1: Add nodes for each component
6
+ * @ac US-028-AC-2: Add edges for each dependency
7
+ * @ac US-028-AC-3: Handle bidirectional dependencies
8
+ * @ac US-028-AC-4: Track dependency types (hard, soft)
9
+ * @ac US-028-AC-5: Support incremental graph building
10
+ * @ac US-028-AC-6: Validate graph structure
11
+ *
12
+ * @issue #28
13
+ */
14
+ import { getLogger } from '../utils/logger.js';
15
+ const logger = getLogger('DependencyGraphBuilder');
16
+ /**
17
+ * Dependency Graph Builder
18
+ *
19
+ * Performance optimized for 10,000+ nodes:
20
+ * - Uses Map/Set for O(1) lookups
21
+ * - Lazy validation
22
+ * - Incremental building support
23
+ *
24
+ * @example
25
+ * const builder = new DependencyGraphBuilder();
26
+ * builder.addComponent(apexClassComponent);
27
+ * builder.addComponent(triggerComponent);
28
+ * const result = builder.build();
29
+ * console.log(result.stats.totalComponents); // 2
30
+ */
31
+ export class DependencyGraphBuilder {
32
+ // Private properties
33
+ components = new Map();
34
+ graph = new Map();
35
+ reverseGraph = new Map();
36
+ edges = new Map(); // "from->to" => edge
37
+ options;
38
+ // Constructor
39
+ constructor(options = {}) {
40
+ this.options = {
41
+ trackDependencyTypes: options.trackDependencyTypes ?? true,
42
+ validateStructure: options.validateStructure ?? true,
43
+ maxNodes: options.maxNodes ?? 50_000,
44
+ };
45
+ logger.debug('Initialized DependencyGraphBuilder', {
46
+ options: this.options,
47
+ });
48
+ }
49
+ // Public getters
50
+ /**
51
+ * Get current size of the graph
52
+ */
53
+ get size() {
54
+ return this.components.size;
55
+ }
56
+ /**
57
+ * Check if graph is empty
58
+ */
59
+ get isEmpty() {
60
+ return this.components.size === 0;
61
+ }
62
+ // Private static methods
63
+ /**
64
+ * Create a node ID from type and name
65
+ */
66
+ static createNodeId(type, name) {
67
+ return `${type}:${name}`;
68
+ }
69
+ // Public methods
70
+ /**
71
+ * Add a metadata component to the graph
72
+ *
73
+ * @ac US-028-AC-1: Add nodes for each component
74
+ * @ac US-028-AC-5: Support incremental graph building
75
+ */
76
+ addComponent(component) {
77
+ const nodeId = DependencyGraphBuilder.createNodeId(component.type, component.name);
78
+ // Warn on large graphs
79
+ if (this.components.size >= this.options.maxNodes) {
80
+ logger.warn('Graph size exceeds recommended maximum', {
81
+ current: this.components.size,
82
+ max: this.options.maxNodes,
83
+ });
84
+ }
85
+ // Add/update component
86
+ this.components.set(nodeId, component);
87
+ // Initialize graph entry if not exists
88
+ if (!this.graph.has(nodeId)) {
89
+ this.graph.set(nodeId, new Set());
90
+ }
91
+ if (!this.reverseGraph.has(nodeId)) {
92
+ this.reverseGraph.set(nodeId, new Set());
93
+ }
94
+ // Add edges from dependencies
95
+ for (const depId of component.dependencies) {
96
+ this.addEdge(nodeId, depId, 'hard', 'Declared dependency');
97
+ }
98
+ logger.debug('Added component to graph', {
99
+ nodeId,
100
+ dependencies: component.dependencies.size,
101
+ });
102
+ }
103
+ /**
104
+ * Add multiple components at once
105
+ *
106
+ * @ac US-028-AC-5: Support incremental graph building
107
+ */
108
+ addComponents(components) {
109
+ const startTime = Date.now();
110
+ for (const component of components) {
111
+ this.addComponent(component);
112
+ }
113
+ const duration = Date.now() - startTime;
114
+ logger.info('Added multiple components', {
115
+ count: components.length,
116
+ totalNodes: this.components.size,
117
+ durationMs: duration,
118
+ });
119
+ }
120
+ /**
121
+ * Add a dependency edge between two nodes
122
+ *
123
+ * @ac US-028-AC-2: Add edges for each dependency
124
+ * @ac US-028-AC-3: Handle bidirectional dependencies
125
+ * @ac US-028-AC-4: Track dependency types
126
+ */
127
+ addEdge(from, to, type = 'hard', reason) {
128
+ // Add forward edge (A depends on B)
129
+ if (!this.graph.has(from)) {
130
+ this.graph.set(from, new Set());
131
+ }
132
+ this.graph.get(from).add(to);
133
+ // Add reverse edge (B is depended on by A)
134
+ if (!this.reverseGraph.has(to)) {
135
+ this.reverseGraph.set(to, new Set());
136
+ }
137
+ this.reverseGraph.get(to).add(from);
138
+ // Track edge metadata
139
+ if (this.options.trackDependencyTypes) {
140
+ const edgeKey = `${from}->${to}`;
141
+ this.edges.set(edgeKey, { from, to, type, reason });
142
+ }
143
+ logger.debug('Added dependency edge', { from, to, type });
144
+ }
145
+ /**
146
+ * Remove a component and its edges from the graph
147
+ */
148
+ removeComponent(nodeId) {
149
+ if (!this.components.has(nodeId)) {
150
+ return false;
151
+ }
152
+ // Remove component
153
+ this.components.delete(nodeId);
154
+ // Remove outgoing edges
155
+ const outgoing = this.graph.get(nodeId);
156
+ if (outgoing) {
157
+ for (const to of outgoing) {
158
+ this.reverseGraph.get(to)?.delete(nodeId);
159
+ }
160
+ this.graph.delete(nodeId);
161
+ }
162
+ // Remove incoming edges
163
+ const incoming = this.reverseGraph.get(nodeId);
164
+ if (incoming) {
165
+ for (const from of incoming) {
166
+ this.graph.get(from)?.delete(nodeId);
167
+ }
168
+ this.reverseGraph.delete(nodeId);
169
+ }
170
+ logger.debug('Removed component from graph', { nodeId });
171
+ return true;
172
+ }
173
+ /**
174
+ * Get all dependencies of a component (outgoing edges)
175
+ */
176
+ getDependencies(nodeId) {
177
+ return this.graph.get(nodeId) ?? new Set();
178
+ }
179
+ /**
180
+ * Get all dependents of a component (incoming edges)
181
+ */
182
+ getDependents(nodeId) {
183
+ return this.reverseGraph.get(nodeId) ?? new Set();
184
+ }
185
+ /**
186
+ * Check if there's a direct dependency between two nodes
187
+ */
188
+ hasDependency(from, to) {
189
+ return this.graph.get(from)?.has(to) ?? false;
190
+ }
191
+ /**
192
+ * Build the final dependency analysis result
193
+ *
194
+ * @ac US-028-AC-6: Validate graph structure
195
+ */
196
+ build() {
197
+ const startTime = Date.now();
198
+ logger.info('Building dependency analysis result', {
199
+ components: this.components.size,
200
+ edges: this.countEdges(),
201
+ });
202
+ // Validate if enabled
203
+ if (this.options.validateStructure) {
204
+ this.validate();
205
+ }
206
+ // Detect circular dependencies
207
+ const circularDependencies = this.detectCircularDependencies();
208
+ // Find isolated components
209
+ const isolatedComponents = this.findIsolatedComponents();
210
+ // Generate statistics
211
+ const stats = this.generateStats();
212
+ const duration = Date.now() - startTime;
213
+ logger.info('Dependency graph built successfully', {
214
+ totalComponents: stats.totalComponents,
215
+ totalDependencies: stats.totalDependencies,
216
+ circularDeps: circularDependencies.length,
217
+ isolated: isolatedComponents.length,
218
+ durationMs: duration,
219
+ });
220
+ return {
221
+ components: new Map(this.components),
222
+ graph: new Map(this.graph),
223
+ reverseGraph: new Map(this.reverseGraph),
224
+ circularDependencies,
225
+ isolatedComponents,
226
+ stats,
227
+ };
228
+ }
229
+ /**
230
+ * Clear the entire graph
231
+ */
232
+ clear() {
233
+ this.components.clear();
234
+ this.graph.clear();
235
+ this.reverseGraph.clear();
236
+ this.edges.clear();
237
+ logger.debug('Graph cleared');
238
+ }
239
+ // Private methods
240
+ /**
241
+ * Validate graph structure
242
+ *
243
+ * @ac US-028-AC-6: Validate graph structure
244
+ */
245
+ validate() {
246
+ const errors = [];
247
+ // Check for dangling references
248
+ for (const [nodeId, deps] of this.graph.entries()) {
249
+ for (const depId of deps) {
250
+ // It's OK if dependency doesn't exist (could be managed package, etc.)
251
+ // Just log a warning
252
+ if (!this.components.has(depId) && !this.graph.has(depId)) {
253
+ logger.warn('Dangling reference detected', {
254
+ from: nodeId,
255
+ to: depId,
256
+ });
257
+ }
258
+ }
259
+ }
260
+ // Check for self-loops
261
+ for (const [nodeId, deps] of this.graph.entries()) {
262
+ if (deps.has(nodeId)) {
263
+ errors.push(`Self-loop detected: ${nodeId}`);
264
+ }
265
+ }
266
+ if (errors.length > 0) {
267
+ logger.error('Graph validation failed', { errors });
268
+ throw new Error(`Graph validation failed:\n${errors.join('\n')}`);
269
+ }
270
+ logger.debug('Graph validation passed');
271
+ }
272
+ /**
273
+ * Detect circular dependencies using DFS
274
+ */
275
+ detectCircularDependencies() {
276
+ const cycles = [];
277
+ const visited = new Set();
278
+ const recursionStack = new Set();
279
+ const currentPath = [];
280
+ const dfs = (nodeId) => {
281
+ visited.add(nodeId);
282
+ recursionStack.add(nodeId);
283
+ currentPath.push(nodeId);
284
+ const deps = this.graph.get(nodeId) ?? new Set();
285
+ for (const depId of deps) {
286
+ if (!visited.has(depId)) {
287
+ dfs(depId);
288
+ }
289
+ else if (recursionStack.has(depId)) {
290
+ // Found a cycle
291
+ const cycleStart = currentPath.indexOf(depId);
292
+ const cycle = currentPath.slice(cycleStart);
293
+ cycles.push({
294
+ cycle,
295
+ severity: 'warning',
296
+ message: `Circular dependency detected: ${cycle.join(' → ')} → ${depId}`,
297
+ });
298
+ }
299
+ }
300
+ recursionStack.delete(nodeId);
301
+ currentPath.pop();
302
+ };
303
+ for (const nodeId of this.graph.keys()) {
304
+ if (!visited.has(nodeId)) {
305
+ dfs(nodeId);
306
+ }
307
+ }
308
+ return cycles;
309
+ }
310
+ /**
311
+ * Find components with no dependencies or dependents
312
+ */
313
+ findIsolatedComponents() {
314
+ const isolated = [];
315
+ for (const nodeId of this.components.keys()) {
316
+ const deps = this.graph.get(nodeId)?.size ?? 0;
317
+ const dependents = this.reverseGraph.get(nodeId)?.size ?? 0;
318
+ if (deps === 0 && dependents === 0) {
319
+ isolated.push(nodeId);
320
+ }
321
+ }
322
+ return isolated;
323
+ }
324
+ /**
325
+ * Generate graph statistics
326
+ */
327
+ generateStats() {
328
+ const componentsByType = {};
329
+ const dependencyCounts = new Map();
330
+ const dependentCounts = new Map();
331
+ // Count by type
332
+ for (const component of this.components.values()) {
333
+ componentsByType[component.type] = (componentsByType[component.type] ?? 0) + 1;
334
+ }
335
+ // Count dependencies and dependents
336
+ for (const [nodeId, deps] of this.graph.entries()) {
337
+ dependencyCounts.set(nodeId, deps.size);
338
+ }
339
+ for (const [nodeId, dependents] of this.reverseGraph.entries()) {
340
+ dependentCounts.set(nodeId, dependents.size);
341
+ }
342
+ // Find most depended
343
+ let mostDepended = { nodeId: '', count: 0 };
344
+ for (const [nodeId, count] of dependentCounts.entries()) {
345
+ if (count > mostDepended.count) {
346
+ mostDepended = { nodeId, count };
347
+ }
348
+ }
349
+ // Find node with most dependencies
350
+ let mostDependencies = { nodeId: '', count: 0 };
351
+ for (const [nodeId, count] of dependencyCounts.entries()) {
352
+ if (count > mostDependencies.count) {
353
+ mostDependencies = { nodeId, count };
354
+ }
355
+ }
356
+ // Calculate max depth (simplified - would need topological sort for accurate depth)
357
+ const maxDepth = this.calculateMaxDepth();
358
+ return {
359
+ totalComponents: this.components.size,
360
+ totalDependencies: this.countEdges(),
361
+ componentsByType,
362
+ maxDepth,
363
+ mostDepended,
364
+ mostDependencies,
365
+ };
366
+ }
367
+ /**
368
+ * Calculate maximum dependency depth (simplified BFS)
369
+ */
370
+ calculateMaxDepth() {
371
+ let maxDepth = 0;
372
+ for (const startNode of this.components.keys()) {
373
+ const depth = this.bfsDepth(startNode);
374
+ maxDepth = Math.max(maxDepth, depth);
375
+ }
376
+ return maxDepth;
377
+ }
378
+ /**
379
+ * BFS to calculate depth from a starting node
380
+ */
381
+ bfsDepth(startNode) {
382
+ const visited = new Set();
383
+ const queue = [{ node: startNode, depth: 0 }];
384
+ let maxDepth = 0;
385
+ while (queue.length > 0) {
386
+ const { node, depth } = queue.shift();
387
+ if (visited.has(node))
388
+ continue;
389
+ visited.add(node);
390
+ maxDepth = Math.max(maxDepth, depth);
391
+ const deps = this.graph.get(node) ?? new Set();
392
+ for (const depId of deps) {
393
+ if (!visited.has(depId)) {
394
+ queue.push({ node: depId, depth: depth + 1 });
395
+ }
396
+ }
397
+ }
398
+ return maxDepth;
399
+ }
400
+ /**
401
+ * Count total edges in the graph
402
+ */
403
+ countEdges() {
404
+ let count = 0;
405
+ for (const deps of this.graph.values()) {
406
+ count += deps.size;
407
+ }
408
+ return count;
409
+ }
410
+ }
411
+ //# sourceMappingURL=dependency-graph-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependency-graph-builder.js","sourceRoot":"","sources":["../../src/dependencies/dependency-graph-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Dependency Impact Analyzer
3
+ * Analyzes the impact of changes to components in the dependency graph
4
+ *
5
+ * @ac US-032-AC-1: Given a component, find all dependents
6
+ * @ac US-032-AC-2: Calculate impact radius
7
+ * @ac US-032-AC-3: Identify critical components
8
+ * @ac US-032-AC-4: Generate impact report
9
+ * @ac US-032-AC-5: Suggest test scope based on impact
10
+ *
11
+ * @issue #32
12
+ */
13
+ import type { NodeId, DependencyGraph } from '../types/dependency.js';
14
+ /**
15
+ * Impact level classification
16
+ */
17
+ export type ImpactLevel = 'minimal' | 'low' | 'medium' | 'high' | 'critical';
18
+ /**
19
+ * Component impact information
20
+ */
21
+ export type ComponentImpact = {
22
+ nodeId: NodeId;
23
+ directDependents: NodeId[];
24
+ totalAffected: number;
25
+ impactRadius: number;
26
+ impactLevel: ImpactLevel;
27
+ riskScore: number;
28
+ isCritical: boolean;
29
+ };
30
+ /**
31
+ * Impact analysis result
32
+ */
33
+ export type ImpactAnalysisResult = {
34
+ changedComponents: NodeId[];
35
+ impacts: Map<NodeId, ComponentImpact>;
36
+ totalAffected: number;
37
+ overallImpactLevel: ImpactLevel;
38
+ criticalComponents: NodeId[];
39
+ testScope: TestScope;
40
+ };
41
+ /**
42
+ * Test scope recommendation
43
+ */
44
+ export type TestScope = {
45
+ requiredTests: NodeId[];
46
+ recommendedTests: NodeId[];
47
+ optionalTests: NodeId[];
48
+ estimatedTestCount: number;
49
+ priority: 'low' | 'medium' | 'high';
50
+ };
51
+ /**
52
+ * Options for impact analysis
53
+ */
54
+ export type ImpactAnalysisOptions = {
55
+ /** Maximum depth to traverse for impact (default: unlimited) */
56
+ maxDepth?: number;
57
+ /** Include test classes in impact analysis */
58
+ includeTests?: boolean;
59
+ /** Critical threshold: components with > N dependents */
60
+ criticalThreshold?: number;
61
+ };
62
+ /**
63
+ * Dependency Impact Analyzer
64
+ *
65
+ * Analyzes the impact of changes to determine:
66
+ * - Which components are affected
67
+ * - Impact radius and severity
68
+ * - Critical components
69
+ * - Test scope recommendations
70
+ *
71
+ * Performance: O(V + E) using BFS
72
+ *
73
+ * @example
74
+ * const analyzer = new DependencyImpactAnalyzer(graph, reverseGraph);
75
+ * const result = analyzer.analyze(['ApexClass:AccountService']);
76
+ * console.log(`Total affected: ${result.totalAffected}`);
77
+ * console.log(`Impact level: ${result.overallImpactLevel}`);
78
+ * console.log(`Tests required: ${result.testScope.requiredTests.length}`);
79
+ */
80
+ export declare class DependencyImpactAnalyzer {
81
+ private graph;
82
+ private reverseGraph;
83
+ private options;
84
+ constructor(graph: DependencyGraph, reverseGraph: DependencyGraph, options?: ImpactAnalysisOptions);
85
+ /**
86
+ * Analyze impact of changes to one or more components
87
+ *
88
+ * @ac US-032-AC-1: Given a component, find all dependents
89
+ * @ac US-032-AC-2: Calculate impact radius
90
+ * @ac US-032-AC-4: Generate impact report
91
+ */
92
+ analyze(changedComponents: NodeId[]): ImpactAnalysisResult;
93
+ /**
94
+ * Calculate impact for a single component
95
+ */
96
+ private calculateImpact;
97
+ /**
98
+ * Find all dependents (transitive closure) of a component using BFS
99
+ */
100
+ private findAllDependents;
101
+ /**
102
+ * Calculate impact radius (maximum distance to affected component)
103
+ */
104
+ private calculateImpactRadius;
105
+ /**
106
+ * Calculate risk score (0-100) based on number of affected components
107
+ */
108
+ private calculateRiskScore;
109
+ /**
110
+ * Get impact level based on risk score
111
+ */
112
+ private static getImpactLevel;
113
+ /**
114
+ * @ac US-032-AC-3: Identify critical components
115
+ *
116
+ * Find components with many dependents
117
+ */
118
+ private identifyCriticalComponents;
119
+ /**
120
+ * Calculate overall impact level from individual impacts
121
+ */
122
+ private calculateOverallImpactLevel;
123
+ /**
124
+ * @ac US-032-AC-5: Suggest test scope based on impact
125
+ *
126
+ * Generate test scope recommendations
127
+ */
128
+ private generateTestScope;
129
+ /**
130
+ * Check if a component is a test class
131
+ */
132
+ private isTestClass;
133
+ /**
134
+ * Find associated test class for a component
135
+ */
136
+ private findTestClass;
137
+ /**
138
+ * Get impact for a specific component
139
+ */
140
+ getImpact(nodeId: NodeId): ComponentImpact;
141
+ /**
142
+ * Get all critical components
143
+ */
144
+ getCriticalComponents(): NodeId[];
145
+ }