@jterrats/smart-deployment 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +193 -0
- package/lib/ai/agentforce-error-handler.d.ts +81 -0
- package/lib/ai/agentforce-error-handler.js +196 -0
- package/lib/ai/agentforce-error-handler.js.map +1 -0
- package/lib/ai/agentforce-priority-service.d.ts +82 -0
- package/lib/ai/agentforce-priority-service.js +257 -0
- package/lib/ai/agentforce-priority-service.js.map +1 -0
- package/lib/ai/agentforce-service.d.ts +99 -0
- package/lib/ai/agentforce-service.js +300 -0
- package/lib/ai/agentforce-service.js.map +1 -0
- package/lib/ai/circuit-breaker.d.ts +115 -0
- package/lib/ai/circuit-breaker.js +277 -0
- package/lib/ai/circuit-breaker.js.map +1 -0
- package/lib/ai/dependency-inference-service.d.ts +76 -0
- package/lib/ai/dependency-inference-service.js +220 -0
- package/lib/ai/dependency-inference-service.js.map +1 -0
- package/lib/ai/llm-provider-factory.d.ts +15 -0
- package/lib/ai/llm-provider-factory.js +36 -0
- package/lib/ai/llm-provider-factory.js.map +1 -0
- package/lib/ai/llm-provider.d.ts +27 -0
- package/lib/ai/llm-provider.js +2 -0
- package/lib/ai/llm-provider.js.map +1 -0
- package/lib/ai/openai-service.d.ts +20 -0
- package/lib/ai/openai-service.js +89 -0
- package/lib/ai/openai-service.js.map +1 -0
- package/lib/ai/prompt-builder.d.ts +79 -0
- package/lib/ai/prompt-builder.js +180 -0
- package/lib/ai/prompt-builder.js.map +1 -0
- package/lib/ai/response-parser.d.ts +67 -0
- package/lib/ai/response-parser.js +234 -0
- package/lib/ai/response-parser.js.map +1 -0
- package/lib/ai/wave-validation-service.d.ts +111 -0
- package/lib/ai/wave-validation-service.js +381 -0
- package/lib/ai/wave-validation-service.js.map +1 -0
- package/lib/analysis/analysis-reporter.d.ts +56 -0
- package/lib/analysis/analysis-reporter.js +170 -0
- package/lib/analysis/analysis-reporter.js.map +1 -0
- package/lib/analytics/error-analytics.d.ts +80 -0
- package/lib/analytics/error-analytics.js +162 -0
- package/lib/analytics/error-analytics.js.map +1 -0
- package/lib/commands/analyze.d.ts +49 -0
- package/lib/commands/analyze.js +232 -0
- package/lib/commands/analyze.js.map +1 -0
- package/lib/commands/config.d.ts +42 -0
- package/lib/commands/config.js +219 -0
- package/lib/commands/config.js.map +1 -0
- package/lib/commands/resume.d.ts +26 -0
- package/lib/commands/resume.js +69 -0
- package/lib/commands/resume.js.map +1 -0
- package/lib/commands/start.d.ts +70 -0
- package/lib/commands/start.js +659 -0
- package/lib/commands/start.js.map +1 -0
- package/lib/commands/status.d.ts +37 -0
- package/lib/commands/status.js +69 -0
- package/lib/commands/status.js.map +1 -0
- package/lib/commands/validate.d.ts +33 -0
- package/lib/commands/validate.js +66 -0
- package/lib/commands/validate.js.map +1 -0
- package/lib/config/repo-config.d.ts +22 -0
- package/lib/config/repo-config.js +31 -0
- package/lib/config/repo-config.js.map +1 -0
- package/lib/constants/agentforce-limits.d.ts +174 -0
- package/lib/constants/agentforce-limits.js +262 -0
- package/lib/constants/agentforce-limits.js.map +1 -0
- package/lib/constants/api-version.d.ts +70 -0
- package/lib/constants/api-version.js +122 -0
- package/lib/constants/api-version.js.map +1 -0
- package/lib/constants/deployment-order.d.ts +68 -0
- package/lib/constants/deployment-order.js +162 -0
- package/lib/constants/deployment-order.js.map +1 -0
- package/lib/constants/salesforce-limits.d.ts +107 -0
- package/lib/constants/salesforce-limits.js +104 -0
- package/lib/constants/salesforce-limits.js.map +1 -0
- package/lib/dependencies/circular-dependency-detector.d.ts +137 -0
- package/lib/dependencies/circular-dependency-detector.js +329 -0
- package/lib/dependencies/circular-dependency-detector.js.map +1 -0
- package/lib/dependencies/cycle-remediation-planner.d.ts +50 -0
- package/lib/dependencies/cycle-remediation-planner.js +192 -0
- package/lib/dependencies/cycle-remediation-planner.js.map +1 -0
- package/lib/dependencies/dependency-cache.d.ts +134 -0
- package/lib/dependencies/dependency-cache.js +303 -0
- package/lib/dependencies/dependency-cache.js.map +1 -0
- package/lib/dependencies/dependency-depth-calculator.d.ts +145 -0
- package/lib/dependencies/dependency-depth-calculator.js +368 -0
- package/lib/dependencies/dependency-depth-calculator.js.map +1 -0
- package/lib/dependencies/dependency-graph-builder.d.ts +151 -0
- package/lib/dependencies/dependency-graph-builder.js +411 -0
- package/lib/dependencies/dependency-graph-builder.js.map +1 -0
- package/lib/dependencies/dependency-impact-analyzer.d.ts +145 -0
- package/lib/dependencies/dependency-impact-analyzer.js +330 -0
- package/lib/dependencies/dependency-impact-analyzer.js.map +1 -0
- package/lib/dependencies/dependency-merger.d.ts +122 -0
- package/lib/dependencies/dependency-merger.js +245 -0
- package/lib/dependencies/dependency-merger.js.map +1 -0
- package/lib/dependencies/dependency-resolver.d.ts +157 -0
- package/lib/dependencies/dependency-resolver.js +298 -0
- package/lib/dependencies/dependency-resolver.js.map +1 -0
- package/lib/dependencies/dependency-validator.d.ts +123 -0
- package/lib/dependencies/dependency-validator.js +291 -0
- package/lib/dependencies/dependency-validator.js.map +1 -0
- package/lib/dependencies/graph-visualizer.d.ts +110 -0
- package/lib/dependencies/graph-visualizer.js +262 -0
- package/lib/dependencies/graph-visualizer.js.map +1 -0
- package/lib/dependencies/heuristic-inference.d.ts +136 -0
- package/lib/dependencies/heuristic-inference.js +430 -0
- package/lib/dependencies/heuristic-inference.js.map +1 -0
- package/lib/deployment/cycle-source-editor.d.ts +34 -0
- package/lib/deployment/cycle-source-editor.js +121 -0
- package/lib/deployment/cycle-source-editor.js.map +1 -0
- package/lib/deployment/deployment-error-handler.d.ts +38 -0
- package/lib/deployment/deployment-error-handler.js +79 -0
- package/lib/deployment/deployment-error-handler.js.map +1 -0
- package/lib/deployment/deployment-reporter.d.ts +63 -0
- package/lib/deployment/deployment-reporter.js +150 -0
- package/lib/deployment/deployment-reporter.js.map +1 -0
- package/lib/deployment/deployment-state-summary.d.ts +38 -0
- package/lib/deployment/deployment-state-summary.js +209 -0
- package/lib/deployment/deployment-state-summary.js.map +1 -0
- package/lib/deployment/deployment-status-service.d.ts +36 -0
- package/lib/deployment/deployment-status-service.js +128 -0
- package/lib/deployment/deployment-status-service.js.map +1 -0
- package/lib/deployment/deployment-tracker.d.ts +42 -0
- package/lib/deployment/deployment-tracker.js +79 -0
- package/lib/deployment/deployment-tracker.js.map +1 -0
- package/lib/deployment/deployment-validation-service.d.ts +28 -0
- package/lib/deployment/deployment-validation-service.js +161 -0
- package/lib/deployment/deployment-validation-service.js.map +1 -0
- package/lib/deployment/retry-handler.d.ts +37 -0
- package/lib/deployment/retry-handler.js +86 -0
- package/lib/deployment/retry-handler.js.map +1 -0
- package/lib/deployment/sf-cli-integration.d.ts +42 -0
- package/lib/deployment/sf-cli-integration.js +105 -0
- package/lib/deployment/sf-cli-integration.js.map +1 -0
- package/lib/deployment/state-manager.d.ts +61 -0
- package/lib/deployment/state-manager.js +83 -0
- package/lib/deployment/state-manager.js.map +1 -0
- package/lib/deployment/test-executor.d.ts +41 -0
- package/lib/deployment/test-executor.js +87 -0
- package/lib/deployment/test-executor.js.map +1 -0
- package/lib/errors/base-error.d.ts +24 -0
- package/lib/errors/base-error.js +66 -0
- package/lib/errors/base-error.js.map +1 -0
- package/lib/errors/dependency-error.d.ts +37 -0
- package/lib/errors/dependency-error.js +76 -0
- package/lib/errors/dependency-error.js.map +1 -0
- package/lib/errors/deployment-error.d.ts +55 -0
- package/lib/errors/deployment-error.js +132 -0
- package/lib/errors/deployment-error.js.map +1 -0
- package/lib/errors/index.d.ts +45 -0
- package/lib/errors/index.js +71 -0
- package/lib/errors/index.js.map +1 -0
- package/lib/errors/network-error.d.ts +53 -0
- package/lib/errors/network-error.js +111 -0
- package/lib/errors/network-error.js.map +1 -0
- package/lib/errors/parsing-error.d.ts +41 -0
- package/lib/errors/parsing-error.js +69 -0
- package/lib/errors/parsing-error.js.map +1 -0
- package/lib/errors/validation-error-reporter.d.ts +34 -0
- package/lib/errors/validation-error-reporter.js +99 -0
- package/lib/errors/validation-error-reporter.js.map +1 -0
- package/lib/errors/validation-error.d.ts +58 -0
- package/lib/errors/validation-error.js +131 -0
- package/lib/errors/validation-error.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -0
- package/lib/monitoring/performance-monitor.d.ts +98 -0
- package/lib/monitoring/performance-monitor.js +260 -0
- package/lib/monitoring/performance-monitor.js.map +1 -0
- package/lib/parsers/apex-class-parser.d.ts +47 -0
- package/lib/parsers/apex-class-parser.js +368 -0
- package/lib/parsers/apex-class-parser.js.map +1 -0
- package/lib/parsers/apex-trigger-parser.d.ts +48 -0
- package/lib/parsers/apex-trigger-parser.js +229 -0
- package/lib/parsers/apex-trigger-parser.js.map +1 -0
- package/lib/parsers/aura-parser.d.ts +55 -0
- package/lib/parsers/aura-parser.js +229 -0
- package/lib/parsers/aura-parser.js.map +1 -0
- package/lib/parsers/bot-parser.d.ts +65 -0
- package/lib/parsers/bot-parser.js +225 -0
- package/lib/parsers/bot-parser.js.map +1 -0
- package/lib/parsers/custom-metadata-parser.d.ts +94 -0
- package/lib/parsers/custom-metadata-parser.js +199 -0
- package/lib/parsers/custom-metadata-parser.js.map +1 -0
- package/lib/parsers/custom-object-parser.d.ts +62 -0
- package/lib/parsers/custom-object-parser.js +297 -0
- package/lib/parsers/custom-object-parser.js.map +1 -0
- package/lib/parsers/email-template-parser.d.ts +64 -0
- package/lib/parsers/email-template-parser.js +238 -0
- package/lib/parsers/email-template-parser.js.map +1 -0
- package/lib/parsers/error-resilient-parser.d.ts +110 -0
- package/lib/parsers/error-resilient-parser.js +277 -0
- package/lib/parsers/error-resilient-parser.js.map +1 -0
- package/lib/parsers/flexipage-parser.d.ts +64 -0
- package/lib/parsers/flexipage-parser.js +196 -0
- package/lib/parsers/flexipage-parser.js.map +1 -0
- package/lib/parsers/flow-parser.d.ts +54 -0
- package/lib/parsers/flow-parser.js +287 -0
- package/lib/parsers/flow-parser.js.map +1 -0
- package/lib/parsers/genai-prompt-parser.d.ts +67 -0
- package/lib/parsers/genai-prompt-parser.js +160 -0
- package/lib/parsers/genai-prompt-parser.js.map +1 -0
- package/lib/parsers/layout-parser.d.ts +64 -0
- package/lib/parsers/layout-parser.js +267 -0
- package/lib/parsers/layout-parser.js.map +1 -0
- package/lib/parsers/lwc-parser.d.ts +60 -0
- package/lib/parsers/lwc-parser.js +264 -0
- package/lib/parsers/lwc-parser.js.map +1 -0
- package/lib/parsers/permission-set-parser.d.ts +86 -0
- package/lib/parsers/permission-set-parser.js +152 -0
- package/lib/parsers/permission-set-parser.js.map +1 -0
- package/lib/parsers/profile-parser.d.ts +81 -0
- package/lib/parsers/profile-parser.js +141 -0
- package/lib/parsers/profile-parser.js.map +1 -0
- package/lib/parsers/visualforce-parser.d.ts +47 -0
- package/lib/parsers/visualforce-parser.js +180 -0
- package/lib/parsers/visualforce-parser.js.map +1 -0
- package/lib/provisioning/data-provisioner.d.ts +88 -0
- package/lib/provisioning/data-provisioner.js +257 -0
- package/lib/provisioning/data-provisioner.js.map +1 -0
- package/lib/scanner/custom-structure-scanner.d.ts +66 -0
- package/lib/scanner/custom-structure-scanner.js +229 -0
- package/lib/scanner/custom-structure-scanner.js.map +1 -0
- package/lib/scanner/forceignore-parser.d.ts +69 -0
- package/lib/scanner/forceignore-parser.js +195 -0
- package/lib/scanner/forceignore-parser.js.map +1 -0
- package/lib/scanner/metadata-format-scanner.d.ts +77 -0
- package/lib/scanner/metadata-format-scanner.js +282 -0
- package/lib/scanner/metadata-format-scanner.js.map +1 -0
- package/lib/scanner/monorepo-scanner.d.ts +71 -0
- package/lib/scanner/monorepo-scanner.js +225 -0
- package/lib/scanner/monorepo-scanner.js.map +1 -0
- package/lib/scanner/project-validator.d.ts +55 -0
- package/lib/scanner/project-validator.js +235 -0
- package/lib/scanner/project-validator.js.map +1 -0
- package/lib/scanner/sfdx-project-detector.d.ts +86 -0
- package/lib/scanner/sfdx-project-detector.js +240 -0
- package/lib/scanner/sfdx-project-detector.js.map +1 -0
- package/lib/scanner/structure-validator.d.ts +64 -0
- package/lib/scanner/structure-validator.js +296 -0
- package/lib/scanner/structure-validator.js.map +1 -0
- package/lib/services/metadata-scanner-service.d.ts +64 -0
- package/lib/services/metadata-scanner-service.js +651 -0
- package/lib/services/metadata-scanner-service.js.map +1 -0
- package/lib/types/agentforce.d.ts +157 -0
- package/lib/types/agentforce.js +2 -0
- package/lib/types/agentforce.js.map +1 -0
- package/lib/types/dependency.d.ts +98 -0
- package/lib/types/dependency.js +5 -0
- package/lib/types/dependency.js.map +1 -0
- package/lib/types/deployment-plan.d.ts +81 -0
- package/lib/types/deployment-plan.js +6 -0
- package/lib/types/deployment-plan.js.map +1 -0
- package/lib/types/deployment.d.ts +88 -0
- package/lib/types/deployment.js +5 -0
- package/lib/types/deployment.js.map +1 -0
- package/lib/types/graph.d.ts +35 -0
- package/lib/types/graph.js +5 -0
- package/lib/types/graph.js.map +1 -0
- package/lib/types/index.d.ts +12 -0
- package/lib/types/index.js +17 -0
- package/lib/types/index.js.map +1 -0
- package/lib/types/metadata.d.ts +101 -0
- package/lib/types/metadata.js +13 -0
- package/lib/types/metadata.js.map +1 -0
- package/lib/types/project.d.ts +156 -0
- package/lib/types/project.js +56 -0
- package/lib/types/project.js.map +1 -0
- package/lib/types/salesforce/apex.d.ts +94 -0
- package/lib/types/salesforce/apex.js +6 -0
- package/lib/types/salesforce/apex.js.map +1 -0
- package/lib/types/salesforce/aura.d.ts +150 -0
- package/lib/types/salesforce/aura.js +6 -0
- package/lib/types/salesforce/aura.js.map +1 -0
- package/lib/types/salesforce/bot.d.ts +293 -0
- package/lib/types/salesforce/bot.js +6 -0
- package/lib/types/salesforce/bot.js.map +1 -0
- package/lib/types/salesforce/common.d.ts +15 -0
- package/lib/types/salesforce/common.js +5 -0
- package/lib/types/salesforce/common.js.map +1 -0
- package/lib/types/salesforce/custom-metadata.d.ts +92 -0
- package/lib/types/salesforce/custom-metadata.js +6 -0
- package/lib/types/salesforce/custom-metadata.js.map +1 -0
- package/lib/types/salesforce/email.d.ts +56 -0
- package/lib/types/salesforce/email.js +6 -0
- package/lib/types/salesforce/email.js.map +1 -0
- package/lib/types/salesforce/flexipage.d.ts +149 -0
- package/lib/types/salesforce/flexipage.js +6 -0
- package/lib/types/salesforce/flexipage.js.map +1 -0
- package/lib/types/salesforce/flow.d.ts +516 -0
- package/lib/types/salesforce/flow.js +6 -0
- package/lib/types/salesforce/flow.js.map +1 -0
- package/lib/types/salesforce/genai.d.ts +67 -0
- package/lib/types/salesforce/genai.js +6 -0
- package/lib/types/salesforce/genai.js.map +1 -0
- package/lib/types/salesforce/index.d.ts +27 -0
- package/lib/types/salesforce/index.js +43 -0
- package/lib/types/salesforce/index.js.map +1 -0
- package/lib/types/salesforce/layout.d.ts +236 -0
- package/lib/types/salesforce/layout.js +6 -0
- package/lib/types/salesforce/layout.js.map +1 -0
- package/lib/types/salesforce/lwc.d.ts +123 -0
- package/lib/types/salesforce/lwc.js +6 -0
- package/lib/types/salesforce/lwc.js.map +1 -0
- package/lib/types/salesforce/object.d.ts +427 -0
- package/lib/types/salesforce/object.js +6 -0
- package/lib/types/salesforce/object.js.map +1 -0
- package/lib/types/salesforce/parser-types.d.ts +79 -0
- package/lib/types/salesforce/parser-types.js +80 -0
- package/lib/types/salesforce/parser-types.js.map +1 -0
- package/lib/types/salesforce/permission.d.ts +289 -0
- package/lib/types/salesforce/permission.js +6 -0
- package/lib/types/salesforce/permission.js.map +1 -0
- package/lib/types/salesforce/resource.d.ts +93 -0
- package/lib/types/salesforce/resource.js +6 -0
- package/lib/types/salesforce/resource.js.map +1 -0
- package/lib/types/salesforce/visualforce.d.ts +70 -0
- package/lib/types/salesforce/visualforce.js +6 -0
- package/lib/types/salesforce/visualforce.js.map +1 -0
- package/lib/utils/cache-manager.d.ts +158 -0
- package/lib/utils/cache-manager.js +429 -0
- package/lib/utils/cache-manager.js.map +1 -0
- package/lib/utils/deployment-plan-manager.d.ts +40 -0
- package/lib/utils/deployment-plan-manager.js +183 -0
- package/lib/utils/deployment-plan-manager.js.map +1 -0
- package/lib/utils/error-aggregator.d.ts +117 -0
- package/lib/utils/error-aggregator.js +268 -0
- package/lib/utils/error-aggregator.js.map +1 -0
- package/lib/utils/file-system.d.ts +62 -0
- package/lib/utils/file-system.js +167 -0
- package/lib/utils/file-system.js.map +1 -0
- package/lib/utils/functional.d.ts +52 -0
- package/lib/utils/functional.js +61 -0
- package/lib/utils/functional.js.map +1 -0
- package/lib/utils/graph-algorithms.d.ts +53 -0
- package/lib/utils/graph-algorithms.js +177 -0
- package/lib/utils/graph-algorithms.js.map +1 -0
- package/lib/utils/logger.d.ts +154 -0
- package/lib/utils/logger.js +327 -0
- package/lib/utils/logger.js.map +1 -0
- package/lib/utils/network-handler.d.ts +64 -0
- package/lib/utils/network-handler.js +147 -0
- package/lib/utils/network-handler.js.map +1 -0
- package/lib/utils/performance.d.ts +148 -0
- package/lib/utils/performance.js +294 -0
- package/lib/utils/performance.js.map +1 -0
- package/lib/utils/string.d.ts +197 -0
- package/lib/utils/string.js +331 -0
- package/lib/utils/string.js.map +1 -0
- package/lib/utils/xml.d.ts +97 -0
- package/lib/utils/xml.js +227 -0
- package/lib/utils/xml.js.map +1 -0
- package/lib/validators/xml-metadata-validator.d.ts +106 -0
- package/lib/validators/xml-metadata-validator.js +509 -0
- package/lib/validators/xml-metadata-validator.js.map +1 -0
- package/lib/waves/priority-wave-generator-ai.d.ts +85 -0
- package/lib/waves/priority-wave-generator-ai.js +191 -0
- package/lib/waves/priority-wave-generator-ai.js.map +1 -0
- package/lib/waves/priority-wave-generator.d.ts +47 -0
- package/lib/waves/priority-wave-generator.js +88 -0
- package/lib/waves/priority-wave-generator.js.map +1 -0
- package/lib/waves/test-optimizer.d.ts +155 -0
- package/lib/waves/test-optimizer.js +290 -0
- package/lib/waves/test-optimizer.js.map +1 -0
- package/lib/waves/wave-builder.d.ts +147 -0
- package/lib/waves/wave-builder.js +286 -0
- package/lib/waves/wave-builder.js.map +1 -0
- package/lib/waves/wave-diff-generator.d.ts +17 -0
- package/lib/waves/wave-diff-generator.js +6 -0
- package/lib/waves/wave-diff-generator.js.map +1 -0
- package/lib/waves/wave-executor.d.ts +33 -0
- package/lib/waves/wave-executor.js +50 -0
- package/lib/waves/wave-executor.js.map +1 -0
- package/lib/waves/wave-merger.d.ts +96 -0
- package/lib/waves/wave-merger.js +181 -0
- package/lib/waves/wave-merger.js.map +1 -0
- package/lib/waves/wave-metadata-generator.d.ts +13 -0
- package/lib/waves/wave-metadata-generator.js +12 -0
- package/lib/waves/wave-metadata-generator.js.map +1 -0
- package/lib/waves/wave-splitter.d.ts +154 -0
- package/lib/waves/wave-splitter.js +307 -0
- package/lib/waves/wave-splitter.js.map +1 -0
- package/lib/waves/wave-validator.d.ts +17 -0
- package/lib/waves/wave-validator.js +15 -0
- package/lib/waves/wave-validator.js.map +1 -0
- package/messages/analyze.json +18 -0
- package/messages/config.json +29 -0
- package/messages/resume.json +9 -0
- package/messages/start.json +24 -0
- package/messages/status.json +8 -0
- package/messages/validate.json +9 -0
- package/npm-shrinkwrap.json +25676 -0
- package/oclif.lock +11988 -0
- package/oclif.manifest.json +589 -0
- package/package.json +224 -0
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Layout Parser
|
|
3
|
+
* Parses Salesforce Page Layout metadata files (.layout-meta.xml)
|
|
4
|
+
*
|
|
5
|
+
* @ac AC-1: Extract related object (from filename)
|
|
6
|
+
* @ac AC-2: Extract custom button references
|
|
7
|
+
* @ac AC-3: Extract Visualforce page references
|
|
8
|
+
* @ac AC-4: Extract field references
|
|
9
|
+
* @ac AC-5: Extract related list references
|
|
10
|
+
* @ac AC-6: Link to dependent metadata
|
|
11
|
+
*
|
|
12
|
+
* @issue #21
|
|
13
|
+
*/
|
|
14
|
+
import { readFile } from 'node:fs/promises';
|
|
15
|
+
import { XMLParser } from 'fast-xml-parser';
|
|
16
|
+
/**
|
|
17
|
+
* Normalize value to array (handles XML parser returning single object vs array)
|
|
18
|
+
*/
|
|
19
|
+
function normalizeArray(value) {
|
|
20
|
+
if (!value)
|
|
21
|
+
return [];
|
|
22
|
+
return Array.isArray(value) ? value : [value];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Extract object name from layout filename
|
|
26
|
+
* Examples:
|
|
27
|
+
* 'Account-Account Layout' -> 'Account'
|
|
28
|
+
* 'CustomObject__c-Custom Layout' -> 'CustomObject__c'
|
|
29
|
+
*/
|
|
30
|
+
function extractObjectFromLayoutName(layoutName) {
|
|
31
|
+
const parts = layoutName.split('-');
|
|
32
|
+
return parts[0] || layoutName;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Extract custom buttons from layout and related lists
|
|
36
|
+
*/
|
|
37
|
+
function extractCustomButtons(metadata) {
|
|
38
|
+
const layoutCustomButtons = normalizeArray(metadata.customButtons);
|
|
39
|
+
const relatedListCustomButtons = [];
|
|
40
|
+
const relatedLists = normalizeArray(metadata.relatedLists);
|
|
41
|
+
for (const relatedList of relatedLists) {
|
|
42
|
+
const buttons = normalizeArray(relatedList.customButtons);
|
|
43
|
+
relatedListCustomButtons.push(...buttons);
|
|
44
|
+
}
|
|
45
|
+
return [...new Set([...layoutCustomButtons, ...relatedListCustomButtons])];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Extract Visualforce pages from layout sections
|
|
49
|
+
*/
|
|
50
|
+
function extractVFPagesFromSections(sections) {
|
|
51
|
+
const pages = [];
|
|
52
|
+
for (const section of sections) {
|
|
53
|
+
const columns = normalizeArray(section.layoutColumns);
|
|
54
|
+
for (const column of columns) {
|
|
55
|
+
const items = normalizeArray(column.layoutItems);
|
|
56
|
+
for (const item of items) {
|
|
57
|
+
if (item.page) {
|
|
58
|
+
pages.push(item.page);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return pages;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Extract Visualforce pages from feed layout
|
|
67
|
+
*/
|
|
68
|
+
function extractVFPagesFromFeedLayout(feedLayout) {
|
|
69
|
+
if (!feedLayout)
|
|
70
|
+
return [];
|
|
71
|
+
const pages = [];
|
|
72
|
+
const leftComponents = normalizeArray(feedLayout.leftComponents);
|
|
73
|
+
const rightComponents = normalizeArray(feedLayout.rightComponents);
|
|
74
|
+
for (const component of [...leftComponents, ...rightComponents]) {
|
|
75
|
+
if (component.componentType === 'Visualforce' && component.page) {
|
|
76
|
+
pages.push(component.page);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return pages;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Extract fields from layout sections
|
|
83
|
+
*/
|
|
84
|
+
function extractFieldsFromSections(sections) {
|
|
85
|
+
const fields = [];
|
|
86
|
+
for (const section of sections) {
|
|
87
|
+
const columns = normalizeArray(section.layoutColumns);
|
|
88
|
+
for (const column of columns) {
|
|
89
|
+
const items = normalizeArray(column.layoutItems);
|
|
90
|
+
for (const item of items) {
|
|
91
|
+
if (item.field) {
|
|
92
|
+
fields.push(item.field);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return fields;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Extract fields from various layout components
|
|
101
|
+
*/
|
|
102
|
+
function extractFields(metadata, layoutSections) {
|
|
103
|
+
const fields = [];
|
|
104
|
+
// From sections
|
|
105
|
+
fields.push(...extractFieldsFromSections(layoutSections));
|
|
106
|
+
// From related lists
|
|
107
|
+
const relatedLists = normalizeArray(metadata.relatedLists);
|
|
108
|
+
for (const relatedList of relatedLists) {
|
|
109
|
+
const listFields = normalizeArray(relatedList.fields);
|
|
110
|
+
fields.push(...listFields);
|
|
111
|
+
}
|
|
112
|
+
// From mini layout
|
|
113
|
+
if (metadata.miniLayout) {
|
|
114
|
+
const miniFields = normalizeArray(metadata.miniLayout.fields);
|
|
115
|
+
fields.push(...miniFields);
|
|
116
|
+
}
|
|
117
|
+
// From summary layout
|
|
118
|
+
if (metadata.summaryLayout) {
|
|
119
|
+
const summaryItems = normalizeArray(metadata.summaryLayout.summaryLayoutItems);
|
|
120
|
+
for (const item of summaryItems) {
|
|
121
|
+
if (item.field) {
|
|
122
|
+
fields.push(item.field);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return [...new Set(fields)];
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Extract quick actions from layout
|
|
130
|
+
*/
|
|
131
|
+
function extractQuickActions(metadata) {
|
|
132
|
+
const quickActions = [];
|
|
133
|
+
if (metadata.quickActionList) {
|
|
134
|
+
const quickActionItems = normalizeArray(metadata.quickActionList.quickActionListItems);
|
|
135
|
+
quickActions.push(...quickActionItems.map((item) => item.quickActionName));
|
|
136
|
+
}
|
|
137
|
+
if (metadata.platformActionList) {
|
|
138
|
+
const actionItems = normalizeArray(metadata.platformActionList.platformActionListItems);
|
|
139
|
+
for (const item of actionItems) {
|
|
140
|
+
if (item.actionType === 'QuickAction') {
|
|
141
|
+
quickActions.push(item.actionName);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return [...new Set(quickActions)];
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Extract canvas apps from layout sections
|
|
149
|
+
*/
|
|
150
|
+
function extractCanvasApps(sections) {
|
|
151
|
+
const apps = [];
|
|
152
|
+
for (const section of sections) {
|
|
153
|
+
const columns = normalizeArray(section.layoutColumns);
|
|
154
|
+
for (const column of columns) {
|
|
155
|
+
const items = normalizeArray(column.layoutItems);
|
|
156
|
+
for (const item of items) {
|
|
157
|
+
if (item.canvas) {
|
|
158
|
+
apps.push(item.canvas);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return [...new Set(apps)];
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Extract custom links from layout
|
|
167
|
+
*/
|
|
168
|
+
function extractCustomLinks(metadata, layoutSections) {
|
|
169
|
+
const links = [];
|
|
170
|
+
// From layout sections
|
|
171
|
+
for (const section of layoutSections) {
|
|
172
|
+
const columns = normalizeArray(section.layoutColumns);
|
|
173
|
+
for (const column of columns) {
|
|
174
|
+
const items = normalizeArray(column.layoutItems);
|
|
175
|
+
for (const item of items) {
|
|
176
|
+
if (item.customLink) {
|
|
177
|
+
links.push(item.customLink);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
// From summary layout
|
|
183
|
+
if (metadata.summaryLayout) {
|
|
184
|
+
const summaryItems = normalizeArray(metadata.summaryLayout.summaryLayoutItems);
|
|
185
|
+
for (const item of summaryItems) {
|
|
186
|
+
if (item.customLink) {
|
|
187
|
+
links.push(item.customLink);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return [...new Set(links)];
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Parse a Layout metadata XML file
|
|
195
|
+
*
|
|
196
|
+
* @param filePath - Path to the .layout-meta.xml file
|
|
197
|
+
* @param layoutName - Name of the layout (typically from filename without extension)
|
|
198
|
+
* @returns Parsed layout metadata with dependencies
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* const result = await parseLayout(
|
|
202
|
+
* 'force-app/main/default/layouts/Account-Account Layout.layout-meta.xml',
|
|
203
|
+
* 'Account-Account Layout'
|
|
204
|
+
* );
|
|
205
|
+
* console.log(result.object); // 'Account'
|
|
206
|
+
* console.log(result.customButtons); // ['New_Custom_Button', 'Edit_Button']
|
|
207
|
+
* console.log(result.dependencies.visualforcePages); // ['AccountDashboard']
|
|
208
|
+
*/
|
|
209
|
+
export async function parseLayout(filePath, layoutName) {
|
|
210
|
+
// Read and parse XML
|
|
211
|
+
const xmlContent = await readFile(filePath, 'utf-8');
|
|
212
|
+
const parser = new XMLParser({
|
|
213
|
+
ignoreAttributes: false,
|
|
214
|
+
parseAttributeValue: true,
|
|
215
|
+
trimValues: true,
|
|
216
|
+
});
|
|
217
|
+
let parsed;
|
|
218
|
+
try {
|
|
219
|
+
parsed = parser.parse(xmlContent);
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
throw new Error(`Failed to parse Layout XML at ${filePath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
223
|
+
}
|
|
224
|
+
// Type assertion with validation
|
|
225
|
+
const root = parsed;
|
|
226
|
+
if (!root.Layout) {
|
|
227
|
+
throw new Error(`Invalid Layout XML structure at ${filePath}: missing Layout root element`);
|
|
228
|
+
}
|
|
229
|
+
const metadata = root.Layout;
|
|
230
|
+
// Extract object name from layout name
|
|
231
|
+
const objectName = extractObjectFromLayoutName(layoutName);
|
|
232
|
+
// Extract dependencies using helper functions
|
|
233
|
+
const layoutSections = normalizeArray(metadata.layoutSections);
|
|
234
|
+
const relatedLists = normalizeArray(metadata.relatedLists);
|
|
235
|
+
const customButtons = extractCustomButtons(metadata);
|
|
236
|
+
const vfPagesFromSections = extractVFPagesFromSections(layoutSections);
|
|
237
|
+
const vfPagesFromFeed = extractVFPagesFromFeedLayout(metadata.feedLayout);
|
|
238
|
+
const visualforcePages = [...new Set([...vfPagesFromSections, ...vfPagesFromFeed])];
|
|
239
|
+
const fields = extractFields(metadata, layoutSections);
|
|
240
|
+
const relatedListNames = relatedLists.map((list) => list.relatedList);
|
|
241
|
+
const quickActions = extractQuickActions(metadata);
|
|
242
|
+
const canvasApps = extractCanvasApps(layoutSections);
|
|
243
|
+
const customLinks = extractCustomLinks(metadata, layoutSections);
|
|
244
|
+
// Build result
|
|
245
|
+
return {
|
|
246
|
+
name: layoutName,
|
|
247
|
+
object: objectName,
|
|
248
|
+
customButtons,
|
|
249
|
+
visualforcePages,
|
|
250
|
+
fields,
|
|
251
|
+
relatedLists: [...new Set(relatedListNames)],
|
|
252
|
+
quickActions,
|
|
253
|
+
canvasApps,
|
|
254
|
+
customLinks,
|
|
255
|
+
dependencies: {
|
|
256
|
+
object: objectName,
|
|
257
|
+
customButtons,
|
|
258
|
+
visualforcePages,
|
|
259
|
+
fields,
|
|
260
|
+
relatedLists: [...new Set(relatedListNames)],
|
|
261
|
+
quickActions,
|
|
262
|
+
canvasApps,
|
|
263
|
+
customLinks,
|
|
264
|
+
},
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=layout-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout-parser.js","sourceRoot":"","sources":["../../src/parsers/layout-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { LWCMetadata } from '../types/salesforce/lwc.js';
|
|
2
|
+
/**
|
|
3
|
+
* LWC dependency types
|
|
4
|
+
*/
|
|
5
|
+
export type LWCDependencyType = 'apex_import' | 'lwc_import' | 'wire_adapter' | 'api_property' | 'navigation';
|
|
6
|
+
/**
|
|
7
|
+
* Represents a dependency found in an LWC
|
|
8
|
+
*/
|
|
9
|
+
export type LWCDependency = {
|
|
10
|
+
type: LWCDependencyType;
|
|
11
|
+
name: string;
|
|
12
|
+
source?: string;
|
|
13
|
+
isTypeScript?: boolean;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Result of parsing an LWC
|
|
17
|
+
* Includes metadata from js-meta.xml
|
|
18
|
+
*/
|
|
19
|
+
export type LWCParseResult = {
|
|
20
|
+
componentName: string;
|
|
21
|
+
isTypeScript: boolean;
|
|
22
|
+
apexImports: string[];
|
|
23
|
+
lwcImports: string[];
|
|
24
|
+
wireAdapters: string[];
|
|
25
|
+
apiProperties: string[];
|
|
26
|
+
navigationRefs: string[];
|
|
27
|
+
dependencies: LWCDependency[];
|
|
28
|
+
hasMetadataXml: boolean;
|
|
29
|
+
metadata?: LWCMetadata;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Parse LWC js-meta.xml file
|
|
33
|
+
*
|
|
34
|
+
* @ac US-016-AC-8: Parse js-meta.xml correctly
|
|
35
|
+
* @deprecated - Will be refactored to return LWCMetadata type
|
|
36
|
+
*
|
|
37
|
+
* TODO: Refactor this function to properly parse and return LWCMetadata type
|
|
38
|
+
* Currently commented out to avoid unused variable warnings during refactoring
|
|
39
|
+
*/
|
|
40
|
+
/**
|
|
41
|
+
* Parse a Lightning Web Component and extract dependencies
|
|
42
|
+
*
|
|
43
|
+
* @param componentName - Name of the LWC component
|
|
44
|
+
* @param jsCode - JavaScript/TypeScript code of the component
|
|
45
|
+
* @param metadataXml - Optional js-meta.xml content
|
|
46
|
+
* @returns LWCParseResult with all extracted dependencies
|
|
47
|
+
*
|
|
48
|
+
* @throws {ParsingError} If the component cannot be parsed
|
|
49
|
+
*
|
|
50
|
+
* @ac US-016-AC-7: Validate bundle structure (js, html, xml)
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* const result = parseLWC('myComponent', jsCode, metadataXml);
|
|
55
|
+
* console.log(result.apexImports); // ['AccountController.getAccounts']
|
|
56
|
+
* console.log(result.lwcImports); // ['baseComponent', 'utilComponent']
|
|
57
|
+
* console.log(result.wireAdapters); // ['getRecord', 'getObjectInfo']
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export declare function parseLWC(componentName: string, jsCode: string, metadataXml?: string): LWCParseResult;
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { getLogger } from '../utils/logger.js';
|
|
2
|
+
import { ParsingError } from '../errors/parsing-error.js';
|
|
3
|
+
const logger = getLogger('LWCParser');
|
|
4
|
+
/**
|
|
5
|
+
* Remove comments from JavaScript/TypeScript code
|
|
6
|
+
*/
|
|
7
|
+
function removeComments(code) {
|
|
8
|
+
// Remove single-line comments (//)
|
|
9
|
+
let cleaned = code.replace(/\/\/.*$/gm, '');
|
|
10
|
+
// Remove multi-line comments (/* ... */)
|
|
11
|
+
cleaned = cleaned.replace(/\/\*[\s\S]*?\*\//g, '');
|
|
12
|
+
return cleaned;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Extract Apex imports
|
|
16
|
+
*
|
|
17
|
+
* @ac US-016-AC-1: Extract Apex imports (@salesforce/apex)
|
|
18
|
+
*/
|
|
19
|
+
function extractApexImports(code) {
|
|
20
|
+
// Pattern: import methodName from '@salesforce/apex/ClassName.methodName'
|
|
21
|
+
const apexImportPattern = /import\s+(?:\{[^}]+\}|\w+)\s+from\s+['"]@salesforce\/apex\/([a-zA-Z][a-zA-Z0-9_.]+)['"]/g;
|
|
22
|
+
const matches = code.matchAll(apexImportPattern);
|
|
23
|
+
const imports = [];
|
|
24
|
+
for (const match of matches) {
|
|
25
|
+
const apexRef = match[1]; // ClassName.methodName or ClassName
|
|
26
|
+
if (!imports.includes(apexRef)) {
|
|
27
|
+
imports.push(apexRef);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return imports;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Extract LWC imports
|
|
34
|
+
*
|
|
35
|
+
* @ac US-016-AC-2: Extract LWC imports (c/componentName)
|
|
36
|
+
*/
|
|
37
|
+
function extractLWCImports(code) {
|
|
38
|
+
// Pattern: import ComponentName from 'c/componentName'
|
|
39
|
+
const lwcImportPattern = /import\s+(?:\{[^}]+\}|\w+)\s+from\s+['"]c\/([a-zA-Z][a-zA-Z0-9_]+)['"]/g;
|
|
40
|
+
const matches = code.matchAll(lwcImportPattern);
|
|
41
|
+
const imports = [];
|
|
42
|
+
for (const match of matches) {
|
|
43
|
+
const componentName = match[1];
|
|
44
|
+
if (!imports.includes(componentName)) {
|
|
45
|
+
imports.push(componentName);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return imports;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Extract wire adapter usage
|
|
52
|
+
*
|
|
53
|
+
* @ac US-016-AC-3: Extract wire adapter usage
|
|
54
|
+
*/
|
|
55
|
+
function extractWireAdapters(code) {
|
|
56
|
+
// Pattern: @wire(adapterName, { ... })
|
|
57
|
+
const wirePattern = /@wire\s*\(\s*([a-zA-Z][a-zA-Z0-9_]*)/g;
|
|
58
|
+
const matches = code.matchAll(wirePattern);
|
|
59
|
+
const adapters = [];
|
|
60
|
+
for (const match of matches) {
|
|
61
|
+
const adapterName = match[1];
|
|
62
|
+
if (!adapters.includes(adapterName)) {
|
|
63
|
+
adapters.push(adapterName);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return adapters;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Extract @api property dependencies
|
|
70
|
+
*
|
|
71
|
+
* @ac US-016-AC-4: Extract @api property dependencies
|
|
72
|
+
*/
|
|
73
|
+
function extractApiProperties(code) {
|
|
74
|
+
// Pattern: @api propertyName
|
|
75
|
+
const apiPattern = /@api\s+([a-zA-Z][a-zA-Z0-9_]*)/g;
|
|
76
|
+
const matches = code.matchAll(apiPattern);
|
|
77
|
+
const properties = [];
|
|
78
|
+
for (const match of matches) {
|
|
79
|
+
const propertyName = match[1];
|
|
80
|
+
if (!properties.includes(propertyName)) {
|
|
81
|
+
properties.push(propertyName);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return properties;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Extract navigation references
|
|
88
|
+
*
|
|
89
|
+
* @ac US-016-AC-5: Extract navigation references
|
|
90
|
+
*/
|
|
91
|
+
function extractNavigationRefs(code) {
|
|
92
|
+
const refs = [];
|
|
93
|
+
// Pattern: NavigationMixin
|
|
94
|
+
if (code.includes('NavigationMixin')) {
|
|
95
|
+
refs.push('NavigationMixin');
|
|
96
|
+
}
|
|
97
|
+
// Pattern: this[NavigationMixin.Navigate]
|
|
98
|
+
if (code.includes('NavigationMixin.Navigate')) {
|
|
99
|
+
refs.push('NavigationMixin.Navigate');
|
|
100
|
+
}
|
|
101
|
+
// Pattern: import { NavigationMixin } from 'lightning/navigation'
|
|
102
|
+
const navImportPattern = /import\s+\{[^}]*NavigationMixin[^}]*\}\s+from\s+['"]lightning\/navigation['"]/;
|
|
103
|
+
if (navImportPattern.test(code)) {
|
|
104
|
+
refs.push('lightning/navigation');
|
|
105
|
+
}
|
|
106
|
+
return refs;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Detect if the component is TypeScript
|
|
110
|
+
*
|
|
111
|
+
* @ac US-016-AC-6: Handle TypeScript components
|
|
112
|
+
*/
|
|
113
|
+
function isTypeScriptComponent(jsCode) {
|
|
114
|
+
// Check for TypeScript-specific syntax
|
|
115
|
+
const tsPatterns = [
|
|
116
|
+
/:\s*(?:string|number|boolean|any|void|unknown|never)\s*[=;,)]/,
|
|
117
|
+
/interface\s+[A-Z][a-zA-Z0-9_]*\s*\{/,
|
|
118
|
+
/type\s+[A-Z][a-zA-Z0-9_]*\s*=/,
|
|
119
|
+
/<[A-Z][a-zA-Z0-9_<>,\s]*>/,
|
|
120
|
+
/as\s+(?:string|number|boolean|const)/,
|
|
121
|
+
];
|
|
122
|
+
return tsPatterns.some((pattern) => pattern.test(jsCode));
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Parse LWC js-meta.xml file
|
|
126
|
+
*
|
|
127
|
+
* @ac US-016-AC-8: Parse js-meta.xml correctly
|
|
128
|
+
* @deprecated - Will be refactored to return LWCMetadata type
|
|
129
|
+
*
|
|
130
|
+
* TODO: Refactor this function to properly parse and return LWCMetadata type
|
|
131
|
+
* Currently commented out to avoid unused variable warnings during refactoring
|
|
132
|
+
*/
|
|
133
|
+
/*
|
|
134
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
135
|
+
function parseMetadataXml(metadataContent: string): { exposedAs?: string } {
|
|
136
|
+
try {
|
|
137
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unnecessary-type-assertion
|
|
138
|
+
const parsed = parseXml(metadataContent) as any;
|
|
139
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment
|
|
140
|
+
const metadata = parsed.LightningComponentBundle;
|
|
141
|
+
|
|
142
|
+
if (!metadata) {
|
|
143
|
+
return {};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Extract targets (where the component is exposed)
|
|
147
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment
|
|
148
|
+
const targets = metadata.targets;
|
|
149
|
+
if (targets) {
|
|
150
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
|
|
151
|
+
const targetList = Array.isArray(targets.target) ? targets.target : targets.target ? [targets.target] : [];
|
|
152
|
+
// Targets are extracted but we don't use exposedAs anymore
|
|
153
|
+
// Metadata will be parsed separately
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return {};
|
|
157
|
+
} catch {
|
|
158
|
+
return {};
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
*/
|
|
162
|
+
/**
|
|
163
|
+
* Parse a Lightning Web Component and extract dependencies
|
|
164
|
+
*
|
|
165
|
+
* @param componentName - Name of the LWC component
|
|
166
|
+
* @param jsCode - JavaScript/TypeScript code of the component
|
|
167
|
+
* @param metadataXml - Optional js-meta.xml content
|
|
168
|
+
* @returns LWCParseResult with all extracted dependencies
|
|
169
|
+
*
|
|
170
|
+
* @throws {ParsingError} If the component cannot be parsed
|
|
171
|
+
*
|
|
172
|
+
* @ac US-016-AC-7: Validate bundle structure (js, html, xml)
|
|
173
|
+
*
|
|
174
|
+
* @example
|
|
175
|
+
* ```typescript
|
|
176
|
+
* const result = parseLWC('myComponent', jsCode, metadataXml);
|
|
177
|
+
* console.log(result.apexImports); // ['AccountController.getAccounts']
|
|
178
|
+
* console.log(result.lwcImports); // ['baseComponent', 'utilComponent']
|
|
179
|
+
* console.log(result.wireAdapters); // ['getRecord', 'getObjectInfo']
|
|
180
|
+
* ```
|
|
181
|
+
*/
|
|
182
|
+
export function parseLWC(componentName, jsCode, metadataXml) {
|
|
183
|
+
try {
|
|
184
|
+
logger.debug(`Parsing LWC: ${componentName}`);
|
|
185
|
+
// Remove comments
|
|
186
|
+
const cleanCode = removeComments(jsCode);
|
|
187
|
+
// Detect TypeScript
|
|
188
|
+
const isTS = isTypeScriptComponent(cleanCode);
|
|
189
|
+
// Extract dependencies
|
|
190
|
+
const apexImports = extractApexImports(cleanCode);
|
|
191
|
+
const lwcImports = extractLWCImports(cleanCode);
|
|
192
|
+
const wireAdapters = extractWireAdapters(cleanCode);
|
|
193
|
+
const apiProperties = extractApiProperties(cleanCode);
|
|
194
|
+
const navigationRefs = extractNavigationRefs(cleanCode);
|
|
195
|
+
// Parse metadata XML if provided
|
|
196
|
+
let metadata;
|
|
197
|
+
let hasMetadataXml = false;
|
|
198
|
+
if (metadataXml) {
|
|
199
|
+
hasMetadataXml = true;
|
|
200
|
+
// Parse the metadata but we don't have a parseMetadataXml that returns LWCMetadata yet
|
|
201
|
+
// For now, we'll skip this part
|
|
202
|
+
}
|
|
203
|
+
// Build dependencies array
|
|
204
|
+
const dependencies = [
|
|
205
|
+
...apexImports.map((name) => ({
|
|
206
|
+
type: 'apex_import',
|
|
207
|
+
name,
|
|
208
|
+
source: '@salesforce/apex',
|
|
209
|
+
isTypeScript: isTS,
|
|
210
|
+
})),
|
|
211
|
+
...lwcImports.map((name) => ({
|
|
212
|
+
type: 'lwc_import',
|
|
213
|
+
name,
|
|
214
|
+
source: 'c',
|
|
215
|
+
isTypeScript: isTS,
|
|
216
|
+
})),
|
|
217
|
+
...wireAdapters.map((name) => ({
|
|
218
|
+
type: 'wire_adapter',
|
|
219
|
+
name,
|
|
220
|
+
isTypeScript: isTS,
|
|
221
|
+
})),
|
|
222
|
+
...apiProperties.map((name) => ({
|
|
223
|
+
type: 'api_property',
|
|
224
|
+
name,
|
|
225
|
+
isTypeScript: isTS,
|
|
226
|
+
})),
|
|
227
|
+
...navigationRefs.map((name) => ({
|
|
228
|
+
type: 'navigation',
|
|
229
|
+
name,
|
|
230
|
+
isTypeScript: isTS,
|
|
231
|
+
})),
|
|
232
|
+
];
|
|
233
|
+
const result = {
|
|
234
|
+
componentName,
|
|
235
|
+
isTypeScript: isTS,
|
|
236
|
+
apexImports,
|
|
237
|
+
lwcImports,
|
|
238
|
+
wireAdapters,
|
|
239
|
+
apiProperties,
|
|
240
|
+
navigationRefs,
|
|
241
|
+
dependencies,
|
|
242
|
+
hasMetadataXml,
|
|
243
|
+
metadata,
|
|
244
|
+
};
|
|
245
|
+
logger.debug(`Parsed LWC: ${componentName}`, {
|
|
246
|
+
isTypeScript: isTS,
|
|
247
|
+
apexImports: apexImports.length,
|
|
248
|
+
lwcImports: lwcImports.length,
|
|
249
|
+
wireAdapters: wireAdapters.length,
|
|
250
|
+
dependencies: dependencies.length,
|
|
251
|
+
});
|
|
252
|
+
return result;
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
if (error instanceof ParsingError) {
|
|
256
|
+
throw error;
|
|
257
|
+
}
|
|
258
|
+
throw new ParsingError(`Failed to parse LWC: ${componentName}`, {
|
|
259
|
+
filePath: componentName,
|
|
260
|
+
originalError: error instanceof Error ? error.message : String(error),
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=lwc-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lwc-parser.js","sourceRoot":"","sources":["../../src/parsers/lwc-parser.ts"],"names":[],"mappings":"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"}
|