@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,331 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* String Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides string manipulation functions for metadata processing
|
|
5
|
+
*/
|
|
6
|
+
import { getLogger } from './logger.js';
|
|
7
|
+
const logger = getLogger('StringUtils');
|
|
8
|
+
/**
|
|
9
|
+
* Convert string to camelCase
|
|
10
|
+
*
|
|
11
|
+
* @ac US-011-AC-1: Case conversions (camelCase, PascalCase, snake_case)
|
|
12
|
+
* @example
|
|
13
|
+
* toCamelCase('hello_world') // 'helloWorld'
|
|
14
|
+
* toCamelCase('HelloWorld') // 'helloWorld'
|
|
15
|
+
*/
|
|
16
|
+
export function toCamelCase(str) {
|
|
17
|
+
// Convert to words array by splitting on separators and camel case boundaries
|
|
18
|
+
const words = str
|
|
19
|
+
// Insert space before uppercase letters that follow lowercase
|
|
20
|
+
.replace(/([a-z])([A-Z])/g, '$1 $2')
|
|
21
|
+
// Split on separators
|
|
22
|
+
.split(/[-_\s]+/)
|
|
23
|
+
.filter(Boolean);
|
|
24
|
+
return words
|
|
25
|
+
.map((word, index) => {
|
|
26
|
+
const lower = word.toLowerCase();
|
|
27
|
+
return index === 0 ? lower : lower.charAt(0).toUpperCase() + lower.slice(1);
|
|
28
|
+
})
|
|
29
|
+
.join('');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Convert string to PascalCase
|
|
33
|
+
*
|
|
34
|
+
* @ac US-011-AC-1: Case conversions (camelCase, PascalCase, snake_case)
|
|
35
|
+
* @example
|
|
36
|
+
* toPascalCase('hello_world') // 'HelloWorld'
|
|
37
|
+
* toPascalCase('helloWorld') // 'HelloWorld'
|
|
38
|
+
*/
|
|
39
|
+
export function toPascalCase(str) {
|
|
40
|
+
// Similar to camelCase but capitalize first word too
|
|
41
|
+
const words = str
|
|
42
|
+
.replace(/([a-z])([A-Z])/g, '$1 $2')
|
|
43
|
+
.split(/[-_\s]+/)
|
|
44
|
+
.filter(Boolean);
|
|
45
|
+
return words
|
|
46
|
+
.map((word) => {
|
|
47
|
+
const lower = word.toLowerCase();
|
|
48
|
+
return lower.charAt(0).toUpperCase() + lower.slice(1);
|
|
49
|
+
})
|
|
50
|
+
.join('');
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Convert string to snake_case
|
|
54
|
+
*
|
|
55
|
+
* @ac US-011-AC-1: Case conversions (camelCase, PascalCase, snake_case)
|
|
56
|
+
* @example
|
|
57
|
+
* toSnakeCase('helloWorld') // 'hello_world'
|
|
58
|
+
* toSnakeCase('HelloWorld') // 'hello_world'
|
|
59
|
+
*/
|
|
60
|
+
export function toSnakeCase(str) {
|
|
61
|
+
return str
|
|
62
|
+
.replace(/([A-Z])/g, '_$1')
|
|
63
|
+
.replace(/[-\s]+/g, '_')
|
|
64
|
+
.replace(/^_/, '')
|
|
65
|
+
.toLowerCase();
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Convert string to kebab-case
|
|
69
|
+
*
|
|
70
|
+
* @ac US-011-AC-1: Case conversions (camelCase, PascalCase, snake_case)
|
|
71
|
+
* @example
|
|
72
|
+
* toKebabCase('helloWorld') // 'hello-world'
|
|
73
|
+
* toKebabCase('hello_world') // 'hello-world'
|
|
74
|
+
*/
|
|
75
|
+
export function toKebabCase(str) {
|
|
76
|
+
return toSnakeCase(str).replace(/_/g, '-');
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Extract comments from Apex code
|
|
80
|
+
*
|
|
81
|
+
* @ac US-011-AC-2: Extract comments from Apex/JavaScript
|
|
82
|
+
* @example
|
|
83
|
+
* extractApexComments('// comment\ncode') // ['// comment']
|
|
84
|
+
*/
|
|
85
|
+
export function extractApexComments(code) {
|
|
86
|
+
const comments = [];
|
|
87
|
+
// Single-line comments
|
|
88
|
+
const singleLinePattern = /\/\/.*/g;
|
|
89
|
+
let match;
|
|
90
|
+
while ((match = singleLinePattern.exec(code)) !== null) {
|
|
91
|
+
comments.push(match[0]);
|
|
92
|
+
}
|
|
93
|
+
// Multi-line comments
|
|
94
|
+
const multiLinePattern = /\/\*[\s\S]*?\*\//g;
|
|
95
|
+
while ((match = multiLinePattern.exec(code)) !== null) {
|
|
96
|
+
comments.push(match[0]);
|
|
97
|
+
}
|
|
98
|
+
return comments;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Extract comments from JavaScript code
|
|
102
|
+
*
|
|
103
|
+
* @ac US-011-AC-2: Extract comments from Apex/JavaScript
|
|
104
|
+
* @example
|
|
105
|
+
* extractJavaScriptComments('/* comment *\/\ncode') // ['/* comment *\/']
|
|
106
|
+
*/
|
|
107
|
+
export function extractJavaScriptComments(code) {
|
|
108
|
+
// JavaScript comments follow same pattern as Apex
|
|
109
|
+
return extractApexComments(code);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Escape XML special characters
|
|
113
|
+
*
|
|
114
|
+
* @ac US-011-AC-3: Escape/unescape XML special characters
|
|
115
|
+
* @example
|
|
116
|
+
* escapeXml('<tag>value & "quoted"</tag>') // '<tag>value & "quoted"</tag>'
|
|
117
|
+
*/
|
|
118
|
+
export function escapeXml(str) {
|
|
119
|
+
return str
|
|
120
|
+
.replace(/&/g, '&')
|
|
121
|
+
.replace(/</g, '<')
|
|
122
|
+
.replace(/>/g, '>')
|
|
123
|
+
.replace(/"/g, '"')
|
|
124
|
+
.replace(/'/g, ''');
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Unescape XML special characters
|
|
128
|
+
*
|
|
129
|
+
* @ac US-011-AC-3: Escape/unescape XML special characters
|
|
130
|
+
* @example
|
|
131
|
+
* unescapeXml('<tag>value & "quoted"</tag>') // '<tag>value & "quoted"</tag>'
|
|
132
|
+
*/
|
|
133
|
+
export function unescapeXml(str) {
|
|
134
|
+
return str
|
|
135
|
+
.replace(/</g, '<')
|
|
136
|
+
.replace(/>/g, '>')
|
|
137
|
+
.replace(/"/g, '"')
|
|
138
|
+
.replace(/'/g, "'")
|
|
139
|
+
.replace(/&/g, '&'); // Must be last to avoid double-unescaping
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Common regex patterns for Salesforce
|
|
143
|
+
*
|
|
144
|
+
* @ac US-011-AC-4: Regex utilities for common patterns
|
|
145
|
+
*/
|
|
146
|
+
export const REGEX_PATTERNS = {
|
|
147
|
+
/** Salesforce API name (letters, numbers, underscores, starts with letter) */
|
|
148
|
+
SALESFORCE_API_NAME: /^[a-zA-Z][a-zA-Z0-9_]*$/,
|
|
149
|
+
/** Salesforce Email (standard email pattern) */
|
|
150
|
+
EMAIL: /^[^\s@]+@[^\s@]+\.[^\s@]+$/,
|
|
151
|
+
/** Salesforce 15/18 character ID */
|
|
152
|
+
SALESFORCE_ID: /^[a-zA-Z0-9]{15}([a-zA-Z0-9]{3})?$/,
|
|
153
|
+
/** Salesforce namespace prefix */
|
|
154
|
+
NAMESPACE_PREFIX: /^[a-zA-Z][a-zA-Z0-9_]*__$/,
|
|
155
|
+
/** Custom field suffix */
|
|
156
|
+
CUSTOM_FIELD_SUFFIX: /__c$/,
|
|
157
|
+
/** Custom object suffix */
|
|
158
|
+
CUSTOM_OBJECT_SUFFIX: /__c$/,
|
|
159
|
+
/** Metadata file extension */
|
|
160
|
+
METADATA_FILE: /\.[\w-]+meta\.xml$/,
|
|
161
|
+
/** Version number (semantic versioning) */
|
|
162
|
+
VERSION: /^\d+\.\d+(\.\d+)?$/,
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* Validate Salesforce API name
|
|
166
|
+
*
|
|
167
|
+
* @ac US-011-AC-4: Regex utilities for common patterns
|
|
168
|
+
* @example
|
|
169
|
+
* isValidSalesforceApiName('MyField__c') // true
|
|
170
|
+
* isValidSalesforceApiName('123Invalid') // false
|
|
171
|
+
*/
|
|
172
|
+
export function isValidSalesforceApiName(name) {
|
|
173
|
+
return REGEX_PATTERNS.SALESFORCE_API_NAME.test(name);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Validate email address
|
|
177
|
+
*
|
|
178
|
+
* @ac US-011-AC-4: Regex utilities for common patterns
|
|
179
|
+
* @example
|
|
180
|
+
* isValidEmail('user@example.com') // true
|
|
181
|
+
* isValidEmail('invalid-email') // false
|
|
182
|
+
*/
|
|
183
|
+
export function isValidEmail(email) {
|
|
184
|
+
return REGEX_PATTERNS.EMAIL.test(email);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Normalize Unicode string (NFC normalization)
|
|
188
|
+
*
|
|
189
|
+
* @ac US-011-AC-5: Unicode handling
|
|
190
|
+
* @example
|
|
191
|
+
* normalizeUnicode('café') // Normalized form
|
|
192
|
+
*/
|
|
193
|
+
export function normalizeUnicode(str) {
|
|
194
|
+
return str.normalize('NFC');
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Strip accents from Unicode string
|
|
198
|
+
*
|
|
199
|
+
* @ac US-011-AC-5: Unicode handling
|
|
200
|
+
* @example
|
|
201
|
+
* stripAccents('café') // 'cafe'
|
|
202
|
+
* stripAccents('naïve') // 'naive'
|
|
203
|
+
*/
|
|
204
|
+
export function stripAccents(str) {
|
|
205
|
+
return str
|
|
206
|
+
.normalize('NFD')
|
|
207
|
+
.replace(/[\u0300-\u036f]/g, '')
|
|
208
|
+
.normalize('NFC');
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Truncate string with ellipsis
|
|
212
|
+
*
|
|
213
|
+
* @example
|
|
214
|
+
* truncate('Hello World', 8) // 'Hello...'
|
|
215
|
+
* truncate('Short', 10) // 'Short'
|
|
216
|
+
*/
|
|
217
|
+
export function truncate(str, maxLength, ellipsis = '...') {
|
|
218
|
+
if (str.length <= maxLength) {
|
|
219
|
+
return str;
|
|
220
|
+
}
|
|
221
|
+
const truncated = str.slice(0, maxLength - ellipsis.length);
|
|
222
|
+
return truncated + ellipsis;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Pluralize word (simple English rules)
|
|
226
|
+
*
|
|
227
|
+
* @example
|
|
228
|
+
* pluralize('field') // 'fields'
|
|
229
|
+
* pluralize('class') // 'classes'
|
|
230
|
+
* pluralize('entry') // 'entries'
|
|
231
|
+
*/
|
|
232
|
+
export function pluralize(word) {
|
|
233
|
+
if (word.endsWith('s') || word.endsWith('x') || word.endsWith('z') || word.endsWith('ch') || word.endsWith('sh')) {
|
|
234
|
+
return word + 'es';
|
|
235
|
+
}
|
|
236
|
+
if (word.endsWith('y') && !/[aeiou]y$/i.test(word)) {
|
|
237
|
+
return word.slice(0, -1) + 'ies';
|
|
238
|
+
}
|
|
239
|
+
return word + 's';
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Singularize word (simple English rules)
|
|
243
|
+
*
|
|
244
|
+
* @example
|
|
245
|
+
* singularize('fields') // 'field'
|
|
246
|
+
* singularize('classes') // 'class'
|
|
247
|
+
* singularize('entries') // 'entry'
|
|
248
|
+
*/
|
|
249
|
+
export function singularize(word) {
|
|
250
|
+
if (word.endsWith('ies')) {
|
|
251
|
+
return word.slice(0, -3) + 'y';
|
|
252
|
+
}
|
|
253
|
+
if (word.endsWith('es')) {
|
|
254
|
+
// Check if it's a word that adds 'es' (classes, boxes, etc.)
|
|
255
|
+
const stem = word.slice(0, -2);
|
|
256
|
+
if (stem.endsWith('s') || stem.endsWith('x') || stem.endsWith('z') || stem.endsWith('ch') || stem.endsWith('sh')) {
|
|
257
|
+
return stem;
|
|
258
|
+
}
|
|
259
|
+
// Otherwise just remove 's'
|
|
260
|
+
return word.slice(0, -1);
|
|
261
|
+
}
|
|
262
|
+
if (word.endsWith('s') && !word.endsWith('ss')) {
|
|
263
|
+
return word.slice(0, -1);
|
|
264
|
+
}
|
|
265
|
+
return word;
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Convert string to title case
|
|
269
|
+
*
|
|
270
|
+
* @example
|
|
271
|
+
* toTitleCase('hello world') // 'Hello World'
|
|
272
|
+
* toTitleCase('HELLO WORLD') // 'Hello World'
|
|
273
|
+
*/
|
|
274
|
+
export function toTitleCase(str) {
|
|
275
|
+
return str
|
|
276
|
+
.toLowerCase()
|
|
277
|
+
.split(' ')
|
|
278
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1))
|
|
279
|
+
.join(' ');
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Remove multiple consecutive spaces
|
|
283
|
+
*
|
|
284
|
+
* @example
|
|
285
|
+
* normalizeWhitespace('hello world') // 'hello world'
|
|
286
|
+
* normalizeWhitespace(' spaces ') // 'spaces'
|
|
287
|
+
*/
|
|
288
|
+
export function normalizeWhitespace(str) {
|
|
289
|
+
return str.replace(/\s+/g, ' ').trim();
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Extract namespace from Salesforce API name
|
|
293
|
+
*
|
|
294
|
+
* @example
|
|
295
|
+
* extractNamespace('MyNamespace__CustomObject__c') // 'MyNamespace'
|
|
296
|
+
* extractNamespace('StandardObject') // null
|
|
297
|
+
*/
|
|
298
|
+
export function extractNamespace(apiName) {
|
|
299
|
+
// Match namespace pattern: letters/numbers/underscores followed by double underscore
|
|
300
|
+
// But NOT ending with __c (that's the custom suffix, not namespace)
|
|
301
|
+
const match = apiName.match(/^([a-zA-Z][a-zA-Z0-9_]*?)__(?!c$)/);
|
|
302
|
+
return match ? match[1] : null;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Check if API name is custom (ends with __c)
|
|
306
|
+
*
|
|
307
|
+
* @example
|
|
308
|
+
* isCustom('MyField__c') // true
|
|
309
|
+
* isCustom('Name') // false
|
|
310
|
+
*/
|
|
311
|
+
export function isCustom(apiName) {
|
|
312
|
+
return apiName.endsWith('__c');
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Format bytes to human-readable string
|
|
316
|
+
*
|
|
317
|
+
* @example
|
|
318
|
+
* formatBytes(1024) // '1.00 KB'
|
|
319
|
+
* formatBytes(1048576) // '1.00 MB'
|
|
320
|
+
*/
|
|
321
|
+
export function formatBytes(bytes, decimals = 2) {
|
|
322
|
+
if (bytes === 0)
|
|
323
|
+
return '0 Bytes';
|
|
324
|
+
const k = 1024;
|
|
325
|
+
const dm = decimals < 0 ? 0 : decimals;
|
|
326
|
+
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
|
|
327
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
328
|
+
return `${(bytes / Math.pow(k, i)).toFixed(dm)} ${sizes[i]}`;
|
|
329
|
+
}
|
|
330
|
+
logger.debug('String utilities loaded');
|
|
331
|
+
//# sourceMappingURL=string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/utils/string.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* XML parsing options
|
|
3
|
+
*/
|
|
4
|
+
export type XmlParseOptions = {
|
|
5
|
+
ignoreAttributes?: boolean;
|
|
6
|
+
preserveOrder?: boolean;
|
|
7
|
+
trimValues?: boolean;
|
|
8
|
+
parseTagValue?: boolean;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* XML generation options
|
|
12
|
+
*/
|
|
13
|
+
export type XmlBuildOptions = {
|
|
14
|
+
format?: boolean;
|
|
15
|
+
ignoreAttributes?: boolean;
|
|
16
|
+
indentBy?: string;
|
|
17
|
+
suppressEmptyNode?: boolean;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Parse XML string to JavaScript object
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const xml = '<ApexClass><name>MyClass</name></ApexClass>';
|
|
25
|
+
* const obj = parseXml(xml);
|
|
26
|
+
* // { ApexClass: { name: 'MyClass' } }
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function parseXml<T = unknown>(xmlString: string, options?: XmlParseOptions): T;
|
|
30
|
+
/**
|
|
31
|
+
* Generate XML string from JavaScript object
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* const obj = { ApexClass: { name: 'MyClass', apiVersion: '60.0' } };
|
|
36
|
+
* const xml = buildXml(obj);
|
|
37
|
+
* // <ApexClass>
|
|
38
|
+
* // <name>MyClass</name>
|
|
39
|
+
* // <apiVersion>60.0</apiVersion>
|
|
40
|
+
* // </ApexClass>
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildXml(object: unknown, options?: XmlBuildOptions): string;
|
|
44
|
+
/**
|
|
45
|
+
* Validate XML string
|
|
46
|
+
*
|
|
47
|
+
* @returns True if valid, error object if invalid
|
|
48
|
+
*/
|
|
49
|
+
export declare function validateXml(xmlString: string): true | {
|
|
50
|
+
err: {
|
|
51
|
+
msg: string;
|
|
52
|
+
line: number;
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* Parse XML file to JavaScript object
|
|
57
|
+
*/
|
|
58
|
+
export declare function parseXmlFile<T = unknown>(filePath: string, options?: XmlParseOptions): Promise<T>;
|
|
59
|
+
/**
|
|
60
|
+
* Write JavaScript object to XML file
|
|
61
|
+
*/
|
|
62
|
+
export declare function writeXmlFile(filePath: string, object: unknown, options?: XmlBuildOptions): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Pretty-print XML string
|
|
65
|
+
*/
|
|
66
|
+
export declare function formatXml(xmlString: string): string;
|
|
67
|
+
/**
|
|
68
|
+
* Extract namespace from XML string
|
|
69
|
+
*/
|
|
70
|
+
export declare function extractNamespace(xmlString: string): string | null;
|
|
71
|
+
/**
|
|
72
|
+
* Check if XML string has specific namespace
|
|
73
|
+
*/
|
|
74
|
+
export declare function hasNamespace(xmlString: string, namespace: string): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Parse Salesforce metadata XML with proper namespace handling
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```typescript
|
|
80
|
+
* const metadata = await parseSalesforceMetadata('./MyClass.cls-meta.xml');
|
|
81
|
+
* // { ApexClass: { apiVersion: '60.0', status: 'Active' } }
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export declare function parseSalesforceMetadata<T = unknown>(filePath: string): Promise<T>;
|
|
85
|
+
/**
|
|
86
|
+
* Build Salesforce metadata XML with proper formatting
|
|
87
|
+
*/
|
|
88
|
+
export declare function buildSalesforceMetadata(object: unknown, namespace?: string): string;
|
|
89
|
+
/**
|
|
90
|
+
* Stream-based XML parsing for large files
|
|
91
|
+
* Returns array of parsed chunks
|
|
92
|
+
*/
|
|
93
|
+
export declare function parseXmlStream<T = unknown>(filePath: string, chunkSize?: number): Promise<T[]>;
|
|
94
|
+
/**
|
|
95
|
+
* Minify XML by removing whitespace
|
|
96
|
+
*/
|
|
97
|
+
export declare function minifyXml(xmlString: string): string;
|
package/lib/utils/xml.js
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import fs from 'node:fs/promises';
|
|
2
|
+
import { XMLBuilder, XMLParser, XMLValidator } from 'fast-xml-parser';
|
|
3
|
+
import { getLogger } from './logger.js';
|
|
4
|
+
const logger = getLogger('XMLUtils');
|
|
5
|
+
/**
|
|
6
|
+
* Default XML parsing configuration for Salesforce metadata
|
|
7
|
+
*/
|
|
8
|
+
const DEFAULT_PARSE_OPTIONS = {
|
|
9
|
+
ignoreAttributes: false,
|
|
10
|
+
preserveOrder: false,
|
|
11
|
+
trimValues: true,
|
|
12
|
+
parseTagValue: true,
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Default XML generation configuration
|
|
16
|
+
*/
|
|
17
|
+
const DEFAULT_BUILD_OPTIONS = {
|
|
18
|
+
format: true,
|
|
19
|
+
ignoreAttributes: false,
|
|
20
|
+
indentBy: ' ',
|
|
21
|
+
suppressEmptyNode: false,
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Parse XML string to JavaScript object
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const xml = '<ApexClass><name>MyClass</name></ApexClass>';
|
|
29
|
+
* const obj = parseXml(xml);
|
|
30
|
+
* // { ApexClass: { name: 'MyClass' } }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export function parseXml(xmlString, options) {
|
|
34
|
+
try {
|
|
35
|
+
const parser = new XMLParser({
|
|
36
|
+
...DEFAULT_PARSE_OPTIONS,
|
|
37
|
+
...options,
|
|
38
|
+
attributeNamePrefix: '@_',
|
|
39
|
+
textNodeName: '#text',
|
|
40
|
+
});
|
|
41
|
+
return parser.parse(xmlString);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
logger.error('Failed to parse XML', { error });
|
|
45
|
+
throw new Error(`XML parsing failed: ${error.message}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Generate XML string from JavaScript object
|
|
50
|
+
*
|
|
51
|
+
* @example
|
|
52
|
+
* ```typescript
|
|
53
|
+
* const obj = { ApexClass: { name: 'MyClass', apiVersion: '60.0' } };
|
|
54
|
+
* const xml = buildXml(obj);
|
|
55
|
+
* // <ApexClass>
|
|
56
|
+
* // <name>MyClass</name>
|
|
57
|
+
* // <apiVersion>60.0</apiVersion>
|
|
58
|
+
* // </ApexClass>
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export function buildXml(object, options) {
|
|
62
|
+
try {
|
|
63
|
+
const builder = new XMLBuilder({
|
|
64
|
+
...DEFAULT_BUILD_OPTIONS,
|
|
65
|
+
...options,
|
|
66
|
+
attributeNamePrefix: '@_',
|
|
67
|
+
textNodeName: '#text',
|
|
68
|
+
});
|
|
69
|
+
const xml = builder.build(object);
|
|
70
|
+
// Add XML declaration if format is enabled
|
|
71
|
+
if (options?.format !== false) {
|
|
72
|
+
return `<?xml version="1.0" encoding="UTF-8"?>\n${xml}`;
|
|
73
|
+
}
|
|
74
|
+
return xml;
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
logger.error('Failed to build XML', { error });
|
|
78
|
+
throw new Error(`XML generation failed: ${error.message}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Validate XML string
|
|
83
|
+
*
|
|
84
|
+
* @returns True if valid, error object if invalid
|
|
85
|
+
*/
|
|
86
|
+
export function validateXml(xmlString) {
|
|
87
|
+
const result = XMLValidator.validate(xmlString, {
|
|
88
|
+
allowBooleanAttributes: true,
|
|
89
|
+
});
|
|
90
|
+
if (result === true) {
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
logger.warn('XML validation failed', { error: result.err });
|
|
94
|
+
return result;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Parse XML file to JavaScript object
|
|
98
|
+
*/
|
|
99
|
+
export async function parseXmlFile(filePath, options) {
|
|
100
|
+
try {
|
|
101
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
102
|
+
return parseXml(content, options);
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
logger.error('Failed to parse XML file', { error, filePath });
|
|
106
|
+
throw new Error(`Failed to read/parse XML file ${filePath}: ${error.message}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Write JavaScript object to XML file
|
|
111
|
+
*/
|
|
112
|
+
export async function writeXmlFile(filePath, object, options) {
|
|
113
|
+
try {
|
|
114
|
+
const xml = buildXml(object, options);
|
|
115
|
+
await fs.writeFile(filePath, xml, 'utf-8');
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
logger.error('Failed to write XML file', { error, filePath });
|
|
119
|
+
throw new Error(`Failed to write XML file ${filePath}: ${error.message}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Pretty-print XML string
|
|
124
|
+
*/
|
|
125
|
+
export function formatXml(xmlString) {
|
|
126
|
+
try {
|
|
127
|
+
// Parse and rebuild with formatting
|
|
128
|
+
const parsed = parseXml(xmlString);
|
|
129
|
+
return buildXml(parsed, { format: true });
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
logger.error('Failed to format XML', { error });
|
|
133
|
+
throw new Error(`XML formatting failed: ${error.message}`);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Extract namespace from XML string
|
|
138
|
+
*/
|
|
139
|
+
export function extractNamespace(xmlString) {
|
|
140
|
+
const namespaceMatch = /xmlns="([^"]+)"/.exec(xmlString);
|
|
141
|
+
return namespaceMatch ? namespaceMatch[1] : null;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Check if XML string has specific namespace
|
|
145
|
+
*/
|
|
146
|
+
export function hasNamespace(xmlString, namespace) {
|
|
147
|
+
const extractedNamespace = extractNamespace(xmlString);
|
|
148
|
+
return extractedNamespace === namespace;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Parse Salesforce metadata XML with proper namespace handling
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* ```typescript
|
|
155
|
+
* const metadata = await parseSalesforceMetadata('./MyClass.cls-meta.xml');
|
|
156
|
+
* // { ApexClass: { apiVersion: '60.0', status: 'Active' } }
|
|
157
|
+
* ```
|
|
158
|
+
*/
|
|
159
|
+
export async function parseSalesforceMetadata(filePath) {
|
|
160
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
161
|
+
// Validate before parsing
|
|
162
|
+
const validation = validateXml(content);
|
|
163
|
+
if (validation !== true) {
|
|
164
|
+
throw new Error(`Invalid XML in ${filePath}: ${validation.err.msg} at line ${validation.err.line}`);
|
|
165
|
+
}
|
|
166
|
+
return parseXml(content, {
|
|
167
|
+
ignoreAttributes: false,
|
|
168
|
+
trimValues: true,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Build Salesforce metadata XML with proper formatting
|
|
173
|
+
*/
|
|
174
|
+
export function buildSalesforceMetadata(object, namespace = 'http://soap.sforce.com/2006/04/metadata') {
|
|
175
|
+
const xml = buildXml(object, {
|
|
176
|
+
format: true,
|
|
177
|
+
indentBy: ' ', // Salesforce uses 4 spaces
|
|
178
|
+
});
|
|
179
|
+
// Add namespace to root element
|
|
180
|
+
return xml.replace(/<(\w+)>/, `<$1 xmlns="${namespace}">`);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Stream-based XML parsing for large files
|
|
184
|
+
* Returns array of parsed chunks
|
|
185
|
+
*/
|
|
186
|
+
export async function parseXmlStream(filePath, chunkSize = 1024 * 1024 // 1MB chunks
|
|
187
|
+
) {
|
|
188
|
+
try {
|
|
189
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
190
|
+
// For files smaller than chunk size, parse normally
|
|
191
|
+
if (content.length < chunkSize) {
|
|
192
|
+
return [parseXml(content)];
|
|
193
|
+
}
|
|
194
|
+
// For large files, split by root elements (simplified approach)
|
|
195
|
+
const chunks = [];
|
|
196
|
+
const rootTagMatch = /<(\w+)[^>]*>/.exec(content);
|
|
197
|
+
if (!rootTagMatch) {
|
|
198
|
+
throw new Error('Could not determine root element');
|
|
199
|
+
}
|
|
200
|
+
const rootTag = rootTagMatch[1];
|
|
201
|
+
// Find all occurrences of child elements and parse individually
|
|
202
|
+
const childPattern = new RegExp(`<${rootTag}[^>]*>([\\s\\S]*?)</${rootTag}>`, 'g');
|
|
203
|
+
let match;
|
|
204
|
+
while ((match = childPattern.exec(content)) !== null) {
|
|
205
|
+
chunks.push(parseXml(match[0]));
|
|
206
|
+
}
|
|
207
|
+
return chunks.length > 0 ? chunks : [parseXml(content)];
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
logger.error('Failed to stream parse XML', { error, filePath });
|
|
211
|
+
throw new Error(`Failed to stream parse XML file ${filePath}: ${error.message}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Minify XML by removing whitespace
|
|
216
|
+
*/
|
|
217
|
+
export function minifyXml(xmlString) {
|
|
218
|
+
try {
|
|
219
|
+
const parsed = parseXml(xmlString);
|
|
220
|
+
return buildXml(parsed, { format: false });
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
logger.error('Failed to minify XML', { error });
|
|
224
|
+
throw new Error(`XML minification failed: ${error.message}`);
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=xml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xml.js","sourceRoot":"","sources":["../../src/utils/xml.ts"],"names":[],"mappings":"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"}
|