@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,180 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ import { ParsingError } from '../errors/parsing-error.js';
3
+ const logger = getLogger('VisualforceParser');
4
+ /**
5
+ * Extract Apex controller from Visualforce markup
6
+ *
7
+ * @ac US-018-AC-1: Extract controller Apex class
8
+ */
9
+ function extractApexController(vfContent) {
10
+ // Pattern: <apex:page controller="MyController">
11
+ const controllerMatch = vfContent.match(/<apex:(?:page|component)[^>]*\scontroller\s*=\s*["']([a-zA-Z][a-zA-Z0-9_.]*?)["']/i);
12
+ return controllerMatch ? controllerMatch[1] : undefined;
13
+ }
14
+ /**
15
+ * Extract standard controller from Visualforce markup
16
+ *
17
+ * @ac US-018-AC-2: Extract standardController (SObject reference)
18
+ */
19
+ function extractStandardController(vfContent) {
20
+ // Pattern: <apex:page standardController="Account">
21
+ const stdControllerMatch = vfContent.match(/<apex:(?:page|component)[^>]*\sstandardController\s*=\s*["']([a-zA-Z][a-zA-Z0-9_]*?)["']/i);
22
+ return stdControllerMatch ? stdControllerMatch[1] : undefined;
23
+ }
24
+ /**
25
+ * Extract controller extensions from Visualforce markup
26
+ *
27
+ * @ac US-018-AC-3: Extract extensions (controller extensions)
28
+ */
29
+ function extractExtensions(vfContent) {
30
+ // Pattern: extensions="Extension1,Extension2,Extension3"
31
+ const extensionsMatch = vfContent.match(/<apex:(?:page|component)[^>]*\sextensions\s*=\s*["']([^"']+)["']/i);
32
+ if (!extensionsMatch) {
33
+ return [];
34
+ }
35
+ return extensionsMatch[1]
36
+ .split(',')
37
+ .map((ext) => ext.trim())
38
+ .filter((ext) => ext.length > 0);
39
+ }
40
+ /**
41
+ * Extract recordSetVar from Visualforce markup
42
+ */
43
+ function extractRecordSetVar(vfContent) {
44
+ // Pattern: recordSetVar="accounts"
45
+ const recordSetVarMatch = vfContent.match(/<apex:page[^>]*\srecordSetVar\s*=\s*["']([a-zA-Z][a-zA-Z0-9_]*?)["']/i);
46
+ return recordSetVarMatch ? recordSetVarMatch[1] : undefined;
47
+ }
48
+ /**
49
+ * Extract Visualforce component references
50
+ *
51
+ * @ac US-018-AC-4: Extract VF component references
52
+ */
53
+ function extractComponents(vfContent) {
54
+ const components = [];
55
+ // Pattern: <c:MyComponent /> or <namespace:ComponentName />
56
+ const componentPattern = /<([a-zA-Z][a-zA-Z0-9_]*):([a-zA-Z][a-zA-Z0-9_]*)[^>]*\/?>/gi;
57
+ const matches = vfContent.matchAll(componentPattern);
58
+ for (const match of matches) {
59
+ const namespace = match[1];
60
+ const componentName = match[2];
61
+ // Exclude apex: namespace (standard components)
62
+ if (namespace.toLowerCase() !== 'apex' && namespace.toLowerCase() !== 'chatter') {
63
+ const fullName = `${namespace}:${componentName}`;
64
+ if (!components.includes(fullName)) {
65
+ components.push(fullName);
66
+ }
67
+ }
68
+ }
69
+ return components;
70
+ }
71
+ /**
72
+ * Determine if the file is a page or component based on extension
73
+ *
74
+ * @ac US-018-AC-6: Validate file extension (.page or .component)
75
+ */
76
+ function getVisualforceType(fileName) {
77
+ if (fileName.endsWith('.page')) {
78
+ return 'page';
79
+ }
80
+ if (fileName.endsWith('.component')) {
81
+ return 'component';
82
+ }
83
+ throw new ParsingError(`Invalid Visualforce file extension: ${fileName}`, {
84
+ filePath: fileName,
85
+ expectedExtensions: ['.page', '.component'],
86
+ });
87
+ }
88
+ /**
89
+ * Parse a Visualforce page or component and extract dependencies
90
+ *
91
+ * @param fileName - Name of the Visualforce file (with extension)
92
+ * @param vfContent - Content of the Visualforce file
93
+ * @returns VisualforceParseResult with all extracted dependencies
94
+ *
95
+ * @throws {ParsingError} If the file cannot be parsed or has invalid extension
96
+ *
97
+ * @ac US-018-AC-5: Parse both pages and components
98
+ * @ac US-018-AC-6: Validate file extension (.page or .component)
99
+ * @ac US-018-AC-7: Handle namespace prefixes in controllers and components
100
+ *
101
+ * @example
102
+ * ```typescript
103
+ * const result = parseVisualforce('MyPage.page', vfContent);
104
+ * console.log(result.apexController); // 'MyController'
105
+ * console.log(result.components); // ['c:MyComponent']
106
+ * console.log(result.standardController); // 'Account'
107
+ * ```
108
+ */
109
+ export function parseVisualforce(fileName, vfContent) {
110
+ try {
111
+ logger.debug(`Parsing Visualforce: ${fileName}`);
112
+ // Validate and determine type
113
+ const type = getVisualforceType(fileName);
114
+ const name = fileName.replace(/\.(page|component)$/, '');
115
+ // Extract dependencies
116
+ const apexController = extractApexController(vfContent);
117
+ const standardController = extractStandardController(vfContent);
118
+ const apexExtensions = extractExtensions(vfContent);
119
+ const recordSetVar = extractRecordSetVar(vfContent);
120
+ const components = extractComponents(vfContent);
121
+ // Build dependencies array
122
+ const dependencies = [];
123
+ if (apexController) {
124
+ dependencies.push({
125
+ type: 'apex_controller',
126
+ name: apexController,
127
+ namespace: apexController.includes('__') ? apexController.split('__')[0] : undefined,
128
+ });
129
+ }
130
+ if (standardController) {
131
+ dependencies.push({
132
+ type: 'standard_controller',
133
+ name: standardController,
134
+ });
135
+ }
136
+ for (const extension of apexExtensions) {
137
+ dependencies.push({
138
+ type: 'apex_extension',
139
+ name: extension,
140
+ namespace: extension.includes('__') ? extension.split('__')[0] : undefined,
141
+ });
142
+ }
143
+ for (const component of components) {
144
+ dependencies.push({
145
+ type: 'vf_component',
146
+ name: component,
147
+ namespace: component.includes(':') ? component.split(':')[0] : undefined,
148
+ });
149
+ }
150
+ const result = {
151
+ name,
152
+ type,
153
+ apexController,
154
+ apexExtensions,
155
+ standardController,
156
+ recordSetVar,
157
+ components,
158
+ dependencies,
159
+ };
160
+ logger.debug(`Parsed Visualforce: ${fileName}`, {
161
+ type,
162
+ apexController: !!apexController,
163
+ standardController: !!standardController,
164
+ extensionsCount: apexExtensions.length,
165
+ componentsCount: components.length,
166
+ dependenciesCount: dependencies.length,
167
+ });
168
+ return result;
169
+ }
170
+ catch (error) {
171
+ if (error instanceof ParsingError) {
172
+ throw error;
173
+ }
174
+ throw new ParsingError(`Failed to parse Visualforce file: ${fileName}`, {
175
+ filePath: fileName,
176
+ originalError: error instanceof Error ? error.message : String(error),
177
+ });
178
+ }
179
+ }
180
+ //# sourceMappingURL=visualforce-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visualforce-parser.js","sourceRoot":"","sources":["../../src/parsers/visualforce-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Data Provisioner - US-107
3
+ * Handles data provisioning between deployment waves
4
+ *
5
+ * @ac US-107-AC-1: Detect when data provisioning is needed
6
+ * @ac US-107-AC-2: Support Custom Metadata Type record creation
7
+ * @ac US-107-AC-3: Handle Custom Settings data
8
+ * @ac US-107-AC-4: Queue data operations between waves
9
+ * @ac US-107-AC-5: Validate data exists before deploying dependent metadata
10
+ * @issue #107
11
+ */
12
+ import type { MetadataComponent } from '../types/metadata.js';
13
+ export type DataProvisioningRecord = {
14
+ type: 'CustomMetadata' | 'CustomSettings' | 'PicklistValue' | 'RecordType';
15
+ name: string;
16
+ filePath: string;
17
+ metadata: Record<string, unknown>;
18
+ dependsOn: string[];
19
+ };
20
+ export type DataProvisioningWave = {
21
+ waveNumber: number;
22
+ records: DataProvisioningRecord[];
23
+ estimatedTime: number;
24
+ dependencies: string[];
25
+ };
26
+ export type ProvisioningResult = {
27
+ success: boolean;
28
+ recordsCreated: number;
29
+ recordsFailed: number;
30
+ errors: Array<{
31
+ record: string;
32
+ error: string;
33
+ }>;
34
+ executionTime: number;
35
+ };
36
+ /**
37
+ * @ac US-107-AC-1: Detect when data provisioning is needed
38
+ */
39
+ export declare class DataProvisioner {
40
+ /**
41
+ * @ac US-107-AC-1: Detect when data provisioning is needed
42
+ * Detect data provisioning requirements from metadata
43
+ */
44
+ detectProvisioningNeeds(components: MetadataComponent[]): DataProvisioningRecord[];
45
+ /**
46
+ * @ac US-107-AC-2: Support Custom Metadata Type record creation
47
+ * Parse Custom Metadata records
48
+ */
49
+ parseCustomMetadataRecord(filePath: string): Promise<DataProvisioningRecord>;
50
+ /**
51
+ * @ac US-107-AC-3: Handle Custom Settings data
52
+ * Prepare Custom Settings data for provisioning
53
+ */
54
+ prepareCustomSettingsData(component: MetadataComponent, data: Record<string, unknown>): DataProvisioningRecord;
55
+ /**
56
+ * @ac US-107-AC-4: Queue data operations between waves
57
+ * Create data provisioning wave
58
+ */
59
+ createProvisioningWave(records: DataProvisioningRecord[], waveNumber: number): DataProvisioningWave;
60
+ /**
61
+ * @ac US-107-AC-5: Validate data exists before deploying dependent metadata
62
+ * Validate data exists
63
+ */
64
+ validateDataExists(records: DataProvisioningRecord[], orgApi: {
65
+ query: (soql: string) => Promise<unknown[]>;
66
+ }): Promise<{
67
+ valid: boolean;
68
+ missing: string[];
69
+ }>;
70
+ /**
71
+ * Execute data provisioning
72
+ */
73
+ executeProvisioning(wave: DataProvisioningWave, orgApi: {
74
+ create: (type: string, records: unknown[]) => Promise<unknown[]>;
75
+ }): Promise<ProvisioningResult>;
76
+ /**
77
+ * Create Custom Metadata record
78
+ */
79
+ private createCustomMetadataRecord;
80
+ /**
81
+ * Create Custom Settings data
82
+ */
83
+ private createCustomSettingsData;
84
+ /**
85
+ * Format provisioning report
86
+ */
87
+ formatReport(result: ProvisioningResult): string;
88
+ }
@@ -0,0 +1,257 @@
1
+ /**
2
+ * Data Provisioner - US-107
3
+ * Handles data provisioning between deployment waves
4
+ *
5
+ * @ac US-107-AC-1: Detect when data provisioning is needed
6
+ * @ac US-107-AC-2: Support Custom Metadata Type record creation
7
+ * @ac US-107-AC-3: Handle Custom Settings data
8
+ * @ac US-107-AC-4: Queue data operations between waves
9
+ * @ac US-107-AC-5: Validate data exists before deploying dependent metadata
10
+ * @issue #107
11
+ */
12
+ import { promises as fs } from 'node:fs';
13
+ import * as path from 'node:path';
14
+ import { getLogger } from '../utils/logger.js';
15
+ const logger = getLogger('DataProvisioner');
16
+ /**
17
+ * @ac US-107-AC-1: Detect when data provisioning is needed
18
+ */
19
+ export class DataProvisioner {
20
+ /**
21
+ * @ac US-107-AC-1: Detect when data provisioning is needed
22
+ * Detect data provisioning requirements from metadata
23
+ */
24
+ detectProvisioningNeeds(components) {
25
+ logger.info('Detecting data provisioning needs', { componentCount: components.length });
26
+ const records = [];
27
+ for (const component of components) {
28
+ // Detect Custom Metadata records
29
+ if (component.filePath?.endsWith('.md-meta.xml')) {
30
+ records.push({
31
+ type: 'CustomMetadata',
32
+ name: component.name,
33
+ filePath: component.filePath,
34
+ metadata: {},
35
+ dependsOn: [],
36
+ });
37
+ }
38
+ // Detect Custom Settings (via metadata type)
39
+ if (component.type === 'CustomSetting') {
40
+ records.push({
41
+ type: 'CustomSettings',
42
+ name: component.name,
43
+ filePath: component.filePath ?? '',
44
+ metadata: {},
45
+ dependsOn: [],
46
+ });
47
+ }
48
+ // Detect Record Types
49
+ if (component.type === 'RecordType') {
50
+ records.push({
51
+ type: 'RecordType',
52
+ name: component.name,
53
+ filePath: component.filePath ?? '',
54
+ metadata: {},
55
+ dependsOn: [component.dependencies.values().next().value ?? ''],
56
+ });
57
+ }
58
+ }
59
+ logger.info('Data provisioning needs detected', {
60
+ recordCount: records.length,
61
+ types: [...new Set(records.map((r) => r.type))],
62
+ });
63
+ return records;
64
+ }
65
+ /**
66
+ * @ac US-107-AC-2: Support Custom Metadata Type record creation
67
+ * Parse Custom Metadata records
68
+ */
69
+ async parseCustomMetadataRecord(filePath) {
70
+ logger.debug('Parsing Custom Metadata record', { filePath });
71
+ try {
72
+ const content = await fs.readFile(filePath, 'utf-8');
73
+ const name = path.basename(filePath, '.md-meta.xml');
74
+ // Extract metadata from XML (simplified)
75
+ const metadata = {};
76
+ const labelMatch = content.match(/<label>([^<]+)<\/label>/);
77
+ if (labelMatch) {
78
+ metadata.label = labelMatch[1];
79
+ }
80
+ return {
81
+ type: 'CustomMetadata',
82
+ name,
83
+ filePath,
84
+ metadata,
85
+ dependsOn: [],
86
+ };
87
+ }
88
+ catch (error) {
89
+ logger.error('Failed to parse Custom Metadata record', {
90
+ filePath,
91
+ error: error instanceof Error ? error.message : String(error),
92
+ });
93
+ throw error;
94
+ }
95
+ }
96
+ /**
97
+ * @ac US-107-AC-3: Handle Custom Settings data
98
+ * Prepare Custom Settings data for provisioning
99
+ */
100
+ prepareCustomSettingsData(component, data) {
101
+ return {
102
+ type: 'CustomSettings',
103
+ name: component.name,
104
+ filePath: component.filePath ?? '',
105
+ metadata: data,
106
+ dependsOn: [],
107
+ };
108
+ }
109
+ /**
110
+ * @ac US-107-AC-4: Queue data operations between waves
111
+ * Create data provisioning wave
112
+ */
113
+ createProvisioningWave(records, waveNumber) {
114
+ logger.info('Creating data provisioning wave', {
115
+ waveNumber,
116
+ recordCount: records.length,
117
+ });
118
+ // Calculate dependencies
119
+ const dependencies = new Set();
120
+ for (const record of records) {
121
+ for (const dep of record.dependsOn) {
122
+ dependencies.add(dep);
123
+ }
124
+ }
125
+ // Estimate time (rough: 1 second per record)
126
+ const estimatedTime = records.length * 1000;
127
+ return {
128
+ waveNumber,
129
+ records,
130
+ estimatedTime,
131
+ dependencies: Array.from(dependencies),
132
+ };
133
+ }
134
+ /**
135
+ * @ac US-107-AC-5: Validate data exists before deploying dependent metadata
136
+ * Validate data exists
137
+ */
138
+ async validateDataExists(records, orgApi) {
139
+ logger.info('Validating data exists', { recordCount: records.length });
140
+ const validationResults = await Promise.all(records.map(async (record) => {
141
+ try {
142
+ if (record.type !== 'CustomMetadata') {
143
+ return undefined;
144
+ }
145
+ const developerName = record.name.split('.').pop() ?? '';
146
+ const metadataTypeName = record.name.split('.').slice(0, -1).join('.');
147
+ const soql = `SELECT Id FROM ${metadataTypeName}__mdt WHERE DeveloperName = '${developerName}'`;
148
+ const results = await orgApi.query(soql);
149
+ return results.length === 0 ? record.name : undefined;
150
+ }
151
+ catch (error) {
152
+ logger.warn('Failed to validate data existence', {
153
+ record: record.name,
154
+ error: error instanceof Error ? error.message : String(error),
155
+ });
156
+ return record.name;
157
+ }
158
+ }));
159
+ const missing = validationResults.filter((recordName) => recordName !== undefined);
160
+ const valid = missing.length === 0;
161
+ logger.info('Data validation complete', {
162
+ valid,
163
+ missingCount: missing.length,
164
+ });
165
+ return { valid, missing };
166
+ }
167
+ /**
168
+ * Execute data provisioning
169
+ */
170
+ executeProvisioning(wave, orgApi) {
171
+ const startTime = Date.now();
172
+ logger.info('Executing data provisioning', {
173
+ waveNumber: wave.waveNumber,
174
+ recordCount: wave.records.length,
175
+ });
176
+ const errors = [];
177
+ let recordsCreated = 0;
178
+ let recordsFailed = 0;
179
+ for (const record of wave.records) {
180
+ try {
181
+ if (record.type === 'CustomMetadata') {
182
+ // Create Custom Metadata record via Metadata API
183
+ this.createCustomMetadataRecord(record, orgApi);
184
+ recordsCreated++;
185
+ }
186
+ else if (record.type === 'CustomSettings') {
187
+ // Create Custom Settings data
188
+ this.createCustomSettingsData(record, orgApi);
189
+ recordsCreated++;
190
+ }
191
+ }
192
+ catch (error) {
193
+ recordsFailed++;
194
+ errors.push({
195
+ record: record.name,
196
+ error: error instanceof Error ? error.message : String(error),
197
+ });
198
+ logger.error('Failed to provision data record', {
199
+ record: record.name,
200
+ error: error instanceof Error ? error.message : String(error),
201
+ });
202
+ }
203
+ }
204
+ const executionTime = Date.now() - startTime;
205
+ logger.info('Data provisioning complete', {
206
+ waveNumber: wave.waveNumber,
207
+ recordsCreated,
208
+ recordsFailed,
209
+ executionTime,
210
+ });
211
+ return Promise.resolve({
212
+ success: recordsFailed === 0,
213
+ recordsCreated,
214
+ recordsFailed,
215
+ errors,
216
+ executionTime,
217
+ });
218
+ }
219
+ /**
220
+ * Create Custom Metadata record
221
+ */
222
+ createCustomMetadataRecord(record, orgApi) {
223
+ void orgApi;
224
+ // This would use Metadata API to create CMT record
225
+ // Simplified for now
226
+ logger.debug('Creating Custom Metadata record', { name: record.name });
227
+ }
228
+ /**
229
+ * Create Custom Settings data
230
+ */
231
+ createCustomSettingsData(record, orgApi) {
232
+ void orgApi;
233
+ // This would use SOAP/REST API to create Custom Settings data
234
+ logger.debug('Creating Custom Settings data', { name: record.name });
235
+ }
236
+ /**
237
+ * Format provisioning report
238
+ */
239
+ formatReport(result) {
240
+ const lines = [];
241
+ lines.push('📦 Data Provisioning Report');
242
+ lines.push('═══════════════════════════════════════');
243
+ lines.push(`Status: ${result.success ? '✅ SUCCESS' : '❌ FAILED'}`);
244
+ lines.push(`Records Created: ${result.recordsCreated}`);
245
+ lines.push(`Records Failed: ${result.recordsFailed}`);
246
+ lines.push(`Execution Time: ${result.executionTime}ms`);
247
+ lines.push('');
248
+ if (result.errors.length > 0) {
249
+ lines.push('❌ Errors:');
250
+ for (const error of result.errors) {
251
+ lines.push(` • ${error.record}: ${error.error}`);
252
+ }
253
+ }
254
+ return lines.join('\n');
255
+ }
256
+ }
257
+ //# sourceMappingURL=data-provisioner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-provisioner.js","sourceRoot":"","sources":["../../src/provisioning/data-provisioner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Custom Structure Scanner - US-081
3
+ * Support non-standard SFDX project structures
4
+ *
5
+ * @ac US-081-AC-1: Detect custom package directories
6
+ * @ac US-081-AC-2: Support custom naming conventions
7
+ * @ac US-081-AC-3: Handle nested structures
8
+ * @ac US-081-AC-4: Support legacy structures
9
+ * @ac US-081-AC-5: Validate custom paths
10
+ * @ac US-081-AC-6: Generate structure report
11
+ * @issue #81
12
+ */
13
+ export type CustomStructure = {
14
+ packageDirs: string[];
15
+ namingConvention: 'standard' | 'custom';
16
+ isNested: boolean;
17
+ isLegacy: boolean;
18
+ customPaths: Record<string, string>;
19
+ };
20
+ export type StructureReport = {
21
+ structure: CustomStructure;
22
+ warnings: string[];
23
+ recommendations: string[];
24
+ };
25
+ /**
26
+ * @ac US-081-AC-1: Detect custom package directories
27
+ */
28
+ export declare class CustomStructureScanner {
29
+ /**
30
+ * @ac US-081-AC-1: Detect custom package directories
31
+ * Scan for custom package directories
32
+ */
33
+ detectCustomPackageDirs(projectRoot: string): Promise<string[]>;
34
+ /**
35
+ * @ac US-081-AC-2: Support custom naming conventions
36
+ * Detect naming convention
37
+ */
38
+ detectNamingConvention(directories: string[]): 'standard' | 'custom';
39
+ /**
40
+ * @ac US-081-AC-3: Handle nested structures
41
+ * Check if structure is nested
42
+ */
43
+ isNestedStructure(projectRoot: string, packageDirs: string[]): Promise<boolean>;
44
+ /**
45
+ * @ac US-081-AC-4: Support legacy structures
46
+ * Detect legacy structure (Metadata API format)
47
+ */
48
+ isLegacyStructure(projectRoot: string): Promise<boolean>;
49
+ /**
50
+ * @ac US-081-AC-5: Validate custom paths
51
+ * Validate custom paths exist and are accessible
52
+ */
53
+ validateCustomPaths(projectRoot: string, customPaths: Record<string, string>): Promise<{
54
+ valid: boolean;
55
+ errors: string[];
56
+ }>;
57
+ /**
58
+ * @ac US-081-AC-6: Generate structure report
59
+ * Scan and generate comprehensive structure report
60
+ */
61
+ scanStructure(projectRoot: string): Promise<StructureReport>;
62
+ /**
63
+ * Format structure report
64
+ */
65
+ formatReport(report: StructureReport): string;
66
+ }