@jterrats/smart-deployment 1.0.3 → 1.0.4

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 (257) hide show
  1. package/LICENSE +29 -0
  2. package/README.md +6 -0
  3. package/lib/ai/wave-validation-service.d.ts +21 -0
  4. package/lib/ai/wave-validation-service.js +189 -114
  5. package/lib/ai/wave-validation-service.js.map +1 -1
  6. package/lib/analysis/analysis-reporter.d.ts +12 -0
  7. package/lib/analysis/analysis-reporter.js +61 -0
  8. package/lib/analysis/analysis-reporter.js.map +1 -1
  9. package/lib/analysis/analyze-artifact-service.d.ts +25 -0
  10. package/lib/analysis/analyze-artifact-service.js +50 -0
  11. package/lib/analysis/analyze-artifact-service.js.map +1 -0
  12. package/lib/analysis/analyze-context-service.d.ts +25 -0
  13. package/lib/analysis/analyze-context-service.js +28 -0
  14. package/lib/analysis/analyze-context-service.js.map +1 -0
  15. package/lib/analysis/project-analysis-service.d.ts +48 -0
  16. package/lib/analysis/project-analysis-service.js +134 -0
  17. package/lib/analysis/project-analysis-service.js.map +1 -0
  18. package/lib/commands/analyze.d.ts +0 -2
  19. package/lib/commands/analyze.js +31 -162
  20. package/lib/commands/analyze.js.map +1 -1
  21. package/lib/commands/config.d.ts +0 -4
  22. package/lib/commands/config.js +25 -95
  23. package/lib/commands/config.js.map +1 -1
  24. package/lib/commands/resume.js +6 -16
  25. package/lib/commands/resume.js.map +1 -1
  26. package/lib/commands/start.d.ts +0 -11
  27. package/lib/commands/start.js +38 -550
  28. package/lib/commands/start.js.map +1 -1
  29. package/lib/commands/status.js +36 -12
  30. package/lib/commands/status.js.map +1 -1
  31. package/lib/commands/validate.d.ts +3 -0
  32. package/lib/commands/validate.js +5 -7
  33. package/lib/commands/validate.js.map +1 -1
  34. package/lib/config/config-mutation-service.d.ts +21 -0
  35. package/lib/config/config-mutation-service.js +61 -0
  36. package/lib/config/config-mutation-service.js.map +1 -0
  37. package/lib/dependencies/circular-dependency-detector.d.ts +5 -0
  38. package/lib/dependencies/circular-dependency-detector.js +67 -72
  39. package/lib/dependencies/circular-dependency-detector.js.map +1 -1
  40. package/lib/dependencies/dependency-depth-calculator.d.ts +28 -0
  41. package/lib/dependencies/dependency-depth-calculator.js +86 -39
  42. package/lib/dependencies/dependency-depth-calculator.js.map +1 -1
  43. package/lib/dependencies/dependency-graph-builder.d.ts +45 -13
  44. package/lib/dependencies/dependency-graph-builder.js +228 -123
  45. package/lib/dependencies/dependency-graph-builder.js.map +1 -1
  46. package/lib/dependencies/dependency-impact-analyzer.d.ts +13 -0
  47. package/lib/dependencies/dependency-impact-analyzer.js +146 -102
  48. package/lib/dependencies/dependency-impact-analyzer.js.map +1 -1
  49. package/lib/dependencies/dependency-merger.d.ts +10 -0
  50. package/lib/dependencies/dependency-merger.js +123 -61
  51. package/lib/dependencies/dependency-merger.js.map +1 -1
  52. package/lib/dependencies/dependency-resolver.d.ts +34 -9
  53. package/lib/dependencies/dependency-resolver.js +181 -112
  54. package/lib/dependencies/dependency-resolver.js.map +1 -1
  55. package/lib/dependencies/dependency-semantics.d.ts +20 -0
  56. package/lib/dependencies/dependency-semantics.js +55 -0
  57. package/lib/dependencies/dependency-semantics.js.map +1 -0
  58. package/lib/dependencies/graph-visualizer.d.ts +6 -1
  59. package/lib/dependencies/graph-visualizer.js +38 -4
  60. package/lib/dependencies/graph-visualizer.js.map +1 -1
  61. package/lib/dependencies/heuristic-inference.d.ts +2 -53
  62. package/lib/dependencies/heuristic-inference.js +8 -317
  63. package/lib/dependencies/heuristic-inference.js.map +1 -1
  64. package/lib/dependencies/heuristic-patterns.d.ts +14 -0
  65. package/lib/dependencies/heuristic-patterns.js +247 -0
  66. package/lib/dependencies/heuristic-patterns.js.map +1 -0
  67. package/lib/deployment/cycle-remediation-runner.d.ts +36 -0
  68. package/lib/deployment/cycle-remediation-runner.js +262 -0
  69. package/lib/deployment/cycle-remediation-runner.js.map +1 -0
  70. package/lib/deployment/deployment-context-service.d.ts +24 -0
  71. package/lib/deployment/deployment-context-service.js +17 -0
  72. package/lib/deployment/deployment-context-service.js.map +1 -0
  73. package/lib/deployment/deployment-runner.d.ts +37 -0
  74. package/lib/deployment/deployment-runner.js +94 -0
  75. package/lib/deployment/deployment-runner.js.map +1 -0
  76. package/lib/deployment/deployment-status-service.d.ts +5 -0
  77. package/lib/deployment/deployment-status-service.js +39 -18
  78. package/lib/deployment/deployment-status-service.js.map +1 -1
  79. package/lib/deployment/deployment-validation-service.d.ts +5 -2
  80. package/lib/deployment/deployment-validation-service.js +48 -45
  81. package/lib/deployment/deployment-validation-service.js.map +1 -1
  82. package/lib/deployment/resume-deployment-service.d.ts +14 -0
  83. package/lib/deployment/resume-deployment-service.js +25 -0
  84. package/lib/deployment/resume-deployment-service.js.map +1 -0
  85. package/lib/deployment/start-execution-service.d.ts +44 -0
  86. package/lib/deployment/start-execution-service.js +94 -0
  87. package/lib/deployment/start-execution-service.js.map +1 -0
  88. package/lib/deployment/test-executor.d.ts +60 -1
  89. package/lib/deployment/test-executor.js +180 -12
  90. package/lib/deployment/test-executor.js.map +1 -1
  91. package/lib/deployment/test-plan-service.d.ts +8 -0
  92. package/lib/deployment/test-plan-service.js +26 -0
  93. package/lib/deployment/test-plan-service.js.map +1 -0
  94. package/lib/deployment/wave-manifest-service.d.ts +11 -0
  95. package/lib/deployment/wave-manifest-service.js +41 -0
  96. package/lib/deployment/wave-manifest-service.js.map +1 -0
  97. package/lib/parsers/apex-class-parser.js +180 -98
  98. package/lib/parsers/apex-class-parser.js.map +1 -1
  99. package/lib/parsers/apex-trigger-parser.js +56 -7
  100. package/lib/parsers/apex-trigger-parser.js.map +1 -1
  101. package/lib/parsers/aura-parser.js +2 -2
  102. package/lib/parsers/aura-parser.js.map +1 -1
  103. package/lib/parsers/bot-parser.js +31 -4
  104. package/lib/parsers/bot-parser.js.map +1 -1
  105. package/lib/parsers/custom-metadata-parser.js +37 -3
  106. package/lib/parsers/custom-metadata-parser.js.map +1 -1
  107. package/lib/parsers/custom-object-parser.js +284 -150
  108. package/lib/parsers/custom-object-parser.js.map +1 -1
  109. package/lib/parsers/email-template-parser.js +115 -58
  110. package/lib/parsers/email-template-parser.js.map +1 -1
  111. package/lib/parsers/flexipage-parser.js +41 -16
  112. package/lib/parsers/flexipage-parser.js.map +1 -1
  113. package/lib/parsers/flow-parser.js +73 -63
  114. package/lib/parsers/flow-parser.js.map +1 -1
  115. package/lib/parsers/genai-prompt-parser.js +16 -4
  116. package/lib/parsers/genai-prompt-parser.js.map +1 -1
  117. package/lib/parsers/layout-parser.d.ts +11 -0
  118. package/lib/parsers/layout-parser.js +143 -68
  119. package/lib/parsers/layout-parser.js.map +1 -1
  120. package/lib/parsers/lwc-parser.d.ts +0 -9
  121. package/lib/parsers/lwc-parser.js +245 -100
  122. package/lib/parsers/lwc-parser.js.map +1 -1
  123. package/lib/parsers/parser-utils.d.ts +3 -0
  124. package/lib/parsers/parser-utils.js +16 -0
  125. package/lib/parsers/parser-utils.js.map +1 -0
  126. package/lib/parsers/permission-set-parser.d.ts +6 -0
  127. package/lib/parsers/permission-set-parser.js +31 -40
  128. package/lib/parsers/permission-set-parser.js.map +1 -1
  129. package/lib/parsers/profile-parser.d.ts +13 -0
  130. package/lib/parsers/profile-parser.js +39 -34
  131. package/lib/parsers/profile-parser.js.map +1 -1
  132. package/lib/parsers/visualforce-parser.js +2 -1
  133. package/lib/parsers/visualforce-parser.js.map +1 -1
  134. package/lib/presentation/analyze-command-presenter.d.ts +10 -0
  135. package/lib/presentation/analyze-command-presenter.js +30 -0
  136. package/lib/presentation/analyze-command-presenter.js.map +1 -0
  137. package/lib/presentation/config-command-presenter.d.ts +15 -0
  138. package/lib/presentation/config-command-presenter.js +50 -0
  139. package/lib/presentation/config-command-presenter.js.map +1 -0
  140. package/lib/presentation/project-analysis-presenter.d.ts +9 -0
  141. package/lib/presentation/project-analysis-presenter.js +9 -0
  142. package/lib/presentation/project-analysis-presenter.js.map +1 -0
  143. package/lib/presentation/resume-command-presenter.d.ts +7 -0
  144. package/lib/presentation/resume-command-presenter.js +12 -0
  145. package/lib/presentation/resume-command-presenter.js.map +1 -0
  146. package/lib/presentation/start-command-presenter.d.ts +15 -0
  147. package/lib/presentation/start-command-presenter.js +29 -0
  148. package/lib/presentation/start-command-presenter.js.map +1 -0
  149. package/lib/presentation/status-command-presenter.d.ts +7 -0
  150. package/lib/presentation/status-command-presenter.js +16 -0
  151. package/lib/presentation/status-command-presenter.js.map +1 -0
  152. package/lib/presentation/validate-command-presenter.d.ts +9 -0
  153. package/lib/presentation/validate-command-presenter.js +50 -0
  154. package/lib/presentation/validate-command-presenter.js.map +1 -0
  155. package/lib/services/metadata-scanner-service.d.ts +8 -12
  156. package/lib/services/metadata-scanner-service.js +55 -533
  157. package/lib/services/metadata-scanner-service.js.map +1 -1
  158. package/lib/services/scanners/automation-ai-metadata-scanner.d.ts +4 -0
  159. package/lib/services/scanners/automation-ai-metadata-scanner.js +61 -0
  160. package/lib/services/scanners/automation-ai-metadata-scanner.js.map +1 -0
  161. package/lib/services/scanners/code-metadata-scanner.d.ts +23 -0
  162. package/lib/services/scanners/code-metadata-scanner.js +149 -0
  163. package/lib/services/scanners/code-metadata-scanner.js.map +1 -0
  164. package/lib/services/scanners/data-metadata-scanner.d.ts +3 -0
  165. package/lib/services/scanners/data-metadata-scanner.js +82 -0
  166. package/lib/services/scanners/data-metadata-scanner.js.map +1 -0
  167. package/lib/services/scanners/experience-metadata-scanner.d.ts +5 -0
  168. package/lib/services/scanners/experience-metadata-scanner.js +123 -0
  169. package/lib/services/scanners/experience-metadata-scanner.js.map +1 -0
  170. package/lib/services/scanners/scanner-runtime.d.ts +11 -0
  171. package/lib/services/scanners/scanner-runtime.js +115 -0
  172. package/lib/services/scanners/scanner-runtime.js.map +1 -0
  173. package/lib/services/scanners/security-metadata-scanner.d.ts +3 -0
  174. package/lib/services/scanners/security-metadata-scanner.js +71 -0
  175. package/lib/services/scanners/security-metadata-scanner.js.map +1 -0
  176. package/lib/types/dependency.d.ts +11 -1
  177. package/lib/types/metadata.d.ts +17 -0
  178. package/lib/types/salesforce/flow/actions.d.ts +108 -0
  179. package/lib/types/salesforce/flow/actions.js +2 -0
  180. package/lib/types/salesforce/flow/actions.js.map +1 -0
  181. package/lib/types/salesforce/flow/common.d.ts +36 -0
  182. package/lib/types/salesforce/flow/common.js +5 -0
  183. package/lib/types/salesforce/flow/common.js.map +1 -0
  184. package/lib/types/salesforce/flow/metadata.d.ts +37 -0
  185. package/lib/types/salesforce/flow/metadata.js +2 -0
  186. package/lib/types/salesforce/flow/metadata.js.map +1 -0
  187. package/lib/types/salesforce/flow/records.d.ts +38 -0
  188. package/lib/types/salesforce/flow/records.js +2 -0
  189. package/lib/types/salesforce/flow/records.js.map +1 -0
  190. package/lib/types/salesforce/flow/resources.d.ts +44 -0
  191. package/lib/types/salesforce/flow/resources.js +2 -0
  192. package/lib/types/salesforce/flow/resources.js.map +1 -0
  193. package/lib/types/salesforce/flow/screens.d.ts +56 -0
  194. package/lib/types/salesforce/flow/screens.js +2 -0
  195. package/lib/types/salesforce/flow/screens.js.map +1 -0
  196. package/lib/types/salesforce/flow/start.d.ts +24 -0
  197. package/lib/types/salesforce/flow/start.js +2 -0
  198. package/lib/types/salesforce/flow/start.js.map +1 -0
  199. package/lib/types/salesforce/flow.d.ts +9 -514
  200. package/lib/types/salesforce/flow.js +1 -1
  201. package/lib/types/salesforce/object/core.d.ts +68 -0
  202. package/lib/types/salesforce/object/core.js +5 -0
  203. package/lib/types/salesforce/object/core.js.map +1 -0
  204. package/lib/types/salesforce/object/field.d.ts +155 -0
  205. package/lib/types/salesforce/object/field.js +5 -0
  206. package/lib/types/salesforce/object/field.js.map +1 -0
  207. package/lib/types/salesforce/object/filter.d.ts +16 -0
  208. package/lib/types/salesforce/object/filter.js +5 -0
  209. package/lib/types/salesforce/object/filter.js.map +1 -0
  210. package/lib/types/salesforce/object/policy.d.ts +27 -0
  211. package/lib/types/salesforce/object/policy.js +5 -0
  212. package/lib/types/salesforce/object/policy.js.map +1 -0
  213. package/lib/types/salesforce/object/record.d.ts +44 -0
  214. package/lib/types/salesforce/object/record.js +5 -0
  215. package/lib/types/salesforce/object/record.js.map +1 -0
  216. package/lib/types/salesforce/object/view.d.ts +71 -0
  217. package/lib/types/salesforce/object/view.js +5 -0
  218. package/lib/types/salesforce/object/view.js.map +1 -0
  219. package/lib/types/salesforce/object/weblink.d.ts +70 -0
  220. package/lib/types/salesforce/object/weblink.js +5 -0
  221. package/lib/types/salesforce/object/weblink.js.map +1 -0
  222. package/lib/types/salesforce/object.d.ts +7 -423
  223. package/lib/types/salesforce/object.js +7 -1
  224. package/lib/types/salesforce/object.js.map +1 -1
  225. package/lib/utils/cache-manager.d.ts +16 -15
  226. package/lib/utils/cache-manager.js +290 -188
  227. package/lib/utils/cache-manager.js.map +1 -1
  228. package/lib/utils/logger.d.ts +8 -0
  229. package/lib/utils/logger.js +82 -69
  230. package/lib/utils/logger.js.map +1 -1
  231. package/lib/validators/xml/xml-reference-rules.d.ts +3 -0
  232. package/lib/validators/xml/xml-reference-rules.js +173 -0
  233. package/lib/validators/xml/xml-reference-rules.js.map +1 -0
  234. package/lib/validators/xml/xml-report-formatter.d.ts +2 -0
  235. package/lib/validators/xml/xml-report-formatter.js +47 -0
  236. package/lib/validators/xml/xml-report-formatter.js.map +1 -0
  237. package/lib/validators/xml/xml-schema-rules.d.ts +3 -0
  238. package/lib/validators/xml/xml-schema-rules.js +75 -0
  239. package/lib/validators/xml/xml-schema-rules.js.map +1 -0
  240. package/lib/validators/xml/xml-validation-types.d.ts +25 -0
  241. package/lib/validators/xml/xml-validation-types.js +2 -0
  242. package/lib/validators/xml/xml-validation-types.js.map +1 -0
  243. package/lib/validators/xml-metadata-validator.d.ts +2 -63
  244. package/lib/validators/xml-metadata-validator.js +7 -338
  245. package/lib/validators/xml-metadata-validator.js.map +1 -1
  246. package/lib/waves/test-optimizer.d.ts +13 -0
  247. package/lib/waves/test-optimizer.js +124 -63
  248. package/lib/waves/test-optimizer.js.map +1 -1
  249. package/lib/waves/wave-builder.d.ts +17 -21
  250. package/lib/waves/wave-builder.js +199 -135
  251. package/lib/waves/wave-builder.js.map +1 -1
  252. package/lib/waves/wave-splitter.d.ts +12 -8
  253. package/lib/waves/wave-splitter.js +156 -115
  254. package/lib/waves/wave-splitter.js.map +1 -1
  255. package/npm-shrinkwrap.json +2 -2
  256. package/oclif.manifest.json +1 -1
  257. package/package.json +1 -1
