mcdev 7.0.4 → 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/ISSUE_TEMPLATE/bug.yml +1 -0
- package/.husky/post-checkout +1 -1
- package/.husky/post-merge +7 -1
- package/.husky/pre-commit +2 -0
- package/@types/lib/Builder.d.ts.map +1 -1
- package/@types/lib/Deployer.d.ts +3 -0
- package/@types/lib/Deployer.d.ts.map +1 -1
- package/@types/lib/index.d.ts +70 -19
- package/@types/lib/index.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Asset.d.ts +53 -16
- package/@types/lib/metadataTypes/Asset.d.ts.map +1 -1
- package/@types/lib/metadataTypes/AttributeGroup.d.ts +3 -0
- package/@types/lib/metadataTypes/AttributeGroup.d.ts.map +1 -1
- package/@types/lib/metadataTypes/AttributeSet.d.ts +5 -0
- package/@types/lib/metadataTypes/AttributeSet.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Automation.d.ts +11 -0
- package/@types/lib/metadataTypes/Automation.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Campaign.d.ts +1 -0
- package/@types/lib/metadataTypes/Campaign.d.ts.map +1 -1
- package/@types/lib/metadataTypes/ContentArea.d.ts +1 -0
- package/@types/lib/metadataTypes/ContentArea.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtension.d.ts +5 -2
- package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtensionField.d.ts +3 -4
- package/@types/lib/metadataTypes/DataExtensionField.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtensionTemplate.d.ts +1 -0
- package/@types/lib/metadataTypes/DataExtensionTemplate.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtract.d.ts +1 -0
- package/@types/lib/metadataTypes/DataExtract.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtractType.d.ts +1 -0
- package/@types/lib/metadataTypes/DataExtractType.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DeliveryProfile.d.ts +1 -0
- package/@types/lib/metadataTypes/DeliveryProfile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Discovery.d.ts +1 -0
- package/@types/lib/metadataTypes/Discovery.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Email.d.ts +1 -0
- package/@types/lib/metadataTypes/Email.d.ts.map +1 -1
- package/@types/lib/metadataTypes/EmailSend.d.ts +8 -0
- package/@types/lib/metadataTypes/EmailSend.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Event.d.ts +3 -0
- package/@types/lib/metadataTypes/Event.d.ts.map +1 -1
- package/@types/lib/metadataTypes/FileLocation.d.ts +1 -0
- package/@types/lib/metadataTypes/FileLocation.d.ts.map +1 -1
- package/@types/lib/metadataTypes/FileTransfer.d.ts +1 -0
- package/@types/lib/metadataTypes/FileTransfer.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Filter.d.ts +1 -0
- package/@types/lib/metadataTypes/Filter.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Folder.d.ts +39 -25
- package/@types/lib/metadataTypes/Folder.d.ts.map +1 -1
- package/@types/lib/metadataTypes/ImportFile.d.ts +5 -0
- package/@types/lib/metadataTypes/ImportFile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Journey.d.ts +42 -3
- package/@types/lib/metadataTypes/Journey.d.ts.map +1 -1
- package/@types/lib/metadataTypes/List.d.ts +1 -0
- package/@types/lib/metadataTypes/List.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MetadataType.d.ts +50 -3
- package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileCode.d.ts +1 -0
- package/@types/lib/metadataTypes/MobileCode.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileKeyword.d.ts +9 -0
- package/@types/lib/metadataTypes/MobileKeyword.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileMessage.d.ts +4 -0
- package/@types/lib/metadataTypes/MobileMessage.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Query.d.ts +3 -0
- package/@types/lib/metadataTypes/Query.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Role.d.ts +1 -0
- package/@types/lib/metadataTypes/Role.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Script.d.ts +3 -1
- package/@types/lib/metadataTypes/Script.d.ts.map +1 -1
- package/@types/lib/metadataTypes/SendClassification.d.ts +3 -0
- package/@types/lib/metadataTypes/SendClassification.d.ts.map +1 -1
- package/@types/lib/metadataTypes/SenderProfile.d.ts +1 -6
- package/@types/lib/metadataTypes/SenderProfile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalEmail.d.ts +6 -0
- package/@types/lib/metadataTypes/TransactionalEmail.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalMessage.d.ts +1 -0
- package/@types/lib/metadataTypes/TransactionalMessage.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalPush.d.ts +3 -0
- package/@types/lib/metadataTypes/TransactionalPush.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalSMS.d.ts +4 -0
- package/@types/lib/metadataTypes/TransactionalSMS.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TriggeredSend.d.ts +6 -6
- package/@types/lib/metadataTypes/TriggeredSend.d.ts.map +1 -1
- package/@types/lib/metadataTypes/User.d.ts +1 -0
- package/@types/lib/metadataTypes/User.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Verification.d.ts +3 -0
- package/@types/lib/metadataTypes/Verification.d.ts.map +1 -1
- package/@types/lib/metadataTypes/definitions/Asset.definition.d.ts +24 -14
- package/@types/lib/metadataTypes/definitions/AttributeGroup.definition.d.ts +3 -0
- package/@types/lib/metadataTypes/definitions/AttributeSet.definition.d.ts +5 -0
- package/@types/lib/metadataTypes/definitions/Automation.definition.d.ts +16 -0
- package/@types/lib/metadataTypes/definitions/Campaign.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/ContentArea.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/DataExtension.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/DataExtensionField.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/DataExtensionTemplate.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/DataExtract.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/DataExtractType.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/DeliveryProfile.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/Discovery.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/Email.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/EmailSend.definition.d.ts +8 -0
- package/@types/lib/metadataTypes/definitions/Event.definition.d.ts +3 -0
- package/@types/lib/metadataTypes/definitions/FileLocation.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/FileTransfer.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/Filter.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/Folder.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/ImportFile.definition.d.ts +5 -0
- package/@types/lib/metadataTypes/definitions/Journey.definition.d.ts +13 -0
- package/@types/lib/metadataTypes/definitions/List.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/MobileCode.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/MobileKeyword.definition.d.ts +9 -0
- package/@types/lib/metadataTypes/definitions/MobileMessage.definition.d.ts +4 -0
- package/@types/lib/metadataTypes/definitions/Query.definition.d.ts +3 -0
- package/@types/lib/metadataTypes/definitions/Role.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/Script.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/SendClassification.definition.d.ts +3 -0
- package/@types/lib/metadataTypes/definitions/SenderProfile.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/TransactionalEmail.definition.d.ts +6 -0
- package/@types/lib/metadataTypes/definitions/TransactionalMessage.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/TransactionalPush.definition.d.ts +3 -0
- package/@types/lib/metadataTypes/definitions/TransactionalSMS.definition.d.ts +4 -0
- package/@types/lib/metadataTypes/definitions/TriggeredSend.definition.d.ts +6 -0
- package/@types/lib/metadataTypes/definitions/User.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/Verification.definition.d.ts +3 -0
- package/@types/lib/util/cache.d.ts +10 -0
- package/@types/lib/util/cache.d.ts.map +1 -1
- package/@types/lib/util/cli.d.ts +3 -6
- package/@types/lib/util/cli.d.ts.map +1 -1
- package/@types/lib/util/config.d.ts.map +1 -1
- package/@types/lib/util/devops.d.ts.map +1 -1
- package/@types/lib/util/init.config.d.ts.map +1 -1
- package/@types/lib/util/init.d.ts.map +1 -1
- package/@types/lib/util/init.git.d.ts.map +1 -1
- package/@types/lib/util/replaceContentBlockReference.d.ts +27 -4
- package/@types/lib/util/replaceContentBlockReference.d.ts.map +1 -1
- package/@types/lib/util/util.d.ts +32 -3
- package/@types/lib/util/util.d.ts.map +1 -1
- package/@types/types/mcdev.d.d.ts +87 -0
- package/@types/types/mcdev.d.d.ts.map +1 -1
- package/boilerplate/files/.vscode/settings.json +1 -0
- package/boilerplate/forcedUpdates.json +4 -0
- package/boilerplate/gitignore-template +0 -1
- package/lib/Builder.js +13 -8
- package/lib/Deployer.js +12 -7
- package/lib/cli.js +179 -14
- package/lib/index.js +538 -205
- package/lib/metadataTypes/Asset.js +455 -210
- package/lib/metadataTypes/Automation.js +34 -0
- package/lib/metadataTypes/DataExtension.js +33 -28
- package/lib/metadataTypes/DataExtensionField.js +2 -2
- package/lib/metadataTypes/Event.js +28 -2
- package/lib/metadataTypes/Folder.js +63 -48
- package/lib/metadataTypes/Journey.js +330 -56
- package/lib/metadataTypes/MetadataType.js +269 -57
- package/lib/metadataTypes/MobileKeyword.js +12 -1
- package/lib/metadataTypes/Script.js +4 -3
- package/lib/metadataTypes/SenderProfile.js +17 -5
- package/lib/metadataTypes/TriggeredSend.js +20 -5
- package/lib/metadataTypes/definitions/Asset.definition.js +10 -2
- package/lib/metadataTypes/definitions/AttributeGroup.definition.js +1 -0
- package/lib/metadataTypes/definitions/AttributeSet.definition.js +11 -0
- package/lib/metadataTypes/definitions/Automation.definition.js +9 -0
- package/lib/metadataTypes/definitions/Campaign.definition.js +1 -0
- package/lib/metadataTypes/definitions/ContentArea.definition.js +1 -0
- package/lib/metadataTypes/definitions/DataExtension.definition.js +1 -0
- package/lib/metadataTypes/definitions/DataExtensionField.definition.js +1 -0
- package/lib/metadataTypes/definitions/DataExtensionTemplate.definition.js +1 -0
- package/lib/metadataTypes/definitions/DataExtract.definition.js +2 -1
- package/lib/metadataTypes/definitions/DataExtractType.definition.js +1 -0
- package/lib/metadataTypes/definitions/DeliveryProfile.definition.js +1 -0
- package/lib/metadataTypes/definitions/Discovery.definition.js +1 -0
- package/lib/metadataTypes/definitions/Email.definition.js +1 -0
- package/lib/metadataTypes/definitions/EmailSend.definition.js +8 -0
- package/lib/metadataTypes/definitions/Event.definition.js +1 -0
- package/lib/metadataTypes/definitions/FileLocation.definition.js +1 -0
- package/lib/metadataTypes/definitions/FileTransfer.definition.js +4 -0
- package/lib/metadataTypes/definitions/Filter.definition.js +1 -0
- package/lib/metadataTypes/definitions/Folder.definition.js +10 -8
- package/lib/metadataTypes/definitions/ImportFile.definition.js +8 -1
- package/lib/metadataTypes/definitions/Journey.definition.js +28 -0
- package/lib/metadataTypes/definitions/List.definition.js +1 -0
- package/lib/metadataTypes/definitions/MobileCode.definition.js +1 -0
- package/lib/metadataTypes/definitions/MobileKeyword.definition.js +7 -0
- package/lib/metadataTypes/definitions/MobileMessage.definition.js +9 -0
- package/lib/metadataTypes/definitions/Query.definition.js +3 -0
- package/lib/metadataTypes/definitions/Role.definition.js +1 -0
- package/lib/metadataTypes/definitions/Script.definition.js +1 -0
- package/lib/metadataTypes/definitions/SendClassification.definition.js +4 -0
- package/lib/metadataTypes/definitions/SenderProfile.definition.js +1 -0
- package/lib/metadataTypes/definitions/TransactionalEmail.definition.js +7 -0
- package/lib/metadataTypes/definitions/TransactionalMessage.definition.js +1 -0
- package/lib/metadataTypes/definitions/TransactionalPush.definition.js +3 -0
- package/lib/metadataTypes/definitions/TransactionalSMS.definition.js +4 -0
- package/lib/metadataTypes/definitions/TriggeredSend.definition.js +10 -3
- package/lib/metadataTypes/definitions/User.definition.js +3 -0
- package/lib/metadataTypes/definitions/Verification.definition.js +1 -0
- package/lib/util/cache.js +35 -0
- package/lib/util/cli.js +96 -139
- package/lib/util/config.js +11 -19
- package/lib/util/devops.js +41 -41
- package/lib/util/init.config.js +6 -10
- package/lib/util/init.git.js +43 -57
- package/lib/util/init.js +35 -59
- package/lib/util/replaceContentBlockReference.js +107 -60
- package/lib/util/util.js +90 -4
- package/package.json +14 -13
- package/test/general.test.js +1117 -163
- package/test/mockRoot/.mcdevrc.json +1 -1
- package/test/mockRoot/deploy/testInstance/testBU/event/testNew_event_withExistingDE.event-meta.json +1 -0
- package/test/mockRoot/deploy/testInstance/testBU/event/testNew_event_withSchema.event-meta.json +1 -0
- package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/4912312345678.TESTNEW_KEYWORD.mobileKeyword-meta.json +1 -0
- package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/4912312345678.TESTNEW_KEYWORD_BLOCKED.mobileKeyword-meta.json +1 -0
- package/test/resourceFactory.js +43 -11
- package/test/resources/1111111/dataFolder/retrieve-ContentTypeINshared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +364 -0
- package/test/resources/9999999/asset/{block-1157-retrieve-expected.html → build-asset_htmlblock-expected.html} +1 -1
- package/test/resources/9999999/asset/build-asset_htmlblock-expected.json +29 -0
- package/test/resources/9999999/asset/build-templatebasedemail-expected.json +65 -0
- package/test/resources/9999999/asset/resolveId-1295064-noPath-expected.json +3 -3
- package/test/resources/9999999/asset/resolveId-1295064-withPath-expected.json +3 -3
- package/test/resources/9999999/asset/retrieve-templatebasedemail-expected.json +65 -0
- package/test/resources/9999999/asset/template-emailTemplate-expected.json +20 -0
- package/test/resources/9999999/asset/template-templatebasedemail-expected.json +65 -0
- package/test/resources/9999999/asset/template-testExisting_asset_htmlblock-expected.json +29 -0
- package/test/resources/9999999/asset/testExisting_asset_htmlblock-retrieve-expected.html +23 -0
- package/test/resources/9999999/asset/{block-1157-retrieve-expected.json → testExisting_asset_htmlblock-retrieve-expected.json} +3 -3
- package/test/resources/9999999/asset/testExisting_asset_message-html-rcb-key-expected.html +6 -6
- package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-id-expected.amp +1 -1
- package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-key-expected.amp +4 -4
- package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-name-expected.amp +1 -1
- package/test/resources/9999999/asset/testExisting_asset_message-text-rcb-key-expected.amp +4 -4
- package/test/resources/9999999/asset/v1/content/assets/1295064/get-response.json +4 -4
- package/test/resources/9999999/asset/v1/content/assets/1295065/get-response.json +60 -0
- package/test/resources/9999999/asset/v1/content/assets/1295066/get-response.json +60 -0
- package/test/resources/9999999/asset/v1/content/assets/5289/get-response.json +75 -0
- package/test/resources/9999999/asset/v1/content/assets/808714/get-response.json +3 -3
- package/test/resources/9999999/asset/v1/content/assets/950143/get-response.json +97 -0
- package/test/resources/9999999/asset/v1/content/assets/get-response-customerKey=testExisting_asset.json +1 -1
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN195,196,197,198,199,200,201,202,203,210,211,212,213,3.json +78 -2
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN205,206,230,232,1,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,14,193,194,15,195,196,197,198,199,200,201,202,203,210,211,212,213,3,207,208,209,5,214,4,215,216.json +370 -0
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN205,206,230,232,1,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,14,193,194,15,195,196,197,198,199,200,201,202,203,210,211,212,213,3,215,216,217,218,219,220,221,222.json +243 -0
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN205,206,230,232,1,207,208,209,5.json +229 -0
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN205,206,230,232,1.json +98 -1
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN217,218,219,220,221,222,223,224,225,226,227,228.json +7 -0
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN223,224,225,226,227,228,214,4.json +35 -0
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN223,224,225,226,227,228.json +7 -0
- package/test/resources/9999999/asset/v1/content/assets/query/{post-response-customerKey=mcdev-issue-1157.json → post-response-customerKey=testExisting_asset_htmlblock.json} +2 -2
- package/test/resources/9999999/automation/v1/queries/get-response-Name=testExisting_query.json +24 -0
- package/test/resources/9999999/automation/v1/scripts/get-response-name=testExisting_script.json +17 -0
- package/test/resources/9999999/automation/v1/scripts/get-response.json +2 -2
- package/test/resources/9999999/dataFolder/retrieve-ContentType=asset-shared-QAA-response.xml +70 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentType=asset-shared-response.xml +70 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentType=journey-response.xml +48 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-sha,automatio,dataexten,hidden,journey,list,mysubs,publicati,queryacti,salesforc,shared_da,shared_da,shared_sa,ssjsactiv,synchroni,triggered,triggered,useriniti-response.xml +519 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-sha,dataexten,salesforc,shared_da,shared_da,shared_sa,synchroni,automatio,useriniti,journey,mysubs,list,publicati,queryacti,ssjsactiv,triggered,triggered-response.xml +519 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,journey-response.xml +92 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +115 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,ssjsactivity-response.xml +92 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared-QAA-response.xml +70 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset-shared,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +431 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINautomations,queryactivity-response.xml +70 -0
- package/test/resources/9999999/dataFolder/{retrieve-response.xml → retrieve-ContentTypeINdataextension,hidden,queryactivity,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml} +32 -119
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINdataextension,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +117 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINhidden,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +46 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINshared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +251 -0
- package/test/resources/9999999/dataFolder/retrieve-response-.xml +519 -0
- package/test/resources/9999999/event/build-expected.json +0 -1
- package/test/resources/9999999/event/get-expected.json +0 -1
- package/test/resources/9999999/event/post_withExistingDE-callout-expected.json +3 -0
- package/test/resources/9999999/event/post_withExistingDE-expected.json +2 -0
- package/test/resources/9999999/event/post_withSchema-callout-expected.json +3 -0
- package/test/resources/9999999/event/post_withSchema-expected.json +2 -0
- package/test/resources/9999999/event/put-callout-expected.json +3 -1
- package/test/resources/9999999/event/put-expected.json +2 -2
- package/test/resources/9999999/event/template-expected.json +0 -1
- package/test/resources/9999999/interaction/v1/eventDefinitions/key_testExisting_event/put-response.json +2 -1
- package/test/resources/9999999/interaction/v1/eventDefinitions/post_withExistingDE-response.json +2 -0
- package/test/resources/9999999/interaction/v1/eventDefinitions/post_withSchema-response.json +2 -0
- package/test/resources/9999999/interaction/v1/interactions/3c3f4112-9b43-43ca-8a89-aa0375b2c1a2/get-response.json +4 -4
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Quicksend/get-response.json +4 -4
- package/test/resources/9999999/interaction/v1/interactions/publishAsync/3c3f4112-9b43-43ca-8a89-aa0375b2c1a2/post-response.json +4 -0
- package/test/resources/9999999/interaction/v1/interactions/publishStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-failed.json +34 -0
- package/test/resources/9999999/interaction/v1/interactions/publishStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-success.json +5 -0
- package/test/resources/9999999/interaction/v1/interactions/publishStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-successWarnings.json +36 -0
- package/test/resources/9999999/journey/build-expected.json +5 -5
- package/test/resources/9999999/journey/get-multistep-expected.json +1 -1
- package/test/resources/9999999/journey/get-quicksend-expected.json +5 -5
- package/test/resources/9999999/journey/get-quicksend-rcb-id-expected.json +1 -1
- package/test/resources/9999999/journey/get-quicksend-rcb-key-expected.json +7 -7
- package/test/resources/9999999/journey/get-quicksend-rcb-name-expected.json +1 -1
- package/test/resources/9999999/journey/post-expected.json +1 -1
- package/test/resources/9999999/journey/publish-callout-expected.json +1 -0
- package/test/resources/9999999/journey/put-expected.json +1 -1
- package/test/resources/9999999/journey/template-expected.json +5 -5
- package/test/resources/9999999/mobileKeyword/build-expected.json +1 -0
- package/test/resources/9999999/mobileKeyword/get-expected.json +1 -0
- package/test/resources/9999999/mobileKeyword/post-create-expected.json +1 -0
- package/test/resources/9999999/mobileKeyword/template-expected.json +1 -0
- package/test/resources/{1111111/accountUser/retrieve-CustomerKey=testExisting_userANDActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-response.xml → 9999999/queryDefinition/retrieve-CustomerKey=badANDStatus=Active-response.xml} +10 -11
- package/test/resources/9999999/script/get_ampincluded-rcb-key-expected.html +2 -2
- package/test/resources/9999999/script/get_ampscript-expected.html +1 -0
- package/test/resources/9999999/script/get_ampscript-rcb-id-expected.html +1 -0
- package/test/resources/9999999/script/get_ampscript-rcb-key-expected.html +3 -2
- package/test/resources/9999999/script/get_ampscript-rcb-name-expected.html +3 -0
- package/test/resources/9999999/script/get_mixed-expected.html +2 -2
- package/test/resources/9999999/script/get_mixed-rcb-key-expected.html +2 -2
- package/test/resources/9999999/senderProfile/get-rcb-key-expected.json +4 -4
- package/test/resources/9999999/senderProfile/retrieve-response.xml +1 -1
- package/test/resources/9999999/triggeredSend/get-rcb-key-expected.json +4 -4
- package/test/resources/9999999/triggeredSendDefinition/retrieve-TriggeredSendStatusINNew,Active,Inactive,Moved,Canceled-response.xml +1 -1
- package/test/type.asset.test.js +189 -39
- package/test/type.automation.test.js +134 -58
- package/test/type.dataExtract.test.js +4 -4
- package/test/type.emailSend.test.js +3 -3
- package/test/type.event.test.js +0 -2
- package/test/type.journey.test.js +322 -9
- package/test/type.query.test.js +33 -29
- package/test/type.script.test.js +61 -11
- package/test/type.senderProfile.test.js +36 -3
- package/test/type.transactionalEmail.test.js +3 -3
- package/test/type.triggeredSend.test.js +75 -6
- package/test/utils.js +13 -3
- package/types/mcdev.d.js +27 -1
- /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=falseANDCustomerKey=testExisting_userANDEmaillike@-response.xml → retrieve-ActiveFlag=falseANDCustomerKey=testExisting_userANDEmaillike@-QAA-response.xml} +0 -0
- /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=falseANDEmaillike@-response.xml → retrieve-ActiveFlag=falseANDEmaillike@-QAA-response.xml} +0 -0
- /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=trueANDCustomerKey=testExisting_userANDEmaillike@-response.xml → retrieve-ActiveFlag=trueANDCustomerKey=testExisting_userANDEmaillike@-QAA-response.xml} +0 -0
- /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-response.xml → retrieve-ActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-QAA-response.xml} +0 -0
- /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=trueANDEmaillike@-response.xml → retrieve-ActiveFlag=trueANDEmaillike@-QAA-response.xml} +0 -0
- /package/test/resources/1111111/businessUnit/{retrieve-ID=1111111-response.xml → retrieve-ID=1111111-QAA-response.xml} +0 -0
- /package/test/resources/1111111/dataFolder/{retrieve-ContentType=synchronizeddataextensionORContentType=shared_salesforcedataextensionORContentType=shared_dataextensionORContentType=shared_dataORContentType=salesforcedataextensionORContentType=dataextensionORContentType=hidden-response.xml → retrieve-ContentTypeINdataextension,hidden,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml} +0 -0
- /package/test/resources/1111111/dataFolder/{retrieve-response.xml → retrieve-response-.xml} +0 -0
- /package/test/resources/9999999/dataFolder/{retrieve-ContentType=asset-sharedORContentType=asset-response.xml → retrieve-ContentTypeINasset,asset-shared-response.xml} +0 -0
- /package/test/resources/9999999/dataFolder/{retrieve-ContentType=contextual_suppression_listORContentType=publicationORContentType=suppression_listORContentType=mysubsORContentType=list-response.xml → retrieve-ContentTypeINcontextual_suppression_list,list,mysubs,publication,suppression_list-response.xml} +0 -0
- /package/test/resources/9999999/dataFolder/{retrieve-ContentType=synchronizeddataextensionORContentType=shared_salesforcedataextensionORContentType=shared_dataextensionORContentType=shared_dataORContentType=salesforcedataextensionORContentType=dataextensionORContentType=hidden-response.xml → retrieve-ContentTypeINdataextension,hidden,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml} +0 -0
- /package/test/resources/9999999/dataFolder/{retrieve-ContentType=triggered_send_journeybuilderORContentType=triggered_sendORContentType=hidden-response.xml → retrieve-ContentTypeINhidden,triggered_send,triggered_send_journeybuilder-response.xml} +0 -0
|
@@ -19,6 +19,7 @@ import pLimit from 'p-limit';
|
|
|
19
19
|
* @typedef {import('../../types/mcdev.d.js').SDKError} SDKError
|
|
20
20
|
* @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams
|
|
21
21
|
* @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap
|
|
22
|
+
* @typedef {import('../../types/mcdev.d.js').TypeKeyCombo} TypeKeyCombo
|
|
22
23
|
*/
|
|
23
24
|
/**
|
|
24
25
|
* @typedef {import('../../types/mcdev.d.js').AutomationItem} AutomationItem
|
|
@@ -1620,6 +1621,39 @@ class Automation extends MetadataType {
|
|
|
1620
1621
|
// delete local copy: retrieve/cred/bu/.../...-doc.md
|
|
1621
1622
|
await super.postDeleteTasks(customerKey, [`${this.definition.type}-doc.md`]);
|
|
1622
1623
|
}
|
|
1624
|
+
|
|
1625
|
+
/**
|
|
1626
|
+
* helper for {@link MetadataType.getNestedValue} - adjusted for automation activities
|
|
1627
|
+
*
|
|
1628
|
+
* @param {any} obj the metadataItem to search in (or the result)
|
|
1629
|
+
* @param {string[]} nestedKeyParts key in dot-notation split into parts
|
|
1630
|
+
* @param {string} dependentType used for types that need custom handling
|
|
1631
|
+
* @returns {(string) | (string)[]} result
|
|
1632
|
+
*/
|
|
1633
|
+
static getNestedValueHelper(obj, nestedKeyParts, dependentType) {
|
|
1634
|
+
if (nestedKeyParts.length == 0) {
|
|
1635
|
+
// key was found; append '' to ensure we always return a string
|
|
1636
|
+
return obj + '';
|
|
1637
|
+
}
|
|
1638
|
+
// get most left key
|
|
1639
|
+
const key = nestedKeyParts.shift();
|
|
1640
|
+
if (!obj[key]) {
|
|
1641
|
+
// key was not found
|
|
1642
|
+
return;
|
|
1643
|
+
}
|
|
1644
|
+
if (Array.isArray(obj[key])) {
|
|
1645
|
+
return obj[key].flatMap((x) =>
|
|
1646
|
+
this.getNestedValueHelper(x, [...nestedKeyParts], dependentType)
|
|
1647
|
+
);
|
|
1648
|
+
} else {
|
|
1649
|
+
if (nestedKeyParts.length == 0) {
|
|
1650
|
+
// key was found if length is 0 and search field (r__type) is equal the current type, else, keep going
|
|
1651
|
+
return obj[key] === dependentType ? obj.r__key : undefined;
|
|
1652
|
+
} else {
|
|
1653
|
+
return this.getNestedValueHelper(obj[key], [...nestedKeyParts], dependentType);
|
|
1654
|
+
}
|
|
1655
|
+
}
|
|
1656
|
+
}
|
|
1623
1657
|
}
|
|
1624
1658
|
|
|
1625
1659
|
// Assign definition to static attributes
|
|
@@ -10,7 +10,7 @@ import File from '../util/file.js';
|
|
|
10
10
|
import auth from '../util/auth.js';
|
|
11
11
|
import cache from '../util/cache.js';
|
|
12
12
|
import pLimit from 'p-limit';
|
|
13
|
-
import
|
|
13
|
+
import { checkbox } from '@inquirer/prompts';
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* @typedef {import('../../types/mcdev.d.js').BuObject} BuObject
|
|
@@ -33,7 +33,7 @@ import inquirer from 'inquirer';
|
|
|
33
33
|
* @augments MetadataType
|
|
34
34
|
*/
|
|
35
35
|
class DataExtension extends MetadataType {
|
|
36
|
-
/** @type {DataExtensionFieldMap} */
|
|
36
|
+
/** @type {Object.<string, DataExtensionFieldMap>} key: deKey, value: deFieldMap */
|
|
37
37
|
static oldFields;
|
|
38
38
|
/**
|
|
39
39
|
* Upserts dataExtensions after retrieving them from source and target to compare
|
|
@@ -100,16 +100,26 @@ class DataExtension extends MetadataType {
|
|
|
100
100
|
.filter((r) => r !== undefined && r !== null)
|
|
101
101
|
.filter(this.#filterUpsertResults);
|
|
102
102
|
|
|
103
|
+
if (Util.OPTIONS.noUpdate && metadataToUpdate.length > 0) {
|
|
104
|
+
Util.logger.info(
|
|
105
|
+
` ☇ skipping update of ${metadataToUpdate.length} ${this.definition.type}${metadataToUpdate.length == 1 ? '' : 's'}: --noUpdate flag is set`
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
|
|
103
109
|
const updateLimit = pLimit(10);
|
|
104
|
-
const updateResults =
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
110
|
+
const updateResults = Util.OPTIONS.noUpdate
|
|
111
|
+
? []
|
|
112
|
+
: (
|
|
113
|
+
await Promise.allSettled(
|
|
114
|
+
metadataToUpdate
|
|
115
|
+
.filter((r) => r !== undefined && r !== null)
|
|
116
|
+
.map((metadataEntry) =>
|
|
117
|
+
updateLimit(() => this.update(metadataEntry.after))
|
|
118
|
+
)
|
|
119
|
+
)
|
|
120
|
+
)
|
|
121
|
+
.filter((r) => r !== undefined && r !== null)
|
|
122
|
+
.filter(this.#filterUpsertResults);
|
|
113
123
|
|
|
114
124
|
const successfulResults = [...createResults, ...updateResults];
|
|
115
125
|
Util.logger.info(
|
|
@@ -119,8 +129,8 @@ class DataExtension extends MetadataType {
|
|
|
119
129
|
let upsertResults;
|
|
120
130
|
if (successfulResults.length > 0) {
|
|
121
131
|
const metadataResults = successfulResults
|
|
122
|
-
|
|
123
|
-
.
|
|
132
|
+
.map((r) => (r.status === 'fulfilled' ? r.value.Results[0].Object : null))
|
|
133
|
+
.filter(Boolean)
|
|
124
134
|
.map((r) => {
|
|
125
135
|
// if only one fields added will return object otherwise array
|
|
126
136
|
if (Array.isArray(r?.Fields?.Field)) {
|
|
@@ -172,7 +182,6 @@ class DataExtension extends MetadataType {
|
|
|
172
182
|
DataExtensionField.client = this.client;
|
|
173
183
|
DataExtensionField.properties = this.properties;
|
|
174
184
|
DataExtension.oldFields ||= {};
|
|
175
|
-
// @ts-expect-error not sure why this produces a type error. looks 100% correct
|
|
176
185
|
DataExtension.oldFields[metadataMap[metadataKey][this.definition.keyField]] =
|
|
177
186
|
await DataExtensionField.prepareDeployColumnsOnUpdate(
|
|
178
187
|
metadataMap[metadataKey].Fields,
|
|
@@ -486,24 +495,19 @@ class DataExtension extends MetadataType {
|
|
|
486
495
|
value: name,
|
|
487
496
|
checked: fixBuPreselected.includes(name),
|
|
488
497
|
}));
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
498
|
+
let answer = null;
|
|
499
|
+
|
|
500
|
+
try {
|
|
501
|
+
answer = await checkbox({
|
|
493
502
|
message:
|
|
494
503
|
'Please select BUs that have access to the updated Shared Data Extensions:',
|
|
495
504
|
pageSize: 10,
|
|
496
505
|
choices: buList,
|
|
497
|
-
}
|
|
498
|
-
];
|
|
499
|
-
let responses = null;
|
|
500
|
-
|
|
501
|
-
try {
|
|
502
|
-
responses = await inquirer.prompt(questions);
|
|
506
|
+
});
|
|
503
507
|
} catch (ex) {
|
|
504
508
|
Util.logger.info(ex);
|
|
505
509
|
}
|
|
506
|
-
return
|
|
510
|
+
return answer;
|
|
507
511
|
}
|
|
508
512
|
|
|
509
513
|
/**
|
|
@@ -821,9 +825,10 @@ class DataExtension extends MetadataType {
|
|
|
821
825
|
// get shared folders to match our shared / synched Data Extensions
|
|
822
826
|
const subTypeArr = this.definition.dependencies
|
|
823
827
|
.filter((item) => item.startsWith('folder-'))
|
|
824
|
-
.map((item) => item.slice(7))
|
|
828
|
+
.map((item) => item.slice(7))
|
|
829
|
+
.filter((item) => Folder.definition.folderTypesFromParent.includes(item));
|
|
825
830
|
Util.logger.info(' - Caching dependent Metadata: folder (shared via _ParentBU_)');
|
|
826
|
-
Util.logSubtypes(subTypeArr);
|
|
831
|
+
Util.logSubtypes(subTypeArr, ' ');
|
|
827
832
|
Folder.client = this.client;
|
|
828
833
|
Folder.buObject = this.buObject;
|
|
829
834
|
Folder.properties = this.properties;
|
|
@@ -1325,7 +1330,7 @@ class DataExtension extends MetadataType {
|
|
|
1325
1330
|
newJsonElement[field] = element[field];
|
|
1326
1331
|
}
|
|
1327
1332
|
}
|
|
1328
|
-
// @ts-ignore
|
|
1333
|
+
// @ts-ignore for document the fields have less values and that leads to an error here.
|
|
1329
1334
|
newJson.push(newJsonElement);
|
|
1330
1335
|
}
|
|
1331
1336
|
fieldsJson = newJson;
|
|
@@ -97,7 +97,7 @@ class DataExtensionField extends MetadataType {
|
|
|
97
97
|
*
|
|
98
98
|
* @param {DataExtensionFieldItem[]} deployColumns Columns of data extension that will be deployed
|
|
99
99
|
* @param {string} deKey external/customer key of Data Extension
|
|
100
|
-
* @returns {Promise.<
|
|
100
|
+
* @returns {Promise.<DataExtensionFieldMap>} existing fields by their original name to allow re-adding FieldType after update
|
|
101
101
|
*/
|
|
102
102
|
static async prepareDeployColumnsOnUpdate(deployColumns, deKey) {
|
|
103
103
|
// create list of DE keys that had changes to their fields to be able to use it as a filter in the --fixShared logic
|
|
@@ -132,7 +132,7 @@ class DataExtensionField extends MetadataType {
|
|
|
132
132
|
const fieldsObj = response.metadata;
|
|
133
133
|
|
|
134
134
|
// ensure fields can be updated properly by their adding ObjectId based on Name-matching
|
|
135
|
-
/** @type {
|
|
135
|
+
/** @type {DataExtensionFieldMap} */
|
|
136
136
|
const existingFieldByName = {};
|
|
137
137
|
|
|
138
138
|
for (const key of Object.keys(fieldsObj)) {
|
|
@@ -192,8 +192,27 @@ class Event extends MetadataType {
|
|
|
192
192
|
|
|
193
193
|
// standard values
|
|
194
194
|
metadata.isVisibleInPicker ||= false;
|
|
195
|
-
metadata.
|
|
196
|
-
|
|
195
|
+
if (metadata.isVisibleInPicker && !metadata.sourceApplicationExtensionId) {
|
|
196
|
+
Util.logger.warn(
|
|
197
|
+
` - ${this.definition.type} ${metadata[this.definition.keyField]}: isVisibleInPicker is true but sourceApplicationExtensionId is missing. Setting isVisibleInPicker to false.`
|
|
198
|
+
);
|
|
199
|
+
metadata.isVisibleInPicker = false;
|
|
200
|
+
}
|
|
201
|
+
metadata.isPlatformObject ||= false;
|
|
202
|
+
metadata.mode ||= 'Production';
|
|
203
|
+
switch (metadata.type) {
|
|
204
|
+
case 'APIEvent': {
|
|
205
|
+
metadata.entrySourceGroupConfigUrl ||=
|
|
206
|
+
'jb:///data/entry/api-event/entrysourcegroupconfig.json';
|
|
207
|
+
metadata.iconUrl ||= '/images/icon_journeyBuilder-event-api-blue.svg';
|
|
208
|
+
break;
|
|
209
|
+
}
|
|
210
|
+
case 'SalesforceObjectTriggerV2': {
|
|
211
|
+
metadata.iconUrl ||= '/jbint-events/events/SalesforceData/images/SF-Event-Icon.svg';
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
197
216
|
return metadata;
|
|
198
217
|
}
|
|
199
218
|
/**
|
|
@@ -405,6 +424,13 @@ class Event extends MetadataType {
|
|
|
405
424
|
}): ${ex.message}.`
|
|
406
425
|
);
|
|
407
426
|
}
|
|
427
|
+
if (!metadata.isPlatformObject) {
|
|
428
|
+
delete metadata.isPlatformObject;
|
|
429
|
+
}
|
|
430
|
+
if (metadata.mode === 'Production') {
|
|
431
|
+
delete metadata.mode;
|
|
432
|
+
}
|
|
433
|
+
|
|
408
434
|
return metadata;
|
|
409
435
|
}
|
|
410
436
|
}
|
|
@@ -17,6 +17,10 @@ import cache from '../util/cache.js';
|
|
|
17
17
|
* @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj
|
|
18
18
|
* @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams
|
|
19
19
|
* @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap
|
|
20
|
+
*
|
|
21
|
+
* @typedef {import('../../types/mcdev.d.js').ListItem} ListItem
|
|
22
|
+
* @typedef {import('../../types/mcdev.d.js').ListMap} ListMap
|
|
23
|
+
* @typedef {import('../../types/mcdev.d.js').ListIdMap} ListIdMap
|
|
20
24
|
*/
|
|
21
25
|
|
|
22
26
|
/**
|
|
@@ -32,20 +36,27 @@ class Folder extends MetadataType {
|
|
|
32
36
|
* @param {string[]} [additionalFields] Returns specified fields even if their retrieve definition is not set to true
|
|
33
37
|
* @param {string[]} [subTypeArr] content type of folder
|
|
34
38
|
* @param {string} [key] customer key of single item to retrieve
|
|
35
|
-
* @returns {Promise} Promise
|
|
39
|
+
* @returns {Promise.<{metadata: ListMap, type: string}>} Promise
|
|
36
40
|
*/
|
|
37
41
|
static async retrieve(retrieveDir, additionalFields, subTypeArr, key) {
|
|
38
42
|
if (key) {
|
|
39
43
|
Util.logger.error(`Folder.retrieve() does not support key parameter`);
|
|
40
44
|
}
|
|
41
|
-
|
|
42
|
-
|
|
45
|
+
/** @type {ListItem[]} */
|
|
46
|
+
const queryAllFolders = await this.retrieveHelper(additionalFields, false, subTypeArr);
|
|
43
47
|
if (this.buObject.eid !== this.buObject.mid) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
48
|
+
const selectedParentTypes = subTypeArr?.length
|
|
49
|
+
? subTypeArr.filter((item) => this.definition.folderTypesFromParent.includes(item))
|
|
50
|
+
: subTypeArr;
|
|
51
|
+
if (!subTypeArr?.length || selectedParentTypes.length) {
|
|
52
|
+
queryAllFolders.push(
|
|
53
|
+
...(await this.retrieveHelper(additionalFields, true, selectedParentTypes))
|
|
54
|
+
);
|
|
55
|
+
}
|
|
47
56
|
}
|
|
57
|
+
|
|
48
58
|
const sortPairs = toposort(queryAllFolders.map((a) => [a.ParentFolder.ID, a.ID]));
|
|
59
|
+
/** @type {ListIdMap} */
|
|
49
60
|
const idMap = {};
|
|
50
61
|
for (const val of queryAllFolders) {
|
|
51
62
|
// Contact Builder Lists create a folder called "Audiences" with the same Customer Key as the
|
|
@@ -64,6 +75,7 @@ class Folder extends MetadataType {
|
|
|
64
75
|
}
|
|
65
76
|
|
|
66
77
|
// create root node for attaching, but will be deleted later
|
|
78
|
+
// @ts-expect-error we set an incomplete ListItem for ID==0 which is flagged by ts
|
|
67
79
|
idMap[0] = {
|
|
68
80
|
Name: '<ROOT>',
|
|
69
81
|
};
|
|
@@ -113,6 +125,7 @@ class Folder extends MetadataType {
|
|
|
113
125
|
}
|
|
114
126
|
|
|
115
127
|
// build a new map using the customer key instead of id
|
|
128
|
+
/** @type {ListMap} */
|
|
116
129
|
const metadata = {};
|
|
117
130
|
for (const id in idMap) {
|
|
118
131
|
// remove keys which are listed in other BUs and skip root
|
|
@@ -156,7 +169,7 @@ class Folder extends MetadataType {
|
|
|
156
169
|
`Downloaded: ${this.definition.type} (${Object.keys(savedMetadata).length})`
|
|
157
170
|
);
|
|
158
171
|
}
|
|
159
|
-
return { metadata
|
|
172
|
+
return { metadata, type: this.definition.type };
|
|
160
173
|
}
|
|
161
174
|
|
|
162
175
|
/**
|
|
@@ -164,7 +177,7 @@ class Folder extends MetadataType {
|
|
|
164
177
|
*
|
|
165
178
|
* @param {void | string[]} [_] parameter not used
|
|
166
179
|
* @param {string[]} [subTypeArr] content type of folder
|
|
167
|
-
* @returns {Promise} Promise
|
|
180
|
+
* @returns {Promise.<{metadata: ListMap, type: string}>} Promise
|
|
168
181
|
*/
|
|
169
182
|
static retrieveForCache(_, subTypeArr) {
|
|
170
183
|
return this.retrieve(null, null, subTypeArr, null);
|
|
@@ -175,8 +188,8 @@ class Folder extends MetadataType {
|
|
|
175
188
|
* and comparing to check if create or update operation is needed.
|
|
176
189
|
* Copied due to having a dependency on itself, meaning the created need to be serial
|
|
177
190
|
*
|
|
178
|
-
* @param {
|
|
179
|
-
* @returns {Promise.<
|
|
191
|
+
* @param {ListMap} metadata metadata mapped by their keyField
|
|
192
|
+
* @returns {Promise.<ListMap>} Promise of saved metadata
|
|
180
193
|
*/
|
|
181
194
|
static async upsert(metadata) {
|
|
182
195
|
const orignalMetadata = structuredClone(metadata);
|
|
@@ -185,6 +198,7 @@ class Folder extends MetadataType {
|
|
|
185
198
|
let createCount = 0;
|
|
186
199
|
let createFailedCount = 0;
|
|
187
200
|
let filteredByPreDeploy = 0;
|
|
201
|
+
/** @type {ListMap} */
|
|
188
202
|
const upsertResults = {};
|
|
189
203
|
const sortPairs = toposort(
|
|
190
204
|
Object.keys(metadata).map((customerKey) => [
|
|
@@ -262,6 +276,15 @@ class Folder extends MetadataType {
|
|
|
262
276
|
continue;
|
|
263
277
|
}
|
|
264
278
|
}
|
|
279
|
+
if (existingId && Util.OPTIONS.noUpdate) {
|
|
280
|
+
Util.logger.verbose(
|
|
281
|
+
` - skipping ${this.definition.type} ${
|
|
282
|
+
deployableMetadata?.Path ||
|
|
283
|
+
deployableMetadata[this.definition.nameField]
|
|
284
|
+
}: --noUpdate flag is set`
|
|
285
|
+
);
|
|
286
|
+
continue;
|
|
287
|
+
}
|
|
265
288
|
|
|
266
289
|
let result;
|
|
267
290
|
// since deployableMetadata will be modified for deploy, make a copy for reference
|
|
@@ -339,12 +362,12 @@ class Folder extends MetadataType {
|
|
|
339
362
|
/**
|
|
340
363
|
* creates a folder based on metatadata
|
|
341
364
|
*
|
|
342
|
-
* @param {
|
|
343
|
-
* @returns {Promise} Promise
|
|
365
|
+
* @param {ListItem} metadataEntry metadata of the folder
|
|
366
|
+
* @returns {Promise.<any>} Promise of api response
|
|
344
367
|
*/
|
|
345
368
|
static async create(metadataEntry) {
|
|
346
|
-
if (metadataEntry?.
|
|
347
|
-
Util.logger.
|
|
369
|
+
if (metadataEntry?.ParentFolder?.ID === 0) {
|
|
370
|
+
Util.logger.debug(
|
|
348
371
|
`${this.definition.type}-${metadataEntry.ContentType}.create:: Cannot create Root Folder: ${metadataEntry.Name}`
|
|
349
372
|
);
|
|
350
373
|
return {};
|
|
@@ -405,7 +428,7 @@ class Folder extends MetadataType {
|
|
|
405
428
|
* Updates a single Folder.
|
|
406
429
|
*
|
|
407
430
|
* @param {MetadataTypeItem} metadataEntry single metadata entry
|
|
408
|
-
* @returns {Promise} Promise
|
|
431
|
+
* @returns {Promise.<any>} Promise of api response
|
|
409
432
|
*/
|
|
410
433
|
static async update(metadataEntry) {
|
|
411
434
|
const path = metadataEntry.Path;
|
|
@@ -434,8 +457,8 @@ class Folder extends MetadataType {
|
|
|
434
457
|
/**
|
|
435
458
|
* prepares a folder for deployment
|
|
436
459
|
*
|
|
437
|
-
* @param {
|
|
438
|
-
* @returns {Promise.<
|
|
460
|
+
* @param {ListItem} metadata a single folder definition
|
|
461
|
+
* @returns {Promise.<ListItem>} Promise of parsed folder metadata
|
|
439
462
|
*/
|
|
440
463
|
static async preDeployTasks(metadata) {
|
|
441
464
|
if (!this.definition.deployFolderTypes.includes(metadata.ContentType.toLowerCase())) {
|
|
@@ -467,12 +490,7 @@ class Folder extends MetadataType {
|
|
|
467
490
|
}
|
|
468
491
|
// retreive ID based on the matching Path of the parent folder
|
|
469
492
|
else if (metadata?.ParentFolder?.Path) {
|
|
470
|
-
metadata.ParentFolder.ID = cache.
|
|
471
|
-
'folder',
|
|
472
|
-
metadata.ParentFolder.Path,
|
|
473
|
-
'Path',
|
|
474
|
-
'ID'
|
|
475
|
-
);
|
|
493
|
+
metadata.ParentFolder.ID = cache.getFolderId(metadata.ParentFolder.Path);
|
|
476
494
|
return metadata;
|
|
477
495
|
} else {
|
|
478
496
|
Util.metadataLogger(
|
|
@@ -488,13 +506,13 @@ class Folder extends MetadataType {
|
|
|
488
506
|
/**
|
|
489
507
|
* Returns file contents mapped to their filename without '.json' ending
|
|
490
508
|
*
|
|
491
|
-
* @param {string} dir directory
|
|
509
|
+
* @param {string} dir directory with json files, e.g. /retrieve/cred/bu/folder, /deploy/cred/bu/folder, /template/folder
|
|
492
510
|
* @param {boolean} [listBadKeys] do not print errors, used for badKeys()
|
|
493
|
-
* @returns {Promise.<
|
|
511
|
+
* @returns {Promise.<ListMap>} fileName => fileContent map
|
|
494
512
|
*/
|
|
495
513
|
static async getJsonFromFS(dir, listBadKeys) {
|
|
496
514
|
try {
|
|
497
|
-
/** @type {
|
|
515
|
+
/** @type {ListMap} */
|
|
498
516
|
const fileName2FileContent = {};
|
|
499
517
|
const directories = File.readDirectoriesSync(dir, 10, true);
|
|
500
518
|
let newCounter = 0;
|
|
@@ -564,28 +582,24 @@ class Folder extends MetadataType {
|
|
|
564
582
|
* @param {string[]} [additionalFields] Returns specified fields even if their retrieve definition is not set to true
|
|
565
583
|
* @param {boolean} [queryAllAccounts] which queryAllAccounts setting to use
|
|
566
584
|
* @param {string[]} [contentTypeList] content type of folder
|
|
567
|
-
* @returns {Promise.<
|
|
585
|
+
* @returns {Promise.<ListItem[]>} soap object
|
|
568
586
|
*/
|
|
569
587
|
static async retrieveHelper(additionalFields, queryAllAccounts, contentTypeList) {
|
|
570
588
|
const options = { QueryAllAccounts: !!queryAllAccounts };
|
|
571
589
|
if (contentTypeList) {
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
operator: 'equals',
|
|
586
|
-
rightOperand: contentType,
|
|
587
|
-
};
|
|
588
|
-
}
|
|
590
|
+
const newFilter = {
|
|
591
|
+
leftOperand: 'ContentType',
|
|
592
|
+
operator: contentTypeList.length === 1 ? 'equals' : 'IN',
|
|
593
|
+
rightOperand:
|
|
594
|
+
contentTypeList.length === 1 ? contentTypeList[0] : contentTypeList.sort(),
|
|
595
|
+
};
|
|
596
|
+
options.filter = options.filter
|
|
597
|
+
? {
|
|
598
|
+
leftOperand: newFilter,
|
|
599
|
+
operator: 'OR',
|
|
600
|
+
rightOperand: options.filter,
|
|
601
|
+
}
|
|
602
|
+
: newFilter;
|
|
589
603
|
}
|
|
590
604
|
const response = await this.client.soap.retrieveBulk(
|
|
591
605
|
'DataFolder',
|
|
@@ -599,8 +613,8 @@ class Folder extends MetadataType {
|
|
|
599
613
|
/**
|
|
600
614
|
* Gets executed after retreive of metadata type
|
|
601
615
|
*
|
|
602
|
-
* @param {
|
|
603
|
-
* @returns {
|
|
616
|
+
* @param {ListItem} metadata metadata mapped by their keyField
|
|
617
|
+
* @returns {ListItem} cloned metadata
|
|
604
618
|
*/
|
|
605
619
|
static postRetrieveTasks(metadata) {
|
|
606
620
|
return structuredClone(metadata);
|
|
@@ -608,12 +622,13 @@ class Folder extends MetadataType {
|
|
|
608
622
|
/**
|
|
609
623
|
* Helper for writing Metadata to disk, used for Retrieve and deploy
|
|
610
624
|
*
|
|
611
|
-
* @param {
|
|
625
|
+
* @param {ListMap} results metadata results from deploy
|
|
612
626
|
* @param {string} retrieveDir directory where metadata should be stored after deploy/retrieve
|
|
613
627
|
* @param {number | string} mid unused parameter
|
|
614
|
-
* @returns {Promise.<
|
|
628
|
+
* @returns {Promise.<ListMap>} Promise of saved metadata
|
|
615
629
|
*/
|
|
616
630
|
static async saveResults(results, retrieveDir, mid) {
|
|
631
|
+
/** @type {ListMap} */
|
|
617
632
|
const savedResults = {};
|
|
618
633
|
for (const metadataEntry in results) {
|
|
619
634
|
try {
|