@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,55 @@
1
+ import type { AuraComponentMetadata, AuraComponentType } from '../types/salesforce/aura.js';
2
+ /**
3
+ * Aura dependency types
4
+ */
5
+ export type AuraDependencyType = 'apex_controller' | 'child_component' | 'event' | 'interface' | 'extends' | 'helper';
6
+ /**
7
+ * Represents a dependency found in an Aura component
8
+ */
9
+ export type AuraDependency = {
10
+ type: AuraDependencyType;
11
+ name: string;
12
+ namespace?: string;
13
+ };
14
+ /**
15
+ * Result of parsing an Aura component
16
+ * Optionally includes metadata from .cmp-meta.xml, .app-meta.xml, etc.
17
+ */
18
+ export type AuraParseResult = {
19
+ componentName: string;
20
+ componentType: AuraComponentType;
21
+ apexController?: string;
22
+ extendsComponent?: string;
23
+ implementsInterfaces: string[];
24
+ childComponents: string[];
25
+ events: string[];
26
+ dependencies: AuraDependency[];
27
+ hasController: boolean;
28
+ hasHelper: boolean;
29
+ hasStyle: boolean;
30
+ metadata?: AuraComponentMetadata;
31
+ };
32
+ /**
33
+ * Parse an Aura component and extract dependencies
34
+ *
35
+ * @param componentName - Name of the Aura component
36
+ * @param cmpContent - Content of the .cmp file
37
+ * @param hasController - Whether the component has a controller.js file
38
+ * @param hasHelper - Whether the component has a helper.js file
39
+ * @param hasStyle - Whether the component has a style.css file
40
+ * @returns AuraParseResult with all extracted dependencies
41
+ *
42
+ * @throws {ParsingError} If the component cannot be parsed
43
+ *
44
+ * @ac US-017-AC-6: Validate bundle structure
45
+ * @ac US-017-AC-7: Parse all bundle files (.cmp, .js, .css, etc.)
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * const result = parseAura('MyComponent', cmpContent, true, true, false);
50
+ * console.log(result.apexController); // 'MyController'
51
+ * console.log(result.childComponents); // ['c:ChildComponent']
52
+ * console.log(result.events); // ['c:MyEvent']
53
+ * ```
54
+ */
55
+ export declare function parseAura(componentName: string, cmpContent: string, hasController?: boolean, hasHelper?: boolean, hasStyle?: boolean): AuraParseResult;
@@ -0,0 +1,229 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ import { ParsingError } from '../errors/parsing-error.js';
3
+ const logger = getLogger('AuraParser');
4
+ /**
5
+ * Extract Apex controller from component markup
6
+ *
7
+ * @ac US-017-AC-1: Extract controller Apex class
8
+ */
9
+ function extractApexController(cmpXml) {
10
+ // Pattern: controller="MyController" or controller="ns__MyController"
11
+ const controllerMatch = cmpXml.match(/controller\s*=\s*["']([a-zA-Z][a-zA-Z0-9_.]*?)["']/);
12
+ return controllerMatch ? controllerMatch[1] : undefined;
13
+ }
14
+ /**
15
+ * Extract component extends relationship
16
+ *
17
+ * @ac US-017-AC-5: Extract interface implementations (also handles extends)
18
+ */
19
+ function extractExtends(cmpXml) {
20
+ // Pattern: extends="c:BaseComponent" or extends="namespace:BaseComponent"
21
+ const extendsMatch = cmpXml.match(/extends\s*=\s*["']([a-zA-Z][a-zA-Z0-9_:]*?)["']/);
22
+ return extendsMatch ? extendsMatch[1] : undefined;
23
+ }
24
+ /**
25
+ * Extract interface implementations
26
+ *
27
+ * @ac US-017-AC-5: Extract interface implementations
28
+ */
29
+ function extractImplements(cmpXml) {
30
+ // Pattern: implements="flexipage:availableForAllPageTypes,force:hasRecordId"
31
+ const implementsMatch = cmpXml.match(/implements\s*=\s*["']([^"']+)["']/);
32
+ if (!implementsMatch) {
33
+ return [];
34
+ }
35
+ return implementsMatch[1]
36
+ .split(',')
37
+ .map((impl) => impl.trim())
38
+ .filter((impl) => impl.length > 0);
39
+ }
40
+ /**
41
+ * Extract child component references
42
+ *
43
+ * @ac US-017-AC-3: Extract child component references
44
+ */
45
+ function extractChildComponents(cmpXml) {
46
+ const children = [];
47
+ // Pattern: <c:ChildComponent ... /> or <namespace:ComponentName ... />
48
+ const componentPattern = /<([a-zA-Z][a-zA-Z0-9_]*):([a-zA-Z][a-zA-Z0-9_]*)[^>]*\/>/g;
49
+ const matches = cmpXml.matchAll(componentPattern);
50
+ for (const match of matches) {
51
+ const namespace = match[1];
52
+ const componentName = match[2];
53
+ // Exclude aura: namespace (framework components)
54
+ if (namespace !== 'aura' && namespace !== 'lightning' && namespace !== 'ui') {
55
+ const fullName = `${namespace}:${componentName}`;
56
+ if (!children.includes(fullName)) {
57
+ children.push(fullName);
58
+ }
59
+ }
60
+ }
61
+ // Also check for non-self-closing tags: <c:ChildComponent>...</c:ChildComponent>
62
+ const openTagPattern = /<([a-zA-Z][a-zA-Z0-9_]*):([a-zA-Z][a-zA-Z0-9_]*)[^/>]*>/g;
63
+ const openMatches = cmpXml.matchAll(openTagPattern);
64
+ for (const match of openMatches) {
65
+ const namespace = match[1];
66
+ const componentName = match[2];
67
+ if (namespace !== 'aura' && namespace !== 'lightning' && namespace !== 'ui') {
68
+ const fullName = `${namespace}:${componentName}`;
69
+ if (!children.includes(fullName)) {
70
+ children.push(fullName);
71
+ }
72
+ }
73
+ }
74
+ return children;
75
+ }
76
+ /**
77
+ * Extract event references
78
+ *
79
+ * @ac US-017-AC-4: Extract event references
80
+ */
81
+ function extractEvents(cmpXml) {
82
+ const events = [];
83
+ // Pattern: <aura:registerEvent name="myEvent" type="c:MyEvent"/>
84
+ const registerPattern = /<aura:registerEvent[^>]*type\s*=\s*["']([a-zA-Z][a-zA-Z0-9_:]*?)["']/g;
85
+ const registerMatches = cmpXml.matchAll(registerPattern);
86
+ for (const match of registerMatches) {
87
+ const eventType = match[1];
88
+ if (!events.includes(eventType)) {
89
+ events.push(eventType);
90
+ }
91
+ }
92
+ // Pattern: <aura:handler event="c:MyEvent" action="{!c.handleEvent}"/>
93
+ const handlerPattern = /<aura:handler[^>]*event\s*=\s*["']([a-zA-Z][a-zA-Z0-9_:]*?)["']/g;
94
+ const handlerMatches = cmpXml.matchAll(handlerPattern);
95
+ for (const match of handlerMatches) {
96
+ const eventType = match[1];
97
+ if (!events.includes(eventType)) {
98
+ events.push(eventType);
99
+ }
100
+ }
101
+ return events;
102
+ }
103
+ /**
104
+ * Determine component type from XML
105
+ */
106
+ function getComponentType(cmpXml) {
107
+ if (cmpXml.includes('<aura:application')) {
108
+ return 'application';
109
+ }
110
+ if (cmpXml.includes('<aura:event')) {
111
+ return 'event';
112
+ }
113
+ if (cmpXml.includes('<aura:interface')) {
114
+ return 'interface';
115
+ }
116
+ return 'component';
117
+ }
118
+ /**
119
+ * Parse an Aura component and extract dependencies
120
+ *
121
+ * @param componentName - Name of the Aura component
122
+ * @param cmpContent - Content of the .cmp file
123
+ * @param hasController - Whether the component has a controller.js file
124
+ * @param hasHelper - Whether the component has a helper.js file
125
+ * @param hasStyle - Whether the component has a style.css file
126
+ * @returns AuraParseResult with all extracted dependencies
127
+ *
128
+ * @throws {ParsingError} If the component cannot be parsed
129
+ *
130
+ * @ac US-017-AC-6: Validate bundle structure
131
+ * @ac US-017-AC-7: Parse all bundle files (.cmp, .js, .css, etc.)
132
+ *
133
+ * @example
134
+ * ```typescript
135
+ * const result = parseAura('MyComponent', cmpContent, true, true, false);
136
+ * console.log(result.apexController); // 'MyController'
137
+ * console.log(result.childComponents); // ['c:ChildComponent']
138
+ * console.log(result.events); // ['c:MyEvent']
139
+ * ```
140
+ */
141
+ export function parseAura(componentName, cmpContent, hasController = false, hasHelper = false, hasStyle = false) {
142
+ try {
143
+ logger.debug(`Parsing Aura component: ${componentName}`);
144
+ // Determine component type
145
+ const componentType = getComponentType(cmpContent);
146
+ // Extract dependencies
147
+ const apexController = extractApexController(cmpContent);
148
+ const extendsComponent = extractExtends(cmpContent);
149
+ const implementsInterfaces = extractImplements(cmpContent);
150
+ const childComponents = extractChildComponents(cmpContent);
151
+ const events = extractEvents(cmpContent);
152
+ // Build dependencies array
153
+ const dependencies = [];
154
+ if (apexController) {
155
+ dependencies.push({
156
+ type: 'apex_controller',
157
+ name: apexController,
158
+ namespace: apexController.includes('__') ? apexController.split('__')[0] : undefined,
159
+ });
160
+ }
161
+ if (extendsComponent) {
162
+ dependencies.push({
163
+ type: 'extends',
164
+ name: extendsComponent,
165
+ namespace: extendsComponent.includes(':') ? extendsComponent.split(':')[0] : undefined,
166
+ });
167
+ }
168
+ for (const iface of implementsInterfaces) {
169
+ dependencies.push({
170
+ type: 'interface',
171
+ name: iface,
172
+ namespace: iface.includes(':') ? iface.split(':')[0] : undefined,
173
+ });
174
+ }
175
+ for (const child of childComponents) {
176
+ dependencies.push({
177
+ type: 'child_component',
178
+ name: child,
179
+ namespace: child.includes(':') ? child.split(':')[0] : undefined,
180
+ });
181
+ }
182
+ for (const event of events) {
183
+ dependencies.push({
184
+ type: 'event',
185
+ name: event,
186
+ namespace: event.includes(':') ? event.split(':')[0] : undefined,
187
+ });
188
+ }
189
+ if (hasHelper) {
190
+ dependencies.push({
191
+ type: 'helper',
192
+ name: `${componentName}Helper`,
193
+ });
194
+ }
195
+ const result = {
196
+ componentName,
197
+ componentType,
198
+ apexController,
199
+ extendsComponent,
200
+ implementsInterfaces,
201
+ childComponents,
202
+ events,
203
+ dependencies,
204
+ hasController,
205
+ hasHelper,
206
+ hasStyle,
207
+ };
208
+ logger.debug(`Parsed Aura component: ${componentName}`, {
209
+ componentType,
210
+ apexController: !!apexController,
211
+ extendsComponent: !!extendsComponent,
212
+ implementsInterfaces: implementsInterfaces.length,
213
+ childComponents: childComponents.length,
214
+ events: events.length,
215
+ dependencies: dependencies.length,
216
+ });
217
+ return result;
218
+ }
219
+ catch (error) {
220
+ if (error instanceof ParsingError) {
221
+ throw error;
222
+ }
223
+ throw new ParsingError(`Failed to parse Aura component: ${componentName}`, {
224
+ filePath: componentName,
225
+ originalError: error instanceof Error ? error.message : String(error),
226
+ });
227
+ }
228
+ }
229
+ //# sourceMappingURL=aura-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aura-parser.js","sourceRoot":"","sources":["../../src/parsers/aura-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Bot Parser
3
+ * Parses Salesforce Einstein Bot metadata files (.bot-meta.xml)
4
+ *
5
+ * @ac US-024-AC-1: Extract dialog references
6
+ * @ac US-024-AC-2: Extract GenAI prompt references
7
+ * @ac US-024-AC-3: Extract Flow references
8
+ * @ac US-024-AC-4: Extract Apex action references
9
+ * @ac US-024-AC-5: Extract menu item references
10
+ * @ac US-024-AC-6: Link to all dependencies
11
+ *
12
+ * @issue #24
13
+ */
14
+ /**
15
+ * Result of parsing a Bot file
16
+ */
17
+ export type BotParseResult = {
18
+ /** Name of the bot (from filename) */
19
+ name: string;
20
+ /** Label */
21
+ label: string;
22
+ /** Description */
23
+ description?: string;
24
+ /** Dialog references */
25
+ dialogs: string[];
26
+ /** GenAI prompt references */
27
+ genAiPrompts: string[];
28
+ /** Flow references */
29
+ flows: string[];
30
+ /** Apex action references */
31
+ apexActions: string[];
32
+ /** Menu items (dialogs in footer menu) */
33
+ menuItems: string[];
34
+ /** ML Intents */
35
+ mlIntents: string[];
36
+ /** SObjects referenced */
37
+ sobjects: string[];
38
+ /** All dependencies extracted from this bot */
39
+ dependencies: {
40
+ dialogs: string[];
41
+ genAiPrompts: string[];
42
+ flows: string[];
43
+ apexActions: string[];
44
+ menuItems: string[];
45
+ mlIntents: string[];
46
+ sobjects: string[];
47
+ };
48
+ };
49
+ /**
50
+ * Parse a Bot metadata XML file
51
+ *
52
+ * @param filePath - Path to the .bot-meta.xml file
53
+ * @param botName - Name of the bot (typically from filename)
54
+ * @returns Parsed bot metadata with dependencies
55
+ *
56
+ * @example
57
+ * const result = await parseBot(
58
+ * 'force-app/main/default/bots/Support_Bot.bot-meta.xml',
59
+ * 'Support_Bot'
60
+ * );
61
+ * console.log(result.dialogs); // ['Greeting', 'CaseCreation', 'FAQ']
62
+ * console.log(result.flows); // ['Case_Assignment_Flow']
63
+ * console.log(result.genAiPrompts); // ['SummarizeCase']
64
+ */
65
+ export declare function parseBot(filePath: string, botName: string): Promise<BotParseResult>;
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Bot Parser
3
+ * Parses Salesforce Einstein Bot metadata files (.bot-meta.xml)
4
+ *
5
+ * @ac US-024-AC-1: Extract dialog references
6
+ * @ac US-024-AC-2: Extract GenAI prompt references
7
+ * @ac US-024-AC-3: Extract Flow references
8
+ * @ac US-024-AC-4: Extract Apex action references
9
+ * @ac US-024-AC-5: Extract menu item references
10
+ * @ac US-024-AC-6: Link to all dependencies
11
+ *
12
+ * @issue #24
13
+ */
14
+ import { readFile } from 'node:fs/promises';
15
+ import { XMLParser } from 'fast-xml-parser';
16
+ /**
17
+ * Normalize value to array (handles XML parser returning single object vs array)
18
+ */
19
+ function normalizeArray(value) {
20
+ if (!value)
21
+ return [];
22
+ return Array.isArray(value) ? value : [value];
23
+ }
24
+ /**
25
+ * Extract invocations from bot steps recursively
26
+ */
27
+ function extractInvocationsFromSteps(steps) {
28
+ const flows = [];
29
+ const apexActions = [];
30
+ const genAiPrompts = [];
31
+ for (const step of steps) {
32
+ // Extract from botInvocation
33
+ if (step.botInvocation) {
34
+ const invocation = step.botInvocation;
35
+ if (invocation.invocationActionName) {
36
+ switch (invocation.invocationActionType) {
37
+ case 'flow':
38
+ flows.push(invocation.invocationActionName);
39
+ break;
40
+ case 'apex':
41
+ apexActions.push(invocation.invocationActionName);
42
+ break;
43
+ case 'prompt':
44
+ genAiPrompts.push(invocation.invocationActionName);
45
+ break;
46
+ case 'externalService':
47
+ case 'standardInvocableAction':
48
+ case undefined:
49
+ // These types don't need specific tracking
50
+ break;
51
+ }
52
+ }
53
+ }
54
+ // Extract from botVariableOperation.botInvocation
55
+ if (step.botVariableOperation?.botInvocation) {
56
+ const invocation = step.botVariableOperation.botInvocation;
57
+ if (invocation.invocationActionName) {
58
+ switch (invocation.invocationActionType) {
59
+ case 'flow':
60
+ flows.push(invocation.invocationActionName);
61
+ break;
62
+ case 'apex':
63
+ apexActions.push(invocation.invocationActionName);
64
+ break;
65
+ case 'prompt':
66
+ genAiPrompts.push(invocation.invocationActionName);
67
+ break;
68
+ case 'externalService':
69
+ case 'standardInvocableAction':
70
+ case undefined:
71
+ // These types don't need specific tracking
72
+ break;
73
+ }
74
+ }
75
+ }
76
+ // Recursively extract from nested steps
77
+ if (step.botSteps) {
78
+ const nested = extractInvocationsFromSteps(normalizeArray(step.botSteps));
79
+ flows.push(...nested.flows);
80
+ apexActions.push(...nested.apexActions);
81
+ genAiPrompts.push(...nested.genAiPrompts);
82
+ }
83
+ }
84
+ return { flows, apexActions, genAiPrompts };
85
+ }
86
+ /**
87
+ * Extract SObjects from conversation record lookups in bot steps
88
+ */
89
+ function extractSObjectsFromSteps(steps) {
90
+ const sobjects = [];
91
+ for (const step of steps) {
92
+ // Extract from conversationRecordLookup
93
+ if (step.conversationRecordLookup) {
94
+ sobjects.push(step.conversationRecordLookup.SObjectType);
95
+ }
96
+ // Recursively extract from nested steps
97
+ if (step.botSteps) {
98
+ sobjects.push(...extractSObjectsFromSteps(normalizeArray(step.botSteps)));
99
+ }
100
+ }
101
+ return sobjects;
102
+ }
103
+ /**
104
+ * Extract all references from bot dialogs
105
+ */
106
+ function extractReferencesFromDialogs(dialogs) {
107
+ const allFlows = [];
108
+ const allApexActions = [];
109
+ const allGenAiPrompts = [];
110
+ const allSObjects = [];
111
+ for (const dialog of dialogs) {
112
+ const steps = normalizeArray(dialog.botSteps);
113
+ // Extract invocations
114
+ const { flows, apexActions, genAiPrompts } = extractInvocationsFromSteps(steps);
115
+ allFlows.push(...flows);
116
+ allApexActions.push(...apexActions);
117
+ allGenAiPrompts.push(...genAiPrompts);
118
+ // Extract SObjects
119
+ const sobjects = extractSObjectsFromSteps(steps);
120
+ allSObjects.push(...sobjects);
121
+ }
122
+ return {
123
+ flows: [...new Set(allFlows)],
124
+ apexActions: [...new Set(allApexActions)],
125
+ genAiPrompts: [...new Set(allGenAiPrompts)],
126
+ sobjects: [...new Set(allSObjects)],
127
+ };
128
+ }
129
+ /**
130
+ * Parse a Bot metadata XML file
131
+ *
132
+ * @param filePath - Path to the .bot-meta.xml file
133
+ * @param botName - Name of the bot (typically from filename)
134
+ * @returns Parsed bot metadata with dependencies
135
+ *
136
+ * @example
137
+ * const result = await parseBot(
138
+ * 'force-app/main/default/bots/Support_Bot.bot-meta.xml',
139
+ * 'Support_Bot'
140
+ * );
141
+ * console.log(result.dialogs); // ['Greeting', 'CaseCreation', 'FAQ']
142
+ * console.log(result.flows); // ['Case_Assignment_Flow']
143
+ * console.log(result.genAiPrompts); // ['SummarizeCase']
144
+ */
145
+ export async function parseBot(filePath, botName) {
146
+ // Read and parse XML
147
+ const xmlContent = await readFile(filePath, 'utf-8');
148
+ const parser = new XMLParser({
149
+ ignoreAttributes: false,
150
+ parseAttributeValue: true,
151
+ trimValues: true,
152
+ });
153
+ let parsed;
154
+ try {
155
+ parsed = parser.parse(xmlContent);
156
+ }
157
+ catch (error) {
158
+ throw new Error(`Failed to parse Bot XML at ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
159
+ }
160
+ // Type assertion with validation
161
+ const root = parsed;
162
+ if (!root.Bot) {
163
+ throw new Error(`Invalid Bot XML structure at ${filePath}: missing Bot root element`);
164
+ }
165
+ const metadata = root.Bot;
166
+ // Extract bot versions and dialogs
167
+ const botVersions = normalizeArray(metadata.botVersions);
168
+ const allDialogs = [];
169
+ for (const version of botVersions) {
170
+ const versionDialogs = normalizeArray(version.botDialogs);
171
+ allDialogs.push(...versionDialogs);
172
+ }
173
+ // Extract dialog names
174
+ const dialogNames = allDialogs.map((dialog) => dialog.developerName);
175
+ // Extract menu items (dialogs shown in footer menu)
176
+ const menuItems = allDialogs
177
+ .filter((dialog) => dialog.showInFooterMenu === true)
178
+ .map((dialog) => dialog.developerName);
179
+ // Extract ML Intents
180
+ const mlIntents = normalizeArray(metadata.mlIntents).map((intent) => intent.developerName);
181
+ // Extract invocations and SObjects from all dialogs
182
+ const { flows, apexActions, genAiPrompts, sobjects } = extractReferencesFromDialogs(allDialogs);
183
+ // Extract SObjects from conversation variables
184
+ const variableSObjects = [];
185
+ for (const version of botVersions) {
186
+ const variables = normalizeArray(version.conversationVariables);
187
+ for (const variable of variables) {
188
+ if (variable.SObjectType) {
189
+ variableSObjects.push(variable.SObjectType);
190
+ }
191
+ }
192
+ }
193
+ // Extract SObjects from context variables
194
+ const contextVariables = normalizeArray(metadata.contextVariables);
195
+ for (const variable of contextVariables) {
196
+ if (variable.SObjectType) {
197
+ variableSObjects.push(variable.SObjectType);
198
+ }
199
+ }
200
+ // Combine and deduplicate SObjects
201
+ const allSObjects = [...new Set([...sobjects, ...variableSObjects])];
202
+ // Build result
203
+ return {
204
+ name: botName,
205
+ label: metadata.label,
206
+ description: metadata.description,
207
+ dialogs: dialogNames,
208
+ genAiPrompts,
209
+ flows,
210
+ apexActions,
211
+ menuItems,
212
+ mlIntents,
213
+ sobjects: allSObjects,
214
+ dependencies: {
215
+ dialogs: dialogNames,
216
+ genAiPrompts,
217
+ flows,
218
+ apexActions,
219
+ menuItems,
220
+ mlIntents,
221
+ sobjects: allSObjects,
222
+ },
223
+ };
224
+ }
225
+ //# sourceMappingURL=bot-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-parser.js","sourceRoot":"","sources":["../../src/parsers/bot-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AA2C5C;;GAEG;AACH,SAAS,cAAc,CAAI,KAA0B;IACnD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAS,2BAA2B,CAAC,KAAgB;IAKnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,6BAA6B;QAC7B,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC;YACtC,IAAI,UAAU,CAAC,oBAAoB,EAAE,CAAC;gBACpC,QAAQ,UAAU,CAAC,oBAAoB,EAAE,CAAC;oBACxC,KAAK,MAAM;wBACT,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;wBAC5C,MAAM;oBACR,KAAK,MAAM;wBACT,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;wBAClD,MAAM;oBACR,KAAK,QAAQ;wBACX,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;wBACnD,MAAM;oBACR,KAAK,iBAAiB,CAAC;oBACvB,KAAK,yBAAyB,CAAC;oBAC/B,KAAK,SAAS;wBACZ,2CAA2C;wBAC3C,MAAM;gBACV,CAAC;YACH,CAAC;QACH,CAAC;QAED,kDAAkD;QAClD,IAAI,IAAI,CAAC,oBAAoB,EAAE,aAAa,EAAE,CAAC;YAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;YAC3D,IAAI,UAAU,CAAC,oBAAoB,EAAE,CAAC;gBACpC,QAAQ,UAAU,CAAC,oBAAoB,EAAE,CAAC;oBACxC,KAAK,MAAM;wBACT,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;wBAC5C,MAAM;oBACR,KAAK,MAAM;wBACT,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;wBAClD,MAAM;oBACR,KAAK,QAAQ;wBACX,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;wBACnD,MAAM;oBACR,KAAK,iBAAiB,CAAC;oBACvB,KAAK,yBAAyB,CAAC;oBAC/B,KAAK,SAAS;wBACZ,2CAA2C;wBAC3C,MAAM;gBACV,CAAC;YACH,CAAC;QACH,CAAC;QAED,wCAAwC;QACxC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,MAAM,GAAG,2BAA2B,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1E,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;YACxC,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAAC,KAAgB;IAChD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,wCAAwC;QACxC,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC;QAC3D,CAAC;QAED,wCAAwC;QACxC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,QAAQ,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,4BAA4B,CAAC,OAAoB;IAMxD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,eAAe,GAAa,EAAE,CAAC;IACrC,MAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAE9C,sBAAsB;QACtB,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;QAChF,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QACxB,cAAc,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QACpC,eAAe,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;QAEtC,mBAAmB;QACnB,MAAM,QAAQ,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;QACjD,WAAW,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,WAAW,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;QACzC,YAAY,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;QAC3C,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC;KACpC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,QAAgB,EAChB,OAAe;IAEf,qBAAqB;IACrB,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,gBAAgB,EAAE,KAAK;QACvB,mBAAmB,EAAE,IAAI;QACzB,UAAU,EAAE,IAAI;KACjB,CAAC,CAAC;IAEH,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,8BAA8B,QAAQ,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACpG,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,MAAM,IAAI,GAAG,MAA+B,CAAC;IAC7C,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,gCAAgC,QAAQ,4BAA4B,CAAC,CAAC;IACxF,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC;IAE1B,mCAAmC;IACnC,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC1D,UAAU,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;IACrC,CAAC;IAED,uBAAuB;IACvB,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAErE,oDAAoD;IACpD,MAAM,SAAS,GAAG,UAAU;SACzB,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,KAAK,IAAI,CAAC;SACpD,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAEzC,qBAAqB;IACrB,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAE3F,oDAAoD;IACpD,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,4BAA4B,CAAC,UAAU,CAAC,CAAC;IAEhG,+CAA+C;IAC/C,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAChE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;gBACzB,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,MAAM,gBAAgB,GAAG,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACnE,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;QACxC,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;YACzB,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAErE,eAAe;IACf,OAAO;QACL,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,OAAO,EAAE,WAAW;QACpB,YAAY;QACZ,KAAK;QACL,WAAW;QACX,SAAS;QACT,SAAS;QACT,QAAQ,EAAE,WAAW;QACrB,YAAY,EAAE;YACZ,OAAO,EAAE,WAAW;YACpB,YAAY;YACZ,KAAK;YACL,WAAW;YACX,SAAS;YACT,SAAS;YACT,QAAQ,EAAE,WAAW;SACtB;KACF,CAAC;AACJ,CAAC"}