@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,64 @@
|
|
|
1
|
+
import type { EmailTemplateMetadata } from '../types/salesforce/email.js';
|
|
2
|
+
/**
|
|
3
|
+
* Email template dependency types
|
|
4
|
+
*/
|
|
5
|
+
export type EmailTemplateDependencyType = 'merge_field' | 'visualforce_page' | 'related_entity' | 'attachment' | 'custom_label';
|
|
6
|
+
/**
|
|
7
|
+
* Represents a dependency found in an email template
|
|
8
|
+
*/
|
|
9
|
+
export type EmailTemplateDependency = {
|
|
10
|
+
type: EmailTemplateDependencyType;
|
|
11
|
+
name: string;
|
|
12
|
+
objectName?: string;
|
|
13
|
+
fieldName?: string;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Merge field reference
|
|
17
|
+
*/
|
|
18
|
+
export type MergeField = {
|
|
19
|
+
fullReference: string;
|
|
20
|
+
objectName: string;
|
|
21
|
+
fieldName: string;
|
|
22
|
+
isRelated: boolean;
|
|
23
|
+
relationshipPath?: string;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Result of parsing an email template
|
|
27
|
+
* Extends EmailTemplateMetadata with parsed dependencies
|
|
28
|
+
* Overrides attachments to be string[] for easier consumption
|
|
29
|
+
*/
|
|
30
|
+
export type EmailTemplateParseResult = Omit<EmailTemplateMetadata, 'attachments'> & {
|
|
31
|
+
mergeFields: MergeField[];
|
|
32
|
+
customLabels: string[];
|
|
33
|
+
dependencies: EmailTemplateDependency[];
|
|
34
|
+
visualforcePage?: string;
|
|
35
|
+
attachments?: string[];
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Parse an email template and extract dependencies
|
|
39
|
+
*
|
|
40
|
+
* @param templateName - Name of the email template
|
|
41
|
+
* @param templateContent - Content of the template (HTML, text, or VF)
|
|
42
|
+
* @param metadataContent - Content of the .email-meta.xml file
|
|
43
|
+
* @returns EmailTemplateParseResult with all extracted dependencies
|
|
44
|
+
*
|
|
45
|
+
* @throws {ParsingError} If the template cannot be parsed
|
|
46
|
+
*
|
|
47
|
+
* @ac US-019-AC-2: Extract Visualforce page references
|
|
48
|
+
* @ac US-019-AC-3: Extract relatedEntityType (target SObject)
|
|
49
|
+
* @ac US-019-AC-4: Extract attachment references
|
|
50
|
+
* @ac US-019-AC-7: Support all template types (text, html, visualforce, custom)
|
|
51
|
+
* @ac US-019-AC-8: Handle both body and subject merge fields
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* const result = await parseEmailTemplate(
|
|
56
|
+
* 'WelcomeEmail',
|
|
57
|
+
* templateContent,
|
|
58
|
+
* metadataXml
|
|
59
|
+
* );
|
|
60
|
+
* console.log(result.mergeFields); // [{objectName: 'Contact', fieldName: 'Name', ...}]
|
|
61
|
+
* console.log(result.relatedEntityType); // 'Contact'
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export declare function parseEmailTemplate(templateName: string, templateContent: string, metadataContent: string): Promise<EmailTemplateParseResult>;
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import { getLogger } from '../utils/logger.js';
|
|
2
|
+
import { ParsingError } from '../errors/parsing-error.js';
|
|
3
|
+
import { parseXml } from '../utils/xml.js';
|
|
4
|
+
const logger = getLogger('EmailTemplateParser');
|
|
5
|
+
/**
|
|
6
|
+
* Extract merge fields from template content
|
|
7
|
+
*
|
|
8
|
+
* @ac US-019-AC-1: Extract merge fields (object.field references)
|
|
9
|
+
*/
|
|
10
|
+
function extractMergeFields(content) {
|
|
11
|
+
const mergeFields = [];
|
|
12
|
+
const seen = new Set();
|
|
13
|
+
// Pattern: {!ObjectName.FieldName} or {!RelatedObject__r.Field__c}
|
|
14
|
+
// Also matches: {!Account.Owner.Name} (related traversal)
|
|
15
|
+
const mergeFieldPattern = /\{!([a-zA-Z][a-zA-Z0-9_]*(?:__[rc])?)\.([a-zA-Z][a-zA-Z0-9_.]*)\}/g;
|
|
16
|
+
const matches = content.matchAll(mergeFieldPattern);
|
|
17
|
+
for (const match of matches) {
|
|
18
|
+
const fullReference = match[0];
|
|
19
|
+
const objectName = match[1];
|
|
20
|
+
const fieldPath = match[2];
|
|
21
|
+
// Check if it's a related object traversal (contains dots)
|
|
22
|
+
const isRelated = fieldPath.includes('.');
|
|
23
|
+
const parts = fieldPath.split('.');
|
|
24
|
+
const fieldName = parts[parts.length - 1];
|
|
25
|
+
const relationshipPath = isRelated ? fieldPath : undefined;
|
|
26
|
+
const key = `${objectName}.${fieldPath}`;
|
|
27
|
+
if (!seen.has(key)) {
|
|
28
|
+
seen.add(key);
|
|
29
|
+
mergeFields.push({
|
|
30
|
+
fullReference,
|
|
31
|
+
objectName,
|
|
32
|
+
fieldName,
|
|
33
|
+
isRelated,
|
|
34
|
+
relationshipPath,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return mergeFields;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Extract custom label references
|
|
42
|
+
*
|
|
43
|
+
* @ac US-019-AC-5: Extract custom label references
|
|
44
|
+
*/
|
|
45
|
+
function extractCustomLabels(content) {
|
|
46
|
+
const labels = [];
|
|
47
|
+
const seen = new Set();
|
|
48
|
+
// Pattern: {!$Label.MyLabel} or {!$Label.namespace__MyLabel}
|
|
49
|
+
const labelPattern = /\{!\$Label\.([a-zA-Z][a-zA-Z0-9_.]*)\}/g;
|
|
50
|
+
const matches = content.matchAll(labelPattern);
|
|
51
|
+
for (const match of matches) {
|
|
52
|
+
const labelName = match[1];
|
|
53
|
+
if (!seen.has(labelName)) {
|
|
54
|
+
seen.add(labelName);
|
|
55
|
+
labels.push(labelName);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return labels;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Parse email template metadata XML
|
|
62
|
+
*
|
|
63
|
+
* @ac US-019-AC-6: Parse template metadata (.email-meta.xml)
|
|
64
|
+
*/
|
|
65
|
+
async function parseMetadataXml(metadataContent) {
|
|
66
|
+
try {
|
|
67
|
+
const parsed = await parseXml(metadataContent);
|
|
68
|
+
const parsedObj = parsed;
|
|
69
|
+
const emailTemplate = parsedObj.EmailTemplate || parsedObj;
|
|
70
|
+
// Normalize arrays (XML parser returns single items as objects, not arrays)
|
|
71
|
+
const normalizeArray = (value) => {
|
|
72
|
+
if (value === undefined)
|
|
73
|
+
return undefined;
|
|
74
|
+
return Array.isArray(value) ? value : [value];
|
|
75
|
+
};
|
|
76
|
+
// Normalize attachments (XML can have just <name> or full <content><name> structure)
|
|
77
|
+
let attachments = normalizeArray(emailTemplate.attachments);
|
|
78
|
+
if (attachments) {
|
|
79
|
+
attachments = attachments.map((att) => {
|
|
80
|
+
// If attachment is a string, it's just the name
|
|
81
|
+
if (typeof att === 'string') {
|
|
82
|
+
return { name: att, content: '' };
|
|
83
|
+
}
|
|
84
|
+
// If it has a 'name' key with no content, set content to empty
|
|
85
|
+
if (typeof att === 'object' && att.name && !att.content) {
|
|
86
|
+
return { name: String(att.name), content: '' };
|
|
87
|
+
}
|
|
88
|
+
return att;
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
// Map to EmailTemplateMetadata
|
|
92
|
+
const metadata = {
|
|
93
|
+
apiVersion: emailTemplate.apiVersion,
|
|
94
|
+
available: emailTemplate.available ?? false,
|
|
95
|
+
description: emailTemplate.description,
|
|
96
|
+
encodingKey: (emailTemplate.encodingKey ?? 'UTF-8'),
|
|
97
|
+
name: emailTemplate.name ?? '',
|
|
98
|
+
style: (emailTemplate.style ?? 'none'),
|
|
99
|
+
subject: emailTemplate.subject,
|
|
100
|
+
textOnly: emailTemplate.textOnly,
|
|
101
|
+
type: (emailTemplate.type ?? 'text'),
|
|
102
|
+
uiType: emailTemplate.uiType,
|
|
103
|
+
attachedContentDocuments: normalizeArray(emailTemplate.attachedContentDocuments),
|
|
104
|
+
attachments,
|
|
105
|
+
letterhead: emailTemplate.letterhead,
|
|
106
|
+
packageVersions: emailTemplate.packageVersions,
|
|
107
|
+
relatedEntityType: emailTemplate.relatedEntityType,
|
|
108
|
+
visualforcePage: emailTemplate.visualforcePage,
|
|
109
|
+
};
|
|
110
|
+
return metadata;
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
throw new ParsingError('Failed to parse email template metadata XML', {
|
|
114
|
+
originalError: error instanceof Error ? error.message : String(error),
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Parse an email template and extract dependencies
|
|
120
|
+
*
|
|
121
|
+
* @param templateName - Name of the email template
|
|
122
|
+
* @param templateContent - Content of the template (HTML, text, or VF)
|
|
123
|
+
* @param metadataContent - Content of the .email-meta.xml file
|
|
124
|
+
* @returns EmailTemplateParseResult with all extracted dependencies
|
|
125
|
+
*
|
|
126
|
+
* @throws {ParsingError} If the template cannot be parsed
|
|
127
|
+
*
|
|
128
|
+
* @ac US-019-AC-2: Extract Visualforce page references
|
|
129
|
+
* @ac US-019-AC-3: Extract relatedEntityType (target SObject)
|
|
130
|
+
* @ac US-019-AC-4: Extract attachment references
|
|
131
|
+
* @ac US-019-AC-7: Support all template types (text, html, visualforce, custom)
|
|
132
|
+
* @ac US-019-AC-8: Handle both body and subject merge fields
|
|
133
|
+
*
|
|
134
|
+
* @example
|
|
135
|
+
* ```typescript
|
|
136
|
+
* const result = await parseEmailTemplate(
|
|
137
|
+
* 'WelcomeEmail',
|
|
138
|
+
* templateContent,
|
|
139
|
+
* metadataXml
|
|
140
|
+
* );
|
|
141
|
+
* console.log(result.mergeFields); // [{objectName: 'Contact', fieldName: 'Name', ...}]
|
|
142
|
+
* console.log(result.relatedEntityType); // 'Contact'
|
|
143
|
+
* ```
|
|
144
|
+
*/
|
|
145
|
+
export async function parseEmailTemplate(templateName, templateContent, metadataContent) {
|
|
146
|
+
try {
|
|
147
|
+
logger.debug(`Parsing email template: ${templateName}`);
|
|
148
|
+
// Parse metadata XML using Salesforce types
|
|
149
|
+
const metadata = await parseMetadataXml(metadataContent);
|
|
150
|
+
// Extract merge fields from content and subject
|
|
151
|
+
const contentMergeFields = extractMergeFields(templateContent);
|
|
152
|
+
const subjectMergeFields = metadata.subject ? extractMergeFields(metadata.subject) : [];
|
|
153
|
+
const mergeFields = [...contentMergeFields, ...subjectMergeFields];
|
|
154
|
+
// Extract custom labels
|
|
155
|
+
const customLabels = extractCustomLabels(templateContent);
|
|
156
|
+
// Build dependencies array
|
|
157
|
+
const dependencies = [];
|
|
158
|
+
// Add related entity type as dependency
|
|
159
|
+
if (metadata.relatedEntityType) {
|
|
160
|
+
dependencies.push({
|
|
161
|
+
type: 'related_entity',
|
|
162
|
+
name: metadata.relatedEntityType,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
// Add Visualforce page as dependency (for visualforce template type)
|
|
166
|
+
let visualforcePage;
|
|
167
|
+
if (metadata.type === 'visualforce' && metadata.visualforcePage) {
|
|
168
|
+
visualforcePage = metadata.visualforcePage;
|
|
169
|
+
dependencies.push({
|
|
170
|
+
type: 'visualforce_page',
|
|
171
|
+
name: visualforcePage,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
// Add merge fields as dependencies
|
|
175
|
+
for (const mergeField of mergeFields) {
|
|
176
|
+
dependencies.push({
|
|
177
|
+
type: 'merge_field',
|
|
178
|
+
name: mergeField.fullReference,
|
|
179
|
+
objectName: mergeField.objectName,
|
|
180
|
+
fieldName: mergeField.fieldName,
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
// Add custom labels as dependencies
|
|
184
|
+
for (const label of customLabels) {
|
|
185
|
+
dependencies.push({
|
|
186
|
+
type: 'custom_label',
|
|
187
|
+
name: label,
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
// Add attachments as dependencies
|
|
191
|
+
if (metadata.attachments) {
|
|
192
|
+
for (const attachment of metadata.attachments) {
|
|
193
|
+
dependencies.push({
|
|
194
|
+
type: 'attachment',
|
|
195
|
+
name: attachment.name,
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (metadata.attachedContentDocuments) {
|
|
200
|
+
for (const doc of metadata.attachedContentDocuments) {
|
|
201
|
+
dependencies.push({
|
|
202
|
+
type: 'attachment',
|
|
203
|
+
name: doc,
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Map attachments to string array (just names) and include attachedContentDocuments
|
|
208
|
+
const attachmentNames = metadata.attachments?.map((att) => att.name) ?? [];
|
|
209
|
+
const allAttachments = [...attachmentNames, ...(metadata.attachedContentDocuments ?? [])];
|
|
210
|
+
const result = {
|
|
211
|
+
...metadata,
|
|
212
|
+
attachments: allAttachments.length > 0 ? allAttachments : undefined,
|
|
213
|
+
mergeFields,
|
|
214
|
+
customLabels,
|
|
215
|
+
dependencies,
|
|
216
|
+
visualforcePage,
|
|
217
|
+
};
|
|
218
|
+
logger.debug(`Parsed email template: ${templateName}`, {
|
|
219
|
+
templateType: metadata.type,
|
|
220
|
+
relatedEntityType: !!metadata.relatedEntityType,
|
|
221
|
+
mergeFieldsCount: mergeFields.length,
|
|
222
|
+
customLabelsCount: customLabels.length,
|
|
223
|
+
attachmentsCount: (metadata.attachments?.length ?? 0) + (metadata.attachedContentDocuments?.length ?? 0),
|
|
224
|
+
dependenciesCount: dependencies.length,
|
|
225
|
+
});
|
|
226
|
+
return result;
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
if (error instanceof ParsingError) {
|
|
230
|
+
throw error;
|
|
231
|
+
}
|
|
232
|
+
throw new ParsingError(`Failed to parse email template: ${templateName}`, {
|
|
233
|
+
filePath: templateName,
|
|
234
|
+
originalError: error instanceof Error ? error.message : String(error),
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=email-template-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email-template-parser.js","sourceRoot":"","sources":["../../src/parsers/email-template-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Error-Resilient Parser Wrapper - US-071
|
|
3
|
+
* Gracefully handles parse errors without breaking analysis
|
|
4
|
+
*
|
|
5
|
+
* @ac US-071-AC-1: Catch and log parse errors
|
|
6
|
+
* @ac US-071-AC-2: Continue with other files
|
|
7
|
+
* @ac US-071-AC-3: Report errors with file paths
|
|
8
|
+
* @ac US-071-AC-4: Suggest fixes when possible
|
|
9
|
+
* @ac US-071-AC-5: Aggregate error report
|
|
10
|
+
* @ac US-071-AC-6: Option to fail-fast
|
|
11
|
+
* @issue #71
|
|
12
|
+
*/
|
|
13
|
+
export type ParseResult<T> = {
|
|
14
|
+
success: boolean;
|
|
15
|
+
data?: T;
|
|
16
|
+
error?: ParseError;
|
|
17
|
+
filePath: string;
|
|
18
|
+
};
|
|
19
|
+
export type ParseError = {
|
|
20
|
+
filePath: string;
|
|
21
|
+
errorType: string;
|
|
22
|
+
message: string;
|
|
23
|
+
lineNumber?: number;
|
|
24
|
+
columnNumber?: number;
|
|
25
|
+
suggestedFix?: string;
|
|
26
|
+
stack?: string;
|
|
27
|
+
};
|
|
28
|
+
export type ParserOptions = {
|
|
29
|
+
/** Stop on first error */
|
|
30
|
+
failFast: boolean;
|
|
31
|
+
/** Log errors to aggregator */
|
|
32
|
+
logErrors: boolean;
|
|
33
|
+
/** Attempt to suggest fixes */
|
|
34
|
+
suggestFixes: boolean;
|
|
35
|
+
};
|
|
36
|
+
type ParserFunction<T> = (filePath: string) => Promise<T> | T;
|
|
37
|
+
/**
|
|
38
|
+
* @ac US-071-AC-1: Catch and log parse errors
|
|
39
|
+
* @ac US-071-AC-2: Continue with other files
|
|
40
|
+
*/
|
|
41
|
+
export declare class ErrorResilientParser {
|
|
42
|
+
private readonly options;
|
|
43
|
+
private readonly errors;
|
|
44
|
+
constructor(options?: Partial<ParserOptions>);
|
|
45
|
+
/**
|
|
46
|
+
* @ac US-071-AC-1: Catch and log parse errors
|
|
47
|
+
* @ac US-071-AC-2: Continue with other files
|
|
48
|
+
* Parse multiple files with error resilience
|
|
49
|
+
*/
|
|
50
|
+
parseFiles<T>(filePaths: string[], parser: ParserFunction<T>): Promise<Array<ParseResult<T>>>;
|
|
51
|
+
private parseFilesSequentially;
|
|
52
|
+
/**
|
|
53
|
+
* @ac US-071-AC-1: Catch and log parse errors
|
|
54
|
+
* Parse single file with error handling
|
|
55
|
+
*/
|
|
56
|
+
parseFile<T>(filePath: string, parser: ParserFunction<T>): Promise<ParseResult<T>>;
|
|
57
|
+
/**
|
|
58
|
+
* @ac US-071-AC-3: Report errors with file paths
|
|
59
|
+
* @ac US-071-AC-4: Suggest fixes when possible
|
|
60
|
+
* Create structured parse error
|
|
61
|
+
*/
|
|
62
|
+
private createParseError;
|
|
63
|
+
/**
|
|
64
|
+
* Categorize error by type
|
|
65
|
+
*/
|
|
66
|
+
private categorizeError;
|
|
67
|
+
/**
|
|
68
|
+
* @ac US-071-AC-4: Suggest fixes when possible
|
|
69
|
+
* Suggest fix based on error type
|
|
70
|
+
*/
|
|
71
|
+
private suggestFix;
|
|
72
|
+
/**
|
|
73
|
+
* @ac US-071-AC-5: Aggregate error report
|
|
74
|
+
* Generate comprehensive error report
|
|
75
|
+
*/
|
|
76
|
+
generateErrorReport(): string;
|
|
77
|
+
/**
|
|
78
|
+
* Get all errors
|
|
79
|
+
*/
|
|
80
|
+
getErrors(): ParseError[];
|
|
81
|
+
/**
|
|
82
|
+
* Get error count
|
|
83
|
+
*/
|
|
84
|
+
getErrorCount(): number;
|
|
85
|
+
/**
|
|
86
|
+
* Check if any errors occurred
|
|
87
|
+
*/
|
|
88
|
+
hasErrors(): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Clear errors
|
|
91
|
+
*/
|
|
92
|
+
clearErrors(): void;
|
|
93
|
+
/**
|
|
94
|
+
* Get successful parse count
|
|
95
|
+
*/
|
|
96
|
+
static getSuccessCount(results: Array<ParseResult<unknown>>): number;
|
|
97
|
+
/**
|
|
98
|
+
* Get failed parse count
|
|
99
|
+
*/
|
|
100
|
+
static getFailureCount(results: Array<ParseResult<unknown>>): number;
|
|
101
|
+
/**
|
|
102
|
+
* Extract only successful results
|
|
103
|
+
*/
|
|
104
|
+
static getSuccessfulData<T>(results: Array<ParseResult<T>>): T[];
|
|
105
|
+
/**
|
|
106
|
+
* Extract only errors
|
|
107
|
+
*/
|
|
108
|
+
static getErrors(results: Array<ParseResult<unknown>>): ParseError[];
|
|
109
|
+
}
|
|
110
|
+
export {};
|