@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,229 @@
1
+ /**
2
+ * Custom Structure Scanner - US-081
3
+ * Support non-standard SFDX project structures
4
+ *
5
+ * @ac US-081-AC-1: Detect custom package directories
6
+ * @ac US-081-AC-2: Support custom naming conventions
7
+ * @ac US-081-AC-3: Handle nested structures
8
+ * @ac US-081-AC-4: Support legacy structures
9
+ * @ac US-081-AC-5: Validate custom paths
10
+ * @ac US-081-AC-6: Generate structure report
11
+ * @issue #81
12
+ */
13
+ import { promises as fs } from 'node:fs';
14
+ import * as path from 'node:path';
15
+ import { getLogger } from '../utils/logger.js';
16
+ const logger = getLogger('CustomStructureScanner');
17
+ /**
18
+ * @ac US-081-AC-1: Detect custom package directories
19
+ */
20
+ export class CustomStructureScanner {
21
+ /**
22
+ * @ac US-081-AC-1: Detect custom package directories
23
+ * Scan for custom package directories
24
+ */
25
+ async detectCustomPackageDirs(projectRoot) {
26
+ logger.info('Detecting custom package directories', { projectRoot });
27
+ const customDirs = [];
28
+ try {
29
+ // Check sfdx-project.json
30
+ const sfdxProjectPath = path.join(projectRoot, 'sfdx-project.json');
31
+ const content = await fs.readFile(sfdxProjectPath, 'utf-8');
32
+ const config = JSON.parse(content);
33
+ if (config.packageDirectories) {
34
+ for (const pkg of config.packageDirectories) {
35
+ if (pkg.path) {
36
+ customDirs.push(pkg.path);
37
+ }
38
+ }
39
+ }
40
+ // Also scan for common patterns
41
+ const commonDirs = ['force-app', 'src', 'main', 'apps', 'packages'];
42
+ const existingCommonDirs = await Promise.all(commonDirs.map(async (dir) => {
43
+ const fullPath = path.join(projectRoot, dir);
44
+ try {
45
+ await fs.access(fullPath);
46
+ return dir;
47
+ }
48
+ catch {
49
+ return undefined;
50
+ }
51
+ }));
52
+ for (const dir of existingCommonDirs) {
53
+ if (dir && !customDirs.includes(dir)) {
54
+ customDirs.push(dir);
55
+ }
56
+ }
57
+ }
58
+ catch (error) {
59
+ logger.warn('Error detecting custom package dirs', {
60
+ error: error instanceof Error ? error.message : String(error),
61
+ });
62
+ }
63
+ logger.info('Custom package directories detected', { count: customDirs.length });
64
+ return customDirs;
65
+ }
66
+ /**
67
+ * @ac US-081-AC-2: Support custom naming conventions
68
+ * Detect naming convention
69
+ */
70
+ detectNamingConvention(directories) {
71
+ const standardPatterns = ['force-app', 'main/default', 'src'];
72
+ const hasStandard = directories.some((dir) => standardPatterns.some((pattern) => dir.includes(pattern)));
73
+ return hasStandard ? 'standard' : 'custom';
74
+ }
75
+ /**
76
+ * @ac US-081-AC-3: Handle nested structures
77
+ * Check if structure is nested
78
+ */
79
+ async isNestedStructure(projectRoot, packageDirs) {
80
+ const nestedResults = await Promise.all(packageDirs.map(async (dir) => {
81
+ const fullPath = path.join(projectRoot, dir);
82
+ try {
83
+ const entries = await fs.readdir(fullPath, { withFileTypes: true });
84
+ const subDirs = entries.filter((e) => e.isDirectory());
85
+ const hasMetadataSubdirs = subDirs.some((d) => ['classes', 'triggers', 'objects', 'lwc', 'aura'].includes(d.name));
86
+ if (hasMetadataSubdirs) {
87
+ return false;
88
+ }
89
+ const nestedMatches = await Promise.all(subDirs.map(async (subDir) => {
90
+ const subPath = path.join(fullPath, subDir.name);
91
+ const subEntries = await fs.readdir(subPath, { withFileTypes: true });
92
+ return subEntries.some((e) => ['classes', 'triggers', 'objects'].includes(e.name));
93
+ }));
94
+ return nestedMatches.some(Boolean);
95
+ }
96
+ catch {
97
+ return false;
98
+ }
99
+ }));
100
+ return nestedResults.some(Boolean);
101
+ }
102
+ /**
103
+ * @ac US-081-AC-4: Support legacy structures
104
+ * Detect legacy structure (Metadata API format)
105
+ */
106
+ async isLegacyStructure(projectRoot) {
107
+ try {
108
+ // Check for package.xml
109
+ await fs.access(path.join(projectRoot, 'package.xml'));
110
+ return true;
111
+ }
112
+ catch {
113
+ // Check for src/ directory (old format)
114
+ try {
115
+ await fs.access(path.join(projectRoot, 'src'));
116
+ // Check if it's really legacy or just a custom dir name
117
+ const packageXml = path.join(projectRoot, 'src', 'package.xml');
118
+ await fs.access(packageXml);
119
+ return true;
120
+ }
121
+ catch {
122
+ return false;
123
+ }
124
+ }
125
+ }
126
+ /**
127
+ * @ac US-081-AC-5: Validate custom paths
128
+ * Validate custom paths exist and are accessible
129
+ */
130
+ async validateCustomPaths(projectRoot, customPaths) {
131
+ const errors = [];
132
+ const validationResults = await Promise.all(Object.entries(customPaths).map(async ([key, customPath]) => {
133
+ const fullPath = path.join(projectRoot, customPath);
134
+ try {
135
+ await fs.access(fullPath);
136
+ return undefined;
137
+ }
138
+ catch {
139
+ return `Custom path not found: ${key} -> ${customPath}`;
140
+ }
141
+ }));
142
+ errors.push(...validationResults.filter((result) => result !== undefined));
143
+ return {
144
+ valid: errors.length === 0,
145
+ errors,
146
+ };
147
+ }
148
+ /**
149
+ * @ac US-081-AC-6: Generate structure report
150
+ * Scan and generate comprehensive structure report
151
+ */
152
+ async scanStructure(projectRoot) {
153
+ logger.info('Scanning custom structure', { projectRoot });
154
+ const packageDirs = await this.detectCustomPackageDirs(projectRoot);
155
+ const namingConvention = this.detectNamingConvention(packageDirs);
156
+ const isNested = await this.isNestedStructure(projectRoot, packageDirs);
157
+ const isLegacy = await this.isLegacyStructure(projectRoot);
158
+ const warnings = [];
159
+ const recommendations = [];
160
+ // Generate warnings
161
+ if (namingConvention === 'custom') {
162
+ warnings.push('Custom naming convention detected - may affect deployment');
163
+ }
164
+ if (isNested) {
165
+ warnings.push('Nested structure detected - ensure proper scanning depth');
166
+ }
167
+ if (isLegacy) {
168
+ warnings.push('Legacy Metadata API format detected');
169
+ recommendations.push('Consider migrating to SFDX source format');
170
+ }
171
+ // Generate recommendations
172
+ if (packageDirs.length === 0) {
173
+ recommendations.push('No package directories found - check sfdx-project.json');
174
+ }
175
+ if (packageDirs.length > 5) {
176
+ recommendations.push('Many package directories - consider consolidating');
177
+ }
178
+ const structure = {
179
+ packageDirs,
180
+ namingConvention,
181
+ isNested,
182
+ isLegacy,
183
+ customPaths: {},
184
+ };
185
+ logger.info('Structure scan complete', {
186
+ packageDirs: packageDirs.length,
187
+ namingConvention,
188
+ isNested,
189
+ isLegacy,
190
+ });
191
+ return {
192
+ structure,
193
+ warnings,
194
+ recommendations,
195
+ };
196
+ }
197
+ /**
198
+ * Format structure report
199
+ */
200
+ formatReport(report) {
201
+ const lines = [];
202
+ lines.push('📂 Project Structure Report');
203
+ lines.push('═══════════════════════════════════════');
204
+ lines.push(`Package Directories: ${report.structure.packageDirs.length}`);
205
+ for (const dir of report.structure.packageDirs) {
206
+ lines.push(` • ${dir}`);
207
+ }
208
+ lines.push('');
209
+ lines.push(`Naming Convention: ${report.structure.namingConvention}`);
210
+ lines.push(`Nested Structure: ${report.structure.isNested ? 'Yes' : 'No'}`);
211
+ lines.push(`Legacy Format: ${report.structure.isLegacy ? 'Yes' : 'No'}`);
212
+ lines.push('');
213
+ if (report.warnings.length > 0) {
214
+ lines.push('⚠️ Warnings:');
215
+ for (const warning of report.warnings) {
216
+ lines.push(` • ${warning}`);
217
+ }
218
+ lines.push('');
219
+ }
220
+ if (report.recommendations.length > 0) {
221
+ lines.push('💡 Recommendations:');
222
+ for (const rec of report.recommendations) {
223
+ lines.push(` • ${rec}`);
224
+ }
225
+ }
226
+ return lines.join('\n');
227
+ }
228
+ }
229
+ //# sourceMappingURL=custom-structure-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-structure-scanner.js","sourceRoot":"","sources":["../../src/scanner/custom-structure-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * .forceignore Parser - US-083
3
+ * Parses and applies .forceignore rules to filter metadata
4
+ *
5
+ * @ac US-083-AC-1: Parse .forceignore syntax
6
+ * @ac US-083-AC-2: Support glob patterns
7
+ * @ac US-083-AC-3: Support negation (!)
8
+ * @ac US-083-AC-4: Support comments (#)
9
+ * @ac US-083-AC-5: Respect .gitignore format
10
+ * @ac US-083-AC-6: Test against file paths
11
+ * @issue #83
12
+ */
13
+ export type ForceIgnoreRule = {
14
+ pattern: string;
15
+ isNegation: boolean;
16
+ lineNumber: number;
17
+ };
18
+ export type ForceIgnoreResult = {
19
+ found: boolean;
20
+ filePath: string;
21
+ rules: ForceIgnoreRule[];
22
+ totalRules: number;
23
+ commentLines: number;
24
+ emptyLines: number;
25
+ };
26
+ /**
27
+ * @ac US-083-AC-1: Parse .forceignore syntax
28
+ * @ac US-083-AC-2: Support glob patterns
29
+ */
30
+ export declare class ForceIgnoreParser {
31
+ private static readonly FORCEIGNORE_FILE;
32
+ private rules;
33
+ private projectRoot;
34
+ /**
35
+ * Load and parse .forceignore file
36
+ */
37
+ load(projectRoot: string): Promise<ForceIgnoreResult>;
38
+ /**
39
+ * @ac US-083-AC-1: Parse .forceignore syntax
40
+ * @ac US-083-AC-3: Support negation (!)
41
+ * @ac US-083-AC-4: Support comments (#)
42
+ */
43
+ private parseContent;
44
+ /**
45
+ * @ac US-083-AC-6: Test against file paths
46
+ * Check if a file path is ignored using minimatch
47
+ */
48
+ isIgnored(filePath: string): boolean;
49
+ /**
50
+ * Filter an array of file paths based on .forceignore rules
51
+ */
52
+ filterPaths(paths: string[]): string[];
53
+ /**
54
+ * Get relative path from project root
55
+ */
56
+ private getRelativePath;
57
+ /**
58
+ * Get all loaded rules
59
+ */
60
+ getRules(): ForceIgnoreRule[];
61
+ /**
62
+ * Check if .forceignore is loaded
63
+ */
64
+ isLoaded(): boolean;
65
+ /**
66
+ * Generate report of loaded rules
67
+ */
68
+ formatReport(result: ForceIgnoreResult): string;
69
+ }
@@ -0,0 +1,195 @@
1
+ /**
2
+ * .forceignore Parser - US-083
3
+ * Parses and applies .forceignore rules to filter metadata
4
+ *
5
+ * @ac US-083-AC-1: Parse .forceignore syntax
6
+ * @ac US-083-AC-2: Support glob patterns
7
+ * @ac US-083-AC-3: Support negation (!)
8
+ * @ac US-083-AC-4: Support comments (#)
9
+ * @ac US-083-AC-5: Respect .gitignore format
10
+ * @ac US-083-AC-6: Test against file paths
11
+ * @issue #83
12
+ */
13
+ import { readFile, access } from 'node:fs/promises';
14
+ import { resolve, relative, sep } from 'node:path';
15
+ import { minimatch } from 'minimatch';
16
+ import { getLogger } from '../utils/logger.js';
17
+ const logger = getLogger('ForceIgnoreParser');
18
+ /**
19
+ * @ac US-083-AC-1: Parse .forceignore syntax
20
+ * @ac US-083-AC-2: Support glob patterns
21
+ */
22
+ export class ForceIgnoreParser {
23
+ static FORCEIGNORE_FILE = '.forceignore';
24
+ rules = [];
25
+ projectRoot = '';
26
+ /**
27
+ * Load and parse .forceignore file
28
+ */
29
+ async load(projectRoot) {
30
+ this.projectRoot = projectRoot;
31
+ const filePath = resolve(projectRoot, ForceIgnoreParser.FORCEIGNORE_FILE);
32
+ const result = {
33
+ found: false,
34
+ filePath,
35
+ rules: [],
36
+ totalRules: 0,
37
+ commentLines: 0,
38
+ emptyLines: 0,
39
+ };
40
+ try {
41
+ await access(filePath);
42
+ result.found = true;
43
+ }
44
+ catch {
45
+ logger.debug('.forceignore not found', { projectRoot });
46
+ return result;
47
+ }
48
+ try {
49
+ const content = await readFile(filePath, 'utf-8');
50
+ const parseResult = this.parseContent(content);
51
+ this.rules = parseResult.rules;
52
+ result.rules = parseResult.rules;
53
+ result.totalRules = parseResult.totalRules;
54
+ result.commentLines = parseResult.commentLines;
55
+ result.emptyLines = parseResult.emptyLines;
56
+ logger.info('.forceignore loaded', {
57
+ rules: result.totalRules,
58
+ comments: result.commentLines,
59
+ });
60
+ return result;
61
+ }
62
+ catch (error) {
63
+ logger.error('Failed to parse .forceignore', { error });
64
+ throw new Error(`Failed to parse .forceignore: ${error instanceof Error ? error.message : String(error)}`);
65
+ }
66
+ }
67
+ /**
68
+ * @ac US-083-AC-1: Parse .forceignore syntax
69
+ * @ac US-083-AC-3: Support negation (!)
70
+ * @ac US-083-AC-4: Support comments (#)
71
+ */
72
+ parseContent(content) {
73
+ const lines = content.split('\n');
74
+ const rules = [];
75
+ let commentLines = 0;
76
+ let emptyLines = 0;
77
+ for (let i = 0; i < lines.length; i++) {
78
+ const line = lines[i].trim();
79
+ const lineNumber = i + 1;
80
+ // Skip empty lines
81
+ if (line.length === 0) {
82
+ emptyLines++;
83
+ continue;
84
+ }
85
+ // Skip comments
86
+ if (line.startsWith('#')) {
87
+ commentLines++;
88
+ continue;
89
+ }
90
+ // Handle negation
91
+ const isNegation = line.startsWith('!');
92
+ const pattern = isNegation ? line.slice(1) : line;
93
+ rules.push({
94
+ pattern,
95
+ isNegation,
96
+ lineNumber,
97
+ });
98
+ }
99
+ return {
100
+ rules,
101
+ totalRules: rules.length,
102
+ commentLines,
103
+ emptyLines,
104
+ };
105
+ }
106
+ /**
107
+ * @ac US-083-AC-6: Test against file paths
108
+ * Check if a file path is ignored using minimatch
109
+ */
110
+ isIgnored(filePath) {
111
+ if (this.rules.length === 0) {
112
+ return false;
113
+ }
114
+ // Get relative path from project root
115
+ const relativePath = this.getRelativePath(filePath);
116
+ let ignored = false;
117
+ // Apply rules in order (later rules override earlier ones)
118
+ for (const rule of this.rules) {
119
+ // Use minimatch for glob matching (industry standard)
120
+ const matches = minimatch(relativePath, rule.pattern, {
121
+ dot: true, // Match dotfiles
122
+ matchBase: true, // Match basename
123
+ });
124
+ if (matches) {
125
+ ignored = !rule.isNegation;
126
+ }
127
+ }
128
+ return ignored;
129
+ }
130
+ /**
131
+ * Filter an array of file paths based on .forceignore rules
132
+ */
133
+ filterPaths(paths) {
134
+ if (this.rules.length === 0) {
135
+ return paths;
136
+ }
137
+ return paths.filter((path) => !this.isIgnored(path));
138
+ }
139
+ /**
140
+ * Get relative path from project root
141
+ */
142
+ getRelativePath(filePath) {
143
+ const absolutePath = resolve(filePath);
144
+ const projectRoot = resolve(this.projectRoot);
145
+ let relativePath = relative(projectRoot, absolutePath);
146
+ // Normalize path separators to forward slashes
147
+ relativePath = relativePath.split(sep).join('/');
148
+ return relativePath;
149
+ }
150
+ /**
151
+ * Get all loaded rules
152
+ */
153
+ getRules() {
154
+ return [...this.rules];
155
+ }
156
+ /**
157
+ * Check if .forceignore is loaded
158
+ */
159
+ isLoaded() {
160
+ return this.rules.length > 0 || this.projectRoot.length > 0;
161
+ }
162
+ /**
163
+ * Generate report of loaded rules
164
+ */
165
+ formatReport(result) {
166
+ const lines = [];
167
+ lines.push('🚫 .forceignore Report');
168
+ lines.push('═══════════════════════════════════════');
169
+ if (!result.found) {
170
+ lines.push('⚠️ .forceignore not found');
171
+ lines.push('💡 All files will be included in deployment');
172
+ return lines.join('\n');
173
+ }
174
+ lines.push(`✅ .forceignore loaded: ${result.filePath}`);
175
+ lines.push('');
176
+ lines.push('📊 Statistics:');
177
+ lines.push(` Active Rules: ${result.totalRules}`);
178
+ lines.push(` Comment Lines: ${result.commentLines}`);
179
+ lines.push(` Empty Lines: ${result.emptyLines}`);
180
+ lines.push('');
181
+ if (result.rules.length > 0) {
182
+ lines.push('📋 Rules:');
183
+ for (const rule of result.rules.slice(0, 20)) {
184
+ // Show first 20
185
+ const prefix = rule.isNegation ? '!' : ' ';
186
+ lines.push(` ${prefix} ${rule.pattern}`);
187
+ }
188
+ if (result.rules.length > 20) {
189
+ lines.push(` ... and ${result.rules.length - 20} more`);
190
+ }
191
+ }
192
+ return lines.join('\n');
193
+ }
194
+ }
195
+ //# sourceMappingURL=forceignore-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forceignore-parser.js","sourceRoot":"","sources":["../../src/scanner/forceignore-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Metadata API Format Scanner - US-080
3
+ * Supports legacy Metadata API format (package.xml + src/)
4
+ *
5
+ * @ac US-080-AC-1: Detect package.xml
6
+ * @ac US-080-AC-2: Scan src/ directory
7
+ * @ac US-080-AC-3: Parse metadata format files
8
+ * @ac US-080-AC-4: Convert to source format internally
9
+ * @ac US-080-AC-5: Handle Documents folder structure
10
+ * @ac US-080-AC-6: Handle DigitalExperience bundles
11
+ * @issue #80
12
+ */
13
+ import type { MetadataComponent } from '../types/metadata.js';
14
+ export type MetadataFormatScanResult = {
15
+ format: 'metadata-api' | 'source-format' | 'mixed';
16
+ packageXmlPath?: string;
17
+ srcDirectory?: string;
18
+ components: MetadataComponent[];
19
+ warnings: string[];
20
+ executionTime: number;
21
+ };
22
+ export type PackageXmlEntry = {
23
+ name: string;
24
+ type: string;
25
+ };
26
+ /**
27
+ * @ac US-080-AC-1: Detect package.xml
28
+ * @ac US-080-AC-2: Scan src/ directory
29
+ */
30
+ export declare class MetadataFormatScanner {
31
+ private readonly errorAggregator;
32
+ /**
33
+ * @ac US-080-AC-1: Detect package.xml
34
+ * Check if project uses Metadata API format
35
+ */
36
+ detectFormat(projectRoot: string): 'metadata-api' | 'source-format' | 'mixed';
37
+ /**
38
+ * @ac US-080-AC-2: Scan src/ directory
39
+ * Scan Metadata API format project
40
+ */
41
+ scan(projectRoot: string): Promise<MetadataFormatScanResult>;
42
+ /**
43
+ * @ac US-080-AC-3: Parse metadata format files
44
+ * Parse package.xml
45
+ */
46
+ private parsePackageXml;
47
+ /**
48
+ * @ac US-080-AC-2: Scan src/ directory
49
+ * @ac US-080-AC-4: Convert to source format internally
50
+ * Scan Metadata API src/ directory
51
+ */
52
+ private scanSrcDirectory;
53
+ /**
54
+ * @ac US-080-AC-3: Parse metadata format files
55
+ * Scan specific metadata type directory
56
+ */
57
+ private scanTypeDirectory;
58
+ /**
59
+ * @ac US-080-AC-5: Handle Documents folder structure
60
+ * @ac US-080-AC-6: Handle DigitalExperience bundles
61
+ * Scan bundle directory (for Documents, DigitalExperience, etc.)
62
+ */
63
+ private scanBundleDirectory;
64
+ /**
65
+ * @ac US-080-AC-4: Convert to source format internally
66
+ * Map Metadata API directory name to MetadataType
67
+ */
68
+ private mapDirectoryToType;
69
+ /**
70
+ * Extract component name from filename
71
+ */
72
+ private extractComponentName;
73
+ /**
74
+ * Get error report
75
+ */
76
+ getErrorReport(): string;
77
+ }