@@ -37,6 +37,23 @@ function extractMergeFields(content) {
37
37
  }
38
38
  return mergeFields;
39
39
  }
40
+ function remapMergeFieldObjects(mergeFields, aliases) {
41
+ return mergeFields.map((mergeField) => {
42
+ if (mergeField.objectName === 'recipient' && aliases.recipient) {
43
+ return {
44
+ ...mergeField,
45
+ objectName: aliases.recipient,
46
+ };
47
+ }
48
+ if (mergeField.objectName === 'relatedTo' && aliases.relatedTo) {
49
+ return {
50
+ ...mergeField,
51
+ objectName: aliases.relatedTo,
52
+ };
53
+ }
54
+ return mergeField;
55
+ });
56
+ }
40
57
  /**
41
58
  * Extract custom label references
42
59
  *
@@ -57,6 +74,80 @@ function extractCustomLabels(content) {
57
74
  }
58
75
  return labels;
59
76
  }
77
+ function extractVisualforceEmailAttributes(content) {
78
+ const emailTemplateTag = content.match(/<messaging:emailTemplate\b[^>]*>/i)?.[0];
79
+ if (!emailTemplateTag) {
80
+ return {};
81
+ }
82
+ return {
83
+ recipient: emailTemplateTag.match(/\brecipientType="([^"]+)"/i)?.[1],
84
+ relatedTo: emailTemplateTag.match(/\brelatedToType="([^"]+)"/i)?.[1],
85
+ };
86
+ }
87
+ function collectAttachments(metadata) {
88
+ const attachmentNames = metadata.attachments?.map((attachment) => attachment.name) ?? [];
89
+ const allAttachments = [...attachmentNames, ...(metadata.attachedContentDocuments ?? [])];
90
+ return allAttachments.length > 0 ? allAttachments : undefined;
91
+ }
92
+ function buildDependencies(params) {
93
+ const { mergeFields, customLabels, relatedEntityType, visualforcePage, metadata } = params;
94
+ const dependencies = [];
95
+ if (relatedEntityType) {
96
+ dependencies.push({
97
+ type: 'related_entity',
98
+ name: relatedEntityType,
99
+ });
100
+ }
101
+ if (metadata.type === 'visualforce' && visualforcePage) {
102
+ dependencies.push({
103
+ type: 'visualforce_page',
104
+ name: visualforcePage,
105
+ });
106
+ }
107
+ for (const mergeField of mergeFields) {
108
+ dependencies.push({
109
+ type: 'merge_field',
110
+ name: mergeField.fullReference,
111
+ objectName: mergeField.objectName,
112
+ fieldName: mergeField.fieldName,
113
+ });
114
+ }
115
+ for (const label of customLabels) {
116
+ dependencies.push({
117
+ type: 'custom_label',
118
+ name: label,
119
+ });
120
+ }
121
+ if (metadata.attachments) {
122
+ for (const attachment of metadata.attachments) {
123
+ dependencies.push({
124
+ type: 'attachment',
125
+ name: attachment.name,
126
+ });
127
+ }
128
+ }
129
+ if (metadata.attachedContentDocuments) {
130
+ for (const documentName of metadata.attachedContentDocuments) {
131
+ dependencies.push({
132
+ type: 'attachment',
133
+ name: documentName,
134
+ });
135
+ }
136
+ }
137
+ return dependencies;
138
+ }
139
+ function buildParseResult(params) {
140
+ const { metadata, relatedEntityType, mergeFields, customLabels, dependencies, visualforcePage } = params;
141
+ return {
142
+ ...metadata,
143
+ relatedEntityType,
144
+ attachments: collectAttachments(metadata),
145
+ mergeFields,
146
+ customLabels,
147
+ dependencies,
148
+ visualforcePage,
149
+ };
150
+ }
60
151
  /**
61
152
  * Parse email template metadata XML
62
153
  *
@@ -147,77 +238,43 @@ export async function parseEmailTemplate(templateName, templateContent, metadata
147
238
  logger.debug(`Parsing email template: ${templateName}`);
148
239
  // Parse metadata XML using Salesforce types
149
240
  const metadata = await parseMetadataXml(metadataContent);
241
+ const visualforceAttributes = extractVisualforceEmailAttributes(templateContent);
150
242
  // Extract merge fields from content and subject
151
- const contentMergeFields = extractMergeFields(templateContent);
152
- const subjectMergeFields = metadata.subject ? extractMergeFields(metadata.subject) : [];
243
+ const contentMergeFields = remapMergeFieldObjects(extractMergeFields(templateContent), visualforceAttributes);
244
+ const subjectMergeFields = metadata.subject
245
+ ? remapMergeFieldObjects(extractMergeFields(metadata.subject), visualforceAttributes)
246
+ : [];
153
247
  const mergeFields = [...contentMergeFields, ...subjectMergeFields];
154
248
  // Extract custom labels
155
- const customLabels = extractCustomLabels(templateContent);
156
- // Build dependencies array
157
- const dependencies = [];
158
- // Add related entity type as dependency
159
- if (metadata.relatedEntityType) {
160
- dependencies.push({
161
- type: 'related_entity',
162
- name: metadata.relatedEntityType,
163
- });
164
- }
165
- // Add Visualforce page as dependency (for visualforce template type)
249
+ const customLabels = [
250
+ ...new Set([
251
+ ...extractCustomLabels(templateContent),
252
+ ...(metadata.subject ? extractCustomLabels(metadata.subject) : []),
253
+ ]),
254
+ ];
255
+ const relatedEntityType = metadata.relatedEntityType ?? visualforceAttributes.relatedTo;
166
256
  let visualforcePage;
167
257
  if (metadata.type === 'visualforce' && metadata.visualforcePage) {
168
258
  visualforcePage = metadata.visualforcePage;
169
- dependencies.push({
170
- type: 'visualforce_page',
171
- name: visualforcePage,
172
- });
173
259
  }
174
- // Add merge fields as dependencies
175
- for (const mergeField of mergeFields) {
176
- dependencies.push({
177
- type: 'merge_field',
178
- name: mergeField.fullReference,
179
- objectName: mergeField.objectName,
180
- fieldName: mergeField.fieldName,
181
- });
182
- }
183
- // Add custom labels as dependencies
184
- for (const label of customLabels) {
185
- dependencies.push({
186
- type: 'custom_label',
187
- name: label,
188
- });
189
- }
190
- // Add attachments as dependencies
191
- if (metadata.attachments) {
192
- for (const attachment of metadata.attachments) {
193
- dependencies.push({
194
- type: 'attachment',
195
- name: attachment.name,
196
- });
197
- }
198
- }
199
- if (metadata.attachedContentDocuments) {
200
- for (const doc of metadata.attachedContentDocuments) {
201
- dependencies.push({
202
- type: 'attachment',
203
- name: doc,
204
- });
205
- }
206
- }
207
- // Map attachments to string array (just names) and include attachedContentDocuments
208
- const attachmentNames = metadata.attachments?.map((att) => att.name) ?? [];
209
- const allAttachments = [...attachmentNames, ...(metadata.attachedContentDocuments ?? [])];
210
- const result = {
211
- ...metadata,
212
- attachments: allAttachments.length > 0 ? allAttachments : undefined,
260
+ const dependencies = buildDependencies({
261
+ mergeFields,
262
+ customLabels,
263
+ relatedEntityType,
264
+ visualforcePage,
265
+ metadata,
266
+ });
267
+ const result = buildParseResult({
268
+ metadata,
269
+ relatedEntityType,
213
270
  mergeFields,
214
271
  customLabels,
215
272
  dependencies,
216
273
  visualforcePage,
217
- };
274
+ });
218
275
  logger.debug(`Parsed email template: ${templateName}`, {
219
276
  templateType: metadata.type,
220
- relatedEntityType: !!metadata.relatedEntityType,
277
+ relatedEntityType: !!relatedEntityType,
221
278
  mergeFieldsCount: mergeFields.length,
222
279
  customLabelsCount: customLabels.length,
223
280
  attachmentsCount: (metadata.attachments?.length ?? 0) + (metadata.attachedContentDocuments?.length ?? 0),
@@ -1 +1 @@
1
- {"version":3,"file":"email-template-parser.js","sourceRoot":"","sources":["../../src/parsers/email-template-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"email-template-parser.js","sourceRoot":"","sources":["../../src/parsers/email-template-parser.ts"],"names":[],"mappings":"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"}
@@ -21,12 +21,36 @@ function normalizeArray(value) {
21
21
  return [];
22
22
  return Array.isArray(value) ? value : [value];
23
23
  }
24
+ function extractRecordTypesFromVisibilityRule(visibilityRule) {
25
+ if (!visibilityRule) {
26
+ return [];
27
+ }
28
+ const recordTypes = [];
29
+ const criteria = normalizeArray(visibilityRule.criteria);
30
+ for (const criterion of criteria) {
31
+ if (criterion.leftValue?.includes('RecordType') || criterion.rightValue?.includes('RecordType')) {
32
+ const candidate = criterion.rightValue?.includes('RecordType') ? criterion.leftValue : criterion.rightValue;
33
+ if (candidate && !candidate.includes('RecordType')) {
34
+ recordTypes.push(candidate);
35
+ }
36
+ }
37
+ }
38
+ return recordTypes;
39
+ }
40
+ function extractObjectName(value) {
41
+ if (!value.includes('.')) {
42
+ return undefined;
43
+ }
44
+ const [objectName] = value.split('.');
45
+ return objectName || undefined;
46
+ }
24
47
  /**
25
48
  * Extract components from item instances
26
49
  */
