mcdev 5.1.0 → 5.3.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.
Files changed (256) hide show
  1. package/.eslintrc.json +4 -4
  2. package/.fork/custom-commands.json +12 -0
  3. package/.github/ISSUE_TEMPLATE/bug.yml +2 -0
  4. package/.github/PULL_REQUEST_TEMPLATE/pr_template_release.md +19 -0
  5. package/.github/PULL_REQUEST_TEMPLATE.md +2 -2
  6. package/.github/workflows/coverage-develop-branch.yml +0 -2
  7. package/.github/workflows/coverage-main-branch.yml +0 -2
  8. package/.github/workflows/coverage.yml +0 -2
  9. package/.husky/post-checkout +1 -0
  10. package/.husky/post-merge +1 -0
  11. package/.vscode/extensions.json +4 -0
  12. package/docs/dist/documentation.md +1034 -296
  13. package/lib/Deployer.js +25 -25
  14. package/lib/MetadataTypeDefinitions.js +2 -1
  15. package/lib/MetadataTypeInfo.js +2 -1
  16. package/lib/Retriever.js +1 -1
  17. package/lib/cli.js +165 -10
  18. package/lib/index.js +398 -95
  19. package/lib/metadataTypes/Asset.js +10 -11
  20. package/lib/metadataTypes/AttributeGroup.js +76 -2
  21. package/lib/metadataTypes/AttributeSet.js +367 -0
  22. package/lib/metadataTypes/Automation.js +483 -137
  23. package/lib/metadataTypes/DataExtension.js +465 -68
  24. package/lib/metadataTypes/DataExtensionField.js +31 -14
  25. package/lib/metadataTypes/Event.js +2 -3
  26. package/lib/metadataTypes/Folder.js +1 -1
  27. package/lib/metadataTypes/Journey.js +13 -7
  28. package/lib/metadataTypes/MetadataType.js +212 -54
  29. package/lib/metadataTypes/MobileKeyword.js +9 -9
  30. package/lib/metadataTypes/MobileMessage.js +5 -5
  31. package/lib/metadataTypes/Query.js +26 -10
  32. package/lib/metadataTypes/Script.js +3 -3
  33. package/lib/metadataTypes/TransactionalEmail.js +94 -17
  34. package/lib/metadataTypes/TransactionalMessage.js +3 -2
  35. package/lib/metadataTypes/TransactionalSMS.js +5 -5
  36. package/lib/metadataTypes/TriggeredSend.js +25 -50
  37. package/lib/metadataTypes/User.js +7 -4
  38. package/lib/metadataTypes/Verification.js +230 -0
  39. package/lib/metadataTypes/definitions/AttributeGroup.definition.js +119 -108
  40. package/lib/metadataTypes/definitions/{SetDefinition.definition.js → AttributeSet.definition.js} +123 -43
  41. package/lib/metadataTypes/definitions/Automation.definition.js +23 -15
  42. package/lib/metadataTypes/definitions/ImportFile.definition.js +36 -6
  43. package/lib/metadataTypes/definitions/TransactionalEmail.definition.js +19 -1
  44. package/lib/metadataTypes/definitions/TriggeredSend.definition.js +1 -0
  45. package/lib/metadataTypes/definitions/Verification.definition.js +88 -0
  46. package/lib/util/cache.js +9 -4
  47. package/lib/util/cli.js +40 -0
  48. package/lib/util/file.js +2 -2
  49. package/lib/util/init.js +84 -0
  50. package/lib/util/util.js +121 -13
  51. package/package.json +13 -13
  52. package/test/mockRoot/.mcdevrc.json +1 -1
  53. package/test/mockRoot/deploy/testInstance/_ParentBU_/dataExtension/testExisting_dataExtensionShared.dataExtension-meta.json +59 -0
  54. package/test/mockRoot/deploy/testInstance/_ParentBU_/dataExtension/testNew_dataExtensionShared.dataExtension-meta.json +23 -0
  55. package/test/mockRoot/deploy/testInstance/testBU/automation/testExisting_automation.automation-meta.json +1 -2
  56. package/test/mockRoot/deploy/testInstance/testBU/automation/testNew_automation.automation-meta.json +9 -6
  57. package/test/mockRoot/deploy/testInstance/testBU/dataExtension/testExisting_dataExtension.dataExtension-meta.json +1 -0
  58. package/test/mockRoot/deploy/testInstance/testBU/dataExtract/testExisting_dataExtract.dataExtract-meta.json +35 -0
  59. package/test/mockRoot/deploy/testInstance/testBU/dataExtract/testNew_dataExtract.dataExtract-meta.json +35 -0
  60. package/test/mockRoot/deploy/testInstance/testBU/fileTransfer/testExisting_fileTransfer.fileTransfer-meta.json +17 -0
  61. package/test/mockRoot/deploy/testInstance/testBU/fileTransfer/testNew_fileTransfer.fileTransfer-meta.json +17 -0
  62. package/test/mockRoot/deploy/testInstance/testBU/importFile/testExisting_importFile.importFile-meta.json +29 -0
  63. package/test/mockRoot/deploy/testInstance/testBU/importFile/testNew_importFile.importFile-meta.json +29 -0
  64. package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query_fixKeys.query-meta.json +11 -0
  65. package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query_fixKeys.query-meta.sql +6 -0
  66. package/test/mockRoot/deploy/testInstance/testBU/script/testExisting_script.script-meta.json +6 -0
  67. package/test/mockRoot/deploy/testInstance/testBU/script/testExisting_script.script-meta.ssjs +1 -0
  68. package/test/mockRoot/deploy/testInstance/testBU/script/testNew_script.script-meta.json +6 -0
  69. package/test/mockRoot/deploy/testInstance/testBU/script/testNew_script.script-meta.ssjs +1 -0
  70. package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testExisting_temail.transactionalEmail-meta.json +3 -4
  71. package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testNew_temail.transactionalEmail-meta.json +1 -6
  72. package/test/mockRoot/deploy/testInstance/testBU/triggeredSend/testExisting_triggeredSend.triggeredSend-meta.json +29 -0
  73. package/test/mockRoot/deploy/testInstance/testBU/triggeredSend/testNew_triggeredSend.triggeredSend-meta.json +29 -0
  74. package/test/mockRoot/deploy/testInstance/testBU/verification/testExisting_39f6a488-20eb-4ba0-b0b9.verification-meta.json +11 -0
  75. package/test/mockRoot/deploy/testInstance/testBU/verification/testNew_39f6a488-20eb-4ba0-b0b9.verification-meta.json +11 -0
  76. package/test/resourceFactory.js +77 -12
  77. package/test/resources/1111111/accountUser/retrieve-ActiveFlag=falseANDCustomerKey=testExisting_userANDEmaillike@-response.xml +27 -0
  78. package/test/resources/1111111/accountUser/retrieve-ActiveFlag=falseANDEmaillike@-response.xml +156 -0
  79. package/test/resources/1111111/accountUser/retrieve-ActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-response.xml +87 -0
  80. package/test/resources/1111111/accountUser/retrieve-ActiveFlag=trueANDEmaillike@-response.xml +156 -0
  81. package/test/resources/1111111/accountUser/retrieve-CustomerKey=testExisting_userANDActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-response.xml +27 -0
  82. package/test/resources/1111111/accountUserAccount/retrieve-AccountUser.AccountUserID=700301950-response.xml +60 -0
  83. package/test/resources/1111111/data/v1/customobjectdata/key/testExisting_dataExtensionShared/rowset/get-response.json +13 -0
  84. package/test/resources/1111111/dataExtension/create-expected.json +23 -0
  85. package/test/resources/1111111/dataExtension/create-response.xml +59 -0
  86. package/test/resources/1111111/dataExtension/retrieve-expected.json +55 -0
  87. package/test/resources/1111111/dataExtension/retrieve-expected.md +18 -0
  88. package/test/resources/1111111/dataExtension/retrieve-response.xml +27 -1
  89. package/test/resources/1111111/dataExtension/update-expected.json +55 -0
  90. package/test/resources/1111111/dataExtension/update-response.xml +57 -0
  91. package/test/resources/1111111/dataExtensionField/retrieve-CustomerKey=[testExisting_dataExtensionShared].[TriggerUpdate_randomNumber_]-response.xml +45 -0
  92. package/test/resources/1111111/dataExtensionField/retrieve-DataExtension.CustomerKey=testExisting_dataExtensionShared-response.xml +98 -0
  93. package/test/resources/1111111/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_dataExtensionSharedORDataExtension.CustomerKey=testExisting_dataExtensionShared-response.xml +98 -0
  94. package/test/resources/1111111/dataExtensionField/retrieve-response.xml +98 -0
  95. package/test/resources/1111111/dataExtensionTemplate/retrieve-response.xml +303 -0
  96. package/test/resources/1111111/dataFolder/retrieve-ContentType=synchronizeddataextensionORContentType=shared_salesforcedataextensionORContentType=shared_dataextensionORContentType=shared_dataORContentType=salesforcedataextensionORContentType=dataextensionORContentType=hidden-response.xml +387 -0
  97. package/test/resources/1111111/dataFolder/retrieve-response.xml +353 -9
  98. package/test/resources/1111111/user/retrieve-expected.md +4 -2
  99. package/test/resources/9999999/attributeGroup/retrieve-expected.json +25 -0
  100. package/test/resources/9999999/attributeSet/retrieve-expected.json +143 -0
  101. package/test/resources/9999999/automation/build-expected.json +5 -2
  102. package/test/resources/9999999/automation/create-expected.json +11 -8
  103. package/test/resources/9999999/automation/create-testNew_automation-expected.md +5 -4
  104. package/test/resources/9999999/automation/patch_fixKeys-pause-expected.json +44 -0
  105. package/test/resources/9999999/automation/patch_fixKeys-schedule-expected.json +44 -0
  106. package/test/resources/9999999/automation/perform-08afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +42 -0
  107. package/test/resources/9999999/automation/perform-08afb0e2-b00a-4c88-fixKey_pause-response.xml +42 -0
  108. package/test/resources/9999999/automation/perform-08afb0e2-b00a-4c88-fixKey_schedule-response.xml +42 -0
  109. package/test/resources/9999999/automation/perform-a8afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +42 -0
  110. package/test/resources/9999999/automation/retrieve-expected.json +5 -2
  111. package/test/resources/9999999/automation/retrieve-testExisting_automation-expected.md +3 -2
  112. package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +52 -0
  113. package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-ad2e-pause-response.xml +38 -0
  114. package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-fixKey_pause-response.xml +52 -0
  115. package/test/resources/9999999/automation/schedule-08afb0e2-b00a-4c88-fixKey_schedule-response.xml +52 -0
  116. package/test/resources/9999999/automation/schedule-a8afb0e2-b00a-4c88-ad2e-1f7f8788c560-response.xml +52 -0
  117. package/test/resources/9999999/automation/template-expected.json +5 -2
  118. package/test/resources/9999999/automation/update-expected.json +1 -2
  119. package/test/resources/9999999/automation/update-testExisting_automation-expected.md +2 -2
  120. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-1f7f8788c560/get-response.json +7 -0
  121. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-pause/get-response.json +85 -0
  122. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-pause/patch-response.json +85 -0
  123. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_pause/get-response.json +85 -0
  124. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_pause/patch-response.json +85 -0
  125. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_schedule/get-response.json +85 -0
  126. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-fixKey_schedule/patch-response.json +85 -0
  127. package/test/resources/9999999/automation/v1/automations/a8afb0e2-b00a-4c88-ad2e-1f7f8788c560/get-response.json +1 -1
  128. package/test/resources/9999999/automation/v1/automations/post-response.json +27 -19
  129. package/test/resources/9999999/automation/v1/dataextracts/56c5370a-f988-4f36-b0ee-0f876573f6d7/patch-response.json +38 -0
  130. package/test/resources/9999999/automation/v1/dataextracts/post-response.json +38 -0
  131. package/test/resources/9999999/automation/v1/dataextracttypes/get-response.json +50 -0
  132. package/test/resources/9999999/automation/v1/dataverifications/post-response.json +12 -0
  133. package/test/resources/9999999/automation/v1/dataverifications/testExisting_39f6a488-20eb-4ba0-b0b9/delete-response.json +0 -0
  134. package/test/resources/9999999/automation/v1/dataverifications/testExisting_39f6a488-20eb-4ba0-b0b9/get-response.json +12 -0
  135. package/test/resources/9999999/automation/v1/dataverifications/testExisting_39f6a488-20eb-4ba0-b0b9/patch-response.json +12 -0
  136. package/test/resources/9999999/automation/v1/filetransfers/72c328ac-f5b0-4e37-91d3-a775666f15a6/patch-response.json +18 -0
  137. package/test/resources/9999999/automation/v1/filetransfers/post-response.json +18 -0
  138. package/test/resources/9999999/automation/v1/ftplocations/get-response.json +18 -0
  139. package/test/resources/9999999/automation/v1/imports/9d16f42c-2260-ed11-b849-48df37d1de8b/patch-response.json +31 -0
  140. package/test/resources/9999999/automation/v1/imports/get-response.json +1 -1
  141. package/test/resources/9999999/automation/v1/imports/post-response.json +30 -0
  142. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dae/actions/start/post-response.txt +1 -0
  143. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeys/get-response.json +17 -0
  144. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeys/patch-response.json +18 -0
  145. package/test/resources/9999999/automation/v1/queries/get-response.json +18 -1
  146. package/test/resources/9999999/automation/v1/scripts/39f6a488-20eb-4ba0-b0b9-023725b574e4/patch-response.json +10 -0
  147. package/test/resources/9999999/automation/v1/scripts/get-response.json +12 -2
  148. package/test/resources/9999999/automation/v1/scripts/post-response.json +10 -0
  149. package/test/resources/9999999/dataExtension/build-expected.json +16 -0
  150. package/test/resources/9999999/dataExtension/delete-response.xml +42 -0
  151. package/test/resources/9999999/dataExtension/retrieve-Name=testExisting_dataExtension-response.xml +52 -0
  152. package/test/resources/9999999/dataExtension/retrieve-expected.json +16 -0
  153. package/test/resources/9999999/dataExtension/retrieve-expected.md +3 -1
  154. package/test/resources/9999999/dataExtension/template-expected.json +16 -0
  155. package/test/resources/9999999/dataExtension/update-expected.json +17 -1
  156. package/test/resources/9999999/dataExtensionField/retrieve-CustomerKey=[testExisting_dataExtension].[LastName]-response.xml +44 -0
  157. package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testExisting_dataExtension-response.xml +133 -0
  158. package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_dataExtensionORDataExtension.CustomerKey=testExisting_dataExtension-response.xml +99 -0
  159. package/test/resources/9999999/dataExtensionField/retrieve-response.xml +36 -1
  160. package/test/resources/9999999/dataExtract/build-expected.json +35 -0
  161. package/test/resources/9999999/dataExtract/get-expected.json +39 -0
  162. package/test/resources/9999999/dataExtract/patch-expected.json +37 -0
  163. package/test/resources/9999999/dataExtract/post-expected.json +37 -0
  164. package/test/resources/9999999/dataExtract/template-expected.json +35 -0
  165. package/test/resources/9999999/dataFolder/retrieve-ContentType=contextual_suppression_listORContentType=publicationORContentType=suppression_listORContentType=mysubsORContentType=list-response.xml +136 -0
  166. package/test/resources/9999999/dataFolder/retrieve-ContentType=ssjsactivity-response.xml +48 -0
  167. package/test/resources/9999999/dataFolder/retrieve-ContentType=synchronizeddataextensionORContentType=shared_salesforcedataextensionORContentType=shared_dataextensionORContentType=shared_dataORContentType=salesforcedataextensionORContentType=dataextensionORContentType=hidden-response.xml +117 -0
  168. package/test/resources/9999999/dataFolder/retrieve-ContentType=triggered_send_journeybuilderORContentType=triggered_sendORContentType=hidden-response.xml +276 -0
  169. package/test/resources/9999999/dataFolder/retrieve-response.xml +23 -0
  170. package/test/resources/9999999/email/retrieve-response.xml +203 -0
  171. package/test/resources/9999999/fileTransfer/build-expected.json +15 -0
  172. package/test/resources/9999999/fileTransfer/get-expected.json +17 -0
  173. package/test/resources/9999999/fileTransfer/patch-expected.json +17 -0
  174. package/test/resources/9999999/fileTransfer/post-expected.json +17 -0
  175. package/test/resources/9999999/fileTransfer/template-expected.json +15 -0
  176. package/test/resources/9999999/hub/v1/contacts/schema/attributeGroups/get-response.json +628 -0
  177. package/test/resources/9999999/hub/v1/contacts/schema/setDefinitions/get-response.json +20194 -0
  178. package/test/resources/9999999/importFile/build-expected.json +27 -0
  179. package/test/resources/9999999/importFile/get-expected.json +29 -0
  180. package/test/resources/9999999/importFile/patch-expected.json +29 -0
  181. package/test/resources/9999999/importFile/post-expected.json +29 -0
  182. package/test/resources/9999999/importFile/template-expected.json +27 -0
  183. package/test/resources/9999999/interaction/v1/interactions/233d4413-922c-4568-85a5-e5cc77efc3be/delete-response.json +1 -0
  184. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/get-response.json +1 -1
  185. package/test/resources/9999999/messaging/v1/email/definitions/post-response.json +1 -1
  186. package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail/delete-response.json +6 -0
  187. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixKey_pause-response.xml +32 -0
  188. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixKey_schedule-response.xml +32 -0
  189. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixedKey_paused-response.xml +32 -0
  190. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixedKey_scheduled-response.xml +32 -0
  191. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_pause-response.xml +30 -0
  192. package/test/resources/9999999/program/retrieve-response.xml +21 -3
  193. package/test/resources/9999999/query/patch_fixKeys-expected.json +11 -0
  194. package/test/resources/9999999/query/patch_fixKeys-expected.sql +6 -0
  195. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixKeysANDStatus=Active-response.xml +30 -0
  196. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixedKeysANDStatus=Active-response.xml +30 -0
  197. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testNew_queryANDStatus=Active-response.xml +30 -0
  198. package/test/resources/9999999/script/build-expected.json +6 -0
  199. package/test/resources/9999999/script/build-expected.ssjs +1 -0
  200. package/test/resources/9999999/script/get-expected.json +8 -0
  201. package/test/resources/9999999/script/get-expected.ssjs +1 -0
  202. package/test/resources/9999999/script/get_noScriptTag-expected.html +1 -0
  203. package/test/resources/9999999/script/get_noScriptTag-expected.json +8 -0
  204. package/test/resources/9999999/script/patch-expected.json +8 -0
  205. package/test/resources/9999999/script/patch-expected.ssjs +1 -0
  206. package/test/resources/9999999/script/post-expected.json +8 -0
  207. package/test/resources/9999999/script/post-expected.ssjs +1 -0
  208. package/test/resources/9999999/script/template-expected.json +6 -0
  209. package/test/resources/9999999/script/template-expected.ssjs +1 -0
  210. package/test/resources/9999999/transactionalEmail/build-expected.json +3 -7
  211. package/test/resources/9999999/transactionalEmail/get-expected.json +3 -7
  212. package/test/resources/9999999/transactionalEmail/patch-expected.json +3 -7
  213. package/test/resources/9999999/transactionalEmail/post-expected.json +3 -7
  214. package/test/resources/9999999/transactionalEmail/template-expected.json +3 -7
  215. package/test/resources/9999999/triggeredSend/build-expected.json +29 -0
  216. package/test/resources/9999999/triggeredSend/get-expected.json +29 -0
  217. package/test/resources/9999999/triggeredSend/patch-expected.json +29 -0
  218. package/test/resources/9999999/triggeredSend/post-expected.json +29 -0
  219. package/test/resources/9999999/triggeredSend/template-expected.json +29 -0
  220. package/test/resources/9999999/triggeredSendDefinition/create-response.xml +75 -0
  221. package/test/resources/9999999/triggeredSendDefinition/delete-response.xml +36 -0
  222. package/test/resources/9999999/triggeredSendDefinition/{retrieve-response.xml → retrieve-TriggeredSendStatusINNew,Active,Inactive,Moved,Canceled-response.xml} +4 -4
  223. package/test/resources/9999999/triggeredSendDefinition/update-response.xml +74 -0
  224. package/test/resources/9999999/verification/build-expected.json +11 -0
  225. package/test/resources/9999999/verification/get-expected.json +11 -0
  226. package/test/resources/9999999/verification/patch-expected.json +11 -0
  227. package/test/resources/9999999/verification/post-expected.json +11 -0
  228. package/test/resources/9999999/verification/template-expected.json +11 -0
  229. package/test/type.attributeGroup.test.js +55 -0
  230. package/test/type.attributeSet.test.js +55 -0
  231. package/test/type.automation.test.js +650 -17
  232. package/test/type.dataExtension.test.js +205 -46
  233. package/test/type.dataExtract.test.js +194 -0
  234. package/test/type.fileTransfer.test.js +192 -0
  235. package/test/type.importFile.test.js +193 -0
  236. package/test/type.journey.test.js +38 -11
  237. package/test/type.mobileKeyword.test.js +6 -5
  238. package/test/type.mobileMessage.test.js +6 -4
  239. package/test/type.query.test.js +470 -17
  240. package/test/type.script.test.js +372 -0
  241. package/test/type.transactionalEmail.test.js +12 -11
  242. package/test/type.transactionalPush.test.js +2 -4
  243. package/test/type.transactionalSMS.test.js +2 -4
  244. package/test/type.triggeredSend.test.js +154 -0
  245. package/test/type.user.test.js +22 -10
  246. package/test/type.verification.test.js +173 -0
  247. package/test/utils.js +11 -2
  248. package/types/mcdev.d.js +14 -0
  249. package/lib/metadataTypes/SetDefinition.js +0 -37
  250. /package/test/resources/1111111/accountUser/{retrieve-response.xml → retrieve-ActiveFlag=trueANDCustomerKey=testExisting_userANDEmaillike@-response.xml} +0 -0
  251. /package/test/resources/1111111/accountUserAccount/{retrieve-response.xml → retrieve-AccountUser.AccountUserIDIN700301950,700301951,7471228-response.xml} +0 -0
  252. /package/test/resources/1111111/businessUnit/{retrieve-response.xml → retrieve-ID=1111111-response.xml} +0 -0
  253. /package/test/resources/1111111/list/{retrieve-response.xml → retrieve-CustomerKey=All SubscribersORListName=All Subscribers-response.xml} +0 -0
  254. /package/test/resources/1111111/role/{retrieve-response.xml → retrieve-IsPrivate=false-response.xml} +0 -0
  255. /package/test/resources/9999999/emailSendDefinition/{retrieve-response.xml → retrieve-IsPlatformObject=falseANDDescriptionnotEqualsSFSendDefinition-response.xml} +0 -0
  256. /package/test/resources/9999999/queryDefinition/{retrieve-response.xml → retrieve-CustomerKey=testExisting_queryANDStatus=Active-response.xml} +0 -0
