@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,86 @@
1
+ /**
2
+ * Permission Set Parser
3
+ * Parses Salesforce Permission Set metadata files (.permissionset-meta.xml)
4
+ *
5
+ * @ac AC-1: Parse permission set metadata files
6
+ * @ac AC-2: Extract object permissions (CRUD + modify/view all)
7
+ * @ac AC-3: Extract field-level security (FLS) permissions
8
+ * @ac AC-4: Extract Apex class access permissions
9
+ * @ac AC-5: Extract Visualforce page access permissions
10
+ * @ac AC-6: Extract custom permission references
11
+ * @ac AC-7: Extract application visibility settings
12
+ * @ac AC-8: Extract tab visibility settings
13
+ * @ac AC-9: Identify all dependent metadata types
14
+ *
15
+ * @issue #22
16
+ */
17
+ /**
18
+ * Result of parsing a Permission Set file
19
+ */
20
+ export type PermissionSetParseResult = {
21
+ /** Name of the permission set (from filename) */
22
+ name: string;
23
+ /** Permission set label */
24
+ label: string;
25
+ /** Description */
26
+ description?: string;
27
+ /** Whether activation is required */
28
+ hasActivationRequired?: boolean;
29
+ /** License type (e.g., 'Salesforce', 'SalesforcePlatform') */
30
+ license?: string;
31
+ /** Objects with permissions granted */
32
+ objectPermissions: string[];
33
+ /** Fields with FLS permissions granted */
34
+ fieldPermissions: string[];
35
+ /** Apex classes with access granted */
36
+ apexClassAccesses: string[];
37
+ /** Visualforce pages with access granted */
38
+ visualforcePageAccesses: string[];
39
+ /** Custom permissions granted */
40
+ customPermissions: string[];
41
+ /** Applications with visibility settings */
42
+ applicationVisibilities: string[];
43
+ /** Tabs with visibility settings */
44
+ tabSettings: string[];
45
+ /** Custom Metadata Types with access */
46
+ customMetadataTypeAccesses: string[];
47
+ /** Flows with access */
48
+ flowAccesses: string[];
49
+ /** External data sources with access */
50
+ externalDataSourceAccesses: string[];
51
+ /** Custom settings with access */
52
+ customSettingAccesses: string[];
53
+ /** User permissions granted */
54
+ userPermissions: string[];
55
+ /** All dependencies extracted from this permission set */
56
+ dependencies: {
57
+ objects: string[];
58
+ fields: string[];
59
+ apexClasses: string[];
60
+ visualforcePages: string[];
61
+ customPermissions: string[];
62
+ applications: string[];
63
+ tabs: string[];
64
+ customMetadataTypes: string[];
65
+ flows: string[];
66
+ externalDataSources: string[];
67
+ customSettings: string[];
68
+ recordTypes: string[];
69
+ };
70
+ };
71
+ /**
72
+ * Parse a Permission Set metadata XML file
73
+ *
74
+ * @param filePath - Path to the .permissionset-meta.xml file
75
+ * @param permissionSetName - Name of the permission set (typically from filename)
76
+ * @returns Parsed permission set metadata with dependencies
77
+ *
78
+ * @example
79
+ * const result = await parsePermissionSet(
80
+ * 'force-app/main/default/permissionsets/Sales_User.permissionset-meta.xml',
81
+ * 'Sales_User'
82
+ * );
83
+ * console.log(result.objectPermissions); // ['Account', 'Contact', 'Opportunity']
84
+ * console.log(result.dependencies.apexClasses); // ['AccountService', 'OpportunityHandler']
85
+ */
86
+ export declare function parsePermissionSet(filePath: string, permissionSetName: string): Promise<PermissionSetParseResult>;
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Permission Set Parser
3
+ * Parses Salesforce Permission Set metadata files (.permissionset-meta.xml)
4
+ *
5
+ * @ac AC-1: Parse permission set metadata files
6
+ * @ac AC-2: Extract object permissions (CRUD + modify/view all)
7
+ * @ac AC-3: Extract field-level security (FLS) permissions
8
+ * @ac AC-4: Extract Apex class access permissions
9
+ * @ac AC-5: Extract Visualforce page access permissions
10
+ * @ac AC-6: Extract custom permission references
11
+ * @ac AC-7: Extract application visibility settings
12
+ * @ac AC-8: Extract tab visibility settings
13
+ * @ac AC-9: Identify all dependent metadata types
14
+ *
15
+ * @issue #22
16
+ */
17
+ import { readFile } from 'node:fs/promises';
18
+ import { XMLParser } from 'fast-xml-parser';
19
+ /**
20
+ * Normalize value to array (handles XML parser returning single object vs array)
21
+ */
22
+ function normalizeArray(value) {
23
+ if (!value)
24
+ return [];
25
+ return Array.isArray(value) ? value : [value];
26
+ }
27
+ /**
28
+ * Parse a Permission Set metadata XML file
29
+ *
30
+ * @param filePath - Path to the .permissionset-meta.xml file
31
+ * @param permissionSetName - Name of the permission set (typically from filename)
32
+ * @returns Parsed permission set metadata with dependencies
33
+ *
34
+ * @example
35
+ * const result = await parsePermissionSet(
36
+ * 'force-app/main/default/permissionsets/Sales_User.permissionset-meta.xml',
37
+ * 'Sales_User'
38
+ * );
39
+ * console.log(result.objectPermissions); // ['Account', 'Contact', 'Opportunity']
40
+ * console.log(result.dependencies.apexClasses); // ['AccountService', 'OpportunityHandler']
41
+ */
42
+ export async function parsePermissionSet(filePath, permissionSetName) {
43
+ // Read and parse XML
44
+ const xmlContent = await readFile(filePath, 'utf-8');
45
+ const parser = new XMLParser({
46
+ ignoreAttributes: false,
47
+ parseAttributeValue: true,
48
+ trimValues: true,
49
+ });
50
+ let parsed;
51
+ try {
52
+ parsed = parser.parse(xmlContent);
53
+ }
54
+ catch (error) {
55
+ throw new Error(`Failed to parse Permission Set XML at ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
56
+ }
57
+ // Type assertion with validation
58
+ const root = parsed;
59
+ if (!root.PermissionSet) {
60
+ throw new Error(`Invalid Permission Set XML structure at ${filePath}: missing PermissionSet root element`);
61
+ }
62
+ const metadata = root.PermissionSet;
63
+ // Normalize arrays
64
+ const objectPermissions = normalizeArray(metadata.objectPermissions);
65
+ const fieldPermissions = normalizeArray(metadata.fieldPermissions);
66
+ const classAccesses = normalizeArray(metadata.classAccesses);
67
+ const pageAccesses = normalizeArray(metadata.pageAccesses);
68
+ const customPermissions = normalizeArray(metadata.customPermissions);
69
+ const applicationVisibilities = normalizeArray(metadata.applicationVisibilities);
70
+ const tabSettings = normalizeArray(metadata.tabSettings);
71
+ const customMetadataTypeAccesses = normalizeArray(metadata.customMetadataTypeAccesses);
72
+ const flowAccesses = normalizeArray(metadata.flowAccesses);
73
+ const externalDataSourceAccesses = normalizeArray(metadata.externalDataSourceAccesses);
74
+ const customSettingAccesses = normalizeArray(metadata.customSettingAccesses);
75
+ const userPermissions = normalizeArray(metadata.userPermissions);
76
+ const recordTypeVisibilities = normalizeArray(metadata.recordTypeVisibilities);
77
+ // Extract object names
78
+ const objectNames = objectPermissions.map((perm) => perm.object);
79
+ // Extract field names (format: ObjectName.FieldName)
80
+ const fieldNames = fieldPermissions.map((perm) => perm.field);
81
+ // Extract Apex class names
82
+ const apexClassNames = classAccesses.map((access) => access.apexClass);
83
+ // Extract Visualforce page names
84
+ const visualforcePageNames = pageAccesses.map((access) => access.apexPage);
85
+ // Extract custom permission names
86
+ const customPermissionNames = customPermissions
87
+ .filter((perm) => perm.enabled)
88
+ .map((perm) => perm.name);
89
+ // Extract application names
90
+ const applicationNames = applicationVisibilities.map((app) => app.application);
91
+ // Extract tab names
92
+ const tabNames = tabSettings.map((tab) => tab.tab);
93
+ // Extract custom metadata type names
94
+ const customMetadataTypeNames = customMetadataTypeAccesses
95
+ .filter((access) => access.enabled)
96
+ .map((access) => access.name);
97
+ // Extract flow names
98
+ const flowNames = flowAccesses
99
+ .filter((access) => access.enabled)
100
+ .map((access) => access.flow);
101
+ // Extract external data source names
102
+ const externalDataSourceNames = externalDataSourceAccesses
103
+ .filter((access) => access.enabled)
104
+ .map((access) => access.externalDataSource);
105
+ // Extract custom setting names
106
+ const customSettingNames = customSettingAccesses
107
+ .filter((access) => access.enabled)
108
+ .map((access) => access.name);
109
+ // Extract user permission names
110
+ const userPermissionNames = userPermissions
111
+ .filter((perm) => perm.enabled)
112
+ .map((perm) => perm.name);
113
+ // Extract record type names
114
+ const recordTypeNames = recordTypeVisibilities
115
+ .filter((rt) => rt.visible)
116
+ .map((rt) => rt.recordType);
117
+ // Build result
118
+ return {
119
+ name: permissionSetName,
120
+ label: metadata.label,
121
+ description: metadata.description,
122
+ hasActivationRequired: metadata.hasActivationRequired,
123
+ license: metadata.license,
124
+ objectPermissions: objectNames,
125
+ fieldPermissions: fieldNames,
126
+ apexClassAccesses: apexClassNames,
127
+ visualforcePageAccesses: visualforcePageNames,
128
+ customPermissions: customPermissionNames,
129
+ applicationVisibilities: applicationNames,
130
+ tabSettings: tabNames,
131
+ customMetadataTypeAccesses: customMetadataTypeNames,
132
+ flowAccesses: flowNames,
133
+ externalDataSourceAccesses: externalDataSourceNames,
134
+ customSettingAccesses: customSettingNames,
135
+ userPermissions: userPermissionNames,
136
+ dependencies: {
137
+ objects: objectNames,
138
+ fields: fieldNames,
139
+ apexClasses: apexClassNames,
140
+ visualforcePages: visualforcePageNames,
141
+ customPermissions: customPermissionNames,
142
+ applications: applicationNames,
143
+ tabs: tabNames,
144
+ customMetadataTypes: customMetadataTypeNames,
145
+ flows: flowNames,
146
+ externalDataSources: externalDataSourceNames,
147
+ customSettings: customSettingNames,
148
+ recordTypes: recordTypeNames,
149
+ },
150
+ };
151
+ }
152
+ //# sourceMappingURL=permission-set-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-set-parser.js","sourceRoot":"","sources":["../../src/parsers/permission-set-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AA0D5C;;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;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAgB,EAChB,iBAAyB;IAEzB,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,yCAAyC,QAAQ,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC/G,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,MAAM,IAAI,GAAG,MAAmD,CAAC;IACjE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,2CAA2C,QAAQ,sCAAsC,CAAC,CAAC;IAC7G,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;IAEpC,mBAAmB;IACnB,MAAM,iBAAiB,GAAG,cAAc,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IACrE,MAAM,gBAAgB,GAAG,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACnE,MAAM,aAAa,GAAG,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC7D,MAAM,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC3D,MAAM,iBAAiB,GAAG,cAAc,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IACrE,MAAM,uBAAuB,GAAG,cAAc,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAC;IACjF,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACzD,MAAM,0BAA0B,GAAG,cAAc,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;IACvF,MAAM,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC3D,MAAM,0BAA0B,GAAG,cAAc,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;IACvF,MAAM,qBAAqB,GAAG,cAAc,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IAC7E,MAAM,eAAe,GAAG,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACjE,MAAM,sBAAsB,GAAG,cAAc,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IAE/E,uBAAuB;IACvB,MAAM,WAAW,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEjE,qDAAqD;IACrD,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE9D,2BAA2B;IAC3B,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEvE,iCAAiC;IACjC,MAAM,oBAAoB,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE3E,kCAAkC;IAClC,MAAM,qBAAqB,GAAG,iBAAiB;SAC5C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;SAC9B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5B,4BAA4B;IAC5B,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAE/E,oBAAoB;IACpB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEnD,qCAAqC;IACrC,MAAM,uBAAuB,GAAG,0BAA0B;SACvD,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;SAClC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEhC,qBAAqB;IACrB,MAAM,SAAS,GAAG,YAAY;SAC3B,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;SAClC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEhC,qCAAqC;IACrC,MAAM,uBAAuB,GAAG,0BAA0B;SACvD,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;SAClC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAE9C,+BAA+B;IAC/B,MAAM,kBAAkB,GAAG,qBAAqB;SAC7C,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;SAClC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEhC,gCAAgC;IAChC,MAAM,mBAAmB,GAAG,eAAe;SACxC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;SAC9B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE5B,4BAA4B;IAC5B,MAAM,eAAe,GAAG,sBAAsB;SAC3C,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC;SAC1B,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IAE9B,eAAe;IACf,OAAO;QACL,IAAI,EAAE,iBAAiB;QACvB,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;QACrD,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,iBAAiB,EAAE,WAAW;QAC9B,gBAAgB,EAAE,UAAU;QAC5B,iBAAiB,EAAE,cAAc;QACjC,uBAAuB,EAAE,oBAAoB;QAC7C,iBAAiB,EAAE,qBAAqB;QACxC,uBAAuB,EAAE,gBAAgB;QACzC,WAAW,EAAE,QAAQ;QACrB,0BAA0B,EAAE,uBAAuB;QACnD,YAAY,EAAE,SAAS;QACvB,0BAA0B,EAAE,uBAAuB;QACnD,qBAAqB,EAAE,kBAAkB;QACzC,eAAe,EAAE,mBAAmB;QACpC,YAAY,EAAE;YACZ,OAAO,EAAE,WAAW;YACpB,MAAM,EAAE,UAAU;YAClB,WAAW,EAAE,cAAc;YAC3B,gBAAgB,EAAE,oBAAoB;YACtC,iBAAiB,EAAE,qBAAqB;YACxC,YAAY,EAAE,gBAAgB;YAC9B,IAAI,EAAE,QAAQ;YACd,mBAAmB,EAAE,uBAAuB;YAC5C,KAAK,EAAE,SAAS;YAChB,mBAAmB,EAAE,uBAAuB;YAC5C,cAAc,EAAE,kBAAkB;YAClC,WAAW,EAAE,eAAe;SAC7B;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Profile Parser
3
+ * Parses Salesforce Profile metadata files (.profile-meta.xml)
4
+ *
5
+ * @ac US-020-AC-1: Extract object permissions (CRUD + modify/view all)
6
+ * @ac US-020-AC-2: Extract field-level security (FLS) permissions
7
+ * @ac US-020-AC-3: Extract Apex class access permissions
8
+ * @ac US-020-AC-4: Extract page layout assignments
9
+ * @ac US-020-AC-5: Extract record type visibility
10
+ * @ac US-020-AC-6: Extract application assignments
11
+ * @ac US-020-AC-7: Link to all dependent metadata
12
+ *
13
+ * @issue #20
14
+ */
15
+ /**
16
+ * Result of parsing a Profile file
17
+ */
18
+ export type ProfileParseResult = {
19
+ /** Name of the profile (from filename) */
20
+ name: string;
21
+ /** Whether this is a custom profile */
22
+ custom: boolean;
23
+ /** Description */
24
+ description?: string;
25
+ /** User license */
26
+ userLicense?: string;
27
+ /** Objects with permissions granted */
28
+ objectPermissions: string[];
29
+ /** Fields with FLS permissions granted */
30
+ fieldPermissions: string[];
31
+ /** Apex classes with access granted */
32
+ apexClassAccesses: string[];
33
+ /** Visualforce pages with access granted */
34
+ visualforcePageAccesses: string[];
35
+ /** Page layout assignments */
36
+ layoutAssignments: string[];
37
+ /** Record types with visibility */
38
+ recordTypeVisibilities: string[];
39
+ /** Applications assigned */
40
+ applicationVisibilities: string[];
41
+ /** Tabs with visibility settings */
42
+ tabVisibilities: string[];
43
+ /** Custom permissions granted */
44
+ customPermissions: string[];
45
+ /** Custom Metadata Types with access */
46
+ customMetadataTypeAccesses: string[];
47
+ /** Flows with access */
48
+ flowAccesses: string[];
49
+ /** User permissions granted */
50
+ userPermissions: string[];
51
+ /** All dependencies extracted from this profile */
52
+ dependencies: {
53
+ objects: string[];
54
+ fields: string[];
55
+ apexClasses: string[];
56
+ visualforcePages: string[];
57
+ layouts: string[];
58
+ recordTypes: string[];
59
+ applications: string[];
60
+ tabs: string[];
61
+ customPermissions: string[];
62
+ customMetadataTypes: string[];
63
+ flows: string[];
64
+ };
65
+ };
66
+ /**
67
+ * Parse a Profile metadata XML file
68
+ *
69
+ * @param filePath - Path to the .profile-meta.xml file
70
+ * @param profileName - Name of the profile (typically from filename)
71
+ * @returns Parsed profile metadata with dependencies
72
+ *
73
+ * @example
74
+ * const result = await parseProfile(
75
+ * 'force-app/main/default/profiles/Admin.profile-meta.xml',
76
+ * 'Admin'
77
+ * );
78
+ * console.log(result.objectPermissions); // ['Account', 'Contact', 'Opportunity']
79
+ * console.log(result.dependencies.apexClasses); // ['AccountService', 'OpportunityHandler']
80
+ */
81
+ export declare function parseProfile(filePath: string, profileName: string): Promise<ProfileParseResult>;
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Profile Parser
3
+ * Parses Salesforce Profile metadata files (.profile-meta.xml)
4
+ *
5
+ * @ac US-020-AC-1: Extract object permissions (CRUD + modify/view all)
6
+ * @ac US-020-AC-2: Extract field-level security (FLS) permissions
7
+ * @ac US-020-AC-3: Extract Apex class access permissions
8
+ * @ac US-020-AC-4: Extract page layout assignments
9
+ * @ac US-020-AC-5: Extract record type visibility
10
+ * @ac US-020-AC-6: Extract application assignments
11
+ * @ac US-020-AC-7: Link to all dependent metadata
12
+ *
13
+ * @issue #20
14
+ */
15
+ import { readFile } from 'node:fs/promises';
16
+ import { XMLParser } from 'fast-xml-parser';
17
+ /**
18
+ * Normalize value to array (handles XML parser returning single object vs array)
19
+ */
20
+ function normalizeArray(value) {
21
+ if (!value)
22
+ return [];
23
+ return Array.isArray(value) ? value : [value];
24
+ }
25
+ /**
26
+ * Parse a Profile metadata XML file
27
+ *
28
+ * @param filePath - Path to the .profile-meta.xml file
29
+ * @param profileName - Name of the profile (typically from filename)
30
+ * @returns Parsed profile metadata with dependencies
31
+ *
32
+ * @example
33
+ * const result = await parseProfile(
34
+ * 'force-app/main/default/profiles/Admin.profile-meta.xml',
35
+ * 'Admin'
36
+ * );
37
+ * console.log(result.objectPermissions); // ['Account', 'Contact', 'Opportunity']
38
+ * console.log(result.dependencies.apexClasses); // ['AccountService', 'OpportunityHandler']
39
+ */
40
+ export async function parseProfile(filePath, profileName) {
41
+ // Read and parse XML
42
+ const xmlContent = await readFile(filePath, 'utf-8');
43
+ const parser = new XMLParser({
44
+ ignoreAttributes: false,
45
+ parseAttributeValue: true,
46
+ trimValues: true,
47
+ });
48
+ let parsed;
49
+ try {
50
+ parsed = parser.parse(xmlContent);
51
+ }
52
+ catch (error) {
53
+ throw new Error(`Failed to parse Profile XML at ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
54
+ }
55
+ // Type assertion with validation
56
+ const root = parsed;
57
+ if (!root.Profile) {
58
+ throw new Error(`Invalid Profile XML structure at ${filePath}: missing Profile root element`);
59
+ }
60
+ const metadata = root.Profile;
61
+ // Normalize arrays
62
+ const objectPermissions = normalizeArray(metadata.objectPermissions);
63
+ const fieldPermissions = normalizeArray(metadata.fieldPermissions);
64
+ const classAccesses = normalizeArray(metadata.classAccesses);
65
+ const pageAccesses = normalizeArray(metadata.pageAccesses);
66
+ const layoutAssignments = normalizeArray(metadata.layoutAssignments);
67
+ const recordTypeVisibilities = normalizeArray(metadata.recordTypeVisibilities);
68
+ const applicationVisibilities = normalizeArray(metadata.applicationVisibilities);
69
+ const tabVisibilities = normalizeArray(metadata.tabVisibilities);
70
+ const customPermissions = normalizeArray(metadata.customPermissions);
71
+ const customMetadataTypeAccesses = normalizeArray(metadata.customMetadataTypeAccesses);
72
+ const flowAccesses = normalizeArray(metadata.flowAccesses);
73
+ const userPermissions = normalizeArray(metadata.userPermissions);
74
+ // Extract object names
75
+ const objectNames = objectPermissions.map((perm) => perm.object);
76
+ // Extract field names (format: ObjectName.FieldName)
77
+ const fieldNames = fieldPermissions.map((perm) => perm.field);
78
+ // Extract Apex class names
79
+ const apexClassNames = classAccesses.map((access) => access.apexClass);
80
+ // Extract Visualforce page names
81
+ const visualforcePageNames = pageAccesses.map((access) => access.apexPage);
82
+ // Extract layout names
83
+ const layoutNames = layoutAssignments.map((assignment) => assignment.layout);
84
+ // Extract record type names
85
+ const recordTypeNames = recordTypeVisibilities
86
+ .filter((rt) => rt.visible)
87
+ .map((rt) => rt.recordType);
88
+ // Extract application names
89
+ const applicationNames = applicationVisibilities.map((app) => app.application);
90
+ // Extract tab names
91
+ const tabNames = tabVisibilities.map((tab) => tab.tab);
92
+ // Extract custom permission names
93
+ const customPermissionNames = customPermissions
94
+ .filter((perm) => perm.enabled)
95
+ .map((perm) => perm.name);
96
+ // Extract custom metadata type names
97
+ const customMetadataTypeNames = customMetadataTypeAccesses
98
+ .filter((access) => access.enabled)
99
+ .map((access) => access.name);
100
+ // Extract flow names
101
+ const flowNames = flowAccesses
102
+ .filter((access) => access.enabled)
103
+ .map((access) => access.flow);
104
+ // Extract user permission names
105
+ const userPermissionNames = userPermissions
106
+ .filter((perm) => perm.enabled)
107
+ .map((perm) => perm.name);
108
+ // Build result
109
+ return {
110
+ name: profileName,
111
+ custom: metadata.custom ?? false,
112
+ description: metadata.description,
113
+ userLicense: metadata.userLicense,
114
+ objectPermissions: objectNames,
115
+ fieldPermissions: fieldNames,
116
+ apexClassAccesses: apexClassNames,
117
+ visualforcePageAccesses: visualforcePageNames,
118
+ layoutAssignments: layoutNames,
119
+ recordTypeVisibilities: recordTypeNames,
120
+ applicationVisibilities: applicationNames,
121
+ tabVisibilities: tabNames,
122
+ customPermissions: customPermissionNames,
123
+ customMetadataTypeAccesses: customMetadataTypeNames,
124
+ flowAccesses: flowNames,
125
+ userPermissions: userPermissionNames,
126
+ dependencies: {
127
+ objects: objectNames,
128
+ fields: fieldNames,
129
+ apexClasses: apexClassNames,
130
+ visualforcePages: visualforcePageNames,
131
+ layouts: layoutNames,
132
+ recordTypes: recordTypeNames,
133
+ applications: applicationNames,
134
+ tabs: tabNames,
135
+ customPermissions: customPermissionNames,
136
+ customMetadataTypes: customMetadataTypeNames,
137
+ flows: flowNames,
138
+ },
139
+ };
140
+ }
141
+ //# sourceMappingURL=profile-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-parser.js","sourceRoot":"","sources":["../../src/parsers/profile-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Visualforce dependency types
3
+ */
4
+ export type VisualforceDependencyType = 'apex_controller' | 'apex_extension' | 'vf_component' | 'standard_controller' | 'custom_component';
5
+ /**
6
+ * Represents a dependency found in a Visualforce page/component
7
+ */
8
+ export type VisualforceDependency = {
9
+ type: VisualforceDependencyType;
10
+ name: string;
11
+ namespace?: string;
12
+ };
13
+ /**
14
+ * Result of parsing a Visualforce page/component
15
+ */
16
+ export type VisualforceParseResult = {
17
+ name: string;
18
+ type: 'page' | 'component';
19
+ apexController?: string;
20
+ apexExtensions: string[];
21
+ standardController?: string;
22
+ recordSetVar?: string;
23
+ components: string[];
24
+ dependencies: VisualforceDependency[];
25
+ };
26
+ /**
27
+ * Parse a Visualforce page or component and extract dependencies
28
+ *
29
+ * @param fileName - Name of the Visualforce file (with extension)
30
+ * @param vfContent - Content of the Visualforce file
31
+ * @returns VisualforceParseResult with all extracted dependencies
32
+ *
33
+ * @throws {ParsingError} If the file cannot be parsed or has invalid extension
34
+ *
35
+ * @ac US-018-AC-5: Parse both pages and components
36
+ * @ac US-018-AC-6: Validate file extension (.page or .component)
37
+ * @ac US-018-AC-7: Handle namespace prefixes in controllers and components
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * const result = parseVisualforce('MyPage.page', vfContent);
42
+ * console.log(result.apexController); // 'MyController'
43
+ * console.log(result.components); // ['c:MyComponent']
44
+ * console.log(result.standardController); // 'Account'
45
+ * ```
46
+ */
47
+ export declare function parseVisualforce(fileName: string, vfContent: string): VisualforceParseResult;