27
50
  function extractComponentsFromItems(items) {
28
51
  const lwcComponents = [];
29
52
  const auraComponents = [];
53
+ const objects = [];
30
54
  const recordTypes = [];
31
55
  for (const item of items) {
32
56
  if (item.componentInstance) {
@@ -60,24 +84,20 @@ function extractComponentsFromItems(items) {
60
84
  else {
61
85
  lwcComponents.push(componentName);
62
86
  }
63
- // Extract record type filters from visibility rules
64
- if (item.componentInstance.visibilityRule) {
65
- const criteria = normalizeArray(item.componentInstance.visibilityRule.criteria);
66
- for (const criterion of criteria) {
67
- // Check if criterion references RecordType
68
- if (criterion.leftValue?.includes('RecordType') || criterion.rightValue?.includes('RecordType')) {
69
- const rtValue = criterion.rightValue ?? criterion.leftValue;
70
- if (rtValue && !rtValue.includes('RecordType')) {
71
- recordTypes.push(rtValue);
72
- }
73
- }
74
- }
87
+ recordTypes.push(...extractRecordTypesFromVisibilityRule(item.componentInstance.visibilityRule));
88
+ }
89
+ if (item.fieldInstance?.fieldItem) {
90
+ const objectName = extractObjectName(item.fieldInstance.fieldItem);
91
+ if (objectName) {
92
+ objects.push(objectName);
75
93
  }
94
+ recordTypes.push(...extractRecordTypesFromVisibilityRule(item.fieldInstance.visibilityRule));
76
95
  }
77
96
  }
78
97
  return {
79
98
  lwc: lwcComponents,
80
99
  aura: auraComponents,
100
+ objects,
81
101
  recordTypes,
82
102
  };
83
103
  }
@@ -87,17 +107,20 @@ function extractComponentsFromItems(items) {
87
107
  function extractComponents(regions) {
88
108
  const allLwc = [];
89
109
  const allAura = [];
110
+ const allObjects = [];
90
111
  const allRecordTypes = [];
91
112
  for (const region of regions) {
92
113
  const items = normalizeArray(region.itemInstances);
93
- const { lwc, aura, recordTypes } = extractComponentsFromItems(items);
114
+ const { lwc, aura, objects, recordTypes } = extractComponentsFromItems(items);
94
115
  allLwc.push(...lwc);
95
116
  allAura.push(...aura);
117
+ allObjects.push(...objects);
96
118
  allRecordTypes.push(...recordTypes);
97
119
  }
98
120
  return {
99
121
  lwc: [...new Set(allLwc)],
100
122
  aura: [...new Set(allAura)],
123
+ objects: [...new Set(allObjects)],
101
124
  recordTypes: [...new Set(allRecordTypes)],
102
125
  };
103
126
  }
@@ -163,14 +186,16 @@ export async function parseFlexiPage(filePath, flexiPageName) {
163
186
  const regions = normalizeArray(metadata.flexiPageRegions);
164
187
  const regionNames = regions.map((region) => region.name);
165
188
  // Extract components
166
- const { lwc, aura, recordTypes } = extractComponents(regions);
189
+ const { lwc, aura, objects: regionObjects, recordTypes } = extractComponents(regions);
167
190
  // Extract objects
168
191
  const objects = [];
169
192
  if (metadata.sobjectType) {
170
193
  objects.push(metadata.sobjectType);
171
194
  }
195
+ objects.push(...regionObjects);
172
196
  // Extract quick actions
173
197
  const quickActions = extractQuickActions(metadata);
198
+ const uniqueObjects = [...new Set(objects)];
174
199
  // Build result
175
200
  return {
176
201
  name: flexiPageName,
@@ -179,14 +204,14 @@ export async function parseFlexiPage(filePath, flexiPageName) {
179
204
  sobjectType: metadata.sobjectType,
180
205
  lwcComponents: lwc,
181
206
  auraComponents: aura,
182
- objects,
207
+ objects: uniqueObjects,
183
208
  recordTypeFilters: recordTypes,
184
209
  regions: regionNames,
185
210
  quickActions,
186
211
  dependencies: {
187
212
  lwcComponents: lwc,
188
213
  auraComponents: aura,
189
- objects,
214
+ objects: uniqueObjects,
190
215
  recordTypes,
191
216
  regions: regionNames,
192
217
  quickActions,
@@ -1 +1 @@
1
- {"version":3,"file":"flexipage-parser.js","sourceRoot":"","sources":["../../src/parsers/flexipage-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flexipage-parser.js","sourceRoot":"","sources":["../../src/parsers/flexipage-parser.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,29 @@ import { parseXml } from '../utils/xml.js';
5
5
  import { getLogger } from '../utils/logger.js';
6
6
  import { ParsingError } from '../errors/parsing-error.js';
7
7
  const logger = getLogger('FlowParser');
8
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
9
+ function normalizeArray(value) {
10
+ if (!value) {
11
+ return [];
12
+ }
13
+ return Array.isArray(value) ? value : [value];
14
+ }
15
+ function deduplicate(values) {
16
+ return [...new Set(values.filter((value) => value.trim().length > 0))];
17
+ }
18
+ function extractStringValue(value) {
19
+ if (typeof value === 'string') {
20
+ return value;
21
+ }
22
+ const valueRecord = typeof value === 'object' && value !== null ? value : undefined;
23
+ if (typeof valueRecord?.stringValue === 'string') {
24
+ return valueRecord.stringValue;
25
+ }
26
+ if (typeof valueRecord?.elementReference === 'string') {
27
+ return valueRecord.elementReference;
28
+ }
29
+ return undefined;
30
+ }
8
31
  /**
9
32
  * Extract Apex action references from Flow XML
10
33
  *
@@ -13,19 +36,25 @@ const logger = getLogger('FlowParser');
13
36
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
14
37
  function extractApexActions(flowData) {
15
38
  const actions = [];
16
- // actionCalls can be a single object or array
17
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
18
- const actionCalls = Array.isArray(flowData.actionCalls)
19
- ? flowData.actionCalls
20
- : flowData.actionCalls
21
- ? [flowData.actionCalls]
22
- : [];
39
+ const actionCalls = normalizeArray(flowData.actionCalls);
23
40
  for (const action of actionCalls) {
24
41
  if (action.actionType === 'apex' && action.actionName) {
25
42
  actions.push(action.actionName);
26
43
  }
27
44
  }
28
- return actions;
45
+ const apexPluginCalls = normalizeArray(flowData.apexPluginCalls);
46
+ for (const pluginCall of apexPluginCalls) {
47
+ if (pluginCall.apexClass) {
48
+ actions.push(pluginCall.apexClass);
49
+ }
50
+ }
51
+ const transforms = normalizeArray(flowData.transforms);
52
+ for (const transform of transforms) {
53
+ if (transform.apexClass) {
54
+ actions.push(transform.apexClass);
55
+ }
56
+ }
57
+ return deduplicate(actions);
29
58
  }
30
59
  /**
31
60
  * Extract subflow references from Flow XML
@@ -35,18 +64,13 @@ function extractApexActions(flowData) {
35
64
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
36
65
  function extractSubflows(flowData) {
37
66
  const subflows = [];
38
- // subflows can be a single object or array
39
- const subflowCalls = Array.isArray(flowData.subflows)
40
- ? flowData.subflows
41
- : flowData.subflows
42
- ? [flowData.subflows]
43
- : [];
67
+ const subflowCalls = normalizeArray(flowData.subflows);
44
68
  for (const subflow of subflowCalls) {
45
69
  if (subflow.flowName) {
46
70
  subflows.push(subflow.flowName);
47
71
  }
48
72
  }
49
- return subflows;
73
+ return deduplicate(subflows);
50
74
  }
51
75
  /**
52
76
  * Extract record references (SObject types) from Flow XML
@@ -56,45 +80,25 @@ function extractSubflows(flowData) {
56
80
  // eslint-disable-next-line @typescript-eslint/no-explicit-any, complexity
57
81
  function extractRecordReferences(flowData) {
58
82
  const records = new Set();
59
- // recordLookups
60
- const recordLookups = Array.isArray(flowData.recordLookups)
61
- ? flowData.recordLookups
62
- : flowData.recordLookups
63
- ? [flowData.recordLookups]
64
- : [];
83
+ const recordLookups = normalizeArray(flowData.recordLookups);
65
84
  for (const lookup of recordLookups) {
66
85
  if (lookup.object) {
67
86
  records.add(lookup.object);
68
87
  }
69
88
  }
70
- // recordCreates
71
- const recordCreates = Array.isArray(flowData.recordCreates)
72
- ? flowData.recordCreates
73
- : flowData.recordCreates
74
- ? [flowData.recordCreates]
75
- : [];
89
+ const recordCreates = normalizeArray(flowData.recordCreates);
76
90
  for (const create of recordCreates) {
77
91
  if (create.object) {
78
92
  records.add(create.object);
79
93
  }
80
94
  }
81
- // recordUpdates
82
- const recordUpdates = Array.isArray(flowData.recordUpdates)
83
- ? flowData.recordUpdates
84
- : flowData.recordUpdates
85
- ? [flowData.recordUpdates]
86
- : [];
95
+ const recordUpdates = normalizeArray(flowData.recordUpdates);
87
96
  for (const update of recordUpdates) {
88
97
  if (update.object) {
89
98
  records.add(update.object);
90
99
  }
91
100
  }
92
- // recordDeletes
93
- const recordDeletes = Array.isArray(flowData.recordDeletes)
94
- ? flowData.recordDeletes
95
- : flowData.recordDeletes
96
- ? [flowData.recordDeletes]
97
- : [];
101
+ const recordDeletes = normalizeArray(flowData.recordDeletes);
98
102
  for (const deleteOp of recordDeletes) {
99
103
  if (deleteOp.object) {
100
104
  records.add(deleteOp.object);
@@ -105,16 +109,21 @@ function extractRecordReferences(flowData) {
105
109
  records.add(flowData.start.object);
106
110
  }
107
111
  // Record variables
108
- const variables = Array.isArray(flowData.variables)
109
- ? flowData.variables
110
- : flowData.variables
111
- ? [flowData.variables]
112
- : [];
112
+ const variables = normalizeArray(flowData.variables);
113
113
  for (const variable of variables) {
114
114
  if (variable.dataType === 'SObject' && variable.objectType) {
115
115
  records.add(variable.objectType);
116
116
  }
117
117
  }
118
+ const dynamicChoiceSets = normalizeArray(flowData.dynamicChoiceSets);
119
+ for (const choiceSet of dynamicChoiceSets) {
120
+ if (choiceSet.object) {
121
+ records.add(choiceSet.object);
122
+ }
123
+ if (choiceSet.picklistObject) {
124
+ records.add(choiceSet.picklistObject);
125
+ }
126
+ }
118
127
  return Array.from(records);
119
128
  }
120
129
  /**
@@ -125,23 +134,28 @@ function extractRecordReferences(flowData) {
125
134
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
126
135
  function extractGenAIPrompts(flowData) {
127
136
  const prompts = [];
128
- const actionCalls = Array.isArray(flowData.actionCalls)
129
- ? flowData.actionCalls
130
- : flowData.actionCalls
131
- ? [flowData.actionCalls]
132
- : [];
137
+ const actionCalls = normalizeArray(flowData.actionCalls);
133
138
  for (const action of actionCalls) {
134
- // GenAI actions have specific action types
135
- const actionType = String(action.actionType || '');
136
- if (actionType && (actionType.includes('genai') || actionType.includes('GenAi')) && action.actionName) {
139
+ const actionType = String(action.actionType || '').toLowerCase();
140
+ if (actionType && (actionType.includes('genai') || actionType.includes('prompt')) && action.actionName) {
137
141
  prompts.push(action.actionName);
138
142
  }
139
- // Also check for prompt template references
140
143
  if (action.promptTemplateApiName) {
141
144
  prompts.push(action.promptTemplateApiName);
142
145
  }
146
+ const inputParameters = normalizeArray(action.inputParameters);
147
+ for (const parameter of inputParameters) {
148
+ if (parameter.name === 'promptTemplateApiName' ||
149
+ parameter.name === 'promptTemplateName' ||
150
+ parameter.name === 'promptTemplateDeveloperName') {
151
+ const value = extractStringValue(parameter.value);
152
+ if (value) {
153
+ prompts.push(value);
154
+ }
155
+ }
156
+ }
143
157
  }
144
- return prompts;
158
+ return deduplicate(prompts);
145
159
  }
146
160
  /**
147
161
  * Extract screen flow fields from Flow XML
@@ -151,10 +165,10 @@ function extractGenAIPrompts(flowData) {
151
165
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
152
166
  function extractScreenFields(flowData) {
153
167
  const fields = [];
154
- const screens = Array.isArray(flowData.screens) ? flowData.screens : flowData.screens ? [flowData.screens] : [];
168
+ const screens = normalizeArray(flowData.screens);
155
169
  for (const screen of screens) {
156
170
  if (screen.fields) {
157
- const screenFields = Array.isArray(screen.fields) ? screen.fields : [screen.fields];
171
+ const screenFields = normalizeArray(screen.fields);
158
172
  for (const field of screenFields) {
159
173
  if (field.name) {
160
174
  fields.push(field.name);
@@ -162,7 +176,7 @@ function extractScreenFields(flowData) {
162
176
  }
163
177
  }
164
178
  }
165
- return fields;
179
+ return deduplicate(fields);
166
180
  }
167
181
  /**
168
182
  * Extract decision logic from Flow XML
@@ -172,17 +186,13 @@ function extractScreenFields(flowData) {
172
186
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
173
187
  function extractDecisions(flowData) {
174
188
  const decisions = [];
175
- const decisionNodes = Array.isArray(flowData.decisions)
176
- ? flowData.decisions
177
- : flowData.decisions
178
- ? [flowData.decisions]
179
- : [];
189
+ const decisionNodes = normalizeArray(flowData.decisions);
180
190
  for (const decision of decisionNodes) {
181
191
  if (decision.name) {
182
192
  decisions.push(decision.name);
183
193
  }
184
194
  }
185
- return decisions;
195
+ return deduplicate(decisions);
186
196
  }
187
197
  /**
188
198
  * Parse a Flow file and extract dependencies