mcdev 7.0.3 → 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 +2 -0
- package/.github/PULL_REQUEST_TEMPLATE/pr_template_release.md +1 -0
- package/.github/workflows/code-test.yml +48 -0
- package/.husky/post-checkout +1 -1
- package/.husky/post-merge +7 -1
- package/.husky/pre-commit +3 -1
- package/@types/lib/Builder.d.ts +13 -13
- package/@types/lib/Builder.d.ts.map +1 -1
- package/@types/lib/Deployer.d.ts +19 -16
- package/@types/lib/Deployer.d.ts.map +1 -1
- package/@types/lib/Retriever.d.ts +15 -15
- package/@types/lib/Retriever.d.ts.map +1 -1
- package/@types/lib/cli.d.ts +1 -1
- package/@types/lib/cli.d.ts.map +1 -1
- package/@types/lib/index.d.ts +102 -51
- package/@types/lib/index.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Asset.d.ts +71 -59
- package/@types/lib/metadataTypes/Asset.d.ts.map +1 -1
- package/@types/lib/metadataTypes/AttributeGroup.d.ts +6 -8
- package/@types/lib/metadataTypes/AttributeGroup.d.ts.map +1 -1
- package/@types/lib/metadataTypes/AttributeSet.d.ts +10 -21
- package/@types/lib/metadataTypes/AttributeSet.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Automation.d.ts +47 -49
- package/@types/lib/metadataTypes/Automation.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Campaign.d.ts +12 -18
- package/@types/lib/metadataTypes/Campaign.d.ts.map +1 -1
- package/@types/lib/metadataTypes/ContentArea.d.ts +13 -31
- package/@types/lib/metadataTypes/ContentArea.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtension.d.ts +28 -33
- package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtensionField.d.ts +15 -22
- package/@types/lib/metadataTypes/DataExtensionField.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtensionTemplate.d.ts +12 -11
- package/@types/lib/metadataTypes/DataExtensionTemplate.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtract.d.ts +13 -28
- package/@types/lib/metadataTypes/DataExtract.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtractType.d.ts +11 -10
- package/@types/lib/metadataTypes/DataExtractType.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DeliveryProfile.d.ts +11 -10
- package/@types/lib/metadataTypes/DeliveryProfile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Discovery.d.ts +11 -10
- package/@types/lib/metadataTypes/Discovery.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Email.d.ts +14 -34
- package/@types/lib/metadataTypes/Email.d.ts.map +1 -1
- package/@types/lib/metadataTypes/EmailSend.d.ts +18 -10
- package/@types/lib/metadataTypes/EmailSend.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Event.d.ts +22 -16
- package/@types/lib/metadataTypes/Event.d.ts.map +1 -1
- package/@types/lib/metadataTypes/FileLocation.d.ts +11 -10
- package/@types/lib/metadataTypes/FileLocation.d.ts.map +1 -1
- package/@types/lib/metadataTypes/FileTransfer.d.ts +12 -18
- package/@types/lib/metadataTypes/FileTransfer.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Filter.d.ts +11 -10
- package/@types/lib/metadataTypes/Filter.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Folder.d.ts +49 -35
- package/@types/lib/metadataTypes/Folder.d.ts.map +1 -1
- package/@types/lib/metadataTypes/ImportFile.d.ts +16 -15
- package/@types/lib/metadataTypes/ImportFile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Journey.d.ts +55 -35
- package/@types/lib/metadataTypes/Journey.d.ts.map +1 -1
- package/@types/lib/metadataTypes/List.d.ts +13 -12
- package/@types/lib/metadataTypes/List.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MetadataType.d.ts +73 -26
- package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileCode.d.ts +12 -20
- package/@types/lib/metadataTypes/MobileCode.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileKeyword.d.ts +23 -14
- package/@types/lib/metadataTypes/MobileKeyword.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileMessage.d.ts +18 -42
- package/@types/lib/metadataTypes/MobileMessage.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Query.d.ts +15 -12
- package/@types/lib/metadataTypes/Query.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Role.d.ts +12 -11
- package/@types/lib/metadataTypes/Role.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Script.d.ts +18 -25
- package/@types/lib/metadataTypes/Script.d.ts.map +1 -1
- package/@types/lib/metadataTypes/SendClassification.d.ts +13 -10
- package/@types/lib/metadataTypes/SendClassification.d.ts.map +1 -1
- package/@types/lib/metadataTypes/SenderProfile.d.ts +12 -25
- package/@types/lib/metadataTypes/SenderProfile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalEmail.d.ts +18 -12
- package/@types/lib/metadataTypes/TransactionalEmail.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalMessage.d.ts +12 -32
- package/@types/lib/metadataTypes/TransactionalMessage.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalPush.d.ts +15 -21
- package/@types/lib/metadataTypes/TransactionalPush.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TransactionalSMS.d.ts +16 -18
- package/@types/lib/metadataTypes/TransactionalSMS.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TriggeredSend.d.ts +19 -24
- package/@types/lib/metadataTypes/TriggeredSend.d.ts.map +1 -1
- package/@types/lib/metadataTypes/User.d.ts +23 -40
- package/@types/lib/metadataTypes/User.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Verification.d.ts +16 -13
- 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 +10 -1
- 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/auth.d.ts +19 -18
- package/@types/lib/util/auth.d.ts.map +1 -1
- package/@types/lib/util/businessUnit.d.ts +17 -17
- package/@types/lib/util/businessUnit.d.ts.map +1 -1
- package/@types/lib/util/cache.d.ts +34 -32
- package/@types/lib/util/cache.d.ts.map +1 -1
- package/@types/lib/util/cli.d.ts +30 -33
- package/@types/lib/util/cli.d.ts.map +1 -1
- package/@types/lib/util/config.d.ts +20 -20
- package/@types/lib/util/config.d.ts.map +1 -1
- package/@types/lib/util/devops.d.ts +21 -21
- package/@types/lib/util/devops.d.ts.map +1 -1
- package/@types/lib/util/file.d.ts +179 -18
- package/@types/lib/util/file.d.ts.map +1 -1
- package/@types/lib/util/init.config.d.ts +19 -19
- package/@types/lib/util/init.config.d.ts.map +1 -1
- package/@types/lib/util/init.d.ts +20 -20
- package/@types/lib/util/init.d.ts.map +1 -1
- package/@types/lib/util/init.git.d.ts +2 -2
- package/@types/lib/util/init.git.d.ts.map +1 -1
- package/@types/lib/util/init.npm.d.ts +2 -2
- package/@types/lib/util/init.npm.d.ts.map +1 -1
- package/@types/lib/util/replaceContentBlockReference.d.ts +55 -32
- package/@types/lib/util/replaceContentBlockReference.d.ts.map +1 -1
- package/@types/lib/util/util.d.ts +64 -39
- package/@types/lib/util/util.d.ts.map +1 -1
- package/@types/types/mcdev.d.d.ts +160 -52
- 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/eslint.config.js +0 -1
- package/lib/Builder.js +13 -8
- package/lib/Deployer.js +13 -8
- package/lib/Retriever.js +4 -1
- package/lib/cli.js +384 -288
- package/lib/index.js +620 -241
- package/lib/metadataTypes/Asset.js +455 -209
- package/lib/metadataTypes/Automation.js +34 -0
- package/lib/metadataTypes/DataExtension.js +36 -31
- package/lib/metadataTypes/DataExtensionField.js +2 -3
- package/lib/metadataTypes/Event.js +227 -37
- package/lib/metadataTypes/Folder.js +64 -49
- package/lib/metadataTypes/Journey.js +340 -58
- package/lib/metadataTypes/MetadataType.js +272 -61
- package/lib/metadataTypes/MobileKeyword.js +12 -1
- package/lib/metadataTypes/Role.js +9 -7
- package/lib/metadataTypes/Script.js +4 -3
- package/lib/metadataTypes/SenderProfile.js +18 -5
- package/lib/metadataTypes/TransactionalEmail.js +2 -2
- package/lib/metadataTypes/TriggeredSend.js +21 -5
- package/lib/metadataTypes/User.js +31 -27
- 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 +9 -8
- 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/auth.js +0 -1
- package/lib/util/cache.js +35 -0
- package/lib/util/cli.js +96 -140
- package/lib/util/config.js +11 -19
- package/lib/util/devops.js +42 -43
- package/lib/util/file.js +7 -10
- 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 +110 -61
- package/lib/util/util.js +90 -4
- package/package.json +22 -19
- package/test/general.test.js +1144 -172
- package/test/mockRoot/.mcdevrc.json +1 -1
- package/test/mockRoot/deploy/testInstance/testBU/event/testExisting_event.event-meta.json +201 -0
- package/test/mockRoot/deploy/testInstance/testBU/event/testNew_event_withExistingDE.event-meta.json +233 -0
- package/test/mockRoot/deploy/testInstance/testBU/event/testNew_event_withSchema.event-meta.json +194 -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/dataExtension/retrieve-CustomerKey=testNew_event_withSchema-response.xml +50 -0
- package/test/resources/9999999/dataExtension/retrieve-createdViaEvent-response.xml +50 -0
- package/test/resources/9999999/dataExtension/retrieve-response.xml +48 -0
- package/test/resources/9999999/dataExtension/retrieve_event_withSchema-expected.json +219 -0
- package/test/resources/9999999/dataExtension/update-afterCreatedViaEvent-response.xml +55 -0
- package/test/resources/9999999/dataExtension/update-callout-afterCreatedViaEvent-expected.xml +1 -0
- package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_event_withSchema-response.xml +461 -0
- package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKeyINtestExisting_dataExtension,testNew_dataExtension-response.xml +133 -0
- package/test/resources/9999999/dataExtensionField/retrieve-response.xml +870 -0
- 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 +227 -0
- package/test/resources/9999999/event/get-expected.json +234 -0
- package/test/resources/9999999/event/post_withExistingDE-callout-expected.json +20 -0
- package/test/resources/9999999/event/post_withExistingDE-expected.json +23 -0
- package/test/resources/9999999/event/post_withSchema-callout-expected.json +199 -0
- package/test/resources/9999999/event/post_withSchema-expected.json +234 -0
- package/test/resources/9999999/event/put-callout-expected.json +204 -0
- package/test/resources/9999999/event/put-expected.json +233 -0
- package/test/resources/9999999/event/template-expected.json +227 -0
- package/test/resources/9999999/interaction/v1/eventDefinitions/get-response.json +252 -2
- package/test/resources/9999999/interaction/v1/eventDefinitions/key_testExisting_event/delete-response.txt +0 -0
- package/test/resources/9999999/interaction/v1/eventDefinitions/key_testExisting_event/put-response.json +242 -0
- package/test/resources/9999999/interaction/v1/eventDefinitions/post_withExistingDE-response.json +28 -0
- package/test/resources/9999999/interaction/v1/eventDefinitions/post_withSchema-response.json +243 -0
- package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/delete-response.txt +1 -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 -42
- package/test/type.automation.test.js +135 -59
- package/test/type.dataExtension.test.js +4 -4
- package/test/type.dataExtract.test.js +4 -4
- package/test/type.emailSend.test.js +3 -3
- package/test/type.event.test.js +286 -7
- package/test/type.journey.test.js +335 -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/type.user.test.js +1 -1
- package/test/utils.js +31 -9
- package/tsconfig.json +6 -1
- package/{jsconfig.json → tsconfig.npmScripts.json} +1 -1
- package/tsconfig.precommit.json +26 -0
- package/types/mcdev.d.js +39 -14
- /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
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import auth from './auth.js';
|
|
4
4
|
import cache from './cache.js';
|
|
5
|
+
import File from './file.js';
|
|
5
6
|
import { Util } from '../util/util.js';
|
|
6
7
|
|
|
7
8
|
import Folder from '../metadataTypes/Folder.js';
|
|
@@ -29,6 +30,8 @@ import Asset from '../metadataTypes/Asset.js';
|
|
|
29
30
|
* @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap
|
|
30
31
|
* @typedef {import('../../types/mcdev.d.js').TypeKeyCombo} TypeKeyCombo
|
|
31
32
|
* @typedef {import('../../types/mcdev.d.js').SDKError} SDKError
|
|
33
|
+
*
|
|
34
|
+
* @typedef {import('../../types/mcdev.d.js').AssetMap} AssetMap
|
|
32
35
|
* @typedef {import('../../types/mcdev.d.js').AssetItemSimple} AssetItemSimple
|
|
33
36
|
* @typedef {import('../../types/mcdev.d.js').AssetItemSimpleMap} AssetItemSimpleMap
|
|
34
37
|
* @typedef {import('../../types/mcdev.d.js').AssetItemIdSimpleMap} AssetItemIdSimpleMap
|
|
@@ -86,18 +89,20 @@ export default class ReplaceContentBlockReference {
|
|
|
86
89
|
*
|
|
87
90
|
* @param {string} str full code string
|
|
88
91
|
* @param {string} parentName name of the object that was passed in; used in error message only
|
|
89
|
-
* @param {
|
|
90
|
-
* @param {ContentBlockConversionTypes} [to] what to replace with
|
|
92
|
+
* @param {Set.<string>} [findAssetKeys] list of keys that were found referenced via ContentBlockByX; if set, method only gets keys and runs no updates
|
|
91
93
|
* @returns {string} replaced string
|
|
92
94
|
*/
|
|
93
|
-
static replaceReference(str, parentName,
|
|
95
|
+
static replaceReference(str, parentName, findAssetKeys) {
|
|
94
96
|
if (!str) {
|
|
95
97
|
const ex = new Error('No string provided');
|
|
98
|
+
// @ts-expect-error custom error object
|
|
96
99
|
ex.code = 200;
|
|
97
100
|
throw ex;
|
|
98
101
|
}
|
|
99
|
-
|
|
100
|
-
|
|
102
|
+
/** @type {ContentBlockConversionTypes[]} */
|
|
103
|
+
const fromList = Util.OPTIONS.referenceFrom;
|
|
104
|
+
/** @type {ContentBlockConversionTypes} */
|
|
105
|
+
const to = Util.OPTIONS.referenceTo;
|
|
101
106
|
let result = str;
|
|
102
107
|
let changes = 0;
|
|
103
108
|
const languages = [
|
|
@@ -117,7 +122,12 @@ export default class ReplaceContentBlockReference {
|
|
|
117
122
|
if (referencedAsset && referencedAsset[to]) {
|
|
118
123
|
// make sure we not only found the asset but also have a replacement for it (folder issue could block swap to ContentBlockByName)
|
|
119
124
|
changes++;
|
|
120
|
-
|
|
125
|
+
if (findAssetKeys) {
|
|
126
|
+
findAssetKeys.add(referencedAsset.key);
|
|
127
|
+
return;
|
|
128
|
+
} else {
|
|
129
|
+
return this.#replaceWith(referencedAsset, to, lang.isSsjs);
|
|
130
|
+
}
|
|
121
131
|
} else {
|
|
122
132
|
if (referencedAsset && !referencedAsset[to]) {
|
|
123
133
|
// this is expected to only happen if to=="name"
|
|
@@ -133,6 +143,7 @@ export default class ReplaceContentBlockReference {
|
|
|
133
143
|
}
|
|
134
144
|
if (!changes) {
|
|
135
145
|
const ex = new Error('No changes made to the code.');
|
|
146
|
+
// @ts-expect-error custom error object
|
|
136
147
|
ex.code = 200;
|
|
137
148
|
throw ex;
|
|
138
149
|
}
|
|
@@ -158,7 +169,7 @@ export default class ReplaceContentBlockReference {
|
|
|
158
169
|
break;
|
|
159
170
|
}
|
|
160
171
|
case 'name': {
|
|
161
|
-
if (isSsjs) {
|
|
172
|
+
if (isSsjs && typeof identifier === 'string') {
|
|
162
173
|
identifier = identifier.replaceAll('\\\\', '\\');
|
|
163
174
|
}
|
|
164
175
|
reference = ReplaceContentBlockReference.assetCacheMap.name[identifier];
|
|
@@ -193,40 +204,34 @@ export default class ReplaceContentBlockReference {
|
|
|
193
204
|
}
|
|
194
205
|
|
|
195
206
|
/**
|
|
207
|
+
* ensures we cache the right things from disk and if required from server
|
|
196
208
|
*
|
|
197
209
|
* @param {Mcdevrc} properties properties for auth
|
|
198
210
|
saved
|
|
199
211
|
* @param {BuObject} buObject properties for auth
|
|
212
|
+
* @param {boolean} [retrieveSharedOnly] for --dependencies only, do not have to re-retrieve local assets
|
|
213
|
+
* @returns {Promise.<void>} -
|
|
200
214
|
*/
|
|
201
|
-
static async createCacheMap(properties, buObject) {
|
|
202
|
-
const
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
Util.logger.info('Caching folders');
|
|
208
|
-
Folder.buObject = buObject;
|
|
209
|
-
Folder.properties = properties;
|
|
210
|
-
Folder.client = client;
|
|
211
|
-
const resultFolder = await Folder.retrieveForCache(null, ['asset', 'asset-shared']);
|
|
212
|
-
cache.setMetadata('folder', resultFolder.metadata);
|
|
215
|
+
static async createCacheMap(properties, buObject, retrieveSharedOnly = false) {
|
|
216
|
+
const { localAssets, sharedAssets } = await ReplaceContentBlockReference._retrieveCache(
|
|
217
|
+
buObject,
|
|
218
|
+
properties,
|
|
219
|
+
retrieveSharedOnly
|
|
220
|
+
);
|
|
213
221
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
Asset.client = client;
|
|
218
|
-
const resultAsset = await Asset.retrieveForCache(undefined, [
|
|
219
|
-
'asset',
|
|
220
|
-
'code',
|
|
221
|
-
'textfile',
|
|
222
|
-
'block',
|
|
223
|
-
'other',
|
|
224
|
-
]);
|
|
225
|
-
for (const element of Object.values(resultAsset.metadata)) {
|
|
226
|
-
// ensure we got the folder-path in our cache
|
|
227
|
-
Asset.setFolderPath(element);
|
|
222
|
+
ReplaceContentBlockReference._createCacheMap(localAssets);
|
|
223
|
+
ReplaceContentBlockReference._createCacheMap(sharedAssets);
|
|
224
|
+
}
|
|
228
225
|
|
|
226
|
+
/**
|
|
227
|
+
* helper for {@link this.createCacheMap} that converts AssetMap into Asset
|
|
228
|
+
*
|
|
229
|
+
* @param {AssetMap} metadataMap list of local or shared assets
|
|
230
|
+
*/
|
|
231
|
+
static _createCacheMap(metadataMap) {
|
|
232
|
+
for (const element of Object.values(metadataMap)) {
|
|
229
233
|
// create actual cache map
|
|
234
|
+
/** @type {AssetItemSimple} */
|
|
230
235
|
const simpleAsset = {
|
|
231
236
|
id: element.id,
|
|
232
237
|
key: element.customerKey,
|
|
@@ -235,44 +240,88 @@ saved
|
|
|
235
240
|
: null,
|
|
236
241
|
};
|
|
237
242
|
// ! note that ContentBlockByName expects backslashes between folders and file name, not forward slashes
|
|
238
|
-
|
|
239
|
-
|
|
243
|
+
this.assetCacheMap.id[simpleAsset.id] = simpleAsset;
|
|
244
|
+
this.assetCacheMap.key[simpleAsset.key] = simpleAsset;
|
|
240
245
|
if (simpleAsset.name) {
|
|
241
246
|
// while asset without path could still be found via search, it would no longer referencable via ContentBlockByName
|
|
242
|
-
|
|
247
|
+
this.assetCacheMap.name[simpleAsset.name] = simpleAsset;
|
|
243
248
|
}
|
|
244
249
|
}
|
|
250
|
+
}
|
|
245
251
|
|
|
246
|
-
|
|
252
|
+
/**
|
|
253
|
+
* helper for {@link this.createCacheMap}
|
|
254
|
+
*
|
|
255
|
+
* @param {BuObject} buObject references credentials
|
|
256
|
+
* @param {Mcdevrc} properties central properties object
|
|
257
|
+
* @param {boolean} [retrieveSharedOnly] for --dependencies only, do not have to re-retrieve local assets
|
|
258
|
+
* @returns {Promise.<{localAssets: AssetMap, sharedAssets: AssetMap}>} -
|
|
259
|
+
*/
|
|
260
|
+
static async _retrieveCache(buObject, properties, retrieveSharedOnly = false) {
|
|
261
|
+
const client = auth.getSDK(buObject);
|
|
247
262
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
Asset.setFolderPath(element);
|
|
263
|
+
if (!cache.getCache()) {
|
|
264
|
+
cache.initCache(buObject);
|
|
265
|
+
}
|
|
266
|
+
Util.logger.info(' - Caching folders');
|
|
267
|
+
Folder.buObject = buObject;
|
|
268
|
+
Folder.properties = properties;
|
|
269
|
+
Folder.client = client;
|
|
270
|
+
const resultFolder = await Folder.retrieveForCache(null, ['asset', 'asset-shared']);
|
|
271
|
+
cache.setMetadata('folder', resultFolder.metadata);
|
|
258
272
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
+
let localAssets;
|
|
274
|
+
if (retrieveSharedOnly) {
|
|
275
|
+
Util.logger.debug(' - Caching assets locally');
|
|
276
|
+
if (!Asset.getJsonFromFSCache) {
|
|
277
|
+
// avoid re-reading the same files in every recursive iteration
|
|
278
|
+
Asset.getJsonFromFSCache = await Asset.getJsonFromFS(
|
|
279
|
+
File.normalizePath([
|
|
280
|
+
properties.directories.retrieve,
|
|
281
|
+
buObject.credential,
|
|
282
|
+
buObject.businessUnit,
|
|
283
|
+
Asset.definition.type,
|
|
284
|
+
])
|
|
285
|
+
);
|
|
286
|
+
}
|
|
287
|
+
localAssets = Asset.getJsonFromFSCache;
|
|
288
|
+
cache.setMetadata('asset', Asset.getJsonFromFSCache);
|
|
289
|
+
} else {
|
|
290
|
+
Util.logger.info(' - Caching assets from server');
|
|
291
|
+
Asset.buObject = buObject;
|
|
292
|
+
Asset.properties = properties;
|
|
293
|
+
Asset.client = client;
|
|
294
|
+
const resultAsset = await Asset.retrieveForCache(
|
|
295
|
+
undefined,
|
|
296
|
+
Asset.definition.crosslinkedSubTypes
|
|
297
|
+
);
|
|
298
|
+
for (const element of Object.values(resultAsset.metadata)) {
|
|
299
|
+
// ensure we got the folder-path in our cache
|
|
300
|
+
Asset.setFolderPath(element);
|
|
273
301
|
}
|
|
302
|
+
localAssets = resultAsset.metadata;
|
|
303
|
+
cache.setMetadata('asset', resultAsset.metadata);
|
|
274
304
|
}
|
|
275
305
|
|
|
306
|
+
// get shared assets
|
|
307
|
+
Util.logger.info(' - Caching shared assets from server (not stored on disk)');
|
|
308
|
+
Asset.buObject = buObject;
|
|
309
|
+
Asset.properties = properties;
|
|
310
|
+
Asset.client = client;
|
|
311
|
+
const sharedAssets = (
|
|
312
|
+
await Asset.retrieveForCache(
|
|
313
|
+
undefined,
|
|
314
|
+
Asset.definition.crosslinkedSubTypes,
|
|
315
|
+
undefined,
|
|
316
|
+
true
|
|
317
|
+
)
|
|
318
|
+
)?.metadata;
|
|
276
319
|
// lets not put the shared assets into our cache to avoid confusing the system...
|
|
320
|
+
|
|
321
|
+
for (const element of Object.values(sharedAssets)) {
|
|
322
|
+
// ensure we got the folder-path in our cache
|
|
323
|
+
Asset.setFolderPath(element);
|
|
324
|
+
}
|
|
325
|
+
return { localAssets, sharedAssets };
|
|
277
326
|
}
|
|
278
327
|
}
|
package/lib/util/util.js
CHANGED
|
@@ -103,7 +103,7 @@ export const Util = {
|
|
|
103
103
|
return true;
|
|
104
104
|
} else {
|
|
105
105
|
Util.logger.error(`Could not find the market '${market}' in your configuration file.`);
|
|
106
|
-
const marketArr = Object.
|
|
106
|
+
const marketArr = Object.keys(properties.markets);
|
|
107
107
|
|
|
108
108
|
if (marketArr.length) {
|
|
109
109
|
Util.logger.info('Available markets are: ' + marketArr.join(', '));
|
|
@@ -797,13 +797,14 @@ export const Util = {
|
|
|
797
797
|
* helper to print the subtypes we filtered by
|
|
798
798
|
*
|
|
799
799
|
* @param {string[]} subTypeArr list of subtypes to be printed
|
|
800
|
+
* @param {string} [indent] optional prefix of spaces to be added to the log message
|
|
800
801
|
* @returns {void}
|
|
801
802
|
*/
|
|
802
|
-
logSubtypes(subTypeArr) {
|
|
803
|
+
logSubtypes(subTypeArr, indent = '') {
|
|
803
804
|
if (subTypeArr && subTypeArr.length > 0) {
|
|
804
805
|
Util.logger.info(
|
|
805
806
|
Util.getGrayMsg(
|
|
806
|
-
|
|
807
|
+
`${indent} - Subtype${subTypeArr.length > 1 ? 's' : ''}: ${[...subTypeArr].sort().join(', ')}`
|
|
807
808
|
)
|
|
808
809
|
);
|
|
809
810
|
}
|
|
@@ -837,6 +838,10 @@ export const Util = {
|
|
|
837
838
|
* @returns {Promise.<void>} - promise to wait for
|
|
838
839
|
*/
|
|
839
840
|
async sleep(ms) {
|
|
841
|
+
if (Util.OPTIONS._runningTest) {
|
|
842
|
+
Util.logger.debug('Skipping sleep in test mode');
|
|
843
|
+
return;
|
|
844
|
+
}
|
|
840
845
|
return new Promise((resolve) => {
|
|
841
846
|
setTimeout(resolve, ms);
|
|
842
847
|
});
|
|
@@ -956,7 +961,7 @@ export const Util = {
|
|
|
956
961
|
/**
|
|
957
962
|
* helper for Retriever and Deployer class
|
|
958
963
|
*
|
|
959
|
-
* @param {string[]} typeArr -
|
|
964
|
+
* @param {string | string[]} typeArr -
|
|
960
965
|
* @param {string[]} keyArr -
|
|
961
966
|
* @param {boolean} [returnEmpty] returns array with null element if false/not set; Retriever needs this to be false; Deployer needs it to be true
|
|
962
967
|
* @returns {TypeKeyCombo} -
|
|
@@ -968,6 +973,9 @@ export const Util = {
|
|
|
968
973
|
}
|
|
969
974
|
/** @type {TypeKeyCombo} */
|
|
970
975
|
const typeKeyMap = {};
|
|
976
|
+
if ('string' === typeof typeArr) {
|
|
977
|
+
typeArr = [typeArr];
|
|
978
|
+
}
|
|
971
979
|
// no keys or array of keys was provided (likely called via CLI or to retrieve all)
|
|
972
980
|
// transform into TypeKeyCombo to iterate over it
|
|
973
981
|
for (const type of typeArr) {
|
|
@@ -975,6 +983,73 @@ export const Util = {
|
|
|
975
983
|
}
|
|
976
984
|
return typeKeyMap;
|
|
977
985
|
},
|
|
986
|
+
/**
|
|
987
|
+
* helper that converts TypeKeyCombo objects into a string with all relevant -m parameters
|
|
988
|
+
*
|
|
989
|
+
* @param {TypeKeyCombo} [selectedTypes] selected metadata types & key
|
|
990
|
+
* @returns {string} object converted into --metadata parameters
|
|
991
|
+
*/
|
|
992
|
+
convertTypeKeyToCli(selectedTypes) {
|
|
993
|
+
return selectedTypes
|
|
994
|
+
? Object.keys(selectedTypes)
|
|
995
|
+
.reduce((previousValue, type) => {
|
|
996
|
+
previousValue.push(
|
|
997
|
+
...selectedTypes[type].map((key) =>
|
|
998
|
+
key === null ? `-m ${type}` : `-m "${type}:${key}"`
|
|
999
|
+
)
|
|
1000
|
+
);
|
|
1001
|
+
return previousValue;
|
|
1002
|
+
}, [])
|
|
1003
|
+
.join(' ')
|
|
1004
|
+
: '';
|
|
1005
|
+
},
|
|
1006
|
+
/**
|
|
1007
|
+
* helper that converts TypeKeyCombo objects into a string with all relevant -m parameters
|
|
1008
|
+
*
|
|
1009
|
+
* @param {TypeKeyCombo} [selectedTypes] selected metadata types & key
|
|
1010
|
+
* @returns {string} object converted into --metadata parameters
|
|
1011
|
+
*/
|
|
1012
|
+
convertTypeKeyToString(selectedTypes) {
|
|
1013
|
+
return selectedTypes
|
|
1014
|
+
? Object.keys(selectedTypes)
|
|
1015
|
+
.reduce((previousValue, type) => {
|
|
1016
|
+
previousValue.push(
|
|
1017
|
+
selectedTypes[type]
|
|
1018
|
+
.map((key, index) => {
|
|
1019
|
+
let response = '';
|
|
1020
|
+
if (index === 0) {
|
|
1021
|
+
response += `${type}`;
|
|
1022
|
+
}
|
|
1023
|
+
if (key !== null && index === 0) {
|
|
1024
|
+
response += ' (';
|
|
1025
|
+
}
|
|
1026
|
+
response += key === null ? `` : `"${key}"`;
|
|
1027
|
+
if (key !== null && index === selectedTypes[type].length - 1) {
|
|
1028
|
+
response += ')';
|
|
1029
|
+
}
|
|
1030
|
+
return response;
|
|
1031
|
+
})
|
|
1032
|
+
.join(', ')
|
|
1033
|
+
);
|
|
1034
|
+
return previousValue;
|
|
1035
|
+
}, [])
|
|
1036
|
+
.join(', ')
|
|
1037
|
+
: '';
|
|
1038
|
+
},
|
|
1039
|
+
/**
|
|
1040
|
+
* helper that checks how many keys are defined in TypeKeyCombo object
|
|
1041
|
+
*
|
|
1042
|
+
* @param {TypeKeyCombo} [selectedTypes] selected metadata types & key
|
|
1043
|
+
* @returns {number} amount of keys across all types
|
|
1044
|
+
*/
|
|
1045
|
+
getTypeKeyCount(selectedTypes) {
|
|
1046
|
+
return Object.keys(selectedTypes).reduce(
|
|
1047
|
+
(previousValue, type) =>
|
|
1048
|
+
previousValue + (selectedTypes[type] ? selectedTypes[type].length : 0),
|
|
1049
|
+
0
|
|
1050
|
+
);
|
|
1051
|
+
},
|
|
1052
|
+
|
|
978
1053
|
/**
|
|
979
1054
|
* async version of Array.find()
|
|
980
1055
|
* returns the first element in the provided array that satisfies the provided testin function
|
|
@@ -990,6 +1065,17 @@ export const Util = {
|
|
|
990
1065
|
}
|
|
991
1066
|
}
|
|
992
1067
|
},
|
|
1068
|
+
/**
|
|
1069
|
+
*
|
|
1070
|
+
* @param {Array} array array to be chunked
|
|
1071
|
+
* @param {number} chunk_size integer > 0
|
|
1072
|
+
* @returns {Array[]} array of arrays with max chunk_size members per element, last element might have less
|
|
1073
|
+
*/
|
|
1074
|
+
chunk(array, chunk_size) {
|
|
1075
|
+
return array.length == 0
|
|
1076
|
+
? []
|
|
1077
|
+
: [array.splice(0, chunk_size)].concat(this.chunk(array, chunk_size));
|
|
1078
|
+
},
|
|
993
1079
|
};
|
|
994
1080
|
|
|
995
1081
|
Util.startLogger(false, true);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcdev",
|
|
3
|
-
"version": "7.0
|
|
3
|
+
"version": "7.1.0",
|
|
4
4
|
"description": "Accenture Salesforce Marketing Cloud DevTools",
|
|
5
5
|
"author": "Accenture: joern.berkefeld, douglas.midgley, robert.zimmermann, maciej.barnas",
|
|
6
6
|
"license": "MIT",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"debug": "node --nolazy --inspect-brk=9229 lib/cli.js",
|
|
55
55
|
"lint:fix": "eslint --fix lib/**/*.js types/*.js test/**/*.js",
|
|
56
56
|
"lint": "eslint lib/**/*.js types/*.js test/**/*.js",
|
|
57
|
-
"lint-ts": "tsc -p
|
|
57
|
+
"lint-ts": "tsc -p tsconfig.npmScripts.json",
|
|
58
58
|
"prepare": "husky || true",
|
|
59
59
|
"lint-and-test": "run-s lint test",
|
|
60
60
|
"test": "mocha --reporter-option maxDiffSize=25000",
|
|
@@ -71,45 +71,48 @@
|
|
|
71
71
|
"console.table": "0.10.0",
|
|
72
72
|
"deep-equal": "2.2.3",
|
|
73
73
|
"fs-extra": "11.2.0",
|
|
74
|
-
"inquirer": "
|
|
74
|
+
"inquirer": "10.0.1",
|
|
75
75
|
"json-to-table": "4.2.1",
|
|
76
76
|
"mustache": "4.2.0",
|
|
77
|
-
"p-limit": "
|
|
78
|
-
"prettier": "3.3.
|
|
79
|
-
"prettier-plugin-sql": "0.18.
|
|
80
|
-
"semver": "7.6.
|
|
81
|
-
"sfmc-sdk": "2.
|
|
77
|
+
"p-limit": "6.1.0",
|
|
78
|
+
"prettier": "3.3.3",
|
|
79
|
+
"prettier-plugin-sql": "0.18.1",
|
|
80
|
+
"semver": "7.6.3",
|
|
81
|
+
"sfmc-sdk": "2.1.1",
|
|
82
82
|
"simple-git": "3.25.0",
|
|
83
83
|
"toposort": "2.0.2",
|
|
84
84
|
"update-notifier": "7.0.0",
|
|
85
|
-
"winston": "3.13.
|
|
85
|
+
"winston": "3.13.1",
|
|
86
86
|
"yargs": "17.7.2"
|
|
87
87
|
},
|
|
88
88
|
"devDependencies": {
|
|
89
|
-
"@eslint/js": "9.
|
|
90
|
-
"@types/
|
|
91
|
-
"@types/
|
|
89
|
+
"@eslint/js": "9.7.0",
|
|
90
|
+
"@types/fs-extra": "11.0.4",
|
|
91
|
+
"@types/inquirer": "9.0.7",
|
|
92
|
+
"@types/mocha": "10.0.7",
|
|
93
|
+
"@types/node": "20.14.10",
|
|
94
|
+
"@types/yargs": "17.0.32",
|
|
92
95
|
"assert": "2.1.0",
|
|
93
96
|
"axios-mock-adapter": "1.22.0",
|
|
94
97
|
"c8": "10.0.0",
|
|
95
98
|
"chai": "5.1.1",
|
|
96
99
|
"chai-files": "1.4.0",
|
|
97
|
-
"eslint": "9.
|
|
100
|
+
"eslint": "9.7.0",
|
|
98
101
|
"eslint-config-prettier": "9.1.0",
|
|
99
102
|
"eslint-config-ssjs": "2.0.0",
|
|
100
|
-
"eslint-plugin-jsdoc": "48.
|
|
103
|
+
"eslint-plugin-jsdoc": "48.8.3",
|
|
101
104
|
"eslint-plugin-mocha": "10.4.3",
|
|
102
|
-
"eslint-plugin-prettier": "5.1
|
|
103
|
-
"eslint-plugin-unicorn": "
|
|
105
|
+
"eslint-plugin-prettier": "5.2.1",
|
|
106
|
+
"eslint-plugin-unicorn": "54.0.0",
|
|
104
107
|
"fast-xml-parser": "4.4.0",
|
|
105
|
-
"globals": "15.
|
|
108
|
+
"globals": "15.8.0",
|
|
106
109
|
"husky": "9.0.11",
|
|
107
110
|
"lint-staged": "15.2.7",
|
|
108
|
-
"mocha": "10.
|
|
111
|
+
"mocha": "10.7.0",
|
|
109
112
|
"mock-fs": "5.2.0",
|
|
110
113
|
"npm-run-all": "4.1.5",
|
|
111
114
|
"prettier-eslint": "16.3.0",
|
|
112
|
-
"typescript": "5.
|
|
115
|
+
"typescript": "5.5.3"
|
|
113
116
|
},
|
|
114
117
|
"optionalDependencies": {
|
|
115
118
|
"fsevents": "*"
|