From 699cf7ad1b60c7e1e97d32016a34587a342a6eda Mon Sep 17 00:00:00 2001 From: Ricardo Viera Date: Mon, 28 Oct 2024 10:40:46 -0600 Subject: [PATCH] feat: Adds a new metadata bundle type for AppFrameworkTemplates (#1442) * feat(appFrameworkTemplateBundle): add support for appFrameworkTemplateBundle to sdr * feat(appFrameworkTemplateBundle): add empty obj layout.json files * feat(appFrameworkTemplateBundle): add straight empty layout.json files * feat(appFrameworkTemplateBundle): trying to fix the layout.json test failures * feat(appFrameworkTemplateBundle): {} layout.json * feat(appFrameworkTemplateBundle): {} with another line layout.json * feat(appFrameworkTemplateBundle): update type to string, string[] instead of | string[] --- METADATA_SUPPORT.md | 1294 +++++++++-------- src/registry/metadataRegistry.json | 52 +- src/utils/filePathGenerator.ts | 21 +- .../appTemplates/test_template/layout.json | 1 + .../test_template/template-info.json | 11 + .../verify-md-files.expected/package.xml | 8 + .../appTemplates/test_template/layout.json | 1 + .../test_template/template-info.json | 11 + .../appTemplates/test_template/layout.json | 1 + .../test_template/template-info.json | 11 + .../appTemplates/sfdx-project.json | 11 + .../appTemplates/snapshots.test.ts | 53 + test/utils/filePathGenerator.test.ts | 17 + 13 files changed, 845 insertions(+), 647 deletions(-) create mode 100644 test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-md-files.expected/appTemplates/test_template/layout.json create mode 100644 test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-md-files.expected/appTemplates/test_template/template-info.json create mode 100644 test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-md-files.expected/package.xml create mode 100644 test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-source-files.expected/force-app/main/default/appTemplates/test_template/layout.json create mode 100644 test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-source-files.expected/force-app/main/default/appTemplates/test_template/template-info.json create mode 100644 test/snapshot/sampleProjects/appTemplates/originalMdapi/appTemplates/test_template/layout.json create mode 100644 test/snapshot/sampleProjects/appTemplates/originalMdapi/appTemplates/test_template/template-info.json create mode 100644 test/snapshot/sampleProjects/appTemplates/sfdx-project.json create mode 100644 test/snapshot/sampleProjects/appTemplates/snapshots.test.ts diff --git a/METADATA_SUPPORT.md b/METADATA_SUPPORT.md index 579fbc5606..5923627df8 100644 --- a/METADATA_SUPPORT.md +++ b/METADATA_SUPPORT.md @@ -4,653 +4,670 @@ This list compares metadata types found in Salesforce v62 with the [metadata reg This repository is used by both the Salesforce CLIs and Salesforce's VSCode Extensions. -Currently, there are 614/630 supported metadata types. +Currently, there are 618/630 supported metadata types. For status on any existing gaps, please search or file an issue in the [Salesforce CLI issues only repo](https://github.com/forcedotcom/cli/issues). To contribute a new metadata type, please see the [Contributing Metadata Types to the Registry](./contributing/metadata.md) -|Metadata Type|Support|Notes| -|:---|:---|:---| -|AIApplication|✅|| -|AIApplicationConfig|✅|| -|AIReplyRecommendationsSettings|✅|| -|AIScoringModelDefVersion|✅|| -|AIScoringModelDefinition|✅|| -|AIUsecaseDefinition|⚠️|Supports deploy/retrieve but not source tracking| -|AccountForecastSettings|✅|| -|AccountIntelligenceSettings|✅|| -|AccountPlanSettings|✅|| -|AccountRelationshipShareRule|✅|| -|AccountSettings|✅|| -|AccountingFieldMapping|✅|| -|AccountingModelConfig|✅|| -|AccountingSettings|✅|| -|AcctMgrTargetSettings|✅|| -|ActionLauncherItemDef|✅|| -|ActionLinkGroupTemplate|✅|| -|ActionPlanTemplate|✅|| -|ActionableEventOrchDef|✅|| -|ActionableEventTypeDef|✅|| -|ActionableListDefinition|✅|| -|ActionsSettings|✅|| -|ActivationPlatform|✅|| -|ActivitiesSettings|✅|| -|ActnblListKeyPrfmIndDef|✅|| -|AddressSettings|✅|| -|AdvAccountForecastSet|✅|| -|AdvAcctForecastDimSource|✅|| -|AdvAcctForecastPeriodGroup|✅|| -|AffinityScoreDefinition|✅|| -|AgentforceForDevelopersSettings|✅|| -|Ai4mSettings|✅|| -|AnalyticSnapshot|✅|| -|AnalyticsSettings|✅|| -|AnimationRule|✅|| -|ApexClass|✅|| -|ApexComponent|✅|| -|ApexEmailNotifications|✅|| -|ApexPage|✅|| -|ApexSettings|✅|| -|ApexTestSuite|✅|| -|ApexTrigger|✅|| -|AppAnalyticsSettings|✅|| -|AppExperienceSettings|✅|| -|AppMenu|✅|| -|ApplicationRecordTypeConfig|✅|| -|ApplicationSubtypeDefinition|✅|| -|AppointmentAssignmentPolicy|✅|| -|AppointmentSchedulingPolicy|✅|| -|ApprovalProcess|✅|| -|AssessmentConfiguration|✅|| -|AssessmentQuestion|✅|| -|AssessmentQuestionSet|✅|| -|AssignmentRules|✅|| -|AssistantContextItem|✅|| -|AssistantDefinition|✅|| -|AssistantSkillQuickAction|✅|| -|AssistantSkillSobjectAction|✅|| -|AssistantVersion|✅|| -|AssociationEngineSettings|✅|| -|Audience|✅|| -|AuraDefinitionBundle|✅|| -|AuthProvider|✅|| -|AutoResponseRules|✅|| -|AutomatedContactsSettings|✅|| -|BatchCalcJobDefinition|✅|| -|BatchProcessJobDefinition|✅|| -|BenefitAction|✅|| -|BillingSettings|✅|| -|BlacklistedConsumer|✅|| -|BldgEnrgyIntensityCnfg|✅|| -|BlockchainSettings|✅|| -|Bot|✅|| -|BotBlock|✅|| -|BotBlockVersion|❌|Not supported, but support could be added| -|BotSettings|✅|| -|BotTemplate|✅|| -|BotVersion|✅|| -|BranchManagementSettings|✅|| -|BrandingSet|✅|| -|BriefcaseDefinition|✅|| -|BusinessHoursSettings|✅|| -|BusinessProcess|✅|| -|BusinessProcessGroup|✅|| -|BusinessProcessTypeDefinition|✅|| -|CMSConnectSource|✅|| -|CallCenter|✅|| -|CallCenterRoutingMap|✅|| -|CallCoachingMediaProvider|⚠️|Supports deploy/retrieve but not source tracking| -|CampaignInfluenceModel|✅|| -|CampaignSettings|✅|| -|CanvasMetadata|✅|| -|CareBenefitVerifySettings|✅|| -|CareLimitType|✅|| -|CareProviderAfflRoleConfig|✅|| -|CareProviderSearchConfig|✅|| -|CareRequestConfiguration|✅|| -|CareSystemFieldMapping|✅|| -|CaseSettings|✅|| -|CaseSubjectParticle|✅|| -|Certificate|✅|| -|ChannelLayout|✅|| -|ChannelObjectLinkingRule|✅|| -|ChannelRevMgmtSettings|✅|| -|ChatterAnswersSettings|✅|| -|ChatterEmailsMDSettings|✅|| -|ChatterExtension|✅|| -|ChatterSettings|✅|| -|ChoiceList|❌|Not supported, but support could be added (but not for tracking)| -|ClaimFinancialSettings|✅|| -|ClaimMgmtFoundationEnabledSettings|✅|| -|ClauseCatgConfiguration|✅|| -|CleanDataService|✅|| -|CodeBuilderSettings|✅|| -|CollectionsDashboardSettings|✅|| -|CommandAction|✅|| -|CommerceSettings|✅|| -|CommsServiceConsoleSettings|✅|| -|CommunitiesSettings|✅|| -|Community|✅|| -|CommunityTemplateDefinition|✅|| -|CommunityThemeDefinition|✅|| -|CompactLayout|✅|| -|CompanySettings|✅|| -|ConnectedApp|✅|| -|ConnectedAppSettings|✅|| -|ContentAsset|✅|| -|ContentSettings|✅|| -|ContextDefinition|⚠️|Supports deploy/retrieve but not source tracking| -|ContextUseCaseMapping|✅|| -|ContractSettings|✅|| -|ContractType|✅|| -|ConvIntelligenceSignalRule|❌|Not supported, but support could be added| -|ConversationChannelDefinition|✅|| -|ConversationMessageDefinition|✅|| -|ConversationServiceIntegrationSettings|✅|| -|ConversationVendorInfo|✅|| -|ConversationalIntelligenceSettings|✅|| -|CorsWhitelistOrigin|✅|| -|CspTrustedSite|✅|| -|CurrencySettings|✅|| -|CustomAddressFieldSettings|✅|| -|CustomApplication|✅|| -|CustomApplicationComponent|✅|| -|CustomFeedFilter|✅|| -|CustomField|✅|| -|CustomHelpMenuSection|✅|| -|CustomIndex|✅|| -|CustomLabels|✅|| -|CustomMetadata|✅|| -|CustomNotificationType|✅|| -|CustomObject|✅|| -|CustomObjectTranslation|✅|| -|CustomPageWebLink|✅|| -|CustomPermission|✅|| -|CustomSite|✅|| -|CustomTab|✅|| -|CustomValue|❌|Not supported, but support could be added| -|CustomerDataPlatformSettings|✅|| -|CustomizablePropensityScoringSettings|✅|| -|Dashboard|✅|| -|DashboardFolder|✅|| -|DataCalcInsightTemplate|✅|| -|DataCategoryGroup|✅|| -|DataConnectorIngestApi|✅|| -|DataConnectorS3|✅|| -|DataDotComSettings|✅|| -|DataImportManagementSettings|✅|| -|DataKitObjectDependency|✅|| -|DataKitObjectTemplate|✅|| -|DataPackageKitDefinition|✅|| -|DataPackageKitObject|✅|| -|DataSource|✅|| -|DataSourceBundleDefinition|✅|| -|DataSourceObject|✅|| -|DataSourceTenant|✅|| -|DataSrcDataModelFieldMap|✅|| -|DataStreamDefinition|✅|| -|DataStreamTemplate|✅|| -|DataWeaveResource|✅|| -|DecisionMatrixDefinition|✅|| -|DecisionMatrixDefinitionVersion|✅|| -|DecisionTable|✅|| -|DecisionTableDatasetLink|✅|| -|DelegateGroup|✅|| -|DeploymentSettings|✅|| -|DevHubSettings|✅|| -|DigitalExperience|✅|| -|DigitalExperienceBundle|✅|| -|DigitalExperienceConfig|✅|| -|DisclosureDefinition|✅|| -|DisclosureDefinitionVersion|✅|| -|DisclosureType|✅|| -|DiscoveryAIModel|✅|| -|DiscoveryGoal|✅|| -|DiscoverySettings|✅|| -|DiscoveryStory|✅|| -|Document|✅|| -|DocumentCategory|✅|| -|DocumentCategoryDocumentType|✅|| -|DocumentChecklistSettings|✅|| -|DocumentFolder|✅|| -|DocumentGenerationSetting|✅|| -|DocumentTemplate|⚠️|Supports deploy/retrieve but not source tracking| -|DocumentType|✅|| -|DuplicateRule|✅|| -|DynamicFormsSettings|✅|| -|DynamicFulfillmentOrchestratorSettings|✅|| -|EACSettings|✅|| -|ESignatureConfig|✅|| -|ESignatureEnvelopeConfig|✅|| -|EclairGeoData|✅|| -|EinsteinAISettings|✅|| -|EinsteinAgentSettings|✅|| -|EinsteinAssistantSettings|✅|| -|EinsteinCopilotSettings|✅|| -|EinsteinDealInsightsSettings|✅|| -|EinsteinDocumentCaptureSettings|✅|| -|EinsteinGptSettings|✅|| -|EmailAdministrationSettings|✅|| -|EmailFolder|✅|| -|EmailIntegrationSettings|✅|| -|EmailServicesFunction|✅|| -|EmailTemplate|✅|| -|EmailTemplateFolder|✅|| -|EmailTemplateSettings|✅|| -|EmbeddedServiceBranding|✅|| -|EmbeddedServiceConfig|✅|| -|EmbeddedServiceFlowConfig|✅|| -|EmbeddedServiceLiveAgent|✅|| -|EmbeddedServiceMenuSettings|✅|| -|EmployeeDataSyncProfile|✅|| -|EmployeeFieldAccessSettings|✅|| -|EmployeeUserSettings|✅|| -|EnablementMeasureDefinition|✅|| -|EnablementProgramDefinition|✅|| -|EnblProgramTaskSubCategory|✅|| -|EnhancedNotesSettings|✅|| -|EntitlementProcess|✅|| -|EntitlementSettings|✅|| -|EntitlementTemplate|✅|| -|EscalationRules|✅|| -|EssentialsSettings|✅|| -|EventLogObjectSettings|✅|| -|EventSettings|✅|| -|EvfSettings|✅|| -|ExperienceBundle|✅|| -|ExperienceBundleSettings|✅|| -|ExperiencePropertyTypeBundle|✅|| -|ExplainabilityActionDefinition|✅|| -|ExplainabilityActionVersion|✅|| -|ExplainabilityMsgTemplate|✅|| -|ExpressionSetDefinition|✅|| -|ExpressionSetDefinitionVersion|✅|| -|ExpressionSetObjectAlias|✅|| -|ExtDataTranFieldTemplate|❌|Not supported, but support could be added| -|ExtDataTranObjectTemplate|✅|| -|ExternalAIModel|✅|| -|ExternalAuthIdentityProvider|✅|| -|ExternalClientAppSettings|✅|| -|ExternalClientApplication|✅|| -|ExternalCredential|✅|| -|ExternalDataConnector|✅|| -|ExternalDataSource|✅|| -|ExternalDataSrcDescriptor|❌|Not supported, but support could be added| -|ExternalDataTranField|❌|Not supported, but support could be added| -|ExternalDataTranObject|✅|| -|ExternalDocStorageConfig|✅|| -|ExternalServiceRegistration|✅|| -|ExtlClntAppConfigurablePolicies|✅|| -|ExtlClntAppGlobalOauthSettings|✅|| -|ExtlClntAppMobileConfigurablePolicies|✅|| -|ExtlClntAppMobileSettings|✅|| -|ExtlClntAppNotificationSettings|✅|| -|ExtlClntAppOauthConfigurablePolicies|✅|| -|ExtlClntAppOauthSettings|✅|| -|ExtlClntAppPushConfigurablePolicies|⚠️|Supports deploy/retrieve but not source tracking| -|ExtlClntAppPushSettings|✅|| -|FeatureParameterBoolean|✅|| -|FeatureParameterDate|✅|| -|FeatureParameterInteger|✅|| -|FieldRestrictionRule|✅|| -|FieldServiceMobileExtension|✅|| -|FieldServiceSettings|✅|| -|FieldSet|✅|| -|FieldSrcTrgtRelationship|✅|| -|FileUploadAndDownloadSecuritySettings|✅|| -|FilesConnectSettings|✅|| -|FlexiPage|✅|| -|Flow|✅|| -|FlowCategory|✅|| -|FlowDefinition|⚠️|Supports deploy/retrieve but not source tracking| -|FlowSettings|✅|| -|FlowTest|✅|| -|ForecastingFilter|✅|| -|ForecastingFilterCondition|✅|| -|ForecastingGroup|✅|| -|ForecastingObjectListSettings|✅|| -|ForecastingSettings|✅|| -|ForecastingSourceDefinition|✅|| -|ForecastingType|✅|| -|ForecastingTypeSource|✅|| -|FormulaSettings|✅|| -|FuelType|✅|| -|FuelTypeSustnUom|✅|| -|FunctionReference|⚠️|Supports deploy/retrieve but not source tracking| -|FundraisingConfig|✅|| -|GatewayProviderPaymentMethodType|✅|| -|GenAiFunction|✅|| -|GenAiPlanner|✅|| -|GenAiPlugin|✅|| -|GenAiPluginInstructionDef|❌|Not supported, but support could be added| -|GlobalValueSet|✅|| -|GlobalValueSetTranslation|✅|| -|GoogleAppsSettings|✅|| -|Group|✅|| -|HerokuIntegrationSettings|✅|| -|HighVelocitySalesSettings|✅|| -|HomePageComponent|✅|| -|HomePageLayout|✅|| -|IPAddressRange|✅|| -|Icon|✅|| -|IdeasSettings|✅|| -|IdentityProviderSettings|✅|| -|IdentityVerificationProcDef|✅|| -|IframeWhiteListUrlSettings|✅|| -|InboundCertificate|✅|| -|InboundNetworkConnection|✅|| -|IncidentMgmtSettings|✅|| -|IncludeEstTaxInQuoteCPQSettings|✅|| -|IncludeEstTaxInQuoteSettings|✅|| -|Index|⚠️|Supports deploy/retrieve but not source tracking| -|IndustriesAutomotiveSettings|✅|| -|IndustriesContextSettings|✅|| -|IndustriesEinsteinFeatureSettings|✅|| -|IndustriesEventOrchSettings|✅|| -|IndustriesFieldServiceSettings|✅|| -|IndustriesGamificationSettings|✅|| -|IndustriesLoyaltySettings|✅|| -|IndustriesLsCommercialSettings|✅|| -|IndustriesManufacturingSettings|✅|| -|IndustriesPricingSettings|✅|| -|IndustriesRatingSettings|✅|| -|IndustriesSettings|✅|| -|IndustriesUnifiedPromotionsSettings|✅|| -|IndustriesUsageSettings|✅|| -|InstalledPackage|⚠️|Supports deploy/retrieve but not source tracking| -|IntegrationProviderDef|✅|| -|InterestTaggingSettings|✅|| -|InternalDataConnector|✅|| -|InvLatePymntRiskCalcSettings|✅|| -|InventorySettings|✅|| -|InvocableActionSettings|✅|| -|IoTSettings|✅|| -|KeywordList|✅|| -|KnowledgeGenerationSettings|✅|| -|KnowledgeSettings|✅|| -|LanguageSettings|✅|| -|LargeQuotesandOrdersForRlmSettings|✅|| -|Layout|✅|| -|LeadConfigSettings|✅|| -|LeadConvertSettings|✅|| -|LearningAchievementConfig|✅|| -|LearningItemType|✅|| -|Letterhead|✅|| -|LicensingSettings|✅|| -|LightningBolt|✅|| -|LightningComponentBundle|✅|| -|LightningExperienceSettings|✅|| -|LightningExperienceTheme|✅|| -|LightningMessageChannel|✅|| -|LightningOnboardingConfig|✅|| -|ListView|✅|| -|LiveAgentSettings|✅|| -|LiveChatAgentConfig|✅|| -|LiveChatButton|✅|| -|LiveChatDeployment|✅|| -|LiveChatSensitiveDataRule|✅|| -|LiveMessageSettings|✅|| -|LocationUse|✅|| -|LoyaltyProgramSetup|⚠️|Supports deploy/retrieve but not source tracking| -|MacroSettings|✅|| -|MailMergeSettings|✅|| -|ManagedContentType|⚠️|Supports deploy/retrieve but not source tracking| -|ManagedEventSubscription|✅|| -|ManagedTopics|✅|| -|MapsAndLocationSettings|✅|| -|MarketSegmentDefinition|✅|| -|MarketingAppExtActivity|❌|Not supported, but support could be added| -|MarketingAppExtension|✅|| -|MatchingRules|✅|| -|MediaAdSalesSettings|✅|| -|MeetingsSettings|✅|| -|MessagingChannel|⚠️|Supports deploy/retrieve but not source tracking| -|MfgProgramTemplate|✅|| -|MfgServiceConsoleSettings|✅|| -|MilestoneType|✅|| -|MktCalcInsightObjectDef|✅|| -|MktDataConnection|✅|| -|MktDataConnectionParam|❌|Not supported, but support could be added| -|MktDataConnectionSrcParam|✅|| -|MktDataTranObject|✅|| -|MlDomain|✅|| -|MobSecurityCertPinConfig|✅|| -|MobileApplicationDetail|✅|| -|MobileSecurityAssignment|✅|| -|MobileSecurityPolicy|✅|| -|MobileSettings|✅|| -|ModerationRule|✅|| -|MutingPermissionSet|✅|| -|MyDomainDiscoverableLogin|✅|| -|MyDomainSettings|✅|| -|NameSettings|✅|| -|NamedCredential|✅|| -|NavigationMenu|✅|| -|Network|✅|| -|NetworkBranding|✅|| -|NotificationTypeConfig|✅|| -|NotificationsSettings|✅|| -|OauthCustomScope|✅|| -|OauthOidcSettings|✅|| -|OauthTokenExchangeHandler|✅|| -|ObjectHierarchyRelationship|✅|| -|ObjectLinkingSettings|✅|| -|ObjectSourceTargetMap|✅|| -|OcrSampleDocument|✅|| -|OcrTemplate|✅|| -|OmniChannelPricingSettings|✅|| -|OmniChannelSettings|✅|| -|OmniDataTransform|⚠️|Supports deploy/retrieve but not source tracking| -|OmniExtTrackingDef|⚠️|Supports deploy/retrieve but not source tracking| -|OmniIntegrationProcedure|⚠️|Supports deploy/retrieve but not source tracking| -|OmniInteractionAccessConfig|⚠️|Supports deploy/retrieve but not source tracking| -|OmniInteractionConfig|⚠️|Supports deploy/retrieve but not source tracking| -|OmniScript|⚠️|Supports deploy/retrieve but not source tracking| -|OmniSupervisorConfig|✅|| -|OmniTrackingGroup|⚠️|Supports deploy/retrieve but not source tracking| -|OmniUiCard|⚠️|Supports deploy/retrieve but not source tracking| -|OnlineSalesSettings|✅|| -|OpportunityScoreSettings|✅|| -|OpportunitySettings|✅|| -|OrderManagementSettings|✅|| -|OrderSettings|✅|| -|OrgSettings|✅|| -|OutboundNetworkConnection|✅|| -|PardotEinsteinSettings|✅|| -|PardotSettings|✅|| -|ParticipantRole|✅|| -|PartyDataModelSettings|✅|| -|PathAssistant|✅|| -|PathAssistantSettings|✅|| -|PaymentGatewayProvider|✅|| -|PaymentsManagementEnabledSettings|✅|| -|PaymentsSettings|✅|| -|PermissionSet|✅|| -|PermissionSetGroup|✅|| -|PermissionSetLicenseDefinition|✅|| -|PersonAccountOwnerPowerUser|✅|| -|PicklistSettings|✅|| -|PicklistValue|❌|Not supported, but support could be added| -|PipelineInspMetricConfig|✅|| -|PlatformCachePartition|✅|| -|PlatformEventChannel|✅|| -|PlatformEventChannelMember|✅|| -|PlatformEventSettings|✅|| -|PlatformEventSubscriberConfig|✅|| -|PlatformSlackSettings|✅|| -|PortalDelegablePermissionSet|✅|| -|PortalsSettings|✅|| -|PostTemplate|✅|| -|PredictionBuilderSettings|✅|| -|PresenceDeclineReason|✅|| -|PresenceUserConfig|✅|| -|PricingActionParameters|✅|| -|PricingRecipe|✅|| -|PrivacySettings|✅|| -|ProcessFlowMigration|✅|| -|ProductAttrDisplayConfig|✅|| -|ProductAttributeSet|✅|| -|ProductConfiguratorSettings|✅|| -|ProductDiscoverySettings|✅|| -|ProductSettings|✅|| -|ProductSpecificationRecType|✅|| -|ProductSpecificationType|✅|| -|Profile|✅|| -|ProfilePasswordPolicy|✅|| -|ProfileSessionSetting|✅|| -|Prompt|✅|| -|PublicKeyCertificate|❌|Not supported, but support could be added (but not for tracking)| -|PublicKeyCertificateSet|❌|Not supported, but support could be added (but not for tracking)| -|Queue|✅|| -|QueueRoutingConfig|✅|| -|QuickAction|✅|| -|QuickTextSettings|✅|| -|QuoteSettings|✅|| -|RealTimeEventSettings|✅|| -|RecAlrtDataSrcExpSetDef|✅|| -|RecommendationBuilderSettings|✅|| -|RecommendationStrategy|✅|| -|RecordActionDeployment|✅|| -|RecordAggregationDefinition|✅|| -|RecordAlertCategory|✅|| -|RecordAlertDataSource|✅|| -|RecordAlertTemplate|✅|| -|RecordPageSettings|✅|| -|RecordType|✅|| -|RedirectWhitelistUrl|✅|| -|ReferencedDashboard|✅|| -|ReferralMarketingSettings|✅|| -|RegisteredExternalService|✅|| -|RelatedRecordAssocCriteria|✅|| -|RelationshipGraphDefinition|✅|| -|RemoteSiteSetting|✅|| -|Report|✅|| -|ReportFolder|✅|| -|ReportType|✅|| -|RestrictionRule|✅|| -|RetailExecutionSettings|✅|| -|RetrievalSummaryDefinition|✅|| -|RevenueManagementSettings|✅|| -|Role|✅|| -|SalesAgreementSettings|✅|| -|SalesWorkQueueSettings|✅|| -|SamlSsoConfig|✅|| -|SandboxSettings|✅|| -|SceGlobalModelOptOutSettings|✅|| -|SchedulingObjective|✅|| -|SchedulingRule|✅|| -|SchemaSettings|✅|| -|ScoreCategory|✅|| -|SearchCustomization|⚠️|Supports deploy/retrieve but not source tracking| -|SearchOrgWideObjectConfig|⚠️|Supports deploy/retrieve but not source tracking| -|SearchSettings|✅|| -|SecuritySettings|✅|| -|ServiceAISetupDefinition|✅|| -|ServiceAISetupField|✅|| -|ServiceChannel|✅|| -|ServiceCloudVoiceSettings|✅|| -|ServicePresenceStatus|✅|| -|ServiceProcess|✅|| -|ServiceSetupAssistantSettings|✅|| -|SharingCriteriaRule|✅|| -|SharingGuestRule|✅|| -|SharingOwnerRule|✅|| -|SharingReason|✅|| -|SharingRules|⚠️|Supports deploy/retrieve but not source tracking| -|SharingSet|✅|| -|SharingSettings|✅|| -|SharingTerritoryRule|✅|| -|SiteDotCom|✅|| -|SiteSettings|✅|| -|Skill|✅|| -|SkillType|✅|| -|SlackApp|✅|| -|SocialCustomerServiceSettings|✅|| -|SourceTrackingSettings|✅|| -|StageDefinition|✅|| -|StandardValue|❌|Not supported, but support could be added| -|StandardValueSet|✅|| -|StandardValueSetTranslation|✅|| -|StaticResource|✅|| -|StnryAssetEnvSrcCnfg|✅|| -|StreamingAppDataConnector|✅|| -|SubscriptionManagementSettings|✅|| -|SurveySettings|✅|| -|SustainabilityUom|✅|| -|SustnUomConversion|✅|| -|SvcCatalogCategory|✅|| -|SvcCatalogFilterCriteria|✅|| -|SvcCatalogFulfillmentFlow|✅|| -|SvcCatalogItemDef|✅|| -|SynonymDictionary|✅|| -|SystemNotificationSettings|✅|| -|Territory|✅|| -|Territory2|✅|| -|Territory2Model|✅|| -|Territory2Rule|✅|| -|Territory2Settings|✅|| -|Territory2Type|✅|| -|TimeSheetTemplate|✅|| -|TimelineObjectDefinition|✅|| -|TopicsForObjects|✅|| -|TrailheadSettings|✅|| -|TransactionSecurityPolicy|✅|| -|Translations|✅|| -|TrialOrgSettings|✅|| -|UIObjectRelationConfig|✅|| -|UiFormatSpecificationSet|✅|| -|UiPlugin|✅|| -|UserAccessPolicy|✅|| -|UserAuthCertificate|✅|| -|UserCriteria|✅|| -|UserEngagementSettings|✅|| -|UserInterfaceSettings|✅|| -|UserManagementSettings|✅|| -|UserProvisioningConfig|✅|| -|ValidationRule|✅|| -|VehicleAssetEmssnSrcCnfg|✅|| -|ViewDefinition|✅|| -|VirtualVisitConfig|✅|| -|VoiceSettings|✅|| -|WarrantyLifecycleMgmtSettings|✅|| -|WaveAnalyticAssetCollection|✅|| -|WaveApplication|✅|| -|WaveComponent|✅|| -|WaveDashboard|✅|| -|WaveDataflow|✅|| -|WaveDataset|✅|| -|WaveLens|✅|| -|WaveRecipe|✅|| -|WaveTemplateBundle|✅|| -|WaveXmd|✅|| -|Web3Settings|✅|| -|WebLink|✅|| -|WebStoreBundle|✅|| -|WebStoreTemplate|✅|| -|WebToXSettings|✅|| -|WorkDotComSettings|✅|| -|WorkSkillRouting|✅|| -|Workflow|✅|| -|WorkflowAlert|✅|| -|WorkflowFieldUpdate|✅|| -|WorkflowFlowAction|❌|Not supported, but support could be added| -|WorkflowFlowAutomation|❌|Not supported, but support could be added| -|WorkflowKnowledgePublish|✅|| -|WorkflowOutboundMessage|✅|| -|WorkflowRule|✅|| -|WorkflowSend|✅|| -|WorkflowTask|✅|| -|WorkforceEngagementSettings|✅|| - - +| Metadata Type | Support | Notes | +| :------------------------------------- | :------ | :----------------------------------------------- | +| AIApplication | ✅ | | +| AIApplicationConfig | ✅ | | +| AIReplyRecommendationsSettings | ✅ | | +| AIScoringModelDefVersion | ✅ | | +| AIScoringModelDefinition | ✅ | | +| AIUsecaseDefinition | ⚠️ | Supports deploy/retrieve but not source tracking | +| AccountForecastSettings | ✅ | | +| AccountIntelligenceSettings | ✅ | | +| AccountPlanSettings | ✅ | | +| AccountRelationshipShareRule | ✅ | | +| AccountSettings | ✅ | | +| AccountingFieldMapping | ✅ | | +| AccountingModelConfig | ✅ | | +| AccountingSettings | ✅ | | +| AcctMgrTargetSettings | ✅ | | +| ActionLauncherItemDef | ✅ | | +| ActionLinkGroupTemplate | ✅ | | +| ActionPlanTemplate | ✅ | | +| ActionableEventOrchDef | ✅ | | +| ActionableEventTypeDef | ✅ | | +| ActionableListDefinition | ✅ | | +| ActionsSettings | ✅ | | +| ActivationPlatform | ✅ | | +| ActivitiesSettings | ✅ | | +| ActnblListKeyPrfmIndDef | ✅ | | +| AddressSettings | ✅ | | +| AdvAccountForecastSet | ✅ | | +| AdvAcctForecastDimSource | ✅ | | +| AdvAcctForecastPeriodGroup | ✅ | | +| AffinityScoreDefinition | ✅ | | +| AgentforceForDevelopersSettings | ✅ | | +| Ai4mSettings | ✅ | | +| AnalyticSnapshot | ✅ | | +| AnalyticsSettings | ✅ | | +| AnimationRule | ✅ | | +| ApexClass | ✅ | | +| ApexComponent | ✅ | | +| ApexEmailNotifications | ✅ | | +| ApexPage | ✅ | | +| ApexSettings | ✅ | | +| ApexTestSuite | ✅ | | +| ApexTrigger | ✅ | | +| AppAnalyticsSettings | ✅ | | +| AppExperienceSettings | ✅ | | +| AppMenu | ✅ | | +| ApplicationRecordTypeConfig | ✅ | | +| ApplicationSubtypeDefinition | ✅ | | +| AppointmentAssignmentPolicy | ✅ | | +| AppointmentSchedulingPolicy | ✅ | | +| ApprovalProcess | ✅ | | +| AssessmentConfiguration | ✅ | | +| AssessmentQuestion | ✅ | | +| AssessmentQuestionSet | ✅ | | +| AssignmentRules | ✅ | | +| AssistantContextItem | ✅ | | +| AssistantDefinition | ✅ | | +| AssistantSkillQuickAction | ✅ | | +| AssistantSkillSobjectAction | ✅ | | +| AssistantVersion | ✅ | | +| AssociationEngineSettings | ✅ | | +| Audience | ✅ | | +| AuraDefinitionBundle | ✅ | | +| AuthProvider | ✅ | | +| AutoResponseRules | ✅ | | +| AutomatedContactsSettings | ✅ | | +| BatchCalcJobDefinition | ✅ | | +| BatchProcessJobDefinition | ✅ | | +| BenefitAction | ✅ | | +| BillingSettings | ✅ | | +| BlacklistedConsumer | ✅ | | +| BldgEnrgyIntensityCnfg | ✅ | | +| BlockchainSettings | ✅ | | +| Bot | ✅ | | +| BotBlock | ✅ | | +| BotBlockVersion | ❌ | Not supported, but support could be added | +| BotSettings | ✅ | | +| BotTemplate | ✅ | | +| BotVersion | ✅ | | +| BranchManagementSettings | ✅ | | +| BrandingSet | ✅ | | +| BriefcaseDefinition | ✅ | | +| BusinessHoursSettings | ✅ | | +| BusinessProcess | ✅ | | +| BusinessProcessGroup | ✅ | | +| BusinessProcessTypeDefinition | ✅ | | +| CMSConnectSource | ✅ | | +| CallCenter | ✅ | | +| CallCenterRoutingMap | ✅ | | +| CallCoachingMediaProvider | ⚠️ | Supports deploy/retrieve but not source tracking | +| CampaignInfluenceModel | ✅ | | +| CampaignSettings | ✅ | | +| CanvasMetadata | ✅ | | +| CareBenefitVerifySettings | ✅ | | +| CareLimitType | ✅ | | +| CareProviderAfflRoleConfig | ✅ | | +| CareProviderSearchConfig | ✅ | | +| CareRequestConfiguration | ✅ | | +| CareSystemFieldMapping | ✅ | | +| CaseSettings | ✅ | | +| CaseSubjectParticle | ✅ | | +| Certificate | ✅ | | +| ChannelLayout | ✅ | | +| ChannelObjectLinkingRule | ✅ | | +| ChannelRevMgmtSettings | ✅ | | +| ChatterAnswersSettings | ✅ | | +| ChatterEmailsMDSettings | ✅ | | +| ChatterExtension | ✅ | | +| ChatterSettings | ✅ | | +| ChoiceList | ⚠️ | Supports deploy/retrieve but not source tracking | +| ClaimFinancialSettings | ✅ | | +| ClaimMgmtFoundationEnabledSettings | ✅ | | +| ClauseCatgConfiguration | ✅ | | +| CleanDataService | ✅ | | +| CodeBuilderSettings | ✅ | | +| CollectionsDashboardSettings | ✅ | | +| CommandAction | ✅ | | +| CommerceSettings | ✅ | | +| CommsServiceConsoleSettings | ✅ | | +| CommunitiesSettings | ✅ | | +| Community | ✅ | | +| CommunityTemplateDefinition | ✅ | | +| CommunityThemeDefinition | ✅ | | +| CompactLayout | ✅ | | +| CompanySettings | ✅ | | +| ConnectedApp | ✅ | | +| ConnectedAppSettings | ✅ | | +| ContentAsset | ✅ | | +| ContentSettings | ✅ | | +| ContextDefinition | ⚠️ | Supports deploy/retrieve but not source tracking | +| ContextUseCaseMapping | ✅ | | +| ContractSettings | ✅ | | +| ContractType | ✅ | | +| ConvIntelligenceSignalRule | ✅ | | +| ConversationChannelDefinition | ✅ | | +| ConversationMessageDefinition | ✅ | | +| ConversationServiceIntegrationSettings | ✅ | | +| ConversationVendorInfo | ✅ | | +| ConversationalIntelligenceSettings | ✅ | | +| CorsWhitelistOrigin | ✅ | | +| CspTrustedSite | ✅ | | +| CurrencySettings | ✅ | | +| CustomAddressFieldSettings | ✅ | | +| CustomApplication | ✅ | | +| CustomApplicationComponent | ✅ | | +| CustomFeedFilter | ✅ | | +| CustomField | ✅ | | +| CustomHelpMenuSection | ✅ | | +| CustomIndex | ✅ | | +| CustomLabels | ✅ | | +| CustomMetadata | ✅ | | +| CustomNotificationType | ✅ | | +| CustomObject | ✅ | | +| CustomObjectTranslation | ✅ | | +| CustomPageWebLink | ✅ | | +| CustomPermission | ✅ | | +| CustomSite | ✅ | | +| CustomTab | ✅ | | +| CustomValue | ❌ | Not supported, but support could be added | +| CustomerDataPlatformSettings | ✅ | | +| CustomizablePropensityScoringSettings | ✅ | | +| Dashboard | ✅ | | +| DashboardFolder | ✅ | | +| DataCalcInsightTemplate | ✅ | | +| DataCategoryGroup | ✅ | | +| DataConnectorIngestApi | ✅ | | +| DataConnectorS3 | ✅ | | +| DataDotComSettings | ✅ | | +| DataImportManagementSettings | ✅ | | +| DataKitObjectDependency | ✅ | | +| DataKitObjectTemplate | ✅ | | +| DataPackageKitDefinition | ✅ | | +| DataPackageKitObject | ✅ | | +| DataSource | ✅ | | +| DataSourceBundleDefinition | ✅ | | +| DataSourceObject | ✅ | | +| DataSourceTenant | ✅ | | +| DataSrcDataModelFieldMap | ✅ | | +| DataStreamDefinition | ✅ | | +| DataStreamTemplate | ✅ | | +| DataWeaveResource | ✅ | | +| DecisionMatrixDefinition | ✅ | | +| DecisionMatrixDefinitionVersion | ✅ | | +| DecisionTable | ✅ | | +| DecisionTableDatasetLink | ✅ | | +| DelegateGroup | ✅ | | +| DeploymentSettings | ✅ | | +| DevHubSettings | ✅ | | +| DigitalExperience | ✅ | | +| DigitalExperienceBundle | ✅ | | +| DigitalExperienceConfig | ✅ | | +| DisclosureDefinition | ✅ | | +| DisclosureDefinitionVersion | ✅ | | +| DisclosureType | ✅ | | +| DiscoveryAIModel | ✅ | | +| DiscoveryGoal | ✅ | | +| DiscoverySettings | ✅ | | +| DiscoveryStory | ✅ | | +| Document | ✅ | | +| DocumentCategory | ✅ | | +| DocumentCategoryDocumentType | ✅ | | +| DocumentChecklistSettings | ✅ | | +| DocumentFolder | ✅ | | +| DocumentGenerationSetting | ✅ | | +| DocumentTemplate | ⚠️ | Supports deploy/retrieve but not source tracking | +| DocumentType | ✅ | | +| DuplicateRule | ✅ | | +| DynamicFormsSettings | ✅ | | +| DynamicFulfillmentOrchestratorSettings | ✅ | | +| EACSettings | ✅ | | +| ESignatureConfig | ✅ | | +| ESignatureEnvelopeConfig | ✅ | | +| EclairGeoData | ✅ | | +| EinsteinAISettings | ✅ | | +| EinsteinAgentSettings | ✅ | | +| EinsteinAssistantSettings | ✅ | | +| EinsteinCopilotSettings | ✅ | | +| EinsteinDealInsightsSettings | ✅ | | +| EinsteinDocumentCaptureSettings | ✅ | | +| EinsteinGptSettings | ✅ | | +| EmailAdministrationSettings | ✅ | | +| EmailFolder | ✅ | | +| EmailIntegrationSettings | ✅ | | +| EmailServicesFunction | ✅ | | +| EmailTemplate | ✅ | | +| EmailTemplateFolder | ✅ | | +| EmailTemplateSettings | ✅ | | +| EmbeddedServiceBranding | ✅ | | +| EmbeddedServiceConfig | ✅ | | +| EmbeddedServiceFlowConfig | ✅ | | +| EmbeddedServiceLiveAgent | ✅ | | +| EmbeddedServiceMenuSettings | ✅ | | +| EmployeeDataSyncProfile | ✅ | | +| EmployeeFieldAccessSettings | ✅ | | +| EmployeeUserSettings | ✅ | | +| EnablementMeasureDefinition | ✅ | | +| EnablementProgramDefinition | ✅ | | +| EnblProgramTaskSubCategory | ✅ | | +| EnhancedNotesSettings | ✅ | | +| EntitlementProcess | ✅ | | +| EntitlementSettings | ✅ | | +| EntitlementTemplate | ✅ | | +| EscalationRules | ✅ | | +| EssentialsSettings | ✅ | | +| EventLogObjectSettings | ✅ | | +| EventSettings | ✅ | | +| EvfSettings | ✅ | | +| ExperienceBundle | ✅ | | +| ExperienceBundleSettings | ✅ | | +| ExperiencePropertyTypeBundle | ✅ | | +| ExplainabilityActionDefinition | ✅ | | +| ExplainabilityActionVersion | ✅ | | +| ExplainabilityMsgTemplate | ✅ | | +| ExpressionSetDefinition | ✅ | | +| ExpressionSetDefinitionVersion | ✅ | | +| ExpressionSetObjectAlias | ✅ | | +| ExtDataTranFieldTemplate | ❌ | Not supported, but support could be added | +| ExtDataTranObjectTemplate | ✅ | | +| ExternalAIModel | ✅ | | +| ExternalAuthIdentityProvider | ✅ | | +| ExternalClientAppSettings | ✅ | | +| ExternalClientApplication | ✅ | | +| ExternalCredential | ✅ | | +| ExternalDataConnector | ✅ | | +| ExternalDataSource | ✅ | | +| ExternalDataSrcDescriptor | ❌ | Not supported, but support could be added | +| ExternalDataTranField | ❌ | Not supported, but support could be added | +| ExternalDataTranObject | ✅ | | +| ExternalDocStorageConfig | ✅ | | +| ExternalServiceRegistration | ✅ | | +| ExtlClntAppConfigurablePolicies | ✅ | | +| ExtlClntAppGlobalOauthSettings | ✅ | | +| ExtlClntAppMobileConfigurablePolicies | ✅ | | +| ExtlClntAppMobileSettings | ✅ | | +| ExtlClntAppNotificationSettings | ✅ | | +| ExtlClntAppOauthConfigurablePolicies | ✅ | | +| ExtlClntAppOauthSettings | ✅ | | +| ExtlClntAppPushConfigurablePolicies | ⚠️ | Supports deploy/retrieve but not source tracking | +| ExtlClntAppPushSettings | ✅ | | +| FeatureParameterBoolean | ✅ | | +| FeatureParameterDate | ✅ | | +| FeatureParameterInteger | ✅ | | +| FieldRestrictionRule | ✅ | | +| FieldServiceMobileExtension | ✅ | | +| FieldServiceSettings | ✅ | | +| FieldSet | ✅ | | +| FieldSrcTrgtRelationship | ✅ | | +| FileUploadAndDownloadSecuritySettings | ✅ | | +| FilesConnectSettings | ✅ | | +| FlexiPage | ✅ | | +| Flow | ✅ | | +| FlowCategory | ✅ | | +| FlowDefinition | ⚠️ | Supports deploy/retrieve but not source tracking | +| FlowSettings | ✅ | | +| FlowTest | ✅ | | +| ForecastingFilter | ✅ | | +| ForecastingFilterCondition | ✅ | | +| ForecastingGroup | ✅ | | +| ForecastingObjectListSettings | ✅ | | +| ForecastingSettings | ✅ | | +| ForecastingSourceDefinition | ✅ | | +| ForecastingType | ✅ | | +| ForecastingTypeSource | ✅ | | +| FormulaSettings | ✅ | | +| FuelType | ✅ | | +| FuelTypeSustnUom | ✅ | | +| FunctionReference | ⚠️ | Supports deploy/retrieve but not source tracking | +| FundraisingConfig | ✅ | | +| GatewayProviderPaymentMethodType | ✅ | | +| GenAiFunction | ✅ | | +| GenAiPlanner | ✅ | | +| GenAiPlugin | ✅ | | +| GenAiPluginInstructionDef | ❌ | Not supported, but support could be added | +| GlobalValueSet | ✅ | | +| GlobalValueSetTranslation | ✅ | | +| GoogleAppsSettings | ✅ | | +| Group | ✅ | | +| HerokuIntegrationSettings | ✅ | | +| HighVelocitySalesSettings | ✅ | | +| HomePageComponent | ✅ | | +| HomePageLayout | ✅ | | +| IPAddressRange | ✅ | | +| Icon | ✅ | | +| IdeasSettings | ✅ | | +| IdentityProviderSettings | ✅ | | +| IdentityVerificationProcDef | ✅ | | +| IframeWhiteListUrlSettings | ✅ | | +| InboundCertificate | ✅ | | +| InboundNetworkConnection | ✅ | | +| IncidentMgmtSettings | ✅ | | +| IncludeEstTaxInQuoteCPQSettings | ✅ | | +| IncludeEstTaxInQuoteSettings | ✅ | | +| Index | ⚠️ | Supports deploy/retrieve but not source tracking | +| IndustriesAutomotiveSettings | ✅ | | +| IndustriesContextSettings | ✅ | | +| IndustriesEinsteinFeatureSettings | ✅ | | +| IndustriesEventOrchSettings | ✅ | | +| IndustriesFieldServiceSettings | ✅ | | +| IndustriesGamificationSettings | ✅ | | +| IndustriesLoyaltySettings | ✅ | | +| IndustriesLsCommercialSettings | ✅ | | +| IndustriesManufacturingSettings | ✅ | | +| IndustriesPricingSettings | ✅ | | +| IndustriesRatingSettings | ✅ | | +| IndustriesSettings | ✅ | | +| IndustriesUnifiedPromotionsSettings | ✅ | | +| IndustriesUsageSettings | ✅ | | +| InstalledPackage | ⚠️ | Supports deploy/retrieve but not source tracking | +| IntegrationProviderDef | ✅ | | +| InterestTaggingSettings | ✅ | | +| InternalDataConnector | ✅ | | +| InvLatePymntRiskCalcSettings | ✅ | | +| InventorySettings | ✅ | | +| InvocableActionSettings | ✅ | | +| IoTSettings | ✅ | | +| KeywordList | ✅ | | +| KnowledgeGenerationSettings | ✅ | | +| KnowledgeSettings | ✅ | | +| LanguageSettings | ✅ | | +| LargeQuotesandOrdersForRlmSettings | ✅ | | +| Layout | ✅ | | +| LeadConfigSettings | ✅ | | +| LeadConvertSettings | ✅ | | +| LearningAchievementConfig | ✅ | | +| LearningItemType | ✅ | | +| Letterhead | ✅ | | +| LicensingSettings | ✅ | | +| LightningBolt | ✅ | | +| LightningComponentBundle | ✅ | | +| LightningExperienceSettings | ✅ | | +| LightningExperienceTheme | ✅ | | +| LightningMessageChannel | ✅ | | +| LightningOnboardingConfig | ✅ | | +| ListView | ✅ | | +| LiveAgentSettings | ✅ | | +| LiveChatAgentConfig | ✅ | | +| LiveChatButton | ✅ | | +| LiveChatDeployment | ✅ | | +| LiveChatSensitiveDataRule | ✅ | | +| LiveMessageSettings | ✅ | | +| LocationUse | ✅ | | +| LoyaltyProgramSetup | ⚠️ | Supports deploy/retrieve but not source tracking | +| MacroSettings | ✅ | | +| MailMergeSettings | ✅ | | +| ManagedContentType | ⚠️ | Supports deploy/retrieve but not source tracking | +| ManagedEventSubscription | ✅ | | +| ManagedTopics | ✅ | | +| MapsAndLocationSettings | ✅ | | +| MarketSegmentDefinition | ✅ | | +| MarketingAppExtActivity | ❌ | Not supported, but support could be added | +| MarketingAppExtension | ✅ | | +| MatchingRules | ✅ | | +| MediaAdSalesSettings | ✅ | | +| MeetingsSettings | ✅ | | +| MessagingChannel | ⚠️ | Supports deploy/retrieve but not source tracking | +| MfgProgramTemplate | ✅ | | +| MfgServiceConsoleSettings | ✅ | | +| MilestoneType | ✅ | | +| MktCalcInsightObjectDef | ✅ | | +| MktDataConnection | ✅ | | +| MktDataConnectionParam | ❌ | Not supported, but support could be added | +| MktDataConnectionSrcParam | ✅ | | +| MktDataTranObject | ✅ | | +| MlDomain | ✅ | | +| MobSecurityCertPinConfig | ✅ | | +| MobileApplicationDetail | ✅ | | +| MobileSecurityAssignment | ✅ | | +| MobileSecurityPolicy | ✅ | | +| MobileSettings | ✅ | | +| ModerationRule | ✅ | | +| MutingPermissionSet | ✅ | | +| MyDomainDiscoverableLogin | ✅ | | +| MyDomainSettings | ✅ | | +| NameSettings | ✅ | | +| NamedCredential | ✅ | | +| NavigationMenu | ✅ | | +| Network | ✅ | | +| NetworkBranding | ✅ | | +| NotificationTypeConfig | ✅ | | +| NotificationsSettings | ✅ | | +| OauthCustomScope | ✅ | | +| OauthOidcSettings | ✅ | | +| OauthTokenExchangeHandler | ✅ | | +| ObjectHierarchyRelationship | ✅ | | +| ObjectLinkingSettings | ✅ | | +| ObjectSourceTargetMap | ✅ | | +| OcrSampleDocument | ✅ | | +| OcrTemplate | ✅ | | +| OmniChannelPricingSettings | ✅ | | +| OmniChannelSettings | ✅ | | +| OmniDataTransform | ⚠️ | Supports deploy/retrieve but not source tracking | +| OmniExtTrackingDef | ⚠️ | Supports deploy/retrieve but not source tracking | +| OmniIntegrationProcedure | ⚠️ | Supports deploy/retrieve but not source tracking | +| OmniInteractionAccessConfig | ⚠️ | Supports deploy/retrieve but not source tracking | +| OmniInteractionConfig | ⚠️ | Supports deploy/retrieve but not source tracking | +| OmniScript | ⚠️ | Supports deploy/retrieve but not source tracking | +| OmniSupervisorConfig | ✅ | | +| OmniTrackingGroup | ⚠️ | Supports deploy/retrieve but not source tracking | +| OmniUiCard | ⚠️ | Supports deploy/retrieve but not source tracking | +| OnlineSalesSettings | ✅ | | +| OpportunityScoreSettings | ✅ | | +| OpportunitySettings | ✅ | | +| OrderManagementSettings | ✅ | | +| OrderSettings | ✅ | | +| OrgSettings | ✅ | | +| OutboundNetworkConnection | ✅ | | +| PardotEinsteinSettings | ✅ | | +| PardotSettings | ✅ | | +| ParticipantRole | ✅ | | +| PartyDataModelSettings | ✅ | | +| PathAssistant | ✅ | | +| PathAssistantSettings | ✅ | | +| PaymentGatewayProvider | ✅ | | +| PaymentsManagementEnabledSettings | ✅ | | +| PaymentsSettings | ✅ | | +| PermissionSet | ✅ | | +| PermissionSetGroup | ✅ | | +| PermissionSetLicenseDefinition | ✅ | | +| PersonAccountOwnerPowerUser | ✅ | | +| PicklistSettings | ✅ | | +| PicklistValue | ❌ | Not supported, but support could be added | +| PipelineInspMetricConfig | ✅ | | +| PlatformCachePartition | ✅ | | +| PlatformEventChannel | ✅ | | +| PlatformEventChannelMember | ✅ | | +| PlatformEventSettings | ✅ | | +| PlatformEventSubscriberConfig | ✅ | | +| PlatformSlackSettings | ✅ | | +| PortalDelegablePermissionSet | ✅ | | +| PortalsSettings | ✅ | | +| PostTemplate | ✅ | | +| PredictionBuilderSettings | ✅ | | +| PresenceDeclineReason | ✅ | | +| PresenceUserConfig | ✅ | | +| PricingActionParameters | ✅ | | +| PricingRecipe | ✅ | | +| PrivacySettings | ✅ | | +| ProcessFlowMigration | ✅ | | +| ProductAttrDisplayConfig | ✅ | | +| ProductAttributeSet | ✅ | | +| ProductConfiguratorSettings | ✅ | | +| ProductDiscoverySettings | ✅ | | +| ProductSettings | ✅ | | +| ProductSpecificationRecType | ✅ | | +| ProductSpecificationType | ✅ | | +| Profile | ✅ | | +| ProfilePasswordPolicy | ✅ | | +| ProfileSessionSetting | ✅ | | +| Prompt | ✅ | | +| PublicKeyCertificate | ⚠️ | Supports deploy/retrieve but not source tracking | +| PublicKeyCertificateSet | ⚠️ | Supports deploy/retrieve but not source tracking | +| Queue | ✅ | | +| QueueRoutingConfig | ✅ | | +| QuickAction | ✅ | | +| QuickTextSettings | ✅ | | +| QuoteSettings | ✅ | | +| RealTimeEventSettings | ✅ | | +| RecAlrtDataSrcExpSetDef | ✅ | | +| RecommendationBuilderSettings | ✅ | | +| RecommendationStrategy | ✅ | | +| RecordActionDeployment | ✅ | | +| RecordAggregationDefinition | ✅ | | +| RecordAlertCategory | ✅ | | +| RecordAlertDataSource | ✅ | | +| RecordAlertTemplate | ✅ | | +| RecordPageSettings | ✅ | | +| RecordType | ✅ | | +| RedirectWhitelistUrl | ✅ | | +| ReferencedDashboard | ✅ | | +| ReferralMarketingSettings | ✅ | | +| RegisteredExternalService | ✅ | | +| RelatedRecordAssocCriteria | ✅ | | +| RelationshipGraphDefinition | ✅ | | +| RemoteSiteSetting | ✅ | | +| Report | ✅ | | +| ReportFolder | ✅ | | +| ReportType | ✅ | | +| RestrictionRule | ✅ | | +| RetailExecutionSettings | ✅ | | +| RetrievalSummaryDefinition | ✅ | | +| RevenueManagementSettings | ✅ | | +| Role | ✅ | | +| SalesAgreementSettings | ✅ | | +| SalesWorkQueueSettings | ✅ | | +| SamlSsoConfig | ✅ | | +| SandboxSettings | ✅ | | +| SceGlobalModelOptOutSettings | ✅ | | +| SchedulingObjective | ✅ | | +| SchedulingRule | ✅ | | +| SchemaSettings | ✅ | | +| ScoreCategory | ✅ | | +| SearchCustomization | ⚠️ | Supports deploy/retrieve but not source tracking | +| SearchOrgWideObjectConfig | ⚠️ | Supports deploy/retrieve but not source tracking | +| SearchSettings | ✅ | | +| SecuritySettings | ✅ | | +| ServiceAISetupDefinition | ✅ | | +| ServiceAISetupField | ✅ | | +| ServiceChannel | ✅ | | +| ServiceCloudVoiceSettings | ✅ | | +| ServicePresenceStatus | ✅ | | +| ServiceProcess | ✅ | | +| ServiceSetupAssistantSettings | ✅ | | +| SharingCriteriaRule | ✅ | | +| SharingGuestRule | ✅ | | +| SharingOwnerRule | ✅ | | +| SharingReason | ✅ | | +| SharingRules | ⚠️ | Supports deploy/retrieve but not source tracking | +| SharingSet | ✅ | | +| SharingSettings | ✅ | | +| SharingTerritoryRule | ✅ | | +| SiteDotCom | ✅ | | +| SiteSettings | ✅ | | +| Skill | ✅ | | +| SkillType | ✅ | | +| SlackApp | ✅ | | +| SocialCustomerServiceSettings | ✅ | | +| SourceTrackingSettings | ✅ | | +| StageDefinition | ✅ | | +| StandardValue | ❌ | Not supported, but support could be added | +| StandardValueSet | ✅ | | +| StandardValueSetTranslation | ✅ | | +| StaticResource | ✅ | | +| StnryAssetEnvSrcCnfg | ✅ | | +| StreamingAppDataConnector | ✅ | | +| SubscriptionManagementSettings | ✅ | | +| SurveySettings | ✅ | | +| SustainabilityUom | ✅ | | +| SustnUomConversion | ✅ | | +| SvcCatalogCategory | ✅ | | +| SvcCatalogFilterCriteria | ✅ | | +| SvcCatalogFulfillmentFlow | ✅ | | +| SvcCatalogItemDef | ✅ | | +| SynonymDictionary | ✅ | | +| SystemNotificationSettings | ✅ | | +| Territory | ✅ | | +| Territory2 | ✅ | | +| Territory2Model | ✅ | | +| Territory2Rule | ✅ | | +| Territory2Settings | ✅ | | +| Territory2Type | ✅ | | +| TimeSheetTemplate | ✅ | | +| TimelineObjectDefinition | ✅ | | +| TopicsForObjects | ✅ | | +| TrailheadSettings | ✅ | | +| TransactionSecurityPolicy | ✅ | | +| Translations | ✅ | | +| TrialOrgSettings | ✅ | | +| UIObjectRelationConfig | ✅ | | +| UiFormatSpecificationSet | ✅ | | +| UiPlugin | ✅ | | +| UserAccessPolicy | ✅ | | +| UserAuthCertificate | ✅ | | +| UserCriteria | ✅ | | +| UserEngagementSettings | ✅ | | +| UserInterfaceSettings | ✅ | | +| UserManagementSettings | ✅ | | +| UserProvisioningConfig | ✅ | | +| ValidationRule | ✅ | | +| VehicleAssetEmssnSrcCnfg | ✅ | | +| ViewDefinition | ✅ | | +| VirtualVisitConfig | ✅ | | +| VoiceSettings | ✅ | | +| WarrantyLifecycleMgmtSettings | ✅ | | +| WaveAnalyticAssetCollection | ✅ | | +| WaveApplication | ✅ | | +| WaveComponent | ✅ | | +| WaveDashboard | ✅ | | +| WaveDataflow | ✅ | | +| WaveDataset | ✅ | | +| WaveLens | ✅ | | +| WaveRecipe | ✅ | | +| WaveTemplateBundle | ✅ | | +| WaveXmd | ✅ | | +| Web3Settings | ✅ | | +| WebLink | ✅ | | +| WebStoreBundle | ✅ | | +| WebStoreTemplate | ✅ | | +| WebToXSettings | ✅ | | +| WorkDotComSettings | ✅ | | +| WorkSkillRouting | ✅ | | +| Workflow | ✅ | | +| WorkflowAlert | ✅ | | +| WorkflowFieldUpdate | ✅ | | +| WorkflowFlowAction | ❌ | Not supported, but support could be added | +| WorkflowFlowAutomation | ❌ | Not supported, but support could be added | +| WorkflowKnowledgePublish | ✅ | | +| WorkflowOutboundMessage | ✅ | | +| WorkflowRule | ✅ | | +| WorkflowSend | ✅ | | +| WorkflowTask | ✅ | | +| WorkforceEngagementSettings | ✅ | | ## Next Release (v63) -> **Note** -> v63 coverage not available at this time +v63 introduces the following new types. Here's their current level of support + +| Metadata Type | Support | Notes | +| :---------------------------------------- | :------ | :--------------------------------------------------------------- | +| AccountPlanObjMeasCalcDef | ❌ | Not supported, but support could be added | +| AiPluginUtteranceDef | ❌ | Not supported, but support could be added | +| AppFrameworkTemplateBundle | ✅ | | +| CommunicationChannelType | ❌ | Not supported, but support could be added | +| CustomFieldDisplay | ❌ | Not supported, but support could be added | +| EducationCloudPicklistCnfg | ❌ | Not supported, but support could be added | +| ExtlClntAppSamlConfigurablePolicies | ✅ | | +| FieldMappingConfig | ❌ | Not supported, but support could be added | +| FieldMappingConfigItem | ❌ | Not supported, but support could be added | +| IndustriesChannelPartnerInventorySettings | ✅ | | +| LaborCostOptimizationSettings | ✅ | | +| LifeSciConfigCategory | ❌ | Not supported, but support could be added | +| LightningTypeBundle | ❌ | Not supported, but support could be added (but not for tracking) | +| OmniStudioSettings | ✅ | | +| ProcedureOutputResolution | ❌ | Not supported, but support could be added (but not for tracking) | +| RelatedRecordAccessDef | ❌ | Not supported, but support could be added | +| TransactionProcessingType | ❌ | Not supported, but support could be added | ## Additional Types -> The following types are supported by this library but not in the coverage reports for either version. These are typically +> The following types are supported by this library but not in the coverage reports for either version. These are typically > > 1. types that have been removed from the metadata API but were supported in previous versions > 1. types that are available for pilots but not officially part of the metadata API (use with caution) @@ -680,7 +697,6 @@ To contribute a new metadata type, please see the [Contributing Metadata Types t - EventType - ExpressionSetMessageToken - extDataTranFieldTemplate -- ExtlClntAppSamlConfigurablePolicies - ExtlClntAppSampleConfigurablePolicies - ExtlClntAppSampleSettings - Form diff --git a/src/registry/metadataRegistry.json b/src/registry/metadataRegistry.json index bbc528082c..d9435b0a1f 100644 --- a/src/registry/metadataRegistry.json +++ b/src/registry/metadataRegistry.json @@ -63,7 +63,8 @@ "siteDotComSites": "sitedotcom", "sites": "customsite", "staticresources": "staticresource", - "waveTemplates": "wavetemplatebundle" + "waveTemplates": "wavetemplatebundle", + "appTemplates": "appframeworktemplatebundle" }, "suffixes": { "Canvas": "canvasmetadata", @@ -521,7 +522,11 @@ "xml": "emailservicesfunction", "xorghub": "xorghub", "ecaPush": "extlclntapppushsettings", - "ecaPushPlcy": "extlclntapppushconfigurablepolicies" + "ecaPushPlcy": "extlclntapppushconfigurablepolicies", + "ChoiceList": "choicelist", + "ConvIntelligenceSignalRule": "convintelligencesignalrule", + "PublicKeyCertificate": "publickeycertificate", + "PublicKeyCertificateSet": "publickeycertificateset" }, "types": { "accesscontrolpolicy": { @@ -4639,6 +4644,49 @@ "directoryName": "extlClntAppPushPolicies", "inFolder": false, "strictDirectoryName": false + }, + "appframeworktemplatebundle": { + "directoryName": "appTemplates", + "id": "appframeworktemplatebundle", + "name": "AppFrameworkTemplateBundle", + "inFolder": false, + "strategies": { + "adapter": "bundle" + }, + "strictDirectoryName": true, + "supportsPartialDelete": true + }, + "choicelist": { + "id": "choicelist", + "name": "ChoiceList", + "suffix": "ChoiceList", + "directoryName": "ChoiceList", + "inFolder": false, + "strictDirectoryName": false + }, + "convintelligencesignalrule": { + "id": "convintelligencesignalrule", + "name": "ConvIntelligenceSignalRule", + "suffix": "ConvIntelligenceSignalRule", + "directoryName": "ConvIntelligenceSignalRule", + "inFolder": false, + "strictDirectoryName": false + }, + "publickeycertificate": { + "id": "publickeycertificate", + "name": "PublicKeyCertificate", + "suffix": "PublicKeyCertificate", + "directoryName": "PublicKeyCertificate", + "inFolder": false, + "strictDirectoryName": false + }, + "publickeycertificateset": { + "id": "publickeycertificateset", + "name": "PublicKeyCertificateSet", + "suffix": "PublicKeyCertificateSet", + "directoryName": "PublicKeyCertificateSet", + "inFolder": false, + "strictDirectoryName": false } } } diff --git a/src/utils/filePathGenerator.ts b/src/utils/filePathGenerator.ts index 273720fdb0..3a1a10641b 100644 --- a/src/utils/filePathGenerator.ts +++ b/src/utils/filePathGenerator.ts @@ -112,17 +112,26 @@ export const filePathsFromMetadataComponent = ( // lwc, aura, waveTemplate, experiencePropertyType if (type.strategies?.adapter === 'bundle') { - const mappings = new Map([ - ['ExperiencePropertyTypeBundle', join(packageDirWithTypeDir, `${fullName}${sep}schema.json`)], - ['WaveTemplateBundle', join(packageDirWithTypeDir, `${fullName}${sep}template-info.json`)], - ['LightningComponentBundle', join(packageDirWithTypeDir, `${fullName}${sep}${fullName}.js${META_XML_SUFFIX}`)], - ['AuraDefinitionBundle', join(packageDirWithTypeDir, `${fullName}${sep}${fullName}.cmp${META_XML_SUFFIX}`)], + const mappings = new Map([ + ['ExperiencePropertyTypeBundle', [join(packageDirWithTypeDir, `${fullName}${sep}schema.json`)]], + ['WaveTemplateBundle', [join(packageDirWithTypeDir, `${fullName}${sep}template-info.json`)]], + ['LightningComponentBundle', [join(packageDirWithTypeDir, `${fullName}${sep}${fullName}.js${META_XML_SUFFIX}`)]], + ['AuraDefinitionBundle', [join(packageDirWithTypeDir, `${fullName}${sep}${fullName}.cmp${META_XML_SUFFIX}`)]], + [ + 'AppFrameworkTemplateBundle', + [ + join(packageDirWithTypeDir, `${fullName}${sep}template-info.json`), + join(packageDirWithTypeDir, `${fullName}${sep}layout.json`), + ], + ], ]); + const matched = mappings.get(type.name); if (!matched) { throw messages.createError('unsupportedBundleType', [type.name]); } - return [matched]; + + return matched; } throw messages.createError('filePathGeneratorNoTypeSupport', [type.name]); diff --git a/test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-md-files.expected/appTemplates/test_template/layout.json b/test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-md-files.expected/appTemplates/test_template/layout.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-md-files.expected/appTemplates/test_template/layout.json @@ -0,0 +1 @@ +{} diff --git a/test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-md-files.expected/appTemplates/test_template/template-info.json b/test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-md-files.expected/appTemplates/test_template/template-info.json new file mode 100644 index 0000000000..3e6f4d1d38 --- /dev/null +++ b/test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-md-files.expected/appTemplates/test_template/template-info.json @@ -0,0 +1,11 @@ +{ + "templateType": "App", + "label": "my test template", + "name": "test_template", + "namespace": null, + "assetVersion": 63.0, + "maxAppCount": null, + "layoutDefinition": "layout.json", + "tags": {}, + "chainDefinitions": [] +} diff --git a/test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-md-files.expected/package.xml b/test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-md-files.expected/package.xml new file mode 100644 index 0000000000..7640ddc3cd --- /dev/null +++ b/test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-md-files.expected/package.xml @@ -0,0 +1,8 @@ + + + + force-app + AppFrameworkTemplateBundle + + 62.0 + diff --git a/test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-source-files.expected/force-app/main/default/appTemplates/test_template/layout.json b/test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-source-files.expected/force-app/main/default/appTemplates/test_template/layout.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-source-files.expected/force-app/main/default/appTemplates/test_template/layout.json @@ -0,0 +1 @@ +{} diff --git a/test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-source-files.expected/force-app/main/default/appTemplates/test_template/template-info.json b/test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-source-files.expected/force-app/main/default/appTemplates/test_template/template-info.json new file mode 100644 index 0000000000..3e6f4d1d38 --- /dev/null +++ b/test/snapshot/sampleProjects/appTemplates/__snapshots__/verify-source-files.expected/force-app/main/default/appTemplates/test_template/template-info.json @@ -0,0 +1,11 @@ +{ + "templateType": "App", + "label": "my test template", + "name": "test_template", + "namespace": null, + "assetVersion": 63.0, + "maxAppCount": null, + "layoutDefinition": "layout.json", + "tags": {}, + "chainDefinitions": [] +} diff --git a/test/snapshot/sampleProjects/appTemplates/originalMdapi/appTemplates/test_template/layout.json b/test/snapshot/sampleProjects/appTemplates/originalMdapi/appTemplates/test_template/layout.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/test/snapshot/sampleProjects/appTemplates/originalMdapi/appTemplates/test_template/layout.json @@ -0,0 +1 @@ +{} diff --git a/test/snapshot/sampleProjects/appTemplates/originalMdapi/appTemplates/test_template/template-info.json b/test/snapshot/sampleProjects/appTemplates/originalMdapi/appTemplates/test_template/template-info.json new file mode 100644 index 0000000000..3e6f4d1d38 --- /dev/null +++ b/test/snapshot/sampleProjects/appTemplates/originalMdapi/appTemplates/test_template/template-info.json @@ -0,0 +1,11 @@ +{ + "templateType": "App", + "label": "my test template", + "name": "test_template", + "namespace": null, + "assetVersion": 63.0, + "maxAppCount": null, + "layoutDefinition": "layout.json", + "tags": {}, + "chainDefinitions": [] +} diff --git a/test/snapshot/sampleProjects/appTemplates/sfdx-project.json b/test/snapshot/sampleProjects/appTemplates/sfdx-project.json new file mode 100644 index 0000000000..fa27b58b41 --- /dev/null +++ b/test/snapshot/sampleProjects/appTemplates/sfdx-project.json @@ -0,0 +1,11 @@ +{ + "packageDirectories": [ + { + "default": true, + "path": "force-app" + } + ], + "name": "appTemplatesTestProject", + "namespace": "", + "sourceApiVersion": "62.0" +} diff --git a/test/snapshot/sampleProjects/appTemplates/snapshots.test.ts b/test/snapshot/sampleProjects/appTemplates/snapshots.test.ts new file mode 100644 index 0000000000..58078a6760 --- /dev/null +++ b/test/snapshot/sampleProjects/appTemplates/snapshots.test.ts @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2024, salesforce.com, inc. + * All rights reserved. + * Licensed under the BSD 3-Clause license. + * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause + */ +import * as fs from 'node:fs'; +import * as path from 'node:path'; +import { + FORCE_APP, + MDAPI_OUT, + dirsAreIdentical, + fileSnap, + mdapiToSource, + sourceToMdapi, +} from '../../helper/conversions'; + +// we don't want failing tests outputting over each other +/* eslint-disable no-await-in-loop */ + +describe('appTemplates', () => { + const testDir = path.join('test', 'snapshot', 'sampleProjects', 'appTemplates'); + let sourceFiles: string[]; + let mdFiles: string[]; + + before(async () => { + sourceFiles = await mdapiToSource(testDir); + mdFiles = await sourceToMdapi(testDir); + }); + + it('verify source files', async () => { + for (const file of sourceFiles) { + await fileSnap(file, testDir); + } + dirsAreIdentical( + path.join(testDir, FORCE_APP), + path.join(testDir, '__snapshots__', 'verify-source-files.expected', FORCE_APP) + ); + }); + + it('verify md files', async () => { + for (const file of mdFiles) { + await fileSnap(file, testDir); + } + }); + + after(async () => { + await Promise.all([ + fs.promises.rm(path.join(testDir, FORCE_APP), { recursive: true, force: true }), + fs.promises.rm(path.join(testDir, MDAPI_OUT), { recursive: true, force: true }), + ]); + }); +}); diff --git a/test/utils/filePathGenerator.test.ts b/test/utils/filePathGenerator.test.ts index 910659156a..3b33cf77ef 100644 --- a/test/utils/filePathGenerator.test.ts +++ b/test/utils/filePathGenerator.test.ts @@ -136,6 +136,19 @@ const testData = { }, ], }, + bundleAppTemplates: { + fullName: 'test_template', + typeName: 'AppFrameworkTemplateBundle', + expectedFilePaths: [ + getFilePath('appTemplates/test_template/template-info.json'), + getFilePath('appTemplates/test_template/layout.json'), + ], + expectedComponents: [ + { + content: getFilePath('appTemplates/test_template'), + }, + ], + }, nonDecomposedExplicit: { fullName: 'CustomLabels', typeName: 'CustomLabels', @@ -304,6 +317,10 @@ describe('generating virtual tree from component name/type', () => { it('waveTemplate', () => { runTest(testData.bundleWave); }); + + it('appFrameworkTemplate', () => { + runTest(testData.bundleAppTemplates); + }); }); describe('adapter = nondecomposed', () => {