@jterrats/smart-deployment 1.0.5 → 1.1.0

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 (259) 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/start.d.ts +1 -0
  30. package/lib/commands/start.js +14 -1
  31. package/lib/commands/start.js.map +1 -1
  32. package/lib/commands/status.d.ts +2 -0
  33. package/lib/commands/status.js +1 -0
  34. package/lib/commands/status.js.map +1 -1
  35. package/lib/commands/validate.d.ts +3 -3
  36. package/lib/commands/validate.js +4 -4
  37. package/lib/commands/validate.js.map +1 -1
  38. package/lib/constants/api-version.d.ts +2 -2
  39. package/lib/constants/api-version.js +2 -2
  40. package/lib/constants/deployment-order.js +11 -8
  41. package/lib/constants/deployment-order.js.map +1 -1
  42. package/lib/dependencies/circular-dependency-detector.d.ts +1 -31
  43. package/lib/dependencies/circular-dependency-detector.js +7 -156
  44. package/lib/dependencies/circular-dependency-detector.js.map +1 -1
  45. package/lib/dependencies/cycle-break-suggestions.d.ts +3 -0
  46. package/lib/dependencies/cycle-break-suggestions.js +63 -0
  47. package/lib/dependencies/cycle-break-suggestions.js.map +1 -0
  48. package/lib/dependencies/cycle-discovery.d.ts +16 -0
  49. package/lib/dependencies/cycle-discovery.js +70 -0
  50. package/lib/dependencies/cycle-discovery.js.map +1 -0
  51. package/lib/dependencies/dependency-graph-builder.d.ts +0 -65
  52. package/lib/dependencies/dependency-graph-builder.js +19 -233
  53. package/lib/dependencies/dependency-graph-builder.js.map +1 -1
  54. package/lib/dependencies/dependency-graph-intake.d.ts +17 -0
  55. package/lib/dependencies/dependency-graph-intake.js +20 -0
  56. package/lib/dependencies/dependency-graph-intake.js.map +1 -0
  57. package/lib/dependencies/dependency-graph-stats.d.ts +4 -0
  58. package/lib/dependencies/dependency-graph-stats.js +82 -0
  59. package/lib/dependencies/dependency-graph-stats.js.map +1 -0
  60. package/lib/dependencies/dependency-graph-validation.d.ts +16 -0
  61. package/lib/dependencies/dependency-graph-validation.js +78 -0
  62. package/lib/dependencies/dependency-graph-validation.js.map +1 -0
  63. package/lib/dependencies/dependency-impact-analyzer.d.ts +1 -22
  64. package/lib/dependencies/dependency-impact-analyzer.js +12 -110
  65. package/lib/dependencies/dependency-impact-analyzer.js.map +1 -1
  66. package/lib/dependencies/dependency-impact-scoring.d.ts +5 -0
  67. package/lib/dependencies/dependency-impact-scoring.js +24 -0
  68. package/lib/dependencies/dependency-impact-scoring.js.map +1 -0
  69. package/lib/dependencies/dependency-impact-traversal.d.ts +18 -0
  70. package/lib/dependencies/dependency-impact-traversal.js +74 -0
  71. package/lib/dependencies/dependency-impact-traversal.js.map +1 -0
  72. package/lib/dependencies/dependency-resolution-classifier.d.ts +19 -0
  73. package/lib/dependencies/dependency-resolution-classifier.js +67 -0
  74. package/lib/dependencies/dependency-resolution-classifier.js.map +1 -0
  75. package/lib/dependencies/dependency-resolver.d.ts +1 -48
  76. package/lib/dependencies/dependency-resolver.js +12 -181
  77. package/lib/dependencies/dependency-resolver.js.map +1 -1
  78. package/lib/dependencies/dynamic-query-dependency-references.d.ts +3 -0
  79. package/lib/dependencies/dynamic-query-dependency-references.js +41 -0
  80. package/lib/dependencies/dynamic-query-dependency-references.js.map +1 -0
  81. package/lib/dependencies/topological-dependency-sorter.d.ts +10 -0
  82. package/lib/dependencies/topological-dependency-sorter.js +84 -0
  83. package/lib/dependencies/topological-dependency-sorter.js.map +1 -0
  84. package/lib/deployment/cycle-remediation-runner.d.ts +1 -0
  85. package/lib/deployment/cycle-remediation-runner.js +5 -1
  86. package/lib/deployment/cycle-remediation-runner.js.map +1 -1
  87. package/lib/deployment/deployment-runner.d.ts +3 -1
  88. package/lib/deployment/deployment-runner.js +6 -1
  89. package/lib/deployment/deployment-runner.js.map +1 -1
  90. package/lib/deployment/deployment-status-service.d.ts +2 -0
  91. package/lib/deployment/deployment-status-service.js +2 -0
  92. package/lib/deployment/deployment-status-service.js.map +1 -1
  93. package/lib/deployment/deployment-validation-service.js +1 -1
  94. package/lib/deployment/deployment-validation-service.js.map +1 -1
  95. package/lib/deployment/dynamic-query-target-validator.d.ts +24 -0
  96. package/lib/deployment/dynamic-query-target-validator.js +65 -0
  97. package/lib/deployment/dynamic-query-target-validator.js.map +1 -0
  98. package/lib/deployment/sf-cli-integration.d.ts +1 -0
  99. package/lib/deployment/sf-cli-integration.js +1 -1
  100. package/lib/deployment/sf-cli-integration.js.map +1 -1
  101. package/lib/deployment/sf-cli-metadata-lookup.d.ts +4 -0
  102. package/lib/deployment/sf-cli-metadata-lookup.js +26 -0
  103. package/lib/deployment/sf-cli-metadata-lookup.js.map +1 -0
  104. package/lib/deployment/start-execution-service.d.ts +5 -0
  105. package/lib/deployment/start-execution-service.js +26 -6
  106. package/lib/deployment/start-execution-service.js.map +1 -1
  107. package/lib/deployment/wave-graph-state.d.ts +6 -0
  108. package/lib/deployment/wave-graph-state.js +89 -0
  109. package/lib/deployment/wave-graph-state.js.map +1 -0
  110. package/lib/deployment/wave-manifest-service.d.ts +1 -0
  111. package/lib/deployment/wave-manifest-service.js +1 -1
  112. package/lib/deployment/wave-manifest-service.js.map +1 -1
  113. package/lib/errors/deployment-error.js +1 -1
  114. package/lib/errors/deployment-error.js.map +1 -1
  115. package/lib/parsers/apex-class-dependencies.d.ts +4 -0
  116. package/lib/parsers/apex-class-dependencies.js +122 -0
  117. package/lib/parsers/apex-class-dependencies.js.map +1 -0
  118. package/lib/parsers/apex-class-lexical.d.ts +3 -0
  119. package/lib/parsers/apex-class-lexical.js +101 -0
  120. package/lib/parsers/apex-class-lexical.js.map +1 -0
  121. package/lib/parsers/apex-class-names.d.ts +18 -0
  122. package/lib/parsers/apex-class-names.js +93 -0
  123. package/lib/parsers/apex-class-names.js.map +1 -0
  124. package/lib/parsers/apex-class-parser-model.d.ts +59 -0
  125. package/lib/parsers/apex-class-parser-model.js +2 -0
  126. package/lib/parsers/apex-class-parser-model.js.map +1 -0
  127. package/lib/parsers/apex-class-parser.d.ts +3 -29
  128. package/lib/parsers/apex-class-parser.js +10 -395
  129. package/lib/parsers/apex-class-parser.js.map +1 -1
  130. package/lib/parsers/apex-class-symbols.d.ts +2 -0
  131. package/lib/parsers/apex-class-symbols.js +61 -0
  132. package/lib/parsers/apex-class-symbols.js.map +1 -0
  133. package/lib/parsers/apex-dynamic-query-analysis.d.ts +2 -0
  134. package/lib/parsers/apex-dynamic-query-analysis.js +150 -0
  135. package/lib/parsers/apex-dynamic-query-analysis.js.map +1 -0
  136. package/lib/parsers/custom-metadata-dynamic-query-analysis.d.ts +2 -0
  137. package/lib/parsers/custom-metadata-dynamic-query-analysis.js +50 -0
  138. package/lib/parsers/custom-metadata-dynamic-query-analysis.js.map +1 -0
  139. package/lib/parsers/custom-metadata-parser.d.ts +2 -0
  140. package/lib/parsers/custom-metadata-parser.js +3 -0
  141. package/lib/parsers/custom-metadata-parser.js.map +1 -1
  142. package/lib/parsers/custom-object-dependency-builder.d.ts +3 -0
  143. package/lib/parsers/custom-object-dependency-builder.js +103 -0
  144. package/lib/parsers/custom-object-dependency-builder.js.map +1 -0
  145. package/lib/parsers/custom-object-parser.js +1 -208
  146. package/lib/parsers/custom-object-parser.js.map +1 -1
  147. package/lib/parsers/custom-object-reference-helpers.d.ts +4 -0
  148. package/lib/parsers/custom-object-reference-helpers.js +92 -0
  149. package/lib/parsers/custom-object-reference-helpers.js.map +1 -0
  150. package/lib/parsers/dynamic-query-reference.d.ts +16 -0
  151. package/lib/parsers/dynamic-query-reference.js +65 -0
  152. package/lib/parsers/dynamic-query-reference.js.map +1 -0
  153. package/lib/parsers/layout-action-analysis.d.ts +6 -0
  154. package/lib/parsers/layout-action-analysis.js +36 -0
  155. package/lib/parsers/layout-action-analysis.js.map +1 -0
  156. package/lib/parsers/layout-parser.js +4 -272
  157. package/lib/parsers/layout-parser.js.map +1 -1
  158. package/lib/parsers/layout-reference-analysis.d.ts +9 -0
  159. package/lib/parsers/layout-reference-analysis.js +70 -0
  160. package/lib/parsers/layout-reference-analysis.js.map +1 -0
  161. package/lib/parsers/layout-result-assembly.d.ts +5 -0
  162. package/lib/parsers/layout-result-assembly.js +35 -0
  163. package/lib/parsers/layout-result-assembly.js.map +1 -0
  164. package/lib/parsers/layout-section-analysis.d.ts +7 -0
  165. package/lib/parsers/layout-section-analysis.js +9 -0
  166. package/lib/parsers/layout-section-analysis.js.map +1 -0
  167. package/lib/parsers/lwc-code-analysis.d.ts +10 -0
  168. package/lib/parsers/lwc-code-analysis.js +161 -0
  169. package/lib/parsers/lwc-code-analysis.js.map +1 -0
  170. package/lib/parsers/lwc-metadata-analysis.d.ts +6 -0
  171. package/lib/parsers/lwc-metadata-analysis.js +112 -0
  172. package/lib/parsers/lwc-metadata-analysis.js.map +1 -0
  173. package/lib/parsers/lwc-parser.d.ts +3 -27
  174. package/lib/parsers/lwc-parser.js +6 -377
  175. package/lib/parsers/lwc-parser.js.map +1 -1
  176. package/lib/parsers/lwc-result-assembly.d.ts +4 -0
  177. package/lib/parsers/lwc-result-assembly.js +47 -0
  178. package/lib/parsers/lwc-result-assembly.js.map +1 -0
  179. package/lib/presentation/status-command-presenter.d.ts +1 -0
  180. package/lib/presentation/status-command-presenter.js +20 -0
  181. package/lib/presentation/status-command-presenter.js.map +1 -1
  182. package/lib/scanner/forceignore-parser.d.ts +1 -0
  183. package/lib/scanner/forceignore-parser.js +14 -3
  184. package/lib/scanner/forceignore-parser.js.map +1 -1
  185. package/lib/scanner/structure-validator.js +1 -1
  186. package/lib/services/metadata-scanner-service.d.ts +2 -0
  187. package/lib/services/metadata-scanner-service.js +9 -2
  188. package/lib/services/metadata-scanner-service.js.map +1 -1
  189. package/lib/services/scanners/additional-metadata-scanner.d.ts +2 -0
  190. package/lib/services/scanners/additional-metadata-scanner.js +183 -0
  191. package/lib/services/scanners/additional-metadata-scanner.js.map +1 -0
  192. package/lib/services/scanners/automation-ai-metadata-scanner.d.ts +1 -0
  193. package/lib/services/scanners/automation-ai-metadata-scanner.js +11 -0
  194. package/lib/services/scanners/automation-ai-metadata-scanner.js.map +1 -1
  195. package/lib/services/scanners/code-metadata-scanner.js +14 -1
  196. package/lib/services/scanners/code-metadata-scanner.js.map +1 -1
  197. package/lib/services/scanners/data-metadata-scanner.js +24 -8
  198. package/lib/services/scanners/data-metadata-scanner.js.map +1 -1
  199. package/lib/types/metadata.d.ts +1 -1
  200. package/lib/utils/cache-entry-serializer.d.ts +7 -0
  201. package/lib/utils/cache-entry-serializer.js +15 -0
  202. package/lib/utils/cache-entry-serializer.js.map +1 -0
  203. package/lib/utils/cache-expiry-policy.d.ts +7 -0
  204. package/lib/utils/cache-expiry-policy.js +34 -0
  205. package/lib/utils/cache-expiry-policy.js.map +1 -0
  206. package/lib/utils/cache-key-derivation.d.ts +11 -0
  207. package/lib/utils/cache-key-derivation.js +28 -0
  208. package/lib/utils/cache-key-derivation.js.map +1 -0
  209. package/lib/utils/cache-lock-lifecycle.d.ts +15 -0
  210. package/lib/utils/cache-lock-lifecycle.js +84 -0
  211. package/lib/utils/cache-lock-lifecycle.js.map +1 -0
  212. package/lib/utils/cache-logger.d.ts +8 -0
  213. package/lib/utils/cache-logger.js +19 -0
  214. package/lib/utils/cache-logger.js.map +1 -0
  215. package/lib/utils/cache-manager.d.ts +1 -2
  216. package/lib/utils/cache-manager.js +7 -253
  217. package/lib/utils/cache-manager.js.map +1 -1
  218. package/lib/utils/cache-storage.d.ts +20 -0
  219. package/lib/utils/cache-storage.js +83 -0
  220. package/lib/utils/cache-storage.js.map +1 -0
  221. package/lib/validators/xml-metadata-validator.js +1 -1
  222. package/lib/waves/priority-wave-generator.js +8 -2
  223. package/lib/waves/priority-wave-generator.js.map +1 -1
  224. package/lib/waves/test-optimizer-discovery.d.ts +12 -0
  225. package/lib/waves/test-optimizer-discovery.js +46 -0
  226. package/lib/waves/test-optimizer-discovery.js.map +1 -0
  227. package/lib/waves/test-optimizer-matching.d.ts +6 -0
  228. package/lib/waves/test-optimizer-matching.js +43 -0
  229. package/lib/waves/test-optimizer-matching.js.map +1 -0
  230. package/lib/waves/test-optimizer-model.d.ts +92 -0
  231. package/lib/waves/test-optimizer-model.js +2 -0
  232. package/lib/waves/test-optimizer-model.js.map +1 -0
  233. package/lib/waves/test-optimizer-scoring.d.ts +11 -0
  234. package/lib/waves/test-optimizer-scoring.js +53 -0
  235. package/lib/waves/test-optimizer-scoring.js.map +1 -0
  236. package/lib/waves/test-optimizer.d.ts +2 -102
  237. package/lib/waves/test-optimizer.js +9 -154
  238. package/lib/waves/test-optimizer.js.map +1 -1
  239. package/lib/waves/wave-builder.d.ts +0 -11
  240. package/lib/waves/wave-builder.js +19 -193
  241. package/lib/waves/wave-builder.js.map +1 -1
  242. package/lib/waves/wave-graph.d.ts +25 -0
  243. package/lib/waves/wave-graph.js +138 -0
  244. package/lib/waves/wave-graph.js.map +1 -0
  245. package/lib/waves/wave-metadata.d.ts +4 -0
  246. package/lib/waves/wave-metadata.js +36 -0
  247. package/lib/waves/wave-metadata.js.map +1 -0
  248. package/lib/waves/wave-priority-policy.d.ts +5 -0
  249. package/lib/waves/wave-priority-policy.js +83 -0
  250. package/lib/waves/wave-priority-policy.js.map +1 -0
  251. package/lib/waves/wave-topology.d.ts +28 -0
  252. package/lib/waves/wave-topology.js +65 -0
  253. package/lib/waves/wave-topology.js.map +1 -0
  254. package/messages/start.json +5 -5
  255. package/messages/validate.json +1 -1
  256. package/npm-shrinkwrap.json +342 -751
  257. package/oclif.lock +83 -262
  258. package/oclif.manifest.json +7 -7
  259. package/package.json +6 -2