package/lib/Deployer.js CHANGED
@@ -44,17 +44,17 @@ class Deployer {
44
44
  * @param {string} businessUnit references credentials from properties.json
45
45
  * @param {TYPE.SupportedMetadataTypes[]} [selectedTypesArr] limit deployment to given metadata type
46
46
  * @param {string[]} [keyArr] limit deployment to given metadata keys
47
- * @param {boolean} [fromRetrieve] optionally deploy whats defined via selectedTypesArr + keyArr directly from retrieve folder instead of from deploy folder
48
47
  * @returns {Promise.<Object.<string,TYPE.MultiMetadataTypeMap>>} deployed metadata per BU (first key: bu name, second key: metadata type)
49
48
  */
50
- static async deploy(businessUnit, selectedTypesArr, keyArr, fromRetrieve) {
49
+ static async deploy(businessUnit, selectedTypesArr, keyArr) {
51
50
  Util.logger.info('mcdev:: Deploy');
52
51
  const buMultiMetadataTypeMap = {};
53
52
  const properties = await config.getProperties();
54
53
  if (!(await config.checkProperties(properties))) {
55
54
  return null;
56
55
  }
57
- if (fromRetrieve) {
56
+ const deployDirBak = properties.directories.deploy;
57
+ if (Util.OPTIONS.fromRetrieve) {
58
58
  properties.directories.deploy = properties.directories.retrieve;
59
59
  }
60
60
  if (Array.isArray(selectedTypesArr)) {
@@ -66,7 +66,7 @@ class Deployer {
66
66
  }
67
67
  }
68
68
  if (
69
- fromRetrieve &&
69
+ Util.OPTIONS.fromRetrieve &&
70
70
  (!selectedTypesArr ||
71
71
  !Array.isArray(selectedTypesArr) ||
72
72
  !selectedTypesArr.length ||
@@ -97,8 +97,7 @@ class Deployer {
97
97
  bu,
98
98
  properties,
99
99
  selectedTypesArr,
100
- keyArr,
101
- fromRetrieve
100
+ keyArr
102
101
  );
103
102
  buMultiMetadataTypeMap[cred + '/' + bu] = multiMetadataTypeMap;
104
103
  counter_credBu++;
@@ -137,7 +136,7 @@ class Deployer {
137
136
  return;
138
137
  }
139
138
  // valid credential given and -all- BUs targeted
140
- Util.logger.info(`\n :: Deploying all BUs for ${cred}`);
139
+ Util.logger.info(`:: Deploying all BUs for ${cred}`);
141
140
  let counter_credBu = 0;
142
141
  // for (const bu in properties.credentials[cred].businessUnits) {
143
142
  const deployFolders = await File.readDirectories(
@@ -151,15 +150,14 @@ class Deployer {
151
150
  buPath,
152
151
  properties,
153
152
  selectedTypesArr,
154
- keyArr,
155
- fromRetrieve
153
+ keyArr
156
154
  );
157
155
  buMultiMetadataTypeMap[cred + '/' + buPath] = multiMetadataTypeMap;
158
156
  counter_credBu++;
159
157
  Util.logger.info('');
160
158
  Util.startLogger(true);
161
159
  }
162
- Util.logger.info(`\n :: ${counter_credBu} BUs for ${cred}\n`);
160
+ Util.logger.info(` :: ${counter_credBu} BUs for ${cred}\n`);
163
161
  } else {
164
162
  // either bad credential or specific BU or no BU given
165
163
  const multiMetadataTypeMap = await this._deployBU(
@@ -167,30 +165,31 @@ class Deployer {
167
165
  bu,
168
166
  properties,
169
167
  selectedTypesArr,
170
- keyArr,
171
- fromRetrieve
168
+ keyArr
172
169
  );
173
170
  counter_credBu++;
174
171
  buMultiMetadataTypeMap[cred + '/' + bu] = multiMetadataTypeMap;
175
172
  }
176
173
  }
174
+ if (Util.OPTIONS.fromRetrieve) {
175
+ properties.directories.deploy = deployDirBak;
176
+ }
177
177
  if (counter_credBu !== 0) {
178
- Util.logger.info(`\n :: Deployed ${counter_credBu} BUs\n`);
178
+ Util.logger.info(`:: Deployed ${counter_credBu} BUs\n`);
179
179
  }
180
180
  return buMultiMetadataTypeMap;
181
181
  }
182
182
  /**
183
- * helper for {@link deploy}
183
+ * helper for {@link Deployer.deploy}
184
184
  *
185
185
  * @param {string} cred name of Credential
186
186
  * @param {string} bu name of BU
187
187
  * @param {TYPE.Mcdevrc} properties General configuration to be used in retrieve
188
188
  * @param {TYPE.SupportedMetadataTypes[]} [typeArr] limit deployment to given metadata type
189
189
  * @param {string[]} [keyArr] limit deployment to given metadata keys
190
- * @param {boolean} [fromRetrieve] optionally deploy whats defined via selectedTypesArr + keyArr directly from retrieve folder instead of from deploy folder
191
190
  * @returns {Promise.<TYPE.MultiMetadataTypeMap>} ensure that BUs are worked on sequentially
192
191
  */
193
- static async _deployBU(cred, bu, properties, typeArr, keyArr, fromRetrieve) {
192
+ static async _deployBU(cred, bu, properties, typeArr, keyArr) {
194
193
  const buPath = `${cred}/${bu}`;
195
194
  Util.logger.info(`:: Deploying to ${buPath}`);
196
195
  const buObject = await Cli.getCredentialObject(properties, buPath, null, true);
@@ -201,7 +200,7 @@ class Deployer {
201
200
  const deployer = new Deployer(properties, buObject);
202
201
  try {
203
202
  // await is required or the calls end up conflicting
204
- multiMetadataTypeMap = await deployer._deploy(typeArr, keyArr, fromRetrieve);
203
+ multiMetadataTypeMap = await deployer._deploy(typeArr, keyArr);
205
204
  } catch (ex) {
206
205
  Util.logger.errorStack(ex, 'mcdev.deploy failed');
207
206
  }
@@ -214,11 +213,9 @@ class Deployer {
214
213
  *
215
214
  * @param {TYPE.SupportedMetadataTypes[]} [typeArr] limit deployment to given metadata type (can include subtype)
216
215
  * @param {string[]} [keyArr] limit deployment to given metadata keys
217
- * @param {boolean} [fromRetrieve] if true, no folders will be updated/created
218
- * @param {boolean} [isRefresh] optional flag to indicate that triggeredSend should be refreshed after deployment of assets
219
216
  * @returns {Promise.<TYPE.MultiMetadataTypeMap>} Promise of all deployed metadata
220
217
  */
221
- async _deploy(typeArr, keyArr, fromRetrieve, isRefresh) {
218
+ async _deploy(typeArr, keyArr) {
222
219
  if (await File.pathExists(this.deployDir)) {
223
220
  /** @type {TYPE.MultiMetadataTypeMap} */
224
221
  this.metadata = Deployer.readBUMetadata(this.deployDir, typeArr);
@@ -252,7 +249,7 @@ class Deployer {
252
249
  }
253
250
  }
254
251
 
255
- if (!fromRetrieve) {
252
+ if (!Util.OPTIONS.fromRetrieve) {
256
253
  await Deployer.createFolderDefinitions(
257
254
  this.deployDir,
258
255
  this.metadata,
@@ -292,13 +289,16 @@ class Deployer {
292
289
  // TODO rewrite to allow deploying only a specific sub-type; currently, subtypes are ignored when executing deploy
293
290
  const type = metadataType;
294
291
  if (this.metadata[type]) {
295
- Util.logger.info('Deploying: ' + metadataType);
292
+ Util.logger.info(
293
+ 'Deploying: ' +
294
+ metadataType +
295
+ (Util.OPTIONS.fromRetrieve ? ' (from retrieve folder)' : '')
296
+ );
296
297
 
297
298
  const result = await MetadataTypeInfo[type].deploy(
298
299
  this.metadata[type],
299
300
  this.deployDir,
300
- this.retrieveDir,
301
- isRefresh
301
+ this.retrieveDir
302
302
  );
303
303
  multiMetadataTypeMap[type] = result;
304
304
  cache.mergeMetadata(type, result);
@@ -312,7 +312,7 @@ class Deployer {
312
312
  *
313
313
  * @param {string} deployDir root directory of metadata.
314
314
  * @param {string[]} [typeArr] limit deployment to given metadata type
315
- * @param {boolean} [listBadKeys=false] do not print errors, used for badKeys()
315
+ * @param {boolean} [listBadKeys] do not print errors, used for badKeys()
316
316
  * @returns {TYPE.MultiMetadataTypeMap} Metadata of BU in local directory
317
317
  */
318
318
  static readBUMetadata(deployDir, typeArr, listBadKeys) {
@@ -6,6 +6,7 @@
6
6
  const MetadataTypeDefinitions = {
7
7
  asset: require('./metadataTypes/definitions/Asset.definition'),
8
8
  attributeGroup: require('./metadataTypes/definitions/AttributeGroup.definition'),
9
+ attributeSet: require('./metadataTypes/definitions/AttributeSet.definition'),
9
10
  automation: require('./metadataTypes/definitions/Automation.definition'),
10
11
  campaign: require('./metadataTypes/definitions/Campaign.definition'),
11
12
  contentArea: require('./metadataTypes/definitions/ContentArea.definition'),
@@ -32,12 +33,12 @@ const MetadataTypeDefinitions = {
32
33
  role: require('./metadataTypes/definitions/Role.definition'),
33
34
  script: require('./metadataTypes/definitions/Script.definition'),
34
35
  sendClassification: require('./metadataTypes/definitions/SendClassification.definition'),
35
- setDefinition: require('./metadataTypes/definitions/SetDefinition.definition'),
36
36
  transactionalEmail: require('./metadataTypes/definitions/TransactionalEmail.definition'),
37
37
  transactionalPush: require('./metadataTypes/definitions/TransactionalPush.definition'),
38
38
  transactionalSMS: require('./metadataTypes/definitions/TransactionalSMS.definition'),
39
39
  triggeredSend: require('./metadataTypes/definitions/TriggeredSend.definition'),
40
40
  user: require('./metadataTypes/definitions/User.definition'),
41
+ verification: require('./metadataTypes/definitions/Verification.definition'),
41
42
  };
42
43
 
43
44
  module.exports = MetadataTypeDefinitions;
@@ -6,6 +6,7 @@
6
6
  const MetadataTypeInfo = {
7
7
  asset: require('./metadataTypes/Asset'),
8
8
  attributeGroup: require('./metadataTypes/AttributeGroup'),
9
+ attributeSet: require('./metadataTypes/AttributeSet'),
9
10
  automation: require('./metadataTypes/Automation'),
10
11
  campaign: require('./metadataTypes/Campaign'),
11
12
  contentArea: require('./metadataTypes/ContentArea'),
@@ -32,12 +33,12 @@ const MetadataTypeInfo = {
32
33
  role: require('./metadataTypes/Role'),
33
34
  script: require('./metadataTypes/Script'),
34
35
  sendClassification: require('./metadataTypes/SendClassification'),
35
- setDefinition: require('./metadataTypes/SetDefinition'),
36
36
  transactionalEmail: require('./metadataTypes/TransactionalEmail'),
37
37
  transactionalPush: require('./metadataTypes/TransactionalPush'),
38
38
  transactionalSMS: require('./metadataTypes/TransactionalSMS'),
39
39
  triggeredSend: require('./metadataTypes/TriggeredSend'),
40
40
  user: require('./metadataTypes/User'),
41
+ verification: require('./metadataTypes/Verification'),
41
42
  };
42
43
 
43
44
  module.exports = MetadataTypeInfo;
package/lib/Retriever.js CHANGED
@@ -189,7 +189,7 @@ class Retriever {
189
189
  }
190
190
 
191
191
  /**
192
- * helper for {@link retrieve} to get all dependencies of the given types
192
+ * helper for {@link Retriever.retrieve} to get all dependencies of the given types
193
193
  *
194
194
  * @param {TYPE.SupportedMetadataTypes[]} metadataTypes list of metadata types to retrieve; can include subtypes!
195
195
  * @returns {TYPE.SupportedMetadataTypes[]} unique list dependent metadata types
package/lib/cli.js CHANGED
@@ -31,6 +31,12 @@ yargs
31
31
  .positional('KEY', {
32
32
  type: 'string',
33
33
  describe: 'metadata keys that shall be exclusively downloaded',
34
+ })
35
+ .option('like', {
36
+ type: 'string',
37
+ group: 'Options for retrieve:',
38
+ describe:
39
+ 'filter metadata components (can include % as wildcard or _ for a single character)',
34
40
  });
35
41
  },
36
42
  handler: (argv) => {
@@ -39,7 +45,7 @@ yargs
39
45
  },
40
46
  })
41
47
  .command({
42
- command: 'deploy [BU] [TYPE] [KEY] [--fromRetrieve] [--refresh]',
48
+ command: 'deploy [BU] [TYPE] [KEY]',
43
49
  aliases: ['d'],
44
50
  desc: 'deploys local metadata to a business unit',
45
51
  builder: (yargs) => {
@@ -59,22 +65,43 @@ yargs
59
65
  })
60
66
  .option('changeKeyField', {
61
67
  type: 'string',
68
+ group: 'Options for deploy:',
62
69
  describe:
63
70
  'enables updating the key of the deployed metadata with the value in provided field (e.g. c__newKey). Can be used to sync name and key fields.',
64
71
  })
65
72
  .option('changeKeyValue', {
66
73
  type: 'string',
74
+ group: 'Options for deploy:',
67
75
  describe:
68
76
  'allows updating the key of the metadata to the provided value. Only available if a single type and key is deployed',
69
77
  })
70
78
  .option('fromRetrieve', {
71
79
  type: 'boolean',
80
+ group: 'Options for deploy:',
72
81
  describe: 'optionally deploy from retrieve folder',
73
82
  })
74
83
  .option('refresh', {
75
84
  type: 'boolean',
85
+ group: 'Options for deploy:',
76
86
  describe:
77
87
  'optional for asset-message: runs refresh command for related triggeredSends after deploy',
88
+ })
89
+ .option('execute', {
90
+ type: 'boolean',
91
+ group: 'Options for deploy:',
92
+ describe:
93
+ 'optional: executes item after deploy; this will run the item once immediately',
94
+ })
95
+ .option('schedule', {
96
+ type: 'boolean',
97
+ group: 'Options for deploy:',
98
+ describe:
99
+ 'optionally start existing schedule instead of running item once immediately (only works for automations)',
100
+ })
101
+ .option('fixShared', {
102
+ group: 'Options for deploy:',
103
+ describe:
104
+ "optionally ensure that updates to shared DataExtensions become visible in child BU's data designer (SF Known issue W-11031095)",
78
105
  });
79
106
  },
80
107
  handler: (argv) => {
@@ -307,6 +334,7 @@ yargs
307
334
  builder: (yargs) => {
308
335
  yargs.option('json', {
309
336
  type: 'boolean',
337
+ group: 'Options for explainTypes:',
310
338
  describe: 'optionaly return info in json format',
311
339
  });
312
340
  },
@@ -316,7 +344,7 @@ yargs
316
344
  },
317
345
  })
318
346
  .command({
319
- command: 'createDeltaPkg [range] [--filter <BU>] [--commitHistory <number>]',
347
+ command: 'createDeltaPkg [range]',
320
348
  aliases: ['cdp'],
321
349
  desc: 'Copies commit-based file delta into deploy folder',
322
350
  builder: (yargs) => {
@@ -327,11 +355,13 @@ yargs
327
355
  })
328
356
  .option('filter', {
329
357
  type: 'string',
358
+ group: 'Options for createDeltaPkg:',
330
359
  describe:
331
360
  'Disable templating & instead filter by the specified BU path (comma separated), can include subtype, will be prefixed with "retrieve/"',
332
361
  })
333
362
  .option('commitHistory', {
334
363
  type: 'number',
364
+ group: 'Options for createDeltaPkg:',
335
365
  describe: 'Number of commits to look back for changes (supersedes config)',
336
366
  });
337
367
  },
@@ -390,8 +420,8 @@ yargs
390
420
  },
391
421
  })
392
422
  .command({
393
- command: 'execute <BU> <TYPE> <KEY>',
394
- aliases: ['exec'],
423
+ command: 'execute <BU> <TYPE> [KEY]',
424
+ aliases: ['exec', 'start'],
395
425
  desc: 'executes the entity (query/journey/automation etc.)',
396
426
  builder: (yargs) => {
397
427
  yargs
@@ -406,11 +436,128 @@ yargs
406
436
  .positional('KEY', {
407
437
  type: 'string',
408
438
  describe: 'key(s) of the metadata component(s)',
439
+ })
440
+ .option('like', {
441
+ type: 'string',
442
+ group: 'Options for execute:',
443
+ describe:
444
+ 'filter metadata components (can include % as wildcard or _ for a single character)',
445
+ })
446
+ .option('schedule', {
447
+ type: 'boolean',
448
+ group: 'Options for execute:',
449
+ describe:
450
+ 'optionally start existing schedule instead of running item once immediately (only works for automations)',
409
451
  });
410
452
  },
411
453
  handler: (argv) => {
412
454
  Mcdev.setOptions(argv);
413
- Mcdev.execute(argv.BU, csvToArray(argv.TYPE), csvToArray(argv.KEY));
455
+ // ! do not allow multiple types to be passed in here via csvToArray
456
+ Mcdev.execute(argv.BU, argv.TYPE, csvToArray(argv.KEY));
457
+ },
458
+ })
459
+ .command({
460
+ command: 'schedule <BU> <TYPE> [KEY]',
461
+ aliases: ['sched'],
462
+ desc: 'starts the predefined schedule of the item (shortcut for running execute --schedule)',
463
+ builder: (yargs) => {
464
+ yargs
465
+ .positional('BU', {
466
+ type: 'string',
467
+ describe: 'the business unit where to start an item',
468
+ })
469
+ .positional('TYPE', {
470
+ type: 'string',
471
+ describe: 'metadata type',
472
+ })
473
+ .positional('KEY', {
474
+ type: 'string',
475
+ describe: 'key(s) of the metadata component(s)',
476
+ })
477
+ .option('like', {
478
+ type: 'string',
479
+ group: 'Options for execute:',
480
+ describe:
481
+ 'filter metadata components (can include % as wildcard or _ for a single character)',
482
+ });
483
+ },
484
+ handler: (argv) => {
485
+ Mcdev.setOptions(argv);
486
+ // ! do not allow multiple types to be passed in here via csvToArray
487
+ Mcdev.schedule(argv.BU, argv.TYPE, csvToArray(argv.KEY));
488
+ },
489
+ })
490
+ .command({
491
+ command: 'pause <BU> <TYPE> [KEY]',
492
+ aliases: ['p', 'stop'],
493
+ desc: 'pauses the entity (automation etc.)',
494
+ builder: (yargs) => {
495
+ yargs
496
+ .positional('BU', {
497
+ type: 'string',
498
+ describe: 'the business unit where to start an item',
499
+ })
500
+ .positional('TYPE', {
501
+ type: 'string',
502
+ describe: 'metadata type',
503
+ })
504
+ .positional('KEY', {
505
+ type: 'string',
506
+ describe: 'key(s) of the metadata component(s)',
507
+ })
508
+ .option('like', {
509
+ type: 'string',
510
+ group: 'Options for pause:',
511
+ describe:
512
+ 'filter metadata components (can include % as wildcard or _ for a single character)',
513
+ });
514
+ },
515
+ handler: (argv) => {
516
+ Mcdev.setOptions(argv);
517
+ // ! do not allow multiple types to be passed in here via csvToArray
518
+ Mcdev.pause(argv.BU, argv.TYPE, csvToArray(argv.KEY));
519
+ },
520
+ })
521
+ .command({
522
+ command: 'fixKeys <BU> <TYPE> [KEY]',
523
+ aliases: ['fx'],
524
+ desc: 'changes the key of the items to match the name',
525
+ builder: (yargs) => {
526
+ yargs
527
+ .positional('BU', {
528
+ type: 'string',
529
+ describe: 'the business unit where to fix keys',
530
+ })
531
+ .positional('TYPE', {
532
+ type: 'string',
533
+ describe: 'metadata type',
534
+ })
535
+ .positional('KEY', {
536
+ type: 'string',
537
+ describe: 'key(s) of the metadata component(s)',
538
+ })
539
+ .option('like', {
540
+ type: 'string',
541
+ group: 'Options for fixKeys:',
542
+ describe:
543
+ 'filter metadata components (can include % as wildcard or _ for a single character)',
544
+ })
545
+ .option('execute', {
546
+ type: 'boolean',
547
+ group: 'Options for fixKeys:',
548
+ describe:
549
+ 'optional: executes item after deploy; this will run the item once immediately',
550
+ })
551
+ .option('schedule', {
552
+ type: 'boolean',
553
+ group: 'Options for fixKeys:',
554
+ describe:
555
+ 'optionally start existing schedule instead of running item once immediately (only works for automations)',
556
+ });
557
+ },
558
+ handler: (argv) => {
559
+ Mcdev.setOptions(argv);
560
+ Mcdev.fixKeys(argv.BU, argv.TYPE, csvToArray(argv.KEY));
414
561
  },
415
562
  })
416
563
  .command({
@@ -434,6 +581,10 @@ yargs
434
581
  type: 'boolean',
435
582
  description: 'Only output errors to CLI',
436
583
  })
584
+ .option('noLogColors', {
585
+ type: 'boolean',
586
+ description: 'do not use color codes in CLI log output',
587
+ })
437
588
  .option('noLogFile', {
438
589
  type: 'boolean',
439
590
  description: 'Only output log to CLI but not to files',
@@ -466,9 +617,13 @@ function csvToArray(csv) {
466
617
  return !csv
467
618
  ? null
468
619
  : csv.includes(',')
469
- ? csv.split(',').map((item) =>
470
- // allow whitespace in comma-separated lists
471
- item.trim()
472
- )
473
- : [csv.trim()];
620
+ ? csv
621
+ .split(',')
622
+ .map((item) =>
623
+ // allow whitespace in comma-separated lists
624
+ item.trim()
625
+ )
626
+ // make sure trailing commas are ignored
627
+ .filter(Boolean)
628
+ : [csv.trim()].filter(Boolean);
474
629
  }