@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,267 @@
1
+ /**
2
+ * Layout Parser
3
+ * Parses Salesforce Page Layout metadata files (.layout-meta.xml)
4
+ *
5
+ * @ac AC-1: Extract related object (from filename)
6
+ * @ac AC-2: Extract custom button references
7
+ * @ac AC-3: Extract Visualforce page references
8
+ * @ac AC-4: Extract field references
9
+ * @ac AC-5: Extract related list references
10
+ * @ac AC-6: Link to dependent metadata
11
+ *
12
+ * @issue #21
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 object name from layout filename
26
+ * Examples:
27
+ * 'Account-Account Layout' -> 'Account'
28
+ * 'CustomObject__c-Custom Layout' -> 'CustomObject__c'
29
+ */
30
+ function extractObjectFromLayoutName(layoutName) {
31
+ const parts = layoutName.split('-');
32
+ return parts[0] || layoutName;
33
+ }
34
+ /**
35
+ * Extract custom buttons from layout and related lists
36
+ */
37
+ function extractCustomButtons(metadata) {
38
+ const layoutCustomButtons = normalizeArray(metadata.customButtons);
39
+ const relatedListCustomButtons = [];
40
+ const relatedLists = normalizeArray(metadata.relatedLists);
41
+ for (const relatedList of relatedLists) {
42
+ const buttons = normalizeArray(relatedList.customButtons);
43
+ relatedListCustomButtons.push(...buttons);
44
+ }
45
+ return [...new Set([...layoutCustomButtons, ...relatedListCustomButtons])];
46
+ }
47
+ /**
48
+ * Extract Visualforce pages from layout sections
49
+ */
50
+ function extractVFPagesFromSections(sections) {
51
+ const pages = [];
52
+ for (const section of sections) {
53
+ const columns = normalizeArray(section.layoutColumns);
54
+ for (const column of columns) {
55
+ const items = normalizeArray(column.layoutItems);
56
+ for (const item of items) {
57
+ if (item.page) {
58
+ pages.push(item.page);
59
+ }
60
+ }
61
+ }
62
+ }
63
+ return pages;
64
+ }
65
+ /**
66
+ * Extract Visualforce pages from feed layout
67
+ */
68
+ function extractVFPagesFromFeedLayout(feedLayout) {
69
+ if (!feedLayout)
70
+ return [];
71
+ const pages = [];
72
+ const leftComponents = normalizeArray(feedLayout.leftComponents);
73
+ const rightComponents = normalizeArray(feedLayout.rightComponents);
74
+ for (const component of [...leftComponents, ...rightComponents]) {
75
+ if (component.componentType === 'Visualforce' && component.page) {
76
+ pages.push(component.page);
77
+ }
78
+ }
79
+ return pages;
80
+ }
81
+ /**
82
+ * Extract fields from layout sections
83
+ */
84
+ function extractFieldsFromSections(sections) {
85
+ const fields = [];
86
+ for (const section of sections) {
87
+ const columns = normalizeArray(section.layoutColumns);
88
+ for (const column of columns) {
89
+ const items = normalizeArray(column.layoutItems);
90
+ for (const item of items) {
91
+ if (item.field) {
92
+ fields.push(item.field);
93
+ }
94
+ }
95
+ }
96
+ }
97
+ return fields;
98
+ }
99
+ /**
100
+ * Extract fields from various layout components
101
+ */
102
+ function extractFields(metadata, layoutSections) {
103
+ const fields = [];
104
+ // From sections
105
+ fields.push(...extractFieldsFromSections(layoutSections));
106
+ // From related lists
107
+ const relatedLists = normalizeArray(metadata.relatedLists);
108
+ for (const relatedList of relatedLists) {
109
+ const listFields = normalizeArray(relatedList.fields);
110
+ fields.push(...listFields);
111
+ }
112
+ // From mini layout
113
+ if (metadata.miniLayout) {
114
+ const miniFields = normalizeArray(metadata.miniLayout.fields);
115
+ fields.push(...miniFields);
116
+ }
117
+ // From summary layout
118
+ if (metadata.summaryLayout) {
119
+ const summaryItems = normalizeArray(metadata.summaryLayout.summaryLayoutItems);
120
+ for (const item of summaryItems) {
121
+ if (item.field) {
122
+ fields.push(item.field);
123
+ }
124
+ }
125
+ }
126
+ return [...new Set(fields)];
127
+ }
128
+ /**
129
+ * Extract quick actions from layout
130
+ */
131
+ function extractQuickActions(metadata) {
132
+ const quickActions = [];
133
+ if (metadata.quickActionList) {
134
+ const quickActionItems = normalizeArray(metadata.quickActionList.quickActionListItems);
135
+ quickActions.push(...quickActionItems.map((item) => item.quickActionName));
136
+ }
137
+ if (metadata.platformActionList) {
138
+ const actionItems = normalizeArray(metadata.platformActionList.platformActionListItems);
139
+ for (const item of actionItems) {
140
+ if (item.actionType === 'QuickAction') {
141
+ quickActions.push(item.actionName);
142
+ }
143
+ }
144
+ }
145
+ return [...new Set(quickActions)];
146
+ }
147
+ /**
148
+ * Extract canvas apps from layout sections
149
+ */
150
+ function extractCanvasApps(sections) {
151
+ const apps = [];
152
+ for (const section of sections) {
153
+ const columns = normalizeArray(section.layoutColumns);
154
+ for (const column of columns) {
155
+ const items = normalizeArray(column.layoutItems);
156
+ for (const item of items) {
157
+ if (item.canvas) {
158
+ apps.push(item.canvas);
159
+ }
160
+ }
161
+ }
162
+ }
163
+ return [...new Set(apps)];
164
+ }
165
+ /**
166
+ * Extract custom links from layout
167
+ */
168
+ function extractCustomLinks(metadata, layoutSections) {
169
+ const links = [];
170
+ // From layout sections
171
+ for (const section of layoutSections) {
172
+ const columns = normalizeArray(section.layoutColumns);
173
+ for (const column of columns) {
174
+ const items = normalizeArray(column.layoutItems);
175
+ for (const item of items) {
176
+ if (item.customLink) {
177
+ links.push(item.customLink);
178
+ }
179
+ }
180
+ }
181
+ }
182
+ // From summary layout
183
+ if (metadata.summaryLayout) {
184
+ const summaryItems = normalizeArray(metadata.summaryLayout.summaryLayoutItems);
185
+ for (const item of summaryItems) {
186
+ if (item.customLink) {
187
+ links.push(item.customLink);
188
+ }
189
+ }
190
+ }
191
+ return [...new Set(links)];
192
+ }
193
+ /**
194
+ * Parse a Layout metadata XML file
195
+ *
196
+ * @param filePath - Path to the .layout-meta.xml file
197
+ * @param layoutName - Name of the layout (typically from filename without extension)
198
+ * @returns Parsed layout metadata with dependencies
199
+ *
200
+ * @example
201
+ * const result = await parseLayout(
202
+ * 'force-app/main/default/layouts/Account-Account Layout.layout-meta.xml',
203
+ * 'Account-Account Layout'
204
+ * );
205
+ * console.log(result.object); // 'Account'
206
+ * console.log(result.customButtons); // ['New_Custom_Button', 'Edit_Button']
207
+ * console.log(result.dependencies.visualforcePages); // ['AccountDashboard']
208
+ */
209
+ export async function parseLayout(filePath, layoutName) {
210
+ // Read and parse XML
211
+ const xmlContent = await readFile(filePath, 'utf-8');
212
+ const parser = new XMLParser({
213
+ ignoreAttributes: false,
214
+ parseAttributeValue: true,
215
+ trimValues: true,
216
+ });
217
+ let parsed;
218
+ try {
219
+ parsed = parser.parse(xmlContent);
220
+ }
221
+ catch (error) {
222
+ throw new Error(`Failed to parse Layout XML at ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
223
+ }
224
+ // Type assertion with validation
225
+ const root = parsed;
226
+ if (!root.Layout) {
227
+ throw new Error(`Invalid Layout XML structure at ${filePath}: missing Layout root element`);
228
+ }
229
+ const metadata = root.Layout;
230
+ // Extract object name from layout name
231
+ const objectName = extractObjectFromLayoutName(layoutName);
232
+ // Extract dependencies using helper functions
233
+ const layoutSections = normalizeArray(metadata.layoutSections);
234
+ const relatedLists = normalizeArray(metadata.relatedLists);
235
+ const customButtons = extractCustomButtons(metadata);
236
+ const vfPagesFromSections = extractVFPagesFromSections(layoutSections);
237
+ const vfPagesFromFeed = extractVFPagesFromFeedLayout(metadata.feedLayout);
238
+ const visualforcePages = [...new Set([...vfPagesFromSections, ...vfPagesFromFeed])];
239
+ const fields = extractFields(metadata, layoutSections);
240
+ const relatedListNames = relatedLists.map((list) => list.relatedList);
241
+ const quickActions = extractQuickActions(metadata);
242
+ const canvasApps = extractCanvasApps(layoutSections);
243
+ const customLinks = extractCustomLinks(metadata, layoutSections);
244
+ // Build result
245
+ return {
246
+ name: layoutName,
247
+ object: objectName,
248
+ customButtons,
249
+ visualforcePages,
250
+ fields,
251
+ relatedLists: [...new Set(relatedListNames)],
252
+ quickActions,
253
+ canvasApps,
254
+ customLinks,
255
+ dependencies: {
256
+ object: objectName,
257
+ customButtons,
258
+ visualforcePages,
259
+ fields,
260
+ relatedLists: [...new Set(relatedListNames)],
261
+ quickActions,
262
+ canvasApps,
263
+ customLinks,
264
+ },
265
+ };
266
+ }
267
+ //# sourceMappingURL=layout-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-parser.js","sourceRoot":"","sources":["../../src/parsers/layout-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import type { LWCMetadata } from '../types/salesforce/lwc.js';
2
+ /**
3
+ * LWC dependency types
4
+ */
5
+ export type LWCDependencyType = 'apex_import' | 'lwc_import' | 'wire_adapter' | 'api_property' | 'navigation';
6
+ /**
7
+ * Represents a dependency found in an LWC
8
+ */
9
+ export type LWCDependency = {
10
+ type: LWCDependencyType;
11
+ name: string;
12
+ source?: string;
13
+ isTypeScript?: boolean;
14
+ };
15
+ /**
16
+ * Result of parsing an LWC
17
+ * Includes metadata from js-meta.xml
18
+ */
19
+ export type LWCParseResult = {
20
+ componentName: string;
21
+ isTypeScript: boolean;
22
+ apexImports: string[];
23
+ lwcImports: string[];
24
+ wireAdapters: string[];
25
+ apiProperties: string[];
26
+ navigationRefs: string[];
27
+ dependencies: LWCDependency[];
28
+ hasMetadataXml: boolean;
29
+ metadata?: LWCMetadata;
30
+ };
31
+ /**
32
+ * Parse LWC js-meta.xml file
33
+ *
34
+ * @ac US-016-AC-8: Parse js-meta.xml correctly
35
+ * @deprecated - Will be refactored to return LWCMetadata type
36
+ *
37
+ * TODO: Refactor this function to properly parse and return LWCMetadata type
38
+ * Currently commented out to avoid unused variable warnings during refactoring
39
+ */
40
+ /**
41
+ * Parse a Lightning Web Component and extract dependencies
42
+ *
43
+ * @param componentName - Name of the LWC component
44
+ * @param jsCode - JavaScript/TypeScript code of the component
45
+ * @param metadataXml - Optional js-meta.xml content
46
+ * @returns LWCParseResult with all extracted dependencies
47
+ *
48
+ * @throws {ParsingError} If the component cannot be parsed
49
+ *
50
+ * @ac US-016-AC-7: Validate bundle structure (js, html, xml)
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * const result = parseLWC('myComponent', jsCode, metadataXml);
55
+ * console.log(result.apexImports); // ['AccountController.getAccounts']
56
+ * console.log(result.lwcImports); // ['baseComponent', 'utilComponent']
57
+ * console.log(result.wireAdapters); // ['getRecord', 'getObjectInfo']
58
+ * ```
59
+ */
60
+ export declare function parseLWC(componentName: string, jsCode: string, metadataXml?: string): LWCParseResult;
@@ -0,0 +1,264 @@
1
+ import { getLogger } from '../utils/logger.js';
2
+ import { ParsingError } from '../errors/parsing-error.js';
3
+ const logger = getLogger('LWCParser');
4
+ /**
5
+ * Remove comments from JavaScript/TypeScript code
6
+ */
7
+ function removeComments(code) {
8
+ // Remove single-line comments (//)
9
+ let cleaned = code.replace(/\/\/.*$/gm, '');
10
+ // Remove multi-line comments (/* ... */)
11
+ cleaned = cleaned.replace(/\/\*[\s\S]*?\*\//g, '');
12
+ return cleaned;
13
+ }
14
+ /**
15
+ * Extract Apex imports
16
+ *
17
+ * @ac US-016-AC-1: Extract Apex imports (@salesforce/apex)
18
+ */
19
+ function extractApexImports(code) {
20
+ // Pattern: import methodName from '@salesforce/apex/ClassName.methodName'
21
+ const apexImportPattern = /import\s+(?:\{[^}]+\}|\w+)\s+from\s+['"]@salesforce\/apex\/([a-zA-Z][a-zA-Z0-9_.]+)['"]/g;
22
+ const matches = code.matchAll(apexImportPattern);
23
+ const imports = [];
24
+ for (const match of matches) {
25
+ const apexRef = match[1]; // ClassName.methodName or ClassName
26
+ if (!imports.includes(apexRef)) {
27
+ imports.push(apexRef);
28
+ }
29
+ }
30
+ return imports;
31
+ }
32
+ /**
33
+ * Extract LWC imports
34
+ *
35
+ * @ac US-016-AC-2: Extract LWC imports (c/componentName)
36
+ */
37
+ function extractLWCImports(code) {
38
+ // Pattern: import ComponentName from 'c/componentName'
39
+ const lwcImportPattern = /import\s+(?:\{[^}]+\}|\w+)\s+from\s+['"]c\/([a-zA-Z][a-zA-Z0-9_]+)['"]/g;
40
+ const matches = code.matchAll(lwcImportPattern);
41
+ const imports = [];
42
+ for (const match of matches) {
43
+ const componentName = match[1];
44
+ if (!imports.includes(componentName)) {
45
+ imports.push(componentName);
46
+ }
47
+ }
48
+ return imports;
49
+ }
50
+ /**
51
+ * Extract wire adapter usage
52
+ *
53
+ * @ac US-016-AC-3: Extract wire adapter usage
54
+ */
55
+ function extractWireAdapters(code) {
56
+ // Pattern: @wire(adapterName, { ... })
57
+ const wirePattern = /@wire\s*\(\s*([a-zA-Z][a-zA-Z0-9_]*)/g;
58
+ const matches = code.matchAll(wirePattern);
59
+ const adapters = [];
60
+ for (const match of matches) {
61
+ const adapterName = match[1];
62
+ if (!adapters.includes(adapterName)) {
63
+ adapters.push(adapterName);
64
+ }
65
+ }
66
+ return adapters;
67
+ }
68
+ /**
69
+ * Extract @api property dependencies
70
+ *
71
+ * @ac US-016-AC-4: Extract @api property dependencies
72
+ */
73
+ function extractApiProperties(code) {
74
+ // Pattern: @api propertyName
75
+ const apiPattern = /@api\s+([a-zA-Z][a-zA-Z0-9_]*)/g;
76
+ const matches = code.matchAll(apiPattern);
77
+ const properties = [];
78
+ for (const match of matches) {
79
+ const propertyName = match[1];
80
+ if (!properties.includes(propertyName)) {
81
+ properties.push(propertyName);
82
+ }
83
+ }
84
+ return properties;
85
+ }
86
+ /**
87
+ * Extract navigation references
88
+ *
89
+ * @ac US-016-AC-5: Extract navigation references
90
+ */
91
+ function extractNavigationRefs(code) {
92
+ const refs = [];
93
+ // Pattern: NavigationMixin
94
+ if (code.includes('NavigationMixin')) {
95
+ refs.push('NavigationMixin');
96
+ }
97
+ // Pattern: this[NavigationMixin.Navigate]
98
+ if (code.includes('NavigationMixin.Navigate')) {
99
+ refs.push('NavigationMixin.Navigate');
100
+ }
101
+ // Pattern: import { NavigationMixin } from 'lightning/navigation'
102
+ const navImportPattern = /import\s+\{[^}]*NavigationMixin[^}]*\}\s+from\s+['"]lightning\/navigation['"]/;
103
+ if (navImportPattern.test(code)) {
104
+ refs.push('lightning/navigation');
105
+ }
106
+ return refs;
107
+ }
108
+ /**
109
+ * Detect if the component is TypeScript
110
+ *
111
+ * @ac US-016-AC-6: Handle TypeScript components
112
+ */
113
+ function isTypeScriptComponent(jsCode) {
114
+ // Check for TypeScript-specific syntax
115
+ const tsPatterns = [
116
+ /:\s*(?:string|number|boolean|any|void|unknown|never)\s*[=;,)]/,
117
+ /interface\s+[A-Z][a-zA-Z0-9_]*\s*\{/,
118
+ /type\s+[A-Z][a-zA-Z0-9_]*\s*=/,
119
+ /<[A-Z][a-zA-Z0-9_<>,\s]*>/,
120
+ /as\s+(?:string|number|boolean|const)/,
121
+ ];
122
+ return tsPatterns.some((pattern) => pattern.test(jsCode));
123
+ }
124
+ /**
125
+ * Parse LWC js-meta.xml file
126
+ *
127
+ * @ac US-016-AC-8: Parse js-meta.xml correctly
128
+ * @deprecated - Will be refactored to return LWCMetadata type
129
+ *
130
+ * TODO: Refactor this function to properly parse and return LWCMetadata type
131
+ * Currently commented out to avoid unused variable warnings during refactoring
132
+ */
133
+ /*
134
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
135
+ function parseMetadataXml(metadataContent: string): { exposedAs?: string } {
136
+ try {
137
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unnecessary-type-assertion
138
+ const parsed = parseXml(metadataContent) as any;
139
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment
140
+ const metadata = parsed.LightningComponentBundle;
141
+
142
+ if (!metadata) {
143
+ return {};
144
+ }
145
+
146
+ // Extract targets (where the component is exposed)
147
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment
148
+ const targets = metadata.targets;
149
+ if (targets) {
150
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
151
+ const targetList = Array.isArray(targets.target) ? targets.target : targets.target ? [targets.target] : [];
152
+ // Targets are extracted but we don't use exposedAs anymore
153
+ // Metadata will be parsed separately
154
+ }
155
+
156
+ return {};
157
+ } catch {
158
+ return {};
159
+ }
160
+ }
161
+ */
162
+ /**
163
+ * Parse a Lightning Web Component and extract dependencies
164
+ *
165
+ * @param componentName - Name of the LWC component
166
+ * @param jsCode - JavaScript/TypeScript code of the component
167
+ * @param metadataXml - Optional js-meta.xml content
168
+ * @returns LWCParseResult with all extracted dependencies
169
+ *
170
+ * @throws {ParsingError} If the component cannot be parsed
171
+ *
172
+ * @ac US-016-AC-7: Validate bundle structure (js, html, xml)
173
+ *
174
+ * @example
175
+ * ```typescript
176
+ * const result = parseLWC('myComponent', jsCode, metadataXml);
177
+ * console.log(result.apexImports); // ['AccountController.getAccounts']
178
+ * console.log(result.lwcImports); // ['baseComponent', 'utilComponent']
179
+ * console.log(result.wireAdapters); // ['getRecord', 'getObjectInfo']
180
+ * ```
181
+ */
182
+ export function parseLWC(componentName, jsCode, metadataXml) {
183
+ try {
184
+ logger.debug(`Parsing LWC: ${componentName}`);
185
+ // Remove comments
186
+ const cleanCode = removeComments(jsCode);
187
+ // Detect TypeScript
188
+ const isTS = isTypeScriptComponent(cleanCode);
189
+ // Extract dependencies
190
+ const apexImports = extractApexImports(cleanCode);
191
+ const lwcImports = extractLWCImports(cleanCode);
192
+ const wireAdapters = extractWireAdapters(cleanCode);
193
+ const apiProperties = extractApiProperties(cleanCode);
194
+ const navigationRefs = extractNavigationRefs(cleanCode);
195
+ // Parse metadata XML if provided
196
+ let metadata;
197
+ let hasMetadataXml = false;
198
+ if (metadataXml) {
199
+ hasMetadataXml = true;
200
+ // Parse the metadata but we don't have a parseMetadataXml that returns LWCMetadata yet
201
+ // For now, we'll skip this part
202
+ }
203
+ // Build dependencies array
204
+ const dependencies = [
205
+ ...apexImports.map((name) => ({
206
+ type: 'apex_import',
207
+ name,
208
+ source: '@salesforce/apex',
209
+ isTypeScript: isTS,
210
+ })),
211
+ ...lwcImports.map((name) => ({
212
+ type: 'lwc_import',
213
+ name,
214
+ source: 'c',
215
+ isTypeScript: isTS,
216
+ })),
217
+ ...wireAdapters.map((name) => ({
218
+ type: 'wire_adapter',
219
+ name,
220
+ isTypeScript: isTS,
221
+ })),
222
+ ...apiProperties.map((name) => ({
223
+ type: 'api_property',
224
+ name,
225
+ isTypeScript: isTS,
226
+ })),
227
+ ...navigationRefs.map((name) => ({
228
+ type: 'navigation',
229
+ name,
230
+ isTypeScript: isTS,
231
+ })),
232
+ ];
233
+ const result = {
234
+ componentName,
235
+ isTypeScript: isTS,
236
+ apexImports,
237
+ lwcImports,
238
+ wireAdapters,
239
+ apiProperties,
240
+ navigationRefs,
241
+ dependencies,
242
+ hasMetadataXml,
243
+ metadata,
244
+ };
245
+ logger.debug(`Parsed LWC: ${componentName}`, {
246
+ isTypeScript: isTS,
247
+ apexImports: apexImports.length,
248
+ lwcImports: lwcImports.length,
249
+ wireAdapters: wireAdapters.length,
250
+ dependencies: dependencies.length,
251
+ });
252
+ return result;
253
+ }
254
+ catch (error) {
255
+ if (error instanceof ParsingError) {
256
+ throw error;
257
+ }
258
+ throw new ParsingError(`Failed to parse LWC: ${componentName}`, {
259
+ filePath: componentName,
260
+ originalError: error instanceof Error ? error.message : String(error),
261
+ });
262
+ }
263
+ }
264
+ //# sourceMappingURL=lwc-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lwc-parser.js","sourceRoot":"","sources":["../../src/parsers/lwc-parser.ts"],"names":[],"mappings":"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"}