@@ -1,385 +1,14 @@
1
1
  import { getLogger } from '../utils/logger.js';
2
2
  import { ParsingError } from '../errors/parsing-error.js';
3
- import { parseXml } from '../utils/xml.js';
4
- import { normalizeArray } from './parser-utils.js';
3
+ import { analyzeComponentCode } from './lwc-code-analysis.js';
4
+ import { analyzeMetadataXml } from './lwc-metadata-analysis.js';
5
+ import { assembleParseResult } from './lwc-result-assembly.js';
5
6
  const logger = getLogger('LWCParser');
6
7
  /**
7
- * Remove comments from JavaScript/TypeScript code
8
- */
9
- function removeComments(code) {
10
- let result = '';
11
- let inSingleLineComment = false;
12
- let inMultiLineComment = false;
13
- let stringDelimiter = null;
14
- let escapeNext = false;
15
- for (let index = 0; index < code.length; index++) {
16
- const current = code[index];
17
- const next = code[index + 1];
18
- if (inSingleLineComment) {
19
- if (current === '\n') {
20
- inSingleLineComment = false;
21
- result += current;
22
- }
23
- continue;
24
- }
25
- if (inMultiLineComment) {
26
- if (current === '*' && next === '/') {
27
- inMultiLineComment = false;
28
- index += 1;
29
- }
30
- else if (current === '\n') {
31
- result += '\n';
32
- }
33
- continue;
34
- }
35
- if (stringDelimiter) {
36
- result += current;
37
- if (escapeNext) {
38
- escapeNext = false;
39
- }
40
- else if (current === '\\') {
41
- escapeNext = true;
42
- }
43
- else if (current === stringDelimiter) {
44
- stringDelimiter = null;
45
- }
46
- continue;
47
- }
48
- if (current === '"' || current === "'" || current === '`') {
49
- stringDelimiter = current;
50
- result += current;
51
- continue;
52
- }
53
- if (current === '/' && next === '/') {
54
- inSingleLineComment = true;
55
- index += 1;
56
- continue;
57
- }
58
- if (current === '/' && next === '*') {
59
- inMultiLineComment = true;
60
- index += 1;
61
- continue;
62
- }
63
- result += current;
64
- }
65
- return result;
66
- }
67
- /**
68
- * Extract Apex imports
69
- *
70
- * @ac US-016-AC-1: Extract Apex imports (@salesforce/apex)
71
- */
72
- function extractApexImports(code) {
73
- // Pattern: import methodName from '@salesforce/apex/ClassName.methodName'
74
- const apexImportPattern = /import\s+(?:\{[^}]+\}|\w+)\s+from\s+['"]@salesforce\/apex\/([a-zA-Z][a-zA-Z0-9_.]+)['"]/g;
75
- const matches = code.matchAll(apexImportPattern);
76
- const imports = [];
77
- for (const match of matches) {
78
- const apexRef = match[1]; // ClassName.methodName or ClassName
79
- if (!imports.includes(apexRef)) {
80
- imports.push(apexRef);
81
- }
82
- }
83
- return imports;
84
- }
85
- /**
86
- * Extract LWC imports
87
- *
88
- * @ac US-016-AC-2: Extract LWC imports (c/componentName)
89
- */
90
- function extractLWCImports(code) {
91
- // Pattern: import ComponentName from 'c/componentName'
92
- const lwcImportPattern = /import\s+(?:\{[^}]+\}|\w+)\s+from\s+['"]c\/([a-zA-Z][a-zA-Z0-9_]+)['"]/g;
93
- const matches = code.matchAll(lwcImportPattern);
94
- const imports = [];
95
- for (const match of matches) {
96
- const componentName = match[1];
97
- if (!imports.includes(componentName)) {
98
- imports.push(componentName);
99
- }
100
- }
101
- return imports;
102
- }
103
- /**
104
- * Extract wire adapter usage
105
- *
106
- * @ac US-016-AC-3: Extract wire adapter usage
107
- */
108
- function extractWireAdapters(code) {
109
- // Pattern: @wire(adapterName, { ... })
110
- const wirePattern = /@wire\s*\(\s*([a-zA-Z][a-zA-Z0-9_]*)/g;
111
- const matches = code.matchAll(wirePattern);
112
- const adapters = [];
113
- for (const match of matches) {
114
- const adapterName = match[1];
115
- if (!adapters.includes(adapterName)) {
116
- adapters.push(adapterName);
117
- }
118
- }
119
- return adapters;
120
- }
121
- /**
122
- * Extract @api property dependencies
123
- *
124
- * @ac US-016-AC-4: Extract @api property dependencies
125
- */
126
- function extractApiProperties(code) {
127
- const apiPattern = /@api\s+(?:(?:get|set)\s+)?([a-zA-Z][a-zA-Z0-9_]*)/g;
128
- const matches = code.matchAll(apiPattern);
129
- const properties = [];
130
- for (const match of matches) {
131
- const propertyName = match[1];
132
- if (!properties.includes(propertyName)) {
133
- properties.push(propertyName);
134
- }
135
- }
136
- return properties;
137
- }
138
- /**
139
- * Extract navigation references
140
- *
141
- * @ac US-016-AC-5: Extract navigation references
142
- */
143
- function extractNavigationRefs(code) {
144
- const refs = [];
145
- // Pattern: NavigationMixin
146
- if (code.includes('NavigationMixin')) {
147
- refs.push('NavigationMixin');
148
- }
149
- // Pattern: this[NavigationMixin.Navigate]
150
- if (code.includes('NavigationMixin.Navigate')) {
151
- refs.push('NavigationMixin.Navigate');
152
- }
153
- // Pattern: import { NavigationMixin } from 'lightning/navigation'
154
- const navImportPattern = /import\s+\{[^}]*NavigationMixin[^}]*\}\s+from\s+['"]lightning\/navigation['"]/;
155
- if (navImportPattern.test(code)) {
156
- refs.push('lightning/navigation');
157
- }
158
- return refs;
159
- }
160
- /**
161
- * Detect if the component is TypeScript
162
- *
163
- * @ac US-016-AC-6: Handle TypeScript components
164
- */
165
- function isTypeScriptComponent(jsCode) {
166
- // Check for TypeScript-specific syntax
167
- const tsPatterns = [
168
- /:\s*(?:string|number|boolean|any|void|unknown|never)\s*[=;,)]/,
169
- /interface\s+[A-Z][a-zA-Z0-9_]*\s*\{/,
170
- /type\s+[A-Z][a-zA-Z0-9_]*\s*=/,
171
- /<[A-Z][a-zA-Z0-9_<>,\s]*>/,
172
- /as\s+(?:string|number|boolean|const)/,
173
- ];
174
- return tsPatterns.some((pattern) => pattern.test(jsCode));
175
- }
176
- function parseBoolean(value) {
177
- if (typeof value === 'boolean') {
178
- return value;
179
- }
180
- if (typeof value === 'string') {
181
- return value.trim().toLowerCase() === 'true';
182
- }
183
- return undefined;
184
- }
185
- function parseOptionalNumber(value) {
186
- if (typeof value === 'number') {
187
- return Number.isNaN(value) ? undefined : value;
188
- }
189
- if (typeof value === 'string' && value.trim() !== '') {
190
- const parsed = Number(value);
191
- return Number.isNaN(parsed) ? undefined : parsed;
192
- }
193
- return undefined;
194
- }
195
- function createCodeAnalysisContext(jsCode) {
196
- const cleanCode = removeComments(jsCode);
197
- return {
198
- cleanCode,
199
- isTypeScript: isTypeScriptComponent(cleanCode),
200
- };
201
- }
202
- function extractImports(code) {
203
- return {
204
- apexImports: extractApexImports(code),
205
- lwcImports: extractLWCImports(code),
206
- };
207
- }
208
- function extractDecoratorsAndProperties(code) {
209
- return {
210
- wireAdapters: extractWireAdapters(code),
211
- apiProperties: extractApiProperties(code),
212
- navigationRefs: extractNavigationRefs(code),
213
- };
214
- }
215
- function analyzeComponentCode(jsCode) {
216
- const context = createCodeAnalysisContext(jsCode);
217
- const imports = extractImports(context.cleanCode);
218
- const decorators = extractDecoratorsAndProperties(context.cleanCode);
219
- return {
220
- ...context,
221
- ...imports,
222
- ...decorators,
223
- };
224
- }
225
- function interpretProperty(property) {
226
- if (property['@_name'] === undefined || property['@_type'] === undefined) {
227
- return undefined;
228
- }
229
- return {
230
- name: property['@_name'],
231
- type: property['@_type'],
232
- default: property['@_default'],
233
- required: parseBoolean(property['@_required']),
234
- label: property['@_label'],
235
- description: property['@_description'],
236
- placeholder: property['@_placeholder'],
237
- role: property['@_role'],
238
- datasource: property['@_datasource'],
239
- min: parseOptionalNumber(property['@_min']),
240
- max: parseOptionalNumber(property['@_max']),
241
- };
242
- }
243
- function interpretSupportedFormFactors(targetConfig) {
244
- if (targetConfig.supportedFormFactors === undefined) {
245
- return undefined;
246
- }
247
- return normalizeArray(targetConfig.supportedFormFactors.supportedFormFactor)
248
- .filter((formFactor) => formFactor['@_type'] !== undefined)
249
- .map((formFactor) => ({
250
- type: formFactor['@_type'],
251
- }));
252
- }
253
- function interpretTargetConfig(targetConfig) {
254
- const properties = normalizeArray(targetConfig.property)
255
- .map(interpretProperty)
256
- .filter((property) => property !== undefined);
257
- return {
258
- targets: targetConfig['@_targets'] ?? '',
259
- configurationEditor: targetConfig.configurationEditor,
260
- objects: targetConfig.objects === undefined
261
- ? undefined
262
- : normalizeArray(targetConfig.objects.object).map((object) => ({ object })),
263
- property: properties,
264
- supportedFormFactors: interpretSupportedFormFactors(targetConfig),
265
- };
266
- }
267
- function interpretMetadataBundle(metadata) {
268
- const targets = normalizeArray(metadata.targets?.target);
269
- const targetConfigs = normalizeArray(metadata.targetConfigs?.targetConfig).map(interpretTargetConfig);
270
- const capabilities = normalizeArray(metadata.capabilities?.capability);
271
- return {
272
- apiVersion: metadata.apiVersion !== undefined ? String(metadata.apiVersion) : '',
273
- description: metadata.description,
274
- isExposed: parseBoolean(metadata.isExposed) ?? false,
275
- masterLabel: metadata.masterLabel,
276
- targets: targets.length > 0 ? { target: targets } : undefined,
277
- targetConfigs: targetConfigs.length > 0 ? targetConfigs : undefined,
278
- capabilities: capabilities.length > 0 ? capabilities : undefined,
279
- };
280
- }
281
- /**
282
- * Parse LWC js-meta.xml file
283
- *
284
- * @ac US-016-AC-8: Parse js-meta.xml correctly
285
- */
286
- function parseMetadataXml(metadataContent) {
287
- const parsed = parseXml(metadataContent);
288
- const metadata = parsed.LightningComponentBundle;
289
- if (!metadata) {
290
- return undefined;
291
- }
292
- return interpretMetadataBundle(metadata);
293
- }
294
- function analyzeMetadataXml(componentName, metadataXml) {
295
- if (!metadataXml) {
296
- return {
297
- hasMetadataXml: false,
298
- metadata: undefined,
299
- };
300
- }
301
- try {
302
- return {
303
- hasMetadataXml: true,
304
- metadata: parseMetadataXml(metadataXml),
305
- };
306
- }
307
- catch (error) {
308
- logger.warn(`Failed to parse js-meta.xml for ${componentName}`, {
309
- componentName,
310
- error: error instanceof Error ? error.message : String(error),
311
- });
312
- return {
313
- hasMetadataXml: true,
314
- metadata: undefined,
315
- };
316
- }
317
- }
318
- function buildDependencies(analysis) {
319
- return [
320
- ...analysis.apexImports.map((name) => ({
321
- type: 'apex_import',
322
- name,
323
- source: '@salesforce/apex',
324
- isTypeScript: analysis.isTypeScript,
325
- })),
326
- ...analysis.lwcImports.map((name) => ({
327
- type: 'lwc_import',
328
- name,
329
- source: 'c',
330
- isTypeScript: analysis.isTypeScript,
331
- })),
332
- ...analysis.wireAdapters.map((name) => ({
333
- type: 'wire_adapter',
334
- name,
335
- isTypeScript: analysis.isTypeScript,
336
- })),
337
- ...analysis.apiProperties.map((name) => ({
338
- type: 'api_property',
339
- name,
340
- isTypeScript: analysis.isTypeScript,
341
- })),
342
- ...analysis.navigationRefs.map((name) => ({
343
- type: 'navigation',
344
- name,
345
- isTypeScript: analysis.isTypeScript,
346
- })),
347
- ];
348
- }
349
- function assembleParseResult(componentName, codeAnalysis, metadataAnalysis) {
350
- const dependencies = buildDependencies(codeAnalysis);
351
- return {
352
- componentName,
353
- isTypeScript: codeAnalysis.isTypeScript,
354
- apexImports: codeAnalysis.apexImports,
355
- lwcImports: codeAnalysis.lwcImports,
356
- wireAdapters: codeAnalysis.wireAdapters,
357
- apiProperties: codeAnalysis.apiProperties,
358
- navigationRefs: codeAnalysis.navigationRefs,
359
- dependencies,
360
- hasMetadataXml: metadataAnalysis.hasMetadataXml,
361
- metadata: metadataAnalysis.metadata,
362
- };
363
- }
364
- /**
365
- * Parse a Lightning Web Component and extract dependencies
366
- *
367
- * @param componentName - Name of the LWC component
368
- * @param jsCode - JavaScript/TypeScript code of the component
369
- * @param metadataXml - Optional js-meta.xml content
370
- * @returns LWCParseResult with all extracted dependencies
371
- *
372
- * @throws {ParsingError} If the component cannot be parsed
373
- *
374
- * @ac US-016-AC-7: Validate bundle structure (js, html, xml)
8
+ * Parse a Lightning Web Component and extract dependencies.
375
9
  *
376
- * @example
377
- * ```typescript
378
- * const result = parseLWC('myComponent', jsCode, metadataXml);
379
- * console.log(result.apexImports); // ['AccountController.getAccounts']
380
- * console.log(result.lwcImports); // ['baseComponent', 'utilComponent']
381
- * console.log(result.wireAdapters); // ['getRecord', 'getObjectInfo']
382
- * ```
10
+ * The public parser contract stays here while source-specific analysis lives in
11
+ * dedicated JS/TS code, metadata XML, and result assembly collaborators.
383
12
  */
