@jterrats/smart-deployment 1.0.5 → 1.2.1

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 (265) hide show
  1. package/README.md +3 -2
  2. package/lib/ai/wave-validation-prompt.d.ts +2 -0
  3. package/lib/ai/wave-validation-prompt.js +56 -0
  4. package/lib/ai/wave-validation-prompt.js.map +1 -0
  5. package/lib/ai/wave-validation-report.d.ts +2 -0
  6. package/lib/ai/wave-validation-report.js +96 -0
  7. package/lib/ai/wave-validation-report.js.map +1 -0
  8. package/lib/ai/wave-validation-response-parser.d.ts +8 -0
  9. package/lib/ai/wave-validation-response-parser.js +112 -0
  10. package/lib/ai/wave-validation-response-parser.js.map +1 -0
  11. package/lib/ai/wave-validation-result-synthesis.d.ts +6 -0
  12. package/lib/ai/wave-validation-result-synthesis.js +49 -0
  13. package/lib/ai/wave-validation-result-synthesis.js.map +1 -0
  14. package/lib/ai/wave-validation-service.d.ts +1 -55
  15. package/lib/ai/wave-validation-service.js +11 -359
  16. package/lib/ai/wave-validation-service.js.map +1 -1
  17. package/lib/ai/wave-validation-transport.d.ts +7 -0
  18. package/lib/ai/wave-validation-transport.js +10 -0
  19. package/lib/ai/wave-validation-transport.js.map +1 -0
  20. package/lib/analysis/analysis-reporter.d.ts +29 -0
  21. package/lib/analysis/analysis-reporter.js +84 -1
  22. package/lib/analysis/analysis-reporter.js.map +1 -1
  23. package/lib/analysis/analyze-context-service.d.ts +1 -1
  24. package/lib/analysis/analyze-context-service.js +2 -0
  25. package/lib/analysis/analyze-context-service.js.map +1 -1
  26. package/lib/analysis/project-analysis-service.d.ts +2 -0
  27. package/lib/analysis/project-analysis-service.js +2 -0
  28. package/lib/analysis/project-analysis-service.js.map +1 -1
  29. package/lib/commands/ci-publish.d.ts +14 -0
  30. package/lib/commands/ci-publish.js +69 -0
  31. package/lib/commands/ci-publish.js.map +1 -0
  32. package/lib/commands/start.d.ts +1 -0
  33. package/lib/commands/start.js +14 -1
  34. package/lib/commands/start.js.map +1 -1
  35. package/lib/commands/status.d.ts +2 -0
  36. package/lib/commands/status.js +1 -0
  37. package/lib/commands/status.js.map +1 -1
  38. package/lib/commands/validate.d.ts +3 -3
  39. package/lib/commands/validate.js +4 -4
  40. package/lib/commands/validate.js.map +1 -1
  41. package/lib/constants/api-version.d.ts +2 -2
  42. package/lib/constants/api-version.js +2 -2
  43. package/lib/constants/deployment-order.js +11 -8
  44. package/lib/constants/deployment-order.js.map +1 -1
  45. package/lib/dependencies/circular-dependency-detector.d.ts +1 -31
  46. package/lib/dependencies/circular-dependency-detector.js +7 -156
  47. package/lib/dependencies/circular-dependency-detector.js.map +1 -1
  48. package/lib/dependencies/cycle-break-suggestions.d.ts +3 -0
  49. package/lib/dependencies/cycle-break-suggestions.js +63 -0
  50. package/lib/dependencies/cycle-break-suggestions.js.map +1 -0
  51. package/lib/dependencies/cycle-discovery.d.ts +16 -0
  52. package/lib/dependencies/cycle-discovery.js +70 -0
  53. package/lib/dependencies/cycle-discovery.js.map +1 -0
  54. package/lib/dependencies/dependency-graph-builder.d.ts +0 -65
  55. package/lib/dependencies/dependency-graph-builder.js +19 -233
  56. package/lib/dependencies/dependency-graph-builder.js.map +1 -1
  57. package/lib/dependencies/dependency-graph-intake.d.ts +17 -0
  58. package/lib/dependencies/dependency-graph-intake.js +20 -0
  59. package/lib/dependencies/dependency-graph-intake.js.map +1 -0
  60. package/lib/dependencies/dependency-graph-stats.d.ts +4 -0
  61. package/lib/dependencies/dependency-graph-stats.js +82 -0
  62. package/lib/dependencies/dependency-graph-stats.js.map +1 -0
  63. package/lib/dependencies/dependency-graph-validation.d.ts +16 -0
  64. package/lib/dependencies/dependency-graph-validation.js +78 -0
  65. package/lib/dependencies/dependency-graph-validation.js.map +1 -0
  66. package/lib/dependencies/dependency-impact-analyzer.d.ts +1 -22
  67. package/lib/dependencies/dependency-impact-analyzer.js +12 -110
  68. package/lib/dependencies/dependency-impact-analyzer.js.map +1 -1
  69. package/lib/dependencies/dependency-impact-scoring.d.ts +5 -0
  70. package/lib/dependencies/dependency-impact-scoring.js +24 -0
  71. package/lib/dependencies/dependency-impact-scoring.js.map +1 -0
  72. package/lib/dependencies/dependency-impact-traversal.d.ts +18 -0
  73. package/lib/dependencies/dependency-impact-traversal.js +74 -0
  74. package/lib/dependencies/dependency-impact-traversal.js.map +1 -0
  75. package/lib/dependencies/dependency-resolution-classifier.d.ts +19 -0
  76. package/lib/dependencies/dependency-resolution-classifier.js +67 -0
  77. package/lib/dependencies/dependency-resolution-classifier.js.map +1 -0
  78. package/lib/dependencies/dependency-resolver.d.ts +1 -48
  79. package/lib/dependencies/dependency-resolver.js +12 -181
  80. package/lib/dependencies/dependency-resolver.js.map +1 -1
  81. package/lib/dependencies/dynamic-query-dependency-references.d.ts +3 -0
  82. package/lib/dependencies/dynamic-query-dependency-references.js +41 -0
  83. package/lib/dependencies/dynamic-query-dependency-references.js.map +1 -0
  84. package/lib/dependencies/topological-dependency-sorter.d.ts +10 -0
  85. package/lib/dependencies/topological-dependency-sorter.js +84 -0
  86. package/lib/dependencies/topological-dependency-sorter.js.map +1 -0
  87. package/lib/deployment/cycle-remediation-runner.d.ts +1 -0
  88. package/lib/deployment/cycle-remediation-runner.js +5 -1
  89. package/lib/deployment/cycle-remediation-runner.js.map +1 -1
  90. package/lib/deployment/deployment-runner.d.ts +3 -1
  91. package/lib/deployment/deployment-runner.js +6 -1
  92. package/lib/deployment/deployment-runner.js.map +1 -1
  93. package/lib/deployment/deployment-status-service.d.ts +2 -0
  94. package/lib/deployment/deployment-status-service.js +2 -0
  95. package/lib/deployment/deployment-status-service.js.map +1 -1
  96. package/lib/deployment/deployment-validation-service.js +1 -1
  97. package/lib/deployment/deployment-validation-service.js.map +1 -1
  98. package/lib/deployment/dynamic-query-target-validator.d.ts +24 -0
  99. package/lib/deployment/dynamic-query-target-validator.js +65 -0
  100. package/lib/deployment/dynamic-query-target-validator.js.map +1 -0
  101. package/lib/deployment/sf-cli-integration.d.ts +1 -0
  102. package/lib/deployment/sf-cli-integration.js +1 -1
  103. package/lib/deployment/sf-cli-integration.js.map +1 -1
  104. package/lib/deployment/sf-cli-metadata-lookup.d.ts +4 -0
  105. package/lib/deployment/sf-cli-metadata-lookup.js +26 -0
  106. package/lib/deployment/sf-cli-metadata-lookup.js.map +1 -0
  107. package/lib/deployment/special-deployment-plan.d.ts +41 -0
  108. package/lib/deployment/special-deployment-plan.js +265 -0
  109. package/lib/deployment/special-deployment-plan.js.map +1 -0
  110. package/lib/deployment/start-execution-service.d.ts +5 -0
  111. package/lib/deployment/start-execution-service.js +26 -6
  112. package/lib/deployment/start-execution-service.js.map +1 -1
  113. package/lib/deployment/wave-graph-state.d.ts +6 -0
  114. package/lib/deployment/wave-graph-state.js +89 -0
  115. package/lib/deployment/wave-graph-state.js.map +1 -0
  116. package/lib/deployment/wave-manifest-service.d.ts +1 -0
  117. package/lib/deployment/wave-manifest-service.js +1 -1
  118. package/lib/deployment/wave-manifest-service.js.map +1 -1
  119. package/lib/errors/deployment-error.js +1 -1
  120. package/lib/errors/deployment-error.js.map +1 -1
  121. package/lib/parsers/apex-class-dependencies.d.ts +4 -0
  122. package/lib/parsers/apex-class-dependencies.js +122 -0
  123. package/lib/parsers/apex-class-dependencies.js.map +1 -0
  124. package/lib/parsers/apex-class-lexical.d.ts +3 -0
  125. package/lib/parsers/apex-class-lexical.js +101 -0
  126. package/lib/parsers/apex-class-lexical.js.map +1 -0
  127. package/lib/parsers/apex-class-names.d.ts +18 -0
  128. package/lib/parsers/apex-class-names.js +93 -0
  129. package/lib/parsers/apex-class-names.js.map +1 -0
  130. package/lib/parsers/apex-class-parser-model.d.ts +59 -0
  131. package/lib/parsers/apex-class-parser-model.js +2 -0
  132. package/lib/parsers/apex-class-parser-model.js.map +1 -0
  133. package/lib/parsers/apex-class-parser.d.ts +3 -29
  134. package/lib/parsers/apex-class-parser.js +10 -395
  135. package/lib/parsers/apex-class-parser.js.map +1 -1
  136. package/lib/parsers/apex-class-symbols.d.ts +2 -0
  137. package/lib/parsers/apex-class-symbols.js +61 -0
  138. package/lib/parsers/apex-class-symbols.js.map +1 -0
  139. package/lib/parsers/apex-dynamic-query-analysis.d.ts +2 -0
  140. package/lib/parsers/apex-dynamic-query-analysis.js +150 -0
  141. package/lib/parsers/apex-dynamic-query-analysis.js.map +1 -0
  142. package/lib/parsers/custom-metadata-dynamic-query-analysis.d.ts +2 -0
  143. package/lib/parsers/custom-metadata-dynamic-query-analysis.js +50 -0
  144. package/lib/parsers/custom-metadata-dynamic-query-analysis.js.map +1 -0
  145. package/lib/parsers/custom-metadata-parser.d.ts +2 -0
  146. package/lib/parsers/custom-metadata-parser.js +3 -0
  147. package/lib/parsers/custom-metadata-parser.js.map +1 -1
  148. package/lib/parsers/custom-object-dependency-builder.d.ts +3 -0
  149. package/lib/parsers/custom-object-dependency-builder.js +103 -0
  150. package/lib/parsers/custom-object-dependency-builder.js.map +1 -0
  151. package/lib/parsers/custom-object-parser.js +1 -208
  152. package/lib/parsers/custom-object-parser.js.map +1 -1
  153. package/lib/parsers/custom-object-reference-helpers.d.ts +4 -0
  154. package/lib/parsers/custom-object-reference-helpers.js +92 -0
  155. package/lib/parsers/custom-object-reference-helpers.js.map +1 -0
  156. package/lib/parsers/dynamic-query-reference.d.ts +16 -0
  157. package/lib/parsers/dynamic-query-reference.js +65 -0
  158. package/lib/parsers/dynamic-query-reference.js.map +1 -0
  159. package/lib/parsers/layout-action-analysis.d.ts +6 -0
  160. package/lib/parsers/layout-action-analysis.js +36 -0
  161. package/lib/parsers/layout-action-analysis.js.map +1 -0
  162. package/lib/parsers/layout-parser.js +4 -272
  163. package/lib/parsers/layout-parser.js.map +1 -1
  164. package/lib/parsers/layout-reference-analysis.d.ts +9 -0
  165. package/lib/parsers/layout-reference-analysis.js +70 -0
  166. package/lib/parsers/layout-reference-analysis.js.map +1 -0
  167. package/lib/parsers/layout-result-assembly.d.ts +5 -0
  168. package/lib/parsers/layout-result-assembly.js +35 -0
  169. package/lib/parsers/layout-result-assembly.js.map +1 -0
  170. package/lib/parsers/layout-section-analysis.d.ts +7 -0
  171. package/lib/parsers/layout-section-analysis.js +9 -0
  172. package/lib/parsers/layout-section-analysis.js.map +1 -0
  173. package/lib/parsers/lwc-code-analysis.d.ts +10 -0
  174. package/lib/parsers/lwc-code-analysis.js +161 -0
  175. package/lib/parsers/lwc-code-analysis.js.map +1 -0
  176. package/lib/parsers/lwc-metadata-analysis.d.ts +6 -0
  177. package/lib/parsers/lwc-metadata-analysis.js +112 -0
  178. package/lib/parsers/lwc-metadata-analysis.js.map +1 -0
  179. package/lib/parsers/lwc-parser.d.ts +3 -27
  180. package/lib/parsers/lwc-parser.js +6 -377
  181. package/lib/parsers/lwc-parser.js.map +1 -1
  182. package/lib/parsers/lwc-result-assembly.d.ts +4 -0
  183. package/lib/parsers/lwc-result-assembly.js +47 -0
  184. package/lib/parsers/lwc-result-assembly.js.map +1 -0
  185. package/lib/presentation/status-command-presenter.d.ts +1 -0
  186. package/lib/presentation/status-command-presenter.js +20 -0
  187. package/lib/presentation/status-command-presenter.js.map +1 -1
  188. package/lib/scanner/forceignore-parser.d.ts +1 -0
  189. package/lib/scanner/forceignore-parser.js +14 -3
  190. package/lib/scanner/forceignore-parser.js.map +1 -1
  191. package/lib/scanner/structure-validator.js +1 -1
  192. package/lib/services/metadata-scanner-service.d.ts +2 -0
  193. package/lib/services/metadata-scanner-service.js +9 -2
  194. package/lib/services/metadata-scanner-service.js.map +1 -1
  195. package/lib/services/scanners/additional-metadata-scanner.d.ts +2 -0
  196. package/lib/services/scanners/additional-metadata-scanner.js +183 -0
  197. package/lib/services/scanners/additional-metadata-scanner.js.map +1 -0
  198. package/lib/services/scanners/automation-ai-metadata-scanner.d.ts +1 -0
  199. package/lib/services/scanners/automation-ai-metadata-scanner.js +11 -0
  200. package/lib/services/scanners/automation-ai-metadata-scanner.js.map +1 -1
  201. package/lib/services/scanners/code-metadata-scanner.js +14 -1
  202. package/lib/services/scanners/code-metadata-scanner.js.map +1 -1
  203. package/lib/services/scanners/data-metadata-scanner.js +24 -8
  204. package/lib/services/scanners/data-metadata-scanner.js.map +1 -1
  205. package/lib/types/metadata.d.ts +1 -1
  206. package/lib/utils/cache-entry-serializer.d.ts +7 -0
  207. package/lib/utils/cache-entry-serializer.js +15 -0
  208. package/lib/utils/cache-entry-serializer.js.map +1 -0
  209. package/lib/utils/cache-expiry-policy.d.ts +7 -0
  210. package/lib/utils/cache-expiry-policy.js +34 -0
  211. package/lib/utils/cache-expiry-policy.js.map +1 -0
  212. package/lib/utils/cache-key-derivation.d.ts +11 -0
  213. package/lib/utils/cache-key-derivation.js +28 -0
  214. package/lib/utils/cache-key-derivation.js.map +1 -0
  215. package/lib/utils/cache-lock-lifecycle.d.ts +15 -0
  216. package/lib/utils/cache-lock-lifecycle.js +84 -0
  217. package/lib/utils/cache-lock-lifecycle.js.map +1 -0
  218. package/lib/utils/cache-logger.d.ts +8 -0
  219. package/lib/utils/cache-logger.js +19 -0
  220. package/lib/utils/cache-logger.js.map +1 -0
  221. package/lib/utils/cache-manager.d.ts +1 -2
  222. package/lib/utils/cache-manager.js +7 -253
  223. package/lib/utils/cache-manager.js.map +1 -1
  224. package/lib/utils/cache-storage.d.ts +20 -0
  225. package/lib/utils/cache-storage.js +83 -0
  226. package/lib/utils/cache-storage.js.map +1 -0
  227. package/lib/validators/xml-metadata-validator.js +1 -1
  228. package/lib/waves/priority-wave-generator.js +8 -2
  229. package/lib/waves/priority-wave-generator.js.map +1 -1
  230. package/lib/waves/test-optimizer-discovery.d.ts +12 -0
  231. package/lib/waves/test-optimizer-discovery.js +46 -0
  232. package/lib/waves/test-optimizer-discovery.js.map +1 -0
  233. package/lib/waves/test-optimizer-matching.d.ts +6 -0
  234. package/lib/waves/test-optimizer-matching.js +43 -0
  235. package/lib/waves/test-optimizer-matching.js.map +1 -0
  236. package/lib/waves/test-optimizer-model.d.ts +92 -0
  237. package/lib/waves/test-optimizer-model.js +2 -0
  238. package/lib/waves/test-optimizer-model.js.map +1 -0
  239. package/lib/waves/test-optimizer-scoring.d.ts +11 -0
  240. package/lib/waves/test-optimizer-scoring.js +53 -0
  241. package/lib/waves/test-optimizer-scoring.js.map +1 -0
  242. package/lib/waves/test-optimizer.d.ts +2 -102
  243. package/lib/waves/test-optimizer.js +9 -154
  244. package/lib/waves/test-optimizer.js.map +1 -1
  245. package/lib/waves/wave-builder.d.ts +0 -11
  246. package/lib/waves/wave-builder.js +19 -193
  247. package/lib/waves/wave-builder.js.map +1 -1
  248. package/lib/waves/wave-graph.d.ts +25 -0
  249. package/lib/waves/wave-graph.js +138 -0
  250. package/lib/waves/wave-graph.js.map +1 -0
  251. package/lib/waves/wave-metadata.d.ts +4 -0
  252. package/lib/waves/wave-metadata.js +36 -0
  253. package/lib/waves/wave-metadata.js.map +1 -0
  254. package/lib/waves/wave-priority-policy.d.ts +5 -0
  255. package/lib/waves/wave-priority-policy.js +83 -0
  256. package/lib/waves/wave-priority-policy.js.map +1 -0
  257. package/lib/waves/wave-topology.d.ts +28 -0
  258. package/lib/waves/wave-topology.js +65 -0
  259. package/lib/waves/wave-topology.js.map +1 -0
  260. package/messages/start.json +5 -5
  261. package/messages/validate.json +1 -1
  262. package/npm-shrinkwrap.json +342 -751
  263. package/oclif.lock +83 -262
  264. package/oclif.manifest.json +77 -7
  265. package/package.json +6 -2
