@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,94 @@
1
+ import type { CustomMetadataType, CustomMetadataField, CustomMetadataRecord as CMDRecord } from '../types/salesforce/custom-metadata.js';
2
+ /**
3
+ * Custom Metadata dependency types
4
+ */
5
+ export type CustomMetadataDependencyType = 'metadata_type' | 'relationship_field' | 'lookup_reference' | 'record';
6
+ /**
7
+ * Represents a dependency found in custom metadata
8
+ */
9
+ export type CustomMetadataDependency = {
10
+ type: CustomMetadataDependencyType;
11
+ name: string;
12
+ referencedObject?: string;
13
+ fieldName?: string;
14
+ };
15
+ /**
16
+ * Custom Metadata Record (extended with fullName and simplified values for parsing)
17
+ */
18
+ export type CustomMetadataRecord = Omit<CMDRecord, 'values'> & {
19
+ fullName: string;
20
+ values: Record<string, unknown>;
21
+ };
22
+ /**
23
+ * Result of parsing a Custom Metadata Type
24
+ * Extends CustomMetadataType with parsing-specific fields
25
+ */
26
+ export type CustomMetadataParseResult = CustomMetadataType & {
27
+ typeName: string;
28
+ fields: CustomMetadataField[];
29
+ records: CustomMetadataRecord[];
30
+ dependencies: CustomMetadataDependency[];
31
+ requiresSplitting: boolean;
32
+ splitBatches?: number;
33
+ };
34
+ /**
35
+ * Parse Custom Metadata Type definition
36
+ *
37
+ * @param typeName - Name of the custom metadata type
38
+ * @param metadataContent - Content of the .md-meta.xml file
39
+ * @returns CustomMetadataParseResult
40
+ *
41
+ * @throws {ParsingError} If the metadata cannot be parsed
42
+ *
43
+ * @ac US-026-AC-1: Extract field definitions
44
+ * @ac US-026-AC-2: Extract relationship references
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * const result = await parseCustomMetadataType('MyConfig__mdt', metadataXml);
49
+ * console.log(result.fields); // [{fullName: 'Value__c', ...}]
50
+ * console.log(result.dependencies); // [{type: 'relationship_field', ...}]
51
+ * ```
52
+ */
53
+ export declare function parseCustomMetadataType(typeName: string, metadataContent: string): Promise<CustomMetadataParseResult>;
54
+ /**
55
+ * Parse Custom Metadata Record
56
+ *
57
+ * @param recordName - Name of the record
58
+ * @param metadataContent - Content of the .md file
59
+ * @returns CustomMetadataRecord
60
+ *
61
+ * @throws {ParsingError} If the record cannot be parsed
62
+ *
63
+ * @ac US-026-AC-4: Identify CMT records separately
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * const record = await parseCustomMetadataRecord('MyConfig.Default', recordXml);
68
+ * console.log(record.label); // 'Default'
69
+ * console.log(record.values); // {Value__c: 'test'}
70
+ * ```
71
+ */
72
+ export declare function parseCustomMetadataRecord(recordName: string, metadataContent: string): Promise<CustomMetadataRecord>;
73
+ /**
74
+ * Group Custom Metadata Type with its records
75
+ *
76
+ * @param typeResult - Result from parseCustomMetadataType
77
+ * @param records - Array of parsed records
78
+ * @returns Updated CustomMetadataParseResult with records
79
+ *
80
+ * @ac US-026-AC-3: Group type with records
81
+ * @ac US-026-AC-5: Handle CMT splitting (200 records/wave)
82
+ *
83
+ * @example
84
+ * ```typescript
85
+ * const typeResult = await parseCustomMetadataType('MyConfig__mdt', typeXml);
86
+ * const records = await Promise.all(
87
+ * recordFiles.map(f => parseCustomMetadataRecord(f.name, f.content))
88
+ * );
89
+ * const grouped = groupCustomMetadataWithRecords(typeResult, records);
90
+ * console.log(grouped.requiresSplitting); // true if >200 records
91
+ * console.log(grouped.splitBatches); // number of 200-record batches
92
+ * ```
93
+ */
94
+ export declare function groupCustomMetadataWithRecords(typeResult: CustomMetadataParseResult, records: CustomMetadataRecord[]): CustomMetadataParseResult;
@@ -0,0 +1,199 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ import { ParsingError } from '../errors/parsing-error.js';
3
+ import { parseXml } from '../utils/xml.js';
4
+ const logger = getLogger('CustomMetadataParser');
5
+ /**
6
+ * Parse Custom Metadata Type definition
7
+ *
8
+ * @param typeName - Name of the custom metadata type
9
+ * @param metadataContent - Content of the .md-meta.xml file
10
+ * @returns CustomMetadataParseResult
11
+ *
12
+ * @throws {ParsingError} If the metadata cannot be parsed
13
+ *
14
+ * @ac US-026-AC-1: Extract field definitions
15
+ * @ac US-026-AC-2: Extract relationship references
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * const result = await parseCustomMetadataType('MyConfig__mdt', metadataXml);
20
+ * console.log(result.fields); // [{fullName: 'Value__c', ...}]
21
+ * console.log(result.dependencies); // [{type: 'relationship_field', ...}]
22
+ * ```
23
+ */
24
+ export async function parseCustomMetadataType(typeName, metadataContent) {
25
+ try {
26
+ logger.debug(`Parsing custom metadata type: ${typeName}`);
27
+ const parsed = await parseXml(metadataContent);
28
+ const parsedObj = parsed;
29
+ const customMetadata = parsedObj.CustomMetadata || parsedObj;
30
+ // Normalize arrays
31
+ const normalizeArray = (value) => {
32
+ if (value === undefined)
33
+ return [];
34
+ return Array.isArray(value) ? value : [value];
35
+ };
36
+ // Extract fields
37
+ const fieldsRaw = normalizeArray(customMetadata.fields);
38
+ const fields = fieldsRaw.map((field) => ({
39
+ fullName: String(field.fullName ?? ''),
40
+ label: String(field.label ?? ''),
41
+ type: String(field.type ?? 'Text'),
42
+ required: field.required ? Boolean(field.required) : undefined,
43
+ unique: field.unique ? Boolean(field.unique) : undefined,
44
+ description: field.description ? String(field.description) : undefined,
45
+ referenceTo: field.referenceTo ? String(field.referenceTo) : undefined,
46
+ }));
47
+ // Extract basic metadata info
48
+ const label = customMetadata.label ?? typeName;
49
+ const pluralLabel = customMetadata.pluralLabel ?? `${label}s`;
50
+ const description = customMetadata.description;
51
+ // Build dependencies
52
+ const dependencies = [];
53
+ // Add field dependencies (especially EntityDefinition relationships)
54
+ for (const field of fields) {
55
+ if (field.referenceTo) {
56
+ dependencies.push({
57
+ type: 'relationship_field',
58
+ name: field.fullName,
59
+ referencedObject: field.referenceTo,
60
+ fieldName: field.fullName,
61
+ });
62
+ }
63
+ }
64
+ // Note: Records are parsed separately from .md files in the customMetadata directory
65
+ const records = [];
66
+ // CMT splitting logic (200 records per wave)
67
+ const CMT_RECORDS_PER_WAVE = 200;
68
+ const requiresSplitting = records.length > CMT_RECORDS_PER_WAVE;
69
+ const splitBatches = requiresSplitting ? Math.ceil(records.length / CMT_RECORDS_PER_WAVE) : undefined;
70
+ const result = {
71
+ typeName,
72
+ label,
73
+ pluralLabel,
74
+ description,
75
+ fields,
76
+ records,
77
+ dependencies,
78
+ requiresSplitting,
79
+ splitBatches,
80
+ };
81
+ logger.debug(`Parsed custom metadata type: ${typeName}`, {
82
+ fieldsCount: fields.length,
83
+ recordsCount: records.length,
84
+ requiresSplitting,
85
+ splitBatches,
86
+ dependenciesCount: dependencies.length,
87
+ });
88
+ return result;
89
+ }
90
+ catch (error) {
91
+ if (error instanceof ParsingError) {
92
+ throw error;
93
+ }
94
+ throw new ParsingError(`Failed to parse custom metadata type: ${typeName}`, {
95
+ filePath: typeName,
96
+ originalError: error instanceof Error ? error.message : String(error),
97
+ });
98
+ }
99
+ }
100
+ /**
101
+ * Parse Custom Metadata Record
102
+ *
103
+ * @param recordName - Name of the record
104
+ * @param metadataContent - Content of the .md file
105
+ * @returns CustomMetadataRecord
106
+ *
107
+ * @throws {ParsingError} If the record cannot be parsed
108
+ *
109
+ * @ac US-026-AC-4: Identify CMT records separately
110
+ *
111
+ * @example
112
+ * ```typescript
113
+ * const record = await parseCustomMetadataRecord('MyConfig.Default', recordXml);
114
+ * console.log(record.label); // 'Default'
115
+ * console.log(record.values); // {Value__c: 'test'}
116
+ * ```
117
+ */
118
+ export async function parseCustomMetadataRecord(recordName, metadataContent) {
119
+ try {
120
+ logger.debug(`Parsing custom metadata record: ${recordName}`);
121
+ const parsed = await parseXml(metadataContent);
122
+ const parsedObj = parsed;
123
+ const customMetadata = parsedObj.CustomMetadata || parsedObj;
124
+ const label = customMetadata.label ?? recordName;
125
+ const protectedFlag = customMetadata.protected;
126
+ // Extract values
127
+ const valuesRaw = customMetadata.values;
128
+ const values = {};
129
+ if (valuesRaw) {
130
+ // Parse CustomMetadataValue entries
131
+ const valueEntries = Array.isArray(valuesRaw) ? valuesRaw : [valuesRaw];
132
+ for (const entry of valueEntries) {
133
+ const field = entry.field;
134
+ const value = entry.value;
135
+ if (field) {
136
+ values[field] = value;
137
+ }
138
+ }
139
+ }
140
+ const record = {
141
+ fullName: recordName,
142
+ label,
143
+ protected: protectedFlag,
144
+ values,
145
+ };
146
+ logger.debug(`Parsed custom metadata record: ${recordName}`, {
147
+ valuesCount: Object.keys(values).length,
148
+ });
149
+ return record;
150
+ }
151
+ catch (error) {
152
+ if (error instanceof ParsingError) {
153
+ throw error;
154
+ }
155
+ throw new ParsingError(`Failed to parse custom metadata record: ${recordName}`, {
156
+ filePath: recordName,
157
+ originalError: error instanceof Error ? error.message : String(error),
158
+ });
159
+ }
160
+ }
161
+ /**
162
+ * Group Custom Metadata Type with its records
163
+ *
164
+ * @param typeResult - Result from parseCustomMetadataType
165
+ * @param records - Array of parsed records
166
+ * @returns Updated CustomMetadataParseResult with records
167
+ *
168
+ * @ac US-026-AC-3: Group type with records
169
+ * @ac US-026-AC-5: Handle CMT splitting (200 records/wave)
170
+ *
171
+ * @example
172
+ * ```typescript
173
+ * const typeResult = await parseCustomMetadataType('MyConfig__mdt', typeXml);
174
+ * const records = await Promise.all(
175
+ * recordFiles.map(f => parseCustomMetadataRecord(f.name, f.content))
176
+ * );
177
+ * const grouped = groupCustomMetadataWithRecords(typeResult, records);
178
+ * console.log(grouped.requiresSplitting); // true if >200 records
179
+ * console.log(grouped.splitBatches); // number of 200-record batches
180
+ * ```
181
+ */
182
+ export function groupCustomMetadataWithRecords(typeResult, records) {
183
+ const CMT_RECORDS_PER_WAVE = 200;
184
+ const requiresSplitting = records.length > CMT_RECORDS_PER_WAVE;
185
+ const splitBatches = requiresSplitting ? Math.ceil(records.length / CMT_RECORDS_PER_WAVE) : undefined;
186
+ // Add record dependencies
187
+ const recordDependencies = records.map((record) => ({
188
+ type: 'record',
189
+ name: record.fullName,
190
+ }));
191
+ return {
192
+ ...typeResult,
193
+ records,
194
+ dependencies: [...typeResult.dependencies, ...recordDependencies],
195
+ requiresSplitting,
196
+ splitBatches,
197
+ };
198
+ }
199
+ //# sourceMappingURL=custom-metadata-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-metadata-parser.js","sourceRoot":"","sources":["../../src/parsers/custom-metadata-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAQ3C,MAAM,MAAM,GAAG,SAAS,CAAC,sBAAsB,CAAC,CAAC;AAuCjD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,QAAgB,EAChB,eAAuB;IAEvB,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;QAE1D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAiC,CAAC;QACpD,MAAM,cAAc,GAAI,SAAS,CAAC,cAA0C,IAAI,SAAS,CAAC;QAE1F,mBAAmB;QACnB,MAAM,cAAc,GAAG,CAAI,KAA0B,EAAO,EAAE;YAC5D,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC,CAAC;QAEF,iBAAiB;QACjB,MAAM,SAAS,GAAG,cAAc,CAAC,cAAc,CAAC,MAAiE,CAAC,CAAC;QACnH,MAAM,MAAM,GAA0B,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC9D,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC;YACtC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;YAChC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,MAAM,CAA4B;YAC7D,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;YAC9D,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;YACxD,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;YACtE,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;SACvE,CAAC,CAAC,CAAC;QAEJ,8BAA8B;QAC9B,MAAM,KAAK,GAAI,cAAc,CAAC,KAAgB,IAAI,QAAQ,CAAC;QAC3D,MAAM,WAAW,GAAI,cAAc,CAAC,WAAsB,IAAI,GAAG,KAAK,GAAG,CAAC;QAC1E,MAAM,WAAW,GAAG,cAAc,CAAC,WAAiC,CAAC;QAErE,qBAAqB;QACrB,MAAM,YAAY,GAA+B,EAAE,CAAC;QAEpD,qEAAqE;QACrE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;gBACtB,YAAY,CAAC,IAAI,CAAC;oBAChB,IAAI,EAAE,oBAAoB;oBAC1B,IAAI,EAAE,KAAK,CAAC,QAAQ;oBACpB,gBAAgB,EAAE,KAAK,CAAC,WAAW;oBACnC,SAAS,EAAE,KAAK,CAAC,QAAQ;iBAC1B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,qFAAqF;QACrF,MAAM,OAAO,GAA2B,EAAE,CAAC;QAE3C,6CAA6C;QAC7C,MAAM,oBAAoB,GAAG,GAAG,CAAC;QACjC,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,oBAAoB,CAAC;QAChE,MAAM,YAAY,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEtG,MAAM,MAAM,GAA8B;YACxC,QAAQ;YACR,KAAK;YACL,WAAW;YACX,WAAW;YACX,MAAM;YACN,OAAO;YACP,YAAY;YACZ,iBAAiB;YACjB,YAAY;SACb,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,gCAAgC,QAAQ,EAAE,EAAE;YACvD,WAAW,EAAE,MAAM,CAAC,MAAM;YAC1B,YAAY,EAAE,OAAO,CAAC,MAAM;YAC5B,iBAAiB;YACjB,YAAY;YACZ,iBAAiB,EAAE,YAAY,CAAC,MAAM;SACvC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;YAClC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,IAAI,YAAY,CAAC,yCAAyC,QAAQ,EAAE,EAAE;YAC1E,QAAQ,EAAE,QAAQ;YAClB,aAAa,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SACtE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,UAAkB,EAClB,eAAuB;IAEvB,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,mCAAmC,UAAU,EAAE,CAAC,CAAC;QAE9D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,eAAe,CAAC,CAAC;QAC/C,MAAM,SAAS,GAAG,MAAiC,CAAC;QACpD,MAAM,cAAc,GAAI,SAAS,CAAC,cAA0C,IAAI,SAAS,CAAC;QAE1F,MAAM,KAAK,GAAI,cAAc,CAAC,KAAgB,IAAI,UAAU,CAAC;QAC7D,MAAM,aAAa,GAAG,cAAc,CAAC,SAAgC,CAAC;QAEtE,iBAAiB;QACjB,MAAM,SAAS,GAAG,cAAc,CAAC,MAA6C,CAAC;QAC/E,MAAM,MAAM,GAA4B,EAAE,CAAC;QAE3C,IAAI,SAAS,EAAE,CAAC;YACd,oCAAoC;YACpC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YACxE,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;gBACjC,MAAM,KAAK,GAAI,KAAiC,CAAC,KAAe,CAAC;gBACjE,MAAM,KAAK,GAAI,KAAiC,CAAC,KAAK,CAAC;gBACvD,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAyB;YACnC,QAAQ,EAAE,UAAU;YACpB,KAAK;YACL,SAAS,EAAE,aAAa;YACxB,MAAM;SACP,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,kCAAkC,UAAU,EAAE,EAAE;YAC3D,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM;SACxC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;YAClC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,IAAI,YAAY,CAAC,2CAA2C,UAAU,EAAE,EAAE;YAC9E,QAAQ,EAAE,UAAU;YACpB,aAAa,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SACtE,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,8BAA8B,CAC5C,UAAqC,EACrC,OAA+B;IAE/B,MAAM,oBAAoB,GAAG,GAAG,CAAC;IACjC,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,GAAG,oBAAoB,CAAC;IAChE,MAAM,YAAY,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEtG,0BAA0B;IAC1B,MAAM,kBAAkB,GAA+B,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9E,IAAI,EAAE,QAAiB;QACvB,IAAI,EAAE,MAAM,CAAC,QAAQ;KACtB,CAAC,CAAC,CAAC;IAEJ,OAAO;QACL,GAAG,UAAU;QACb,OAAO;QACP,YAAY,EAAE,CAAC,GAAG,UAAU,CAAC,YAAY,EAAE,GAAG,kBAAkB,CAAC;QACjE,iBAAiB;QACjB,YAAY;KACb,CAAC;AACJ,CAAC"}
@@ -0,0 +1,62 @@
1
+ import type { CustomObjectMetadata, CustomField, ValidationRule, RecordType, ListView } from '../types/salesforce/object.js';
2
+ /**
3
+ * Custom object dependency types
4
+ */
5
+ export type CustomObjectDependencyType = 'lookup_field' | 'master_detail_field' | 'formula_field' | 'validation_rule' | 'workflow_rule' | 'apex_class' | 'record_type' | 'custom_field';
6
+ /**
7
+ * Represents a dependency found in a custom object
8
+ */
9
+ export type CustomObjectDependency = {
10
+ type: CustomObjectDependencyType;
11
+ name: string;
12
+ referencedObject?: string;
13
+ fieldName?: string;
14
+ };
15
+ /**
16
+ * Sharing rule metadata (for parsing)
17
+ */
18
+ export type SharingRule = {
19
+ fullName: string;
20
+ accessLevel: string;
21
+ sharedTo?: {
22
+ group?: string;
23
+ role?: string;
24
+ roleAndSubordinates?: string;
25
+ };
26
+ };
27
+ /**
28
+ * Result of parsing a custom object
29
+ * Extends CustomObjectMetadata with parsed dependencies
30
+ * Ensures arrays are always defined (never undefined)
31
+ */
32
+ export type CustomObjectParseResult = Omit<CustomObjectMetadata, 'fields' | 'validationRules' | 'recordTypes' | 'listViews'> & {
33
+ fields: CustomField[];
34
+ validationRules: ValidationRule[];
35
+ recordTypes: RecordType[];
36
+ listViews: ListView[];
37
+ sharingRules: SharingRule[];
38
+ dependencies: CustomObjectDependency[];
39
+ };
40
+ /**
41
+ * Parse a custom object and extract dependencies
42
+ *
43
+ * @param objectName - Name of the custom object
44
+ * @param metadataContent - Content of the .object file
45
+ * @returns CustomObjectParseResult with all extracted dependencies
46
+ *
47
+ * @throws {ParsingError} If the object cannot be parsed
48
+ *
49
+ * @ac US-020-AC-1: Extract custom field definitions
50
+ * @ac US-020-AC-2: Extract validation rule dependencies
51
+ * @ac US-020-AC-4: Extract lookup/master-detail relationships
52
+ * @ac US-020-AC-6: Extract record types
53
+ * @ac US-020-AC-8: Extract list views
54
+ *
55
+ * @example
56
+ * ```typescript
57
+ * const result = await parseCustomObject('Account', objectXml);
58
+ * console.log(result.fields); // [{fullName: 'CustomField__c', ...}]
59
+ * console.log(result.dependencies); // [{type: 'lookup_field', ...}]
60
+ * ```
61
+ */
62
+ export declare function parseCustomObject(objectName: string, metadataContent: string): Promise<CustomObjectParseResult>;
@@ -0,0 +1,297 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ import { ParsingError } from '../errors/parsing-error.js';
3
+ import { parseXml } from '../utils/xml.js';
4
+ const logger = getLogger('CustomObjectParser');
5
+ /**
6
+ * Extract object references from formula
7
+ *
8
+ * @ac US-020-AC-3: Extract formula field dependencies
9
+ */
10
+ function extractFormulaReferences(formula) {
11
+ const references = new Set();
12
+ // Pattern: ObjectName.FieldName or $ObjectType.ObjectName
13
+ const objectPattern = /\b([A-Z][a-zA-Z0-9_]*)\./g;
14
+ const matches = formula.matchAll(objectPattern);
15
+ for (const match of matches) {
16
+ const objectName = match[1];
17
+ // Skip common formula functions
18
+ if (!['IF', 'AND', 'OR', 'NOT', 'CASE', 'TEXT', 'VALUE', 'DATE', 'DATEVALUE', 'NOW', 'TODAY'].includes(objectName)) {
19
+ references.add(objectName);
20
+ }
21
+ }
22
+ // Also check for $ObjectType references
23
+ const objectTypePattern = /\$ObjectType\.([a-zA-Z][a-zA-Z0-9_]*)/g;
24
+ const objectTypeMatches = formula.matchAll(objectTypePattern);
25
+ for (const match of objectTypeMatches) {
26
+ references.add(match[1]);
27
+ }
28
+ return [...references];
29
+ }
30
+ /**
31
+ * Extract Apex class references from validation rules
32
+ *
33
+ * @ac US-020-AC-5: Extract Apex class references in formulas
34
+ */
35
+ function extractApexReferences(formula) {
36
+ const apexClasses = new Set();
37
+ // Pattern: ClassName.methodName() or @RemoteAction patterns
38
+ const apexPattern = /\b([A-Z][a-zA-Z0-9_]*)\.[a-zA-Z][a-zA-Z0-9_]*\s*\(/g;
39
+ const matches = formula.matchAll(apexPattern);
40
+ for (const match of matches) {
41
+ apexClasses.add(match[1]);
42
+ }
43
+ return [...apexClasses];
44
+ }
45
+ /**
46
+ * Extract sharing rules from metadata
47
+ *
48
+ * @ac US-020-AC-7: Extract sharing rules
49
+ */
50
+ function extractSharingRules(metadata) {
51
+ const sharingRules = [];
52
+ const sharingObj = metadata.sharingRules;
53
+ if (!sharingObj) {
54
+ return sharingRules;
55
+ }
56
+ // Sharing rules can be criteriaBasedRules or ownerRules
57
+ const criteriaRules = sharingObj.criteriaBasedRules;
58
+ const ownerRules = sharingObj.ownerRules;
59
+ if (criteriaRules) {
60
+ const criteriaList = Array.isArray(criteriaRules) ? criteriaRules : [criteriaRules];
61
+ for (const rule of criteriaList) {
62
+ const criteriaRule = rule;
63
+ const sharingRule = {
64
+ fullName: criteriaRule.fullName ?? '',
65
+ accessLevel: criteriaRule.accessLevel ?? '',
66
+ sharedTo: criteriaRule.sharedTo,
67
+ };
68
+ sharingRules.push(sharingRule);
69
+ }
70
+ }
71
+ if (ownerRules) {
72
+ const ownerList = Array.isArray(ownerRules) ? ownerRules : [ownerRules];
73
+ for (const rule of ownerList) {
74
+ const ownerRule = rule;
75
+ const sharingRule = {
76
+ fullName: ownerRule.fullName ?? '',
77
+ accessLevel: ownerRule.accessLevel ?? '',
78
+ sharedTo: ownerRule.sharedTo,
79
+ };
80
+ sharingRules.push(sharingRule);
81
+ }
82
+ }
83
+ return sharingRules;
84
+ }
85
+ /**
86
+ * Parse custom object metadata XML
87
+ */
88
+ async function parseMetadataXml(metadataContent) {
89
+ try {
90
+ const parsed = await parseXml(metadataContent);
91
+ const parsedObj = parsed;
92
+ const customObject = parsedObj.CustomObject || parsedObj;
93
+ // Validate that we have at least label and pluralLabel
94
+ if (!customObject.label || !customObject.pluralLabel) {
95
+ logger.warn('Missing required fields in custom object metadata', {
96
+ hasLabel: Boolean(customObject.label),
97
+ hasPluralLabel: Boolean(customObject.pluralLabel),
98
+ parsedKeys: Object.keys(customObject),
99
+ });
100
+ }
101
+ // Normalize arrays (XML parser returns single items as objects, not arrays)
102
+ const normalizeArray = (value) => {
103
+ if (value === undefined)
104
+ return undefined;
105
+ return Array.isArray(value) ? value : [value];
106
+ };
107
+ // Map to CustomObjectMetadata using the robust types from src/types/salesforce/object.ts
108
+ let fields = normalizeArray(customObject.fields);
109
+ // Normalize referenceTo within each field (XML parser returns single string, but type expects array)
110
+ if (fields) {
111
+ fields = fields.map((field) => ({
112
+ ...field,
113
+ referenceTo: field.referenceTo
114
+ ? Array.isArray(field.referenceTo)
115
+ ? field.referenceTo
116
+ : [field.referenceTo]
117
+ : undefined,
118
+ }));
119
+ }
120
+ const metadata = {
121
+ label: customObject.label ?? '',
122
+ pluralLabel: customObject.pluralLabel ?? '',
123
+ actionOverrides: normalizeArray(customObject.actionOverrides),
124
+ allowInChatterGroups: customObject.allowInChatterGroups,
125
+ compactLayoutAssignment: customObject.compactLayoutAssignment,
126
+ customHelpPage: customObject.customHelpPage,
127
+ deploymentStatus: customObject.deploymentStatus,
128
+ deprecated: customObject.deprecated,
129
+ description: customObject.description,
130
+ enableActivities: customObject.enableActivities,
131
+ enableBulkApi: customObject.enableBulkApi,
132
+ enableChangeDataCapture: customObject.enableChangeDataCapture,
133
+ enableEnhancedLookup: customObject.enableEnhancedLookup,
134
+ enableFeeds: customObject.enableFeeds,
135
+ enableHistory: customObject.enableHistory,
136
+ enableReports: customObject.enableReports,
137
+ enableSearch: customObject.enableSearch,
138
+ enableSharing: customObject.enableSharing,
139
+ enableStreamingApi: customObject.enableStreamingApi,
140
+ externalSharingModel: customObject.externalSharingModel,
141
+ fields,
142
+ fieldSets: normalizeArray(customObject.fieldSets),
143
+ gender: customObject.gender,
144
+ household: customObject.household,
145
+ listViews: normalizeArray(customObject.listViews),
146
+ nameField: customObject.nameField,
147
+ recordTypes: normalizeArray(customObject.recordTypes),
148
+ searchLayouts: customObject.searchLayouts,
149
+ sharingModel: customObject.sharingModel,
150
+ sharingReasons: normalizeArray(customObject.sharingReasons),
151
+ sharingRecalculations: normalizeArray(customObject.sharingRecalculations),
152
+ startsWith: customObject.startsWith,
153
+ validationRules: normalizeArray(customObject.validationRules),
154
+ visibility: customObject.visibility,
155
+ webLinks: normalizeArray(customObject.webLinks),
156
+ };
157
+ return metadata;
158
+ }
159
+ catch (error) {
160
+ throw new ParsingError('Failed to parse custom object metadata XML', {
161
+ originalError: error instanceof Error ? error.message : String(error),
162
+ });
163
+ }
164
+ }
165
+ /**
166
+ * Parse a custom object and extract dependencies
167
+ *
168
+ * @param objectName - Name of the custom object
169
+ * @param metadataContent - Content of the .object file
170
+ * @returns CustomObjectParseResult with all extracted dependencies
171
+ *
172
+ * @throws {ParsingError} If the object cannot be parsed
173
+ *
174
+ * @ac US-020-AC-1: Extract custom field definitions
175
+ * @ac US-020-AC-2: Extract validation rule dependencies
176
+ * @ac US-020-AC-4: Extract lookup/master-detail relationships
177
+ * @ac US-020-AC-6: Extract record types
178
+ * @ac US-020-AC-8: Extract list views
179
+ *
180
+ * @example
181
+ * ```typescript
182
+ * const result = await parseCustomObject('Account', objectXml);
183
+ * console.log(result.fields); // [{fullName: 'CustomField__c', ...}]
184
+ * console.log(result.dependencies); // [{type: 'lookup_field', ...}]
185
+ * ```
186
+ */
187
+ // eslint-disable-next-line complexity
188
+ export async function parseCustomObject(objectName, metadataContent) {
189
+ try {
190
+ logger.debug(`Parsing custom object: ${objectName}`);
191
+ // Parse metadata XML using Salesforce types
192
+ const metadata = await parseMetadataXml(metadataContent);
193
+ // Parse the raw XML for sharing rules (not part of CustomObjectMetadata)
194
+ const parsedRaw = await parseXml(metadataContent);
195
+ const customObject = parsedRaw.CustomObject || parsedRaw;
196
+ const sharingRules = extractSharingRules(customObject);
197
+ // Extract fields
198
+ const fields = metadata.fields ?? [];
199
+ const validationRules = metadata.validationRules ?? [];
200
+ const recordTypes = metadata.recordTypes ?? [];
201
+ const listViews = metadata.listViews ?? [];
202
+ // Build dependencies array
203
+ const dependencies = [];
204
+ // Add field dependencies
205
+ for (const field of fields) {
206
+ // Lookup/Master-Detail relationships
207
+ if (field.referenceTo && (field.type === 'Lookup' || field.type === 'MasterDetail')) {
208
+ const refObjects = field.referenceTo;
209
+ for (const refObject of refObjects) {
210
+ dependencies.push({
211
+ type: field.type === 'MasterDetail' ? 'master_detail_field' : 'lookup_field',
212
+ name: field.fullName,
213
+ referencedObject: refObject,
214
+ fieldName: field.fullName,
215
+ });
216
+ }
217
+ }
218
+ // Formula fields
219
+ if (field.formula) {
220
+ const formulaRefs = extractFormulaReferences(field.formula);
221
+ for (const ref of formulaRefs) {
222
+ dependencies.push({
223
+ type: 'formula_field',
224
+ name: field.fullName,
225
+ referencedObject: ref,
226
+ fieldName: field.fullName,
227
+ });
228
+ }
229
+ // Apex class references in formulas
230
+ const apexRefs = extractApexReferences(field.formula);
231
+ for (const apexClass of apexRefs) {
232
+ dependencies.push({
233
+ type: 'apex_class',
234
+ name: apexClass,
235
+ fieldName: field.fullName,
236
+ });
237
+ }
238
+ }
239
+ }
240
+ // Add validation rule dependencies
241
+ for (const rule of validationRules) {
242
+ if (rule.errorConditionFormula) {
243
+ const formulaRefs = extractFormulaReferences(rule.errorConditionFormula);
244
+ for (const ref of formulaRefs) {
245
+ dependencies.push({
246
+ type: 'validation_rule',
247
+ name: rule.fullName,
248
+ referencedObject: ref,
249
+ });
250
+ }
251
+ // Apex class references in validation rules
252
+ const apexRefs = extractApexReferences(rule.errorConditionFormula);
253
+ for (const apexClass of apexRefs) {
254
+ dependencies.push({
255
+ type: 'apex_class',
256
+ name: apexClass,
257
+ });
258
+ }
259
+ }
260
+ }
261
+ // Add record type dependencies
262
+ for (const rt of recordTypes) {
263
+ dependencies.push({
264
+ type: 'record_type',
265
+ name: rt.fullName,
266
+ });
267
+ }
268
+ const result = {
269
+ ...metadata,
270
+ fields,
271
+ validationRules,
272
+ recordTypes,
273
+ listViews,
274
+ sharingRules,
275
+ dependencies,
276
+ };
277
+ logger.debug(`Parsed custom object: ${objectName}`, {
278
+ fieldsCount: fields.length,
279
+ validationRulesCount: validationRules.length,
280
+ recordTypesCount: recordTypes.length,
281
+ sharingRulesCount: sharingRules.length,
282
+ listViewsCount: listViews.length,
283
+ dependenciesCount: dependencies.length,
284
+ });
285
+ return result;
286
+ }
287
+ catch (error) {
288
+ if (error instanceof ParsingError) {
289
+ throw error;
290
+ }
291
+ throw new ParsingError(`Failed to parse custom object: ${objectName}`, {
292
+ filePath: objectName,
293
+ originalError: error instanceof Error ? error.message : String(error),
294
+ });
295
+ }
296
+ }
297
+ //# sourceMappingURL=custom-object-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-object-parser.js","sourceRoot":"","sources":["../../src/parsers/custom-object-parser.ts"],"names":[],"mappings":"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"}