384
13
  export function parseLWC(componentName, jsCode, metadataXml) {
385
14
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"lwc-parser.js","sourceRoot":"","sources":["../../src/parsers/lwc-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAW3C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;AA8DtC;;GAEG;AACH,SAAS,cAAc,CAAC,IAAY;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,mBAAmB,GAAG,KAAK,CAAC;IAChC,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAC/B,IAAI,eAAe,GAA2B,IAAI,CAAC;IACnD,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAE7B,IAAI,mBAAmB,EAAE,CAAC;YACxB,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,mBAAmB,GAAG,KAAK,CAAC;gBAC5B,MAAM,IAAI,OAAO,CAAC;YACpB,CAAC;YAED,SAAS;QACX,CAAC;QAED,IAAI,kBAAkB,EAAE,CAAC;YACvB,IAAI,OAAO,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACpC,kBAAkB,GAAG,KAAK,CAAC;gBAC3B,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;iBAAM,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC5B,MAAM,IAAI,IAAI,CAAC;YACjB,CAAC;YAED,SAAS;QACX,CAAC;QAED,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,IAAI,OAAO,CAAC;YAElB,IAAI,UAAU,EAAE,CAAC;gBACf,UAAU,GAAG,KAAK,CAAC;YACrB,CAAC;iBAAM,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBAC5B,UAAU,GAAG,IAAI,CAAC;YACpB,CAAC;iBAAM,IAAI,OAAO,KAAK,eAAe,EAAE,CAAC;gBACvC,eAAe,GAAG,IAAI,CAAC;YACzB,CAAC;YAED,SAAS;QACX,CAAC;QAED,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;YAC1D,eAAe,GAAG,OAAO,CAAC;YAC1B,MAAM,IAAI,OAAO,CAAC;YAClB,SAAS;QACX,CAAC;QAED,IAAI,OAAO,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACpC,mBAAmB,GAAG,IAAI,CAAC;YAC3B,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,OAAO,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACpC,kBAAkB,GAAG,IAAI,CAAC;YAC1B,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QAED,MAAM,IAAI,OAAO,CAAC;IACpB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,IAAY;IACtC,0EAA0E;IAC1E,MAAM,iBAAiB,GAAG,0FAA0F,CAAC;IACrH,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IACjD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,oCAAoC;QAC9D,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,IAAY;IACrC,uDAAuD;IACvD,MAAM,gBAAgB,GAAG,yEAAyE,CAAC;IACnG,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAChD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,IAAY;IACvC,uCAAuC;IACvC,MAAM,WAAW,GAAG,uCAAuC,CAAC;IAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,IAAY;IACxC,MAAM,UAAU,GAAG,oDAAoD,CAAC;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,IAAY;IACzC,MAAM,IAAI,GAAa,EAAE,CAAC;IAE1B,2BAA2B;IAC3B,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC/B,CAAC;IAED,0CAA0C;IAC1C,IAAI,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACxC,CAAC;IAED,kEAAkE;IAClE,MAAM,gBAAgB,GAAG,+EAA+E,CAAC;IACzG,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,MAAc;IAC3C,uCAAuC;IACvC,MAAM,UAAU,GAAG;QACjB,+DAA+D;QAC/D,qCAAqC;QACrC,+BAA+B;QAC/B,2BAA2B;QAC3B,sCAAsC;KACvC,CAAC;IAEF,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5D,CAAC;AAkDD,SAAS,YAAY,CAAC,KAAmC;IACvD,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC;IAC/C,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAkC;IAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IACjD,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IACnD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,yBAAyB,CAAC,MAAc;IAC/C,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO;QACL,SAAS;QACT,YAAY,EAAE,qBAAqB,CAAC,SAAS,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO;QACL,WAAW,EAAE,kBAAkB,CAAC,IAAI,CAAC;QACrC,UAAU,EAAE,iBAAiB,CAAC,IAAI,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,8BAA8B,CAAC,IAAY;IAClD,OAAO;QACL,YAAY,EAAE,mBAAmB,CAAC,IAAI,CAAC;QACvC,aAAa,EAAE,oBAAoB,CAAC,IAAI,CAAC;QACzC,cAAc,EAAE,qBAAqB,CAAC,IAAI,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAC,MAAc;IAC1C,MAAM,OAAO,GAAG,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,8BAA8B,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAErE,OAAO;QACL,GAAG,OAAO;QACV,GAAG,OAAO;QACV,GAAG,UAAU;KACd,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,QAA2B;IACpD,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE,CAAC;QACzE,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC;QACxB,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAoB;QAC3C,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC;QAC9B,QAAQ,EAAE,YAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QAC9C,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC;QAC1B,WAAW,EAAE,QAAQ,CAAC,eAAe,CAAC;QACtC,WAAW,EAAE,QAAQ,CAAC,eAAe,CAAC;QACtC,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAoB;QAC3C,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC;QACpC,GAAG,EAAE,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC3C,GAAG,EAAE,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CAAC,YAAmC;IACxE,IAAI,YAAY,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;QACpD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,cAAc,CAAC,YAAY,CAAC,oBAAoB,CAAC,mBAAmB,CAAC;SACzE,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,SAAS,CAAC;SAC1D,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACpB,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAmB;KAC7C,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAS,qBAAqB,CAAC,YAAmC;IAChE,MAAM,UAAU,GAAG,cAAc,CAAC,YAAY,CAAC,QAAQ,CAAC;SACrD,GAAG,CAAC,iBAAiB,CAAC;SACtB,MAAM,CAAC,CAAC,QAAQ,EAA2B,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC;IAEzE,OAAO;QACL,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE;QACxC,mBAAmB,EAAE,YAAY,CAAC,mBAAmB;QACrD,OAAO,EACL,YAAY,CAAC,OAAO,KAAK,SAAS;YAChC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAC/E,QAAQ,EAAE,UAAU;QACpB,oBAAoB,EAAE,6BAA6B,CAAC,YAAY,CAAC;KAClE,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,QAAuE;IACtG,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,cAAc,CAAC,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACtG,MAAM,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,YAAY,EAAE,UAAU,CAAoB,CAAC;IAE1F,OAAO;QACL,UAAU,EAAE,QAAQ,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;QAChF,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,SAAS,EAAE,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK;QACpD,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAsB,EAAE,CAAC,CAAC,CAAC,SAAS;QAC5E,aAAa,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS;QACnE,YAAY,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS;KACjE,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,eAAuB;IAC/C,MAAM,MAAM,GAAG,QAAQ,CAAuB,eAAe,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,MAAM,CAAC,wBAAwB,CAAC;IAEjD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,uBAAuB,CAAC,QAAQ,CAAC,CAAC;AAC3C,CAAC;AAED,SAAS,kBAAkB,CAAC,aAAqB,EAAE,WAAoB;IACrE,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO;YACL,cAAc,EAAE,KAAK;YACrB,QAAQ,EAAE,SAAS;SACpB,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,OAAO;YACL,cAAc,EAAE,IAAI;YACpB,QAAQ,EAAE,gBAAgB,CAAC,WAAW,CAAC;SACxC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,mCAAmC,aAAa,EAAE,EAAE;YAC9D,aAAa;YACb,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;QAEH,OAAO;YACL,cAAc,EAAE,IAAI;YACpB,QAAQ,EAAE,SAAS;SACpB,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAyB;IAClD,OAAO;QACL,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACrC,IAAI,EAAE,aAAsB;YAC5B,IAAI;YACJ,MAAM,EAAE,kBAAkB;YAC1B,YAAY,EAAE,QAAQ,CAAC,YAAY;SACpC,CAAC,CAAC;QACH,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpC,IAAI,EAAE,YAAqB;YAC3B,IAAI;YACJ,MAAM,EAAE,GAAG;YACX,YAAY,EAAE,QAAQ,CAAC,YAAY;SACpC,CAAC,CAAC;QACH,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,EAAE,cAAuB;YAC7B,IAAI;YACJ,YAAY,EAAE,QAAQ,CAAC,YAAY;SACpC,CAAC,CAAC;QACH,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACvC,IAAI,EAAE,cAAuB;YAC7B,IAAI;YACJ,YAAY,EAAE,QAAQ,CAAC,YAAY;SACpC,CAAC,CAAC;QACH,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI,EAAE,YAAqB;YAC3B,IAAI;YACJ,YAAY,EAAE,QAAQ,CAAC,YAAY;SACpC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAC1B,aAAqB,EACrB,YAA6B,EAC7B,gBAAqC;IAErC,MAAM,YAAY,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAErD,OAAO;QACL,aAAa;QACb,YAAY,EAAE,YAAY,CAAC,YAAY;QACvC,WAAW,EAAE,YAAY,CAAC,WAAW;QACrC,UAAU,EAAE,YAAY,CAAC,UAAU;QACnC,YAAY,EAAE,YAAY,CAAC,YAAY;QACvC,aAAa,EAAE,YAAY,CAAC,aAAa;QACzC,cAAc,EAAE,YAAY,CAAC,cAAc;QAC3C,YAAY;QACZ,cAAc,EAAE,gBAAgB,CAAC,cAAc;QAC/C,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;KACpC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,QAAQ,CAAC,aAAqB,EAAE,MAAc,EAAE,WAAoB;IAClF,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,gBAAgB,aAAa,EAAE,CAAC,CAAC;QAE9C,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,mBAAmB,CAAC,aAAa,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;QAElF,MAAM,CAAC,KAAK,CAAC,eAAe,aAAa,EAAE,EAAE;YAC3C,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM;YACtC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM;YACpC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM;YACxC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM;SACzC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;YAClC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,IAAI,YAAY,CAAC,wBAAwB,aAAa,EAAE,EAAE;YAC9D,QAAQ,EAAE,aAAa;YACvB,aAAa,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SACtE,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"lwc-parser.js","sourceRoot":"","sources":["../../src/parsers/lwc-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;AAwBtC;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,aAAqB,EAAE,MAAc,EAAE,WAAoB;IAClF,IAAI,CAAC;QACH,MAAM,CAAC,KAAK,CAAC,gBAAgB,aAAa,EAAE,CAAC,CAAC;QAE9C,MAAM,YAAY,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,mBAAmB,CAAC,aAAa,EAAE,YAAY,EAAE,gBAAgB,CAAC,CAAC;QAElF,MAAM,CAAC,KAAK,CAAC,eAAe,aAAa,EAAE,EAAE;YAC3C,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM;YACtC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM;YACpC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM;YACxC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM;SACzC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;YAClC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,MAAM,IAAI,YAAY,CAAC,wBAAwB,aAAa,EAAE,EAAE;YAC9D,QAAQ,EAAE,aAAa;YACvB,aAAa,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SACtE,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { LWCParseResult } from './lwc-parser.js';
2
+ import type { LwcCodeAnalysis } from './lwc-code-analysis.js';
3
+ import type { LwcMetadataAnalysis } from './lwc-metadata-analysis.js';
4
+ export declare function assembleParseResult(componentName: string, codeAnalysis: LwcCodeAnalysis, metadataAnalysis: LwcMetadataAnalysis): LWCParseResult;
@@ -0,0 +1,47 @@
1
+ export function assembleParseResult(componentName, codeAnalysis, metadataAnalysis) {
2
+ const dependencies = buildDependencies(codeAnalysis);
3
+ return {
4
+ componentName,
5
+ isTypeScript: codeAnalysis.isTypeScript,
6
+ apexImports: codeAnalysis.apexImports,
7
+ lwcImports: codeAnalysis.lwcImports,
8
+ wireAdapters: codeAnalysis.wireAdapters,
9
+ apiProperties: codeAnalysis.apiProperties,
10
+ navigationRefs: codeAnalysis.navigationRefs,
11
+ dependencies,
12
+ hasMetadataXml: metadataAnalysis.hasMetadataXml,
13
+ metadata: metadataAnalysis.metadata,
14
+ };
15
+ }
16
+ function buildDependencies(analysis) {
17
+ return [
18
+ ...analysis.apexImports.map((name) => ({
19
+ type: 'apex_import',
20
+ name,
21
+ source: '@salesforce/apex',
22
+ isTypeScript: analysis.isTypeScript,
23
+ })),
24
+ ...analysis.lwcImports.map((name) => ({
25
+ type: 'lwc_import',
26
+ name,
27
+ source: 'c',
28
+ isTypeScript: analysis.isTypeScript,
29
+ })),
30
+ ...analysis.wireAdapters.map((name) => ({
31
+ type: 'wire_adapter',
32
+ name,
33
+ isTypeScript: analysis.isTypeScript,
34
+ })),
35
+ ...analysis.apiProperties.map((name) => ({
36
+ type: 'api_property',
37
+ name,
38
+ isTypeScript: analysis.isTypeScript,
39
+ })),
40
+ ...analysis.navigationRefs.map((name) => ({
41
+ type: 'navigation',
42
+ name,
43
+ isTypeScript: analysis.isTypeScript,
44
+ })),
45
+ ];
46
+ }
47
+ //# sourceMappingURL=lwc-result-assembly.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lwc-result-assembly.js","sourceRoot":"","sources":["../../src/parsers/lwc-result-assembly.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,mBAAmB,CACjC,aAAqB,EACrB,YAA6B,EAC7B,gBAAqC;IAErC,MAAM,YAAY,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAErD,OAAO;QACL,aAAa;QACb,YAAY,EAAE,YAAY,CAAC,YAAY;QACvC,WAAW,EAAE,YAAY,CAAC,WAAW;QACrC,UAAU,EAAE,YAAY,CAAC,UAAU;QACnC,YAAY,EAAE,YAAY,CAAC,YAAY;QACvC,aAAa,EAAE,YAAY,CAAC,aAAa;QACzC,cAAc,EAAE,YAAY,CAAC,cAAc;QAC3C,YAAY;QACZ,cAAc,EAAE,gBAAgB,CAAC,cAAc;QAC/C,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAyB;IAClD,OAAO;QACL,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACrC,IAAI,EAAE,aAAsB;YAC5B,IAAI;YACJ,MAAM,EAAE,kBAAkB;YAC1B,YAAY,EAAE,QAAQ,CAAC,YAAY;SACpC,CAAC,CAAC;QACH,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACpC,IAAI,EAAE,YAAqB;YAC3B,IAAI;YACJ,MAAM,EAAE,GAAG;YACX,YAAY,EAAE,QAAQ,CAAC,YAAY;SACpC,CAAC,CAAC;QACH,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACtC,IAAI,EAAE,cAAuB;YAC7B,IAAI;YACJ,YAAY,EAAE,QAAQ,CAAC,YAAY;SACpC,CAAC,CAAC;QACH,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACvC,IAAI,EAAE,cAAuB;YAC7B,IAAI;YACJ,YAAY,EAAE,QAAQ,CAAC,YAAY;SACpC,CAAC,CAAC;QACH,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI,EAAE,YAAqB;YAC3B,IAAI;YACJ,YAAY,EAAE,QAAQ,CAAC,YAAY;SACpC,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC"}
@@ -4,4 +4,5 @@ export type StatusPresenterIO = {
4
4
  };
5
5
  export declare class StatusCommandPresenter {
6
6
  reportStatus(io: StatusPresenterIO, summary: DeploymentStatusSummary, formattedStatus: string): void;
7
+ private reportWaveGraph;
7
8
  }
@@ -11,6 +11,26 @@ export class StatusCommandPresenter {
11
11
  }
12
12
  io.log(line);
13
13
  });