@@ -0,0 +1,150 @@
1
+ import { parseSoqlReference } from './dynamic-query-reference.js';
2
+ const DYNAMIC_QUERY_CALL_PATTERN = /\b(?:Database\.(?:query|getQueryLocator)|Search\.query)\s*\(/g;
3
+ const STRING_ASSIGNMENT_PATTERN = /\bString\s+([a-zA-Z][a-zA-Z0-9_]*)\s*=\s*([^;]+);/g;
4
+ const IDENTIFIER_PATTERN = /^[a-zA-Z][a-zA-Z0-9_]*$/;
5
+ export function extractDynamicQueryReferences(code) {
6
+ const constants = collectStringAssignments(code);
7
+ const references = [];
8
+ const seen = new Set();
9
+ for (const expression of collectDynamicQueryExpressions(code)) {
10
+ const resolved = resolveStringExpression(expression, constants);
11
+ const reference = parseDynamicQueryReference(resolved);
12
+ if (!reference) {
13
+ continue;
14
+ }
15
+ const key = `${reference.objectName ?? ''}:${reference.fieldNames.join(',')}:${reference.rawQuery}`;
16
+ if (!seen.has(key)) {
17
+ seen.add(key);
18
+ references.push(reference);
19
+ }
20
+ }
21
+ return references;
22
+ }
23
+ function collectStringAssignments(code) {
24
+ const assignments = new Map();
25
+ for (const match of code.matchAll(STRING_ASSIGNMENT_PATTERN)) {
26
+ assignments.set(match[1], resolveStringExpression(match[2], assignments));
27
+ }
28
+ return assignments;
29
+ }
30
+ function collectDynamicQueryExpressions(code) {
31
+ const expressions = [];
32
+ for (const match of code.matchAll(DYNAMIC_QUERY_CALL_PATTERN)) {
33
+ const startIndex = match.index + match[0].length;
34
+ const expression = readCallExpression(code, startIndex);
35
+ if (expression) {
36
+ expressions.push(expression);
37
+ }
38
+ }
39
+ return expressions;
40
+ }
41
+ function readCallExpression(code, startIndex) {
42
+ let depth = 1;
43
+ let stringDelimiter = null;
44
+ let escapeNext = false;
45
+ for (let index = startIndex; index < code.length; index++) {
46
+ const current = code[index];
47
+ if (stringDelimiter) {
48
+ if (escapeNext) {
49
+ escapeNext = false;
50
+ }
51
+ else if (current === '\\') {
52
+ escapeNext = true;
53
+ }
54
+ else if (current === stringDelimiter) {
55
+ stringDelimiter = null;
56
+ }
57
+ continue;
58
+ }
59
+ if (current === "'" || current === '"') {
60
+ stringDelimiter = current;
61
+ continue;
62
+ }
63
+ if (current === '(') {
64
+ depth++;
65
+ }
66
+ else if (current === ')') {
67
+ depth--;
68
+ if (depth === 0) {
69
+ return code.slice(startIndex, index).trim();
70
+ }
71
+ }
72
+ }
73
+ return null;
74
+ }
75
+ function resolveStringExpression(expression, constants) {
76
+ const parts = splitStringExpression(expression);
77
+ let value = '';
78
+ let fullyResolved = true;
79
+ let usedConstant = false;
80
+ for (const part of parts) {
81
+ const literal = readStringLiteral(part);
82
+ if (literal !== null) {
83
+ value += literal;
84
+ continue;
85
+ }
86
+ if (IDENTIFIER_PATTERN.test(part) && constants.has(part)) {
87
+ const resolved = constants.get(part);
88
+ value += resolved.value;
89
+ fullyResolved = fullyResolved && resolved.fullyResolved;
90
+ usedConstant = true;
91
+ continue;
92
+ }
93
+ value += `{${part}}`;
94
+ fullyResolved = false;
95
+ }
96
+ return {
97
+ value,
98
+ fullyResolved,
99
+ origin: usedConstant ? 'apex-constant' : 'apex-string',
100
+ };
101
+ }
102
+ function splitStringExpression(expression) {
103
+ const parts = [];
104
+ let stringDelimiter = null;
105
+ let escapeNext = false;
106
+ let partStartIndex = 0;
107
+ for (let index = 0; index < expression.length; index++) {
108
+ const current = expression[index];
109
+ if (stringDelimiter) {
110
+ if (escapeNext) {
111
+ escapeNext = false;
112
+ }
113
+ else if (current === '\\') {
114
+ escapeNext = true;
115
+ }
116
+ else if (current === stringDelimiter) {
117
+ stringDelimiter = null;
118
+ }
119
+ continue;
120
+ }
121
+ if (current === "'" || current === '"') {
122
+ stringDelimiter = current;
123
+ continue;
124
+ }
125
+ if (current === '+') {
126
+ parts.push(expression.slice(partStartIndex, index).trim());
127
+ partStartIndex = index + 1;
128
+ }
129
+ }
130
+ parts.push(expression.slice(partStartIndex).trim());
131
+ return parts;
132
+ }
133
+ function readStringLiteral(expression) {
134
+ const match = /^'((?:\\'|[^'])*)'$|^"((?:\\"|[^"])*)"$/.exec(expression);
135
+ if (!match) {
136
+ return null;
137
+ }
138
+ return (match[1] ?? match[2] ?? '').replaceAll("\\'", "'").replaceAll('\\"', '"');
139
+ }
140
+ function parseDynamicQueryReference(resolved) {
141
+ const reference = parseSoqlReference(resolved.value, resolved.origin);
142
+ if (!reference) {
143
+ return null;
144
+ }
145
+ return {
146
+ ...reference,
147
+ confidence: resolved.fullyResolved ? reference.confidence : 'low',
148
+ };
149
+ }
150
+ //# sourceMappingURL=apex-dynamic-query-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apex-dynamic-query-analysis.js","sourceRoot":"","sources":["../../src/parsers/apex-dynamic-query-analysis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type DynamicQueryReference } from './dynamic-query-reference.js';
2
+ export declare function extractCustomMetadataDynamicQueryReferences(recordName: string, values: Readonly<Record<string, unknown>>): DynamicQueryReference[];
@@ -0,0 +1,50 @@
1
+ import { buildFieldListReference, parseSoqlReference } from './dynamic-query-reference.js';
2
+ export function extractCustomMetadataDynamicQueryReferences(recordName, values) {
3
+ const references = [];
4
+ const seen = new Set();
5
+ const objectName = findConfiguredObjectName(values);
6
+ for (const [fieldName, value] of Object.entries(values)) {
7
+ if (typeof value !== 'string') {
8
+ continue;
9
+ }
10
+ const source = { recordName, fieldName };
11
+ const soqlReference = parseSoqlReference(value, 'custom-metadata-value', source);
12
+ if (soqlReference) {
13
+ addUniqueReference(references, seen, soqlReference);
14
+ continue;
15
+ }
16
+ if (isFieldListConfigName(fieldName)) {
17
+ const fieldListReference = buildFieldListReference(objectName, value, 'custom-metadata-value', source);
18
+ if (fieldListReference) {
19
+ addUniqueReference(references, seen, fieldListReference);
20
+ }
21
+ }
22
+ }
23
+ return references;
24
+ }
25
+ function addUniqueReference(references, seen, reference) {
26
+ const key = `${reference.source?.recordName ?? ''}:${reference.source?.fieldName ?? ''}:${reference.objectName ?? ''}:${reference.fieldNames.join(',')}:${reference.rawQuery}`;
27
+ if (seen.has(key)) {
28
+ return;
29
+ }
30
+ seen.add(key);
31
+ references.push(reference);
32
+ }
33
+ function findConfiguredObjectName(values) {
34
+ for (const [fieldName, value] of Object.entries(values)) {
35
+ if (typeof value === 'string' && isObjectConfigName(fieldName) && isObjectApiName(value)) {
36
+ return value;
37
+ }
38
+ }
39
+ return undefined;
40
+ }
41
+ function isObjectConfigName(fieldName) {
42
+ return /(?:^|_)(?:Object|SObject|Entity|TargetObject|ObjectApiName)(?:__c)?$/i.test(fieldName);
43
+ }
44
+ function isFieldListConfigName(fieldName) {
45
+ return /(?:^|_)(?:Fields|FieldList|SelectFields|QueryFields|Columns)(?:__c)?$/i.test(fieldName);
46
+ }
47
+ function isObjectApiName(value) {
48
+ return /^[a-zA-Z][a-zA-Z0-9_]*(?:__c|__mdt)?$/.test(value);
49
+ }
50
+ //# sourceMappingURL=custom-metadata-dynamic-query-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-metadata-dynamic-query-analysis.js","sourceRoot":"","sources":["../../src/parsers/custom-metadata-dynamic-query-analysis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAA8B,MAAM,8BAA8B,CAAC;AAEvH,MAAM,UAAU,2CAA2C,CACzD,UAAkB,EAClB,MAAyC;IAEzC,MAAM,UAAU,GAA4B,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,UAAU,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAEpD,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;QACzC,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,EAAE,MAAM,CAAC,CAAC;QACjF,IAAI,aAAa,EAAE,CAAC;YAClB,kBAAkB,CAAC,UAAU,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YACpD,SAAS;QACX,CAAC;QAED,IAAI,qBAAqB,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,UAAU,EAAE,KAAK,EAAE,uBAAuB,EAAE,MAAM,CAAC,CAAC;YACvG,IAAI,kBAAkB,EAAE,CAAC;gBACvB,kBAAkB,CAAC,UAAU,EAAE,IAAI,EAAE,kBAAkB,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,kBAAkB,CACzB,UAAmC,EACnC,IAAiB,EACjB,SAAgC;IAEhC,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE,IAAI,SAAS,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,IACpF,SAAS,CAAC,UAAU,IAAI,EAC1B,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;IAC3D,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACd,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAyC;IACzE,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACxD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,kBAAkB,CAAC,SAAS,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;YACzF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,OAAO,uEAAuE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACjG,CAAC;AAED,SAAS,qBAAqB,CAAC,SAAiB;IAC9C,OAAO,wEAAwE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,uCAAuC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { CustomMetadataType, CustomMetadataField, CustomMetadataRecord as CMDRecord } from '../types/salesforce/custom-metadata.js';
2
+ import type { DynamicQueryReference } from './dynamic-query-reference.js';
2
3
  /**
3
4
  * Custom Metadata dependency types
4
5
  */
@@ -18,6 +19,7 @@ export type CustomMetadataDependency = {
18
19
  export type CustomMetadataRecord = Omit<CMDRecord, 'values'> & {
19
20
  fullName: string;
20
21
  values: Record<string, unknown>;
22
+ dynamicQueryReferences: DynamicQueryReference[];
21
23
  };
22
24
  /**
23
25
  * Result of parsing a Custom Metadata Type
@@ -1,6 +1,7 @@
1
1
  import { getLogger } from '../utils/logger.js';
2
2
  import { ParsingError } from '../errors/parsing-error.js';
3
3
  import { parseXml } from '../utils/xml.js';
4
+ import { extractCustomMetadataDynamicQueryReferences } from './custom-metadata-dynamic-query-analysis.js';
4
5
  const logger = getLogger('CustomMetadataParser');
5
6
  function extractScalarXmlValue(value) {
6
7
  if (value === null || value === undefined) {
@@ -158,9 +159,11 @@ export async function parseCustomMetadataRecord(recordName, metadataContent) {
158
159
  label,
159
160
  protected: protectedFlag,
160
161
  values,
162
+ dynamicQueryReferences: extractCustomMetadataDynamicQueryReferences(recordName, values),
161
163
  };
162
164
  logger.debug(`Parsed custom metadata record: ${recordName}`, {
163
165
  valuesCount: Object.keys(values).length,
166
+ dynamicQueryReferences: record.dynamicQueryReferences.length,
164
167
  });
165
168
  return record;
166
169
  }
@@ -1 +1 @@
1
- {"version":3,"file":"custom-metadata-parser.js","sourceRoot":"","sources":["../../src/parsers/custom-metadata-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"custom-metadata-parser.js","sourceRoot":"","sources":["../../src/parsers/custom-metadata-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CustomField, RecordType, ValidationRule } from '../types/salesforce/object.js';
2
+ import type { CustomObjectDependency } from './custom-object-parser.js';
3
+ export declare function buildDependencies(fields: CustomField[], validationRules: ValidationRule[], recordTypes: RecordType[]): CustomObjectDependency[];
@@ -0,0 +1,103 @@
1
+ import { extractApexReferences, extractCustomFieldReferences, resolveFormulaReferences, } from './custom-object-reference-helpers.js';
2
+ export function buildDependencies(fields, validationRules, recordTypes) {
3
+ return [
4
+ ...extractFieldDependencies(fields),
5
+ ...extractValidationRuleDependencies(validationRules, fields),
6
+ ...extractRecordTypeDependencies(recordTypes),
7
+ ];
8
+ }
9
+ function extractFieldDependencies(fields) {
10
+ const dependencies = [];
11
+ for (const field of fields) {
12
+ dependencies.push(...extractRelationshipFieldDependencies(field));
13
+ dependencies.push(...extractFormulaFieldDependencies(field, fields));
14
+ dependencies.push(...extractSummaryFieldDependencies(field));
15
+ }
16
+ return dependencies;
17
+ }
18
+ function extractRelationshipFieldDependencies(field) {
19
+ if (!field.referenceTo || (field.type !== 'Lookup' && field.type !== 'MasterDetail')) {
20
+ return [];
21
+ }
22
+ return field.referenceTo.map((referencedObject) => ({
23
+ type: field.type === 'MasterDetail' ? 'master_detail_field' : 'lookup_field',
24
+ name: field.fullName,
25
+ referencedObject,
26
+ fieldName: field.fullName,
27
+ }));
28
+ }
29
+ function extractFormulaFieldDependencies(field, fields) {
30
+ if (!field.formula) {
31
+ return [];
32
+ }
33
+ return [
34
+ ...resolveFormulaReferences(field.formula, fields).map((referencedObject) => ({
35
+ type: 'formula_field',
36
+ name: field.fullName,
37
+ referencedObject,
38
+ fieldName: field.fullName,
39
+ })),
40
+ ...extractApexReferences(field.formula).map((apexClass) => ({
41
+ type: 'apex_class',
42
+ name: apexClass,
43
+ fieldName: field.fullName,
44
+ })),
45
+ ...extractCustomFieldReferences(field.formula, fields, field.fullName).map((customFieldRef) => ({
46
+ type: 'custom_field',
47
+ name: customFieldRef,
48
+ fieldName: customFieldRef,
49
+ })),
50
+ ];
51
+ }
52
+ function extractSummaryFieldDependencies(field) {
53
+ if (field.type !== 'Summary') {
54
+ return [];
55
+ }
56
+ const dependencies = [];
57
+ if (field.summaryForeignKey) {
58
+ dependencies.push({
59
+ type: 'custom_field',
60
+ name: field.summaryForeignKey,
61
+ fieldName: field.summaryForeignKey,
62
+ });
63
+ }
64
+ if (field.summarizedField) {
65
+ dependencies.push({
66
+ type: 'custom_field',
67
+ name: field.summarizedField,
68
+ fieldName: field.summarizedField,
69
+ });
70
+ }
71
+ return dependencies;
72
+ }
73
+ function extractValidationRuleDependencies(validationRules, fields) {
74
+ return validationRules.flatMap((rule) => extractValidationRuleDependency(rule, fields));
75
+ }
76
+ function extractValidationRuleDependency(rule, fields) {
77
+ if (!rule.errorConditionFormula) {
78
+ return [];
79
+ }
80
+ return [
81
+ ...resolveFormulaReferences(rule.errorConditionFormula, fields).map((referencedObject) => ({
82
+ type: 'validation_rule',
83
+ name: rule.fullName,
84
+ referencedObject,
85
+ })),
86
+ ...extractApexReferences(rule.errorConditionFormula).map((apexClass) => ({
87
+ type: 'apex_class',
88
+ name: apexClass,
89
+ })),
90
+ ...extractCustomFieldReferences(rule.errorConditionFormula, fields).map((customFieldRef) => ({
91
+ type: 'custom_field',
92
+ name: customFieldRef,
93
+ fieldName: customFieldRef,
94
+ })),
95
+ ];
96
+ }
97
+ function extractRecordTypeDependencies(recordTypes) {
98
+ return recordTypes.map((recordType) => ({
99
+ type: 'record_type',
100
+ name: recordType.fullName,
101
+ }));
102
+ }
103
+ //# sourceMappingURL=custom-object-dependency-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-object-dependency-builder.js","sourceRoot":"","sources":["../../src/parsers/custom-object-dependency-builder.ts"],"names":[],"mappings":"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"}
@@ -1,112 +1,9 @@
1
1
  import { getLogger } from '../utils/logger.js';
2
2
  import { ParsingError } from '../errors/parsing-error.js';
3
3
  import { parseXml } from '../utils/xml.js';
4
+ import { buildDependencies } from './custom-object-dependency-builder.js';
4
5
  import { normalizeOptionalArray } from './parser-utils.js';
5
6
  const logger = getLogger('CustomObjectParser');
6
- /**
7
- * Extract object references from formula
8
- *
9
- * @ac US-020-AC-3: Extract formula field dependencies
10
- */
11
- function extractFormulaReferences(formula) {
12
- const references = new Set();
13
- // Pattern: ObjectName.FieldName or $ObjectType.ObjectName
14
- const objectPattern = /\b([A-Z][a-zA-Z0-9_]*)\./g;
15
- const matches = formula.matchAll(objectPattern);
16
- for (const match of matches) {
17
- const objectName = match[1];
18
- // Skip common formula functions
19
- if (!['IF', 'AND', 'OR', 'NOT', 'CASE', 'TEXT', 'VALUE', 'DATE', 'DATEVALUE', 'NOW', 'TODAY'].includes(objectName)) {
20
- references.add(objectName);
21
- }
22
- }
23
- // Also check for $ObjectType references
24
- const objectTypePattern = /\$ObjectType\.([a-zA-Z][a-zA-Z0-9_]*)/g;
25
- const objectTypeMatches = formula.matchAll(objectTypePattern);
26
- for (const match of objectTypeMatches) {
27
- references.add(match[1]);
28
- }
29
- return [...references];
30
- }
31
- function sanitizeFormula(formula) {
32
- return formula.replace(/"[^"]*"|'[^']*'/g, ' ');
33
- }
34
- function createRelationshipFieldMap(fields) {
35
- const relationshipFieldMap = new Map();
36
- for (const field of fields) {
37
- if (!field.referenceTo || field.referenceTo.length === 0) {
38
- continue;
39
- }
40
- const keys = new Set();
41
- keys.add(field.fullName);
42
- if (field.fullName.endsWith('__c')) {
43
- keys.add(`${field.fullName.slice(0, -3)}__r`);
44
- }
45
- if (field.relationshipName) {
46
- keys.add(field.relationshipName);
47
- }
48
- for (const key of keys) {
49
- relationshipFieldMap.set(key, {
50
- fieldName: field.fullName,
51
- referencedObjects: field.referenceTo,
52
- });
53
- }
54
- }
55
- return relationshipFieldMap;
56
- }
57
- function resolveFormulaReferences(formula, fields) {
58
- const rawReferences = extractFormulaReferences(formula);
59
- const relationshipFieldMap = createRelationshipFieldMap(fields);
60
- const resolved = new Set();
61
- for (const rawReference of rawReferences) {
62
- const relationship = relationshipFieldMap.get(rawReference);
63
- if (relationship) {
64
- for (const referencedObject of relationship.referencedObjects) {
65
- resolved.add(referencedObject);
66
- }
67
- continue;
68
- }
69
- resolved.add(rawReference);
70
- }
71
- return [...resolved];
72
- }
73
- function extractCustomFieldReferences(formula, fields, currentFieldName) {
74
- const sanitizedFormula = sanitizeFormula(formula);
75
- const customFieldNames = new Set(fields.map((field) => field.fullName));
76
- const relationshipFieldMap = createRelationshipFieldMap(fields);
77
- const references = new Set();
78
- const directFieldPattern = /\b([a-zA-Z][a-zA-Z0-9_]*__c)\b/g;
79
- for (const match of sanitizedFormula.matchAll(directFieldPattern)) {
80
- const fieldName = match[1];
81
- if (fieldName !== currentFieldName && customFieldNames.has(fieldName)) {
82
- references.add(fieldName);
83
- }
84
- }
85
- const relationshipPattern = /\b([a-zA-Z][a-zA-Z0-9_]*__r)\./g;
86
- for (const match of sanitizedFormula.matchAll(relationshipPattern)) {
87
- const relationshipName = match[1];
88
- const fieldReference = relationshipFieldMap.get(relationshipName)?.fieldName;
89
- if (fieldReference && fieldReference !== currentFieldName) {
90
- references.add(fieldReference);
91
- }
92
- }
93
- return [...references];
94
- }
95
- /**
96
- * Extract Apex class references from validation rules
97
- *
98
- * @ac US-020-AC-5: Extract Apex class references in formulas
99
- */
100
- function extractApexReferences(formula) {
101
- const apexClasses = new Set();
102
- // Pattern: ClassName.methodName() or @RemoteAction patterns
103
- const apexPattern = /\b([A-Z][a-zA-Z0-9_]*)\.[a-zA-Z][a-zA-Z0-9_]*\s*\(/g;
104
- const matches = formula.matchAll(apexPattern);
105
- for (const match of matches) {
106
- apexClasses.add(match[1]);
107
- }
108
- return [...apexClasses];
109
- }
110
7
  /**
111
8
  * Extract sharing rules from metadata
112
9
  *
@@ -155,110 +52,6 @@ function extractBaseSections(metadata) {
155
52
  listViews: metadata.listViews ?? [],
156
53
  };
157
54
  }
158
- function extractFieldDependencies(fields) {
159
- const dependencies = [];
160
- for (const field of fields) {
161
- if (field.referenceTo && (field.type === 'Lookup' || field.type === 'MasterDetail')) {
162
- for (const referencedObject of field.referenceTo) {
163
- dependencies.push({
164
- type: field.type === 'MasterDetail' ? 'master_detail_field' : 'lookup_field',
165
- name: field.fullName,
166
- referencedObject,
167
- fieldName: field.fullName,
168
- });
169
- }
170
- }
171
- if (field.formula) {
172
- const formulaRefs = resolveFormulaReferences(field.formula, fields);
173
- for (const referencedObject of formulaRefs) {
174
- dependencies.push({
175
- type: 'formula_field',
176
- name: field.fullName,
177
- referencedObject,
178
- fieldName: field.fullName,
179
- });
180
- }
181
- const apexRefs = extractApexReferences(field.formula);
182
- for (const apexClass of apexRefs) {
183
- dependencies.push({
184
- type: 'apex_class',
185
- name: apexClass,
186
- fieldName: field.fullName,
187
- });
188
- }
189
- const customFieldRefs = extractCustomFieldReferences(field.formula, fields, field.fullName);
190
- for (const customFieldRef of customFieldRefs) {
191
- dependencies.push({
192
- type: 'custom_field',
193
- name: customFieldRef,
194
- fieldName: customFieldRef,
195
- });
196
- }
197
- }
198
- if (field.type === 'Summary') {
199
- if (field.summaryForeignKey) {
200
- dependencies.push({
201
- type: 'custom_field',
202
- name: field.summaryForeignKey,
203
- fieldName: field.summaryForeignKey,
204
- });
205
- }
206
- if (field.summarizedField) {
207
- dependencies.push({
208
- type: 'custom_field',
209
- name: field.summarizedField,
210
- fieldName: field.summarizedField,
211
- });
212
- }
213
- }
214
- }
215
- return dependencies;
216
- }
217
- function extractValidationRuleDependencies(validationRules, fields) {
218
- const dependencies = [];
219
- for (const rule of validationRules) {
220
- if (!rule.errorConditionFormula) {
221
- continue;
222
- }
223
- const formulaRefs = resolveFormulaReferences(rule.errorConditionFormula, fields);
224
- for (const referencedObject of formulaRefs) {
225
- dependencies.push({
226
- type: 'validation_rule',
227
- name: rule.fullName,
228
- referencedObject,
229
- });
230
- }
231
- const apexRefs = extractApexReferences(rule.errorConditionFormula);
232
- for (const apexClass of apexRefs) {
233
- dependencies.push({
234
- type: 'apex_class',
235
- name: apexClass,
236
- });
237
- }
238
- const customFieldRefs = extractCustomFieldReferences(rule.errorConditionFormula, fields);
239
- for (const customFieldRef of customFieldRefs) {
240
- dependencies.push({
241
- type: 'custom_field',
242
- name: customFieldRef,
243
- fieldName: customFieldRef,
244
- });
245
- }
246
- }
247
- return dependencies;
248
- }
249
- function extractRecordTypeDependencies(recordTypes) {
250
- return recordTypes.map((recordType) => ({
251
- type: 'record_type',
252
- name: recordType.fullName,
253
- }));
254
- }
255
- function buildDependencies(fields, validationRules, recordTypes) {
256
- return [
257
- ...extractFieldDependencies(fields),
258
- ...extractValidationRuleDependencies(validationRules, fields),
259
- ...extractRecordTypeDependencies(recordTypes),
260
- ];
261
- }
262
55
  async function parseCustomObjectXml(metadataContent) {
263
56
  const parsed = await parseXml(metadataContent);
264
57
  const parsedRoot = parsed;