14
+ if (summary.waveGraph) {
15
+ this.reportWaveGraph(io, summary);
16
+ }
17
+ }
18
+ reportWaveGraph(io, summary) {
19
+ if (!summary.waveGraph) {
20
+ return;
21
+ }
22
+ io.log('');
23
+ io.log('Wave Graph:');
24
+ for (const node of summary.waveGraph.nodes) {
25
+ io.log(` Wave ${node.waveNumber} [${node.status}] - ${node.componentCount} component(s)`);
26
+ }
27
+ const dependencyEdges = summary.waveGraph.edges.filter((edge) => edge.kind === 'dependency');
28
+ if (dependencyEdges.length > 0) {
29
+ io.log('Wave Dependencies:');
30
+ for (const edge of dependencyEdges) {
31
+ io.log(` Wave ${edge.fromWave} -> Wave ${edge.toWave} (${edge.dependencyCount ?? 0} dependency edge(s))`);
32
+ }
33
+ }
14
34
  }
15
35
  }
16
36
  //# sourceMappingURL=status-command-presenter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status-command-presenter.js","sourceRoot":"","sources":["../../src/presentation/status-command-presenter.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,sBAAsB;IAC1B,YAAY,CAAC,EAAqB,EAAE,OAAgC,EAAE,eAAuB;QAClG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,EAAE,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QAED,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3C,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACrC,EAAE,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;gBACjD,OAAO;YACT,CAAC;YAED,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
1
+ {"version":3,"file":"status-command-presenter.js","sourceRoot":"","sources":["../../src/presentation/status-command-presenter.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,sBAAsB;IAC1B,YAAY,CAAC,EAAqB,EAAE,OAAgC,EAAE,eAAuB;QAClG,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,EAAE,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;YACxC,OAAO;QACT,CAAC;QAED,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3C,IAAI,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBACrC,EAAE,CAAC,GAAG,CAAC,gBAAgB,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;gBACjD,OAAO;YACT,CAAC;YAED,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,EAAqB,EAAE,OAAgC;QAC7E,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACX,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACtB,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAC3C,EAAE,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,OAAO,IAAI,CAAC,cAAc,eAAe,CAAC,CAAC;QAC7F,CAAC;QAED,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;QAC7F,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,EAAE,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;YAC7B,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;gBACnC,EAAE,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,QAAQ,YAAY,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,eAAe,IAAI,CAAC,sBAAsB,CAAC,CAAC;YAC7G,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
@@ -54,6 +54,7 @@ export declare class ForceIgnoreParser {
54
54
  * Get relative path from project root
55
55
  */
56
56
  private getRelativePath;
57
+ private getMatchCandidates;
57
58
  /**
58
59
  * Get all loaded rules
59
60
  */
@@ -111,16 +111,16 @@ export class ForceIgnoreParser {
111
111
  if (this.rules.length === 0) {
112
112
  return false;
113
113
  }
114
- // Get relative path from project root
115
114
  const relativePath = this.getRelativePath(filePath);
115
+ const matchCandidates = this.getMatchCandidates(relativePath);
116
116
  let ignored = false;
117
117
  // Apply rules in order (later rules override earlier ones)
118
118
  for (const rule of this.rules) {
119
119
  // Use minimatch for glob matching (industry standard)
120
- const matches = minimatch(relativePath, rule.pattern, {
120
+ const matches = matchCandidates.some((candidate) => minimatch(candidate, rule.pattern, {
121
121
  dot: true, // Match dotfiles
122
122
  matchBase: true, // Match basename
123
- });
123
+ }));
124
124
  if (matches) {
125
125
  ignored = !rule.isNegation;
126
126
  }
@@ -147,6 +147,17 @@ export class ForceIgnoreParser {
147
147
  relativePath = relativePath.split(sep).join('/');
148
148
  return relativePath;
149
149
  }
150
+ getMatchCandidates(relativePath) {
151
+ const normalizedPath = relativePath.split(sep).join('/');
152
+ const candidates = new Set([normalizedPath]);
153
+ const parts = normalizedPath.split('/').filter((part) => part.length > 0);
154
+ for (let index = 1; index < parts.length; index++) {
155
+ const ancestor = parts.slice(0, index).join('/');
156
+ candidates.add(ancestor);
157
+ candidates.add(`${ancestor}/`);
158
+ }
159
+ return [...candidates];
160
+ }
150
161
  /**
151
162
  * Get all loaded rules
152
163
  */
@@ -1 +1 @@
1
- {"version":3,"file":"forceignore-parser.js","sourceRoot":"","sources":["../../src/scanner/forceignore-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"forceignore-parser.js","sourceRoot":"","sources":["../../src/scanner/forceignore-parser.ts"],"names":[],"mappings":"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"}
@@ -44,7 +44,7 @@ export class StructureValidator {
44
44
  code: 'MISSING_API_VERSION',
45
45
  message: 'sourceApiVersion is recommended in sfdx-project.json',
46
46
  path: sfdxProjectPath,
47
- suggestion: 'Add sourceApiVersion (e.g., "61.0")',
47
+ suggestion: 'Add sourceApiVersion (e.g., "66.0")',
48
48
  });
49
49
  }
50
50
  if (!config.namespace) {
@@ -19,6 +19,7 @@ export type ScanResult = {
19
19
  components: MetadataComponent[];
20
20
  dependencyResult: DependencyAnalysisResult;
21
21
  projectRoot: string;
22
+ apiVersion: string;
22
23
  executionTime: number;
23
24
  errors: string[];
24
25
  warnings: string[];
@@ -51,6 +52,7 @@ export declare class MetadataScannerService {
51
52
  private scanSecurityMetadata;
52
53
  private scanExperienceMetadata;
53
54
  private scanAIMetadata;
55
+ private scanAdditionalMetadata;
54
56
  private scanRegisteredFileMetadata;
55
57
  private scanRegisteredDirectoryMetadata;
56
58
  /**
@@ -13,12 +13,13 @@ import { DependencyGraphBuilder } from '../dependencies/dependency-graph-builder
13
13
  import { ForceIgnoreParser } from '../scanner/forceignore-parser.js';
14
14
  import { SfdxProjectDetector } from '../scanner/sfdx-project-detector.js';
15
15
  import { getLogger } from '../utils/logger.js';
16
- import { parseBotComponent, parseFlowComponent, parseGenAiPromptComponent, } from './scanners/automation-ai-metadata-scanner.js';
16
+ import { parseAiAuthoringBundleComponent, parseBotComponent, parseFlowComponent, parseGenAiPromptComponent, } from './scanners/automation-ai-metadata-scanner.js';
17
17
  import { CODE_DIRECTORY_SCANNERS, CODE_FILE_SCANNERS } from './scanners/code-metadata-scanner.js';
18
18
  import { parseCustomMetadataComponents, parseCustomObjectComponent } from './scanners/data-metadata-scanner.js';
19
19
  import { parseEmailTemplateComponent, parseFlexiPageComponent, parseLayoutComponent, parseVisualforceComponent, } from './scanners/experience-metadata-scanner.js';
20
20
  import { fileExists, scanMetadataDirectories, scanMetadataFiles, scanRegisteredDirectoryMetadata, scanRegisteredFileMetadata, } from './scanners/scanner-runtime.js';
21
21
  import { parsePermissionSetComponent, parseProfileComponent } from './scanners/security-metadata-scanner.js';
22
+ import { scanAdditionalMetadata } from './scanners/additional-metadata-scanner.js';
22
23
  const logger = getLogger('MetadataScannerService');
23
24
  /**
24
25
  * Metadata file pattern matcher
@@ -83,6 +84,7 @@ export class MetadataScannerService {
83
84
  components,
84
85
  dependencyResult,
85
86
  projectRoot: projectInfo.projectRoot,
87
+ apiVersion: projectInfo.apiVersion,
86
88
  executionTime,
87
89
  errors,
88
90
  warnings,
@@ -116,6 +118,7 @@ export class MetadataScannerService {
116
118
  this.scanSecurityMetadata(packagePath, errors),
117
119
  this.scanExperienceMetadata(packagePath, errors),
118
120
  this.scanAIMetadata(packagePath, errors),
121
+ this.scanAdditionalMetadata(packagePath, errors),
119
122
  ]);
120
123
  return componentGroups.flat();
121
124
  }
@@ -152,7 +155,11 @@ export class MetadataScannerService {
152
155
  async scanAIMetadata(packagePath, errors) {
153
156
  const botComponents = await scanMetadataFiles(packagePath, '**/bots/**/*.bot-meta.xml', errors, 'Bot', this.shouldIgnorePath, parseBotComponent);
154
157
  const genAiPromptComponents = await scanMetadataFiles(packagePath, '**/genaiPromptTemplates/**/*.genAiPromptTemplate-meta.xml', errors, 'GenAI Prompt', this.shouldIgnorePath, parseGenAiPromptComponent);
155
- return [...botComponents, ...genAiPromptComponents];
158
+ const aiAuthoringBundleComponents = await scanMetadataFiles(packagePath, '**/aiAuthoringBundles/**/*.agent', errors, 'AiAuthoringBundle', this.shouldIgnorePath, (filePath) => Promise.resolve(parseAiAuthoringBundleComponent(filePath)));
159
+ return [...botComponents, ...genAiPromptComponents, ...aiAuthoringBundleComponents];
160
+ }
161
+ async scanAdditionalMetadata(packagePath, errors) {
162
+ return scanAdditionalMetadata(packagePath, errors, this.shouldIgnorePath);
156
163
  }
157
164
  async scanRegisteredFileMetadata(packagePath, errors) {
158
165
  return scanRegisteredFileMetadata(packagePath, errors, this.shouldIgnorePath, CODE_FILE_SCANNERS);