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.
Files changed (380) hide show
  1. package/.github/ISSUE_TEMPLATE/bug.yml +2 -0
  2. package/.github/PULL_REQUEST_TEMPLATE/pr_template_release.md +1 -0
  3. package/.github/workflows/code-test.yml +48 -0
  4. package/.husky/post-checkout +1 -1
  5. package/.husky/post-merge +7 -1
  6. package/.husky/pre-commit +3 -1
  7. package/@types/lib/Builder.d.ts +13 -13
  8. package/@types/lib/Builder.d.ts.map +1 -1
  9. package/@types/lib/Deployer.d.ts +19 -16
  10. package/@types/lib/Deployer.d.ts.map +1 -1
  11. package/@types/lib/Retriever.d.ts +15 -15
  12. package/@types/lib/Retriever.d.ts.map +1 -1
  13. package/@types/lib/cli.d.ts +1 -1
  14. package/@types/lib/cli.d.ts.map +1 -1
  15. package/@types/lib/index.d.ts +102 -51
  16. package/@types/lib/index.d.ts.map +1 -1
  17. package/@types/lib/metadataTypes/Asset.d.ts +71 -59
  18. package/@types/lib/metadataTypes/Asset.d.ts.map +1 -1
  19. package/@types/lib/metadataTypes/AttributeGroup.d.ts +6 -8
  20. package/@types/lib/metadataTypes/AttributeGroup.d.ts.map +1 -1
  21. package/@types/lib/metadataTypes/AttributeSet.d.ts +10 -21
  22. package/@types/lib/metadataTypes/AttributeSet.d.ts.map +1 -1
  23. package/@types/lib/metadataTypes/Automation.d.ts +47 -49
  24. package/@types/lib/metadataTypes/Automation.d.ts.map +1 -1
  25. package/@types/lib/metadataTypes/Campaign.d.ts +12 -18
  26. package/@types/lib/metadataTypes/Campaign.d.ts.map +1 -1
  27. package/@types/lib/metadataTypes/ContentArea.d.ts +13 -31
  28. package/@types/lib/metadataTypes/ContentArea.d.ts.map +1 -1
  29. package/@types/lib/metadataTypes/DataExtension.d.ts +28 -33
  30. package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -1
  31. package/@types/lib/metadataTypes/DataExtensionField.d.ts +15 -22
  32. package/@types/lib/metadataTypes/DataExtensionField.d.ts.map +1 -1
  33. package/@types/lib/metadataTypes/DataExtensionTemplate.d.ts +12 -11
  34. package/@types/lib/metadataTypes/DataExtensionTemplate.d.ts.map +1 -1
  35. package/@types/lib/metadataTypes/DataExtract.d.ts +13 -28
  36. package/@types/lib/metadataTypes/DataExtract.d.ts.map +1 -1
  37. package/@types/lib/metadataTypes/DataExtractType.d.ts +11 -10
  38. package/@types/lib/metadataTypes/DataExtractType.d.ts.map +1 -1
  39. package/@types/lib/metadataTypes/DeliveryProfile.d.ts +11 -10
  40. package/@types/lib/metadataTypes/DeliveryProfile.d.ts.map +1 -1
  41. package/@types/lib/metadataTypes/Discovery.d.ts +11 -10
  42. package/@types/lib/metadataTypes/Discovery.d.ts.map +1 -1
  43. package/@types/lib/metadataTypes/Email.d.ts +14 -34
  44. package/@types/lib/metadataTypes/Email.d.ts.map +1 -1
  45. package/@types/lib/metadataTypes/EmailSend.d.ts +18 -10
  46. package/@types/lib/metadataTypes/EmailSend.d.ts.map +1 -1
  47. package/@types/lib/metadataTypes/Event.d.ts +22 -16
  48. package/@types/lib/metadataTypes/Event.d.ts.map +1 -1
  49. package/@types/lib/metadataTypes/FileLocation.d.ts +11 -10
  50. package/@types/lib/metadataTypes/FileLocation.d.ts.map +1 -1
  51. package/@types/lib/metadataTypes/FileTransfer.d.ts +12 -18
  52. package/@types/lib/metadataTypes/FileTransfer.d.ts.map +1 -1
  53. package/@types/lib/metadataTypes/Filter.d.ts +11 -10
  54. package/@types/lib/metadataTypes/Filter.d.ts.map +1 -1
  55. package/@types/lib/metadataTypes/Folder.d.ts +49 -35
  56. package/@types/lib/metadataTypes/Folder.d.ts.map +1 -1
  57. package/@types/lib/metadataTypes/ImportFile.d.ts +16 -15
  58. package/@types/lib/metadataTypes/ImportFile.d.ts.map +1 -1
  59. package/@types/lib/metadataTypes/Journey.d.ts +55 -35
  60. package/@types/lib/metadataTypes/Journey.d.ts.map +1 -1
  61. package/@types/lib/metadataTypes/List.d.ts +13 -12
  62. package/@types/lib/metadataTypes/List.d.ts.map +1 -1
  63. package/@types/lib/metadataTypes/MetadataType.d.ts +73 -26
  64. package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -1
  65. package/@types/lib/metadataTypes/MobileCode.d.ts +12 -20
  66. package/@types/lib/metadataTypes/MobileCode.d.ts.map +1 -1
  67. package/@types/lib/metadataTypes/MobileKeyword.d.ts +23 -14
  68. package/@types/lib/metadataTypes/MobileKeyword.d.ts.map +1 -1
  69. package/@types/lib/metadataTypes/MobileMessage.d.ts +18 -42
  70. package/@types/lib/metadataTypes/MobileMessage.d.ts.map +1 -1
  71. package/@types/lib/metadataTypes/Query.d.ts +15 -12
  72. package/@types/lib/metadataTypes/Query.d.ts.map +1 -1
  73. package/@types/lib/metadataTypes/Role.d.ts +12 -11
  74. package/@types/lib/metadataTypes/Role.d.ts.map +1 -1
  75. package/@types/lib/metadataTypes/Script.d.ts +18 -25
  76. package/@types/lib/metadataTypes/Script.d.ts.map +1 -1
  77. package/@types/lib/metadataTypes/SendClassification.d.ts +13 -10
  78. package/@types/lib/metadataTypes/SendClassification.d.ts.map +1 -1
  79. package/@types/lib/metadataTypes/SenderProfile.d.ts +12 -25
  80. package/@types/lib/metadataTypes/SenderProfile.d.ts.map +1 -1
  81. package/@types/lib/metadataTypes/TransactionalEmail.d.ts +18 -12
  82. package/@types/lib/metadataTypes/TransactionalEmail.d.ts.map +1 -1
  83. package/@types/lib/metadataTypes/TransactionalMessage.d.ts +12 -32
  84. package/@types/lib/metadataTypes/TransactionalMessage.d.ts.map +1 -1
  85. package/@types/lib/metadataTypes/TransactionalPush.d.ts +15 -21
  86. package/@types/lib/metadataTypes/TransactionalPush.d.ts.map +1 -1
  87. package/@types/lib/metadataTypes/TransactionalSMS.d.ts +16 -18
  88. package/@types/lib/metadataTypes/TransactionalSMS.d.ts.map +1 -1
  89. package/@types/lib/metadataTypes/TriggeredSend.d.ts +19 -24
  90. package/@types/lib/metadataTypes/TriggeredSend.d.ts.map +1 -1
  91. package/@types/lib/metadataTypes/User.d.ts +23 -40
  92. package/@types/lib/metadataTypes/User.d.ts.map +1 -1
  93. package/@types/lib/metadataTypes/Verification.d.ts +16 -13
  94. package/@types/lib/metadataTypes/Verification.d.ts.map +1 -1
  95. package/@types/lib/metadataTypes/definitions/Asset.definition.d.ts +24 -14
  96. package/@types/lib/metadataTypes/definitions/AttributeGroup.definition.d.ts +3 -0
  97. package/@types/lib/metadataTypes/definitions/AttributeSet.definition.d.ts +5 -0
  98. package/@types/lib/metadataTypes/definitions/Automation.definition.d.ts +16 -0
  99. package/@types/lib/metadataTypes/definitions/Campaign.definition.d.ts +1 -0
  100. package/@types/lib/metadataTypes/definitions/ContentArea.definition.d.ts +1 -0
  101. package/@types/lib/metadataTypes/definitions/DataExtension.definition.d.ts +1 -0
  102. package/@types/lib/metadataTypes/definitions/DataExtensionField.definition.d.ts +1 -0
  103. package/@types/lib/metadataTypes/definitions/DataExtensionTemplate.definition.d.ts +1 -0
  104. package/@types/lib/metadataTypes/definitions/DataExtract.definition.d.ts +1 -0
  105. package/@types/lib/metadataTypes/definitions/DataExtractType.definition.d.ts +1 -0
  106. package/@types/lib/metadataTypes/definitions/DeliveryProfile.definition.d.ts +1 -0
  107. package/@types/lib/metadataTypes/definitions/Discovery.definition.d.ts +1 -0
  108. package/@types/lib/metadataTypes/definitions/Email.definition.d.ts +1 -0
  109. package/@types/lib/metadataTypes/definitions/EmailSend.definition.d.ts +8 -0
  110. package/@types/lib/metadataTypes/definitions/Event.definition.d.ts +10 -1
  111. package/@types/lib/metadataTypes/definitions/FileLocation.definition.d.ts +1 -0
  112. package/@types/lib/metadataTypes/definitions/FileTransfer.definition.d.ts +1 -0
  113. package/@types/lib/metadataTypes/definitions/Filter.definition.d.ts +1 -0
  114. package/@types/lib/metadataTypes/definitions/Folder.definition.d.ts +1 -0
  115. package/@types/lib/metadataTypes/definitions/ImportFile.definition.d.ts +5 -0
  116. package/@types/lib/metadataTypes/definitions/Journey.definition.d.ts +13 -0
  117. package/@types/lib/metadataTypes/definitions/List.definition.d.ts +1 -0
  118. package/@types/lib/metadataTypes/definitions/MobileCode.definition.d.ts +1 -0
  119. package/@types/lib/metadataTypes/definitions/MobileKeyword.definition.d.ts +9 -0
  120. package/@types/lib/metadataTypes/definitions/MobileMessage.definition.d.ts +4 -0
  121. package/@types/lib/metadataTypes/definitions/Query.definition.d.ts +3 -0
  122. package/@types/lib/metadataTypes/definitions/Role.definition.d.ts +1 -0
  123. package/@types/lib/metadataTypes/definitions/Script.definition.d.ts +1 -0
  124. package/@types/lib/metadataTypes/definitions/SendClassification.definition.d.ts +3 -0
  125. package/@types/lib/metadataTypes/definitions/SenderProfile.definition.d.ts +1 -0
  126. package/@types/lib/metadataTypes/definitions/TransactionalEmail.definition.d.ts +6 -0
  127. package/@types/lib/metadataTypes/definitions/TransactionalMessage.definition.d.ts +1 -0
  128. package/@types/lib/metadataTypes/definitions/TransactionalPush.definition.d.ts +3 -0
  129. package/@types/lib/metadataTypes/definitions/TransactionalSMS.definition.d.ts +4 -0
  130. package/@types/lib/metadataTypes/definitions/TriggeredSend.definition.d.ts +6 -0
  131. package/@types/lib/metadataTypes/definitions/User.definition.d.ts +1 -0
  132. package/@types/lib/metadataTypes/definitions/Verification.definition.d.ts +3 -0
  133. package/@types/lib/util/auth.d.ts +19 -18
  134. package/@types/lib/util/auth.d.ts.map +1 -1
  135. package/@types/lib/util/businessUnit.d.ts +17 -17
  136. package/@types/lib/util/businessUnit.d.ts.map +1 -1
  137. package/@types/lib/util/cache.d.ts +34 -32
  138. package/@types/lib/util/cache.d.ts.map +1 -1
  139. package/@types/lib/util/cli.d.ts +30 -33
  140. package/@types/lib/util/cli.d.ts.map +1 -1
  141. package/@types/lib/util/config.d.ts +20 -20
  142. package/@types/lib/util/config.d.ts.map +1 -1
  143. package/@types/lib/util/devops.d.ts +21 -21
  144. package/@types/lib/util/devops.d.ts.map +1 -1
  145. package/@types/lib/util/file.d.ts +179 -18
  146. package/@types/lib/util/file.d.ts.map +1 -1
  147. package/@types/lib/util/init.config.d.ts +19 -19
  148. package/@types/lib/util/init.config.d.ts.map +1 -1
  149. package/@types/lib/util/init.d.ts +20 -20
  150. package/@types/lib/util/init.d.ts.map +1 -1
  151. package/@types/lib/util/init.git.d.ts +2 -2
  152. package/@types/lib/util/init.git.d.ts.map +1 -1
  153. package/@types/lib/util/init.npm.d.ts +2 -2
  154. package/@types/lib/util/init.npm.d.ts.map +1 -1
  155. package/@types/lib/util/replaceContentBlockReference.d.ts +55 -32
  156. package/@types/lib/util/replaceContentBlockReference.d.ts.map +1 -1
  157. package/@types/lib/util/util.d.ts +64 -39
  158. package/@types/lib/util/util.d.ts.map +1 -1
  159. package/@types/types/mcdev.d.d.ts +160 -52
  160. package/@types/types/mcdev.d.d.ts.map +1 -1
  161. package/boilerplate/files/.vscode/settings.json +1 -0
  162. package/boilerplate/forcedUpdates.json +4 -0
  163. package/boilerplate/gitignore-template +0 -1
  164. package/eslint.config.js +0 -1
  165. package/lib/Builder.js +13 -8
  166. package/lib/Deployer.js +13 -8
  167. package/lib/Retriever.js +4 -1
  168. package/lib/cli.js +384 -288
  169. package/lib/index.js +620 -241
  170. package/lib/metadataTypes/Asset.js +455 -209
  171. package/lib/metadataTypes/Automation.js +34 -0
  172. package/lib/metadataTypes/DataExtension.js +36 -31
  173. package/lib/metadataTypes/DataExtensionField.js +2 -3
  174. package/lib/metadataTypes/Event.js +227 -37
  175. package/lib/metadataTypes/Folder.js +64 -49
  176. package/lib/metadataTypes/Journey.js +340 -58
  177. package/lib/metadataTypes/MetadataType.js +272 -61
  178. package/lib/metadataTypes/MobileKeyword.js +12 -1
  179. package/lib/metadataTypes/Role.js +9 -7
  180. package/lib/metadataTypes/Script.js +4 -3
  181. package/lib/metadataTypes/SenderProfile.js +18 -5
  182. package/lib/metadataTypes/TransactionalEmail.js +2 -2
  183. package/lib/metadataTypes/TriggeredSend.js +21 -5
  184. package/lib/metadataTypes/User.js +31 -27
  185. package/lib/metadataTypes/definitions/Asset.definition.js +10 -2
  186. package/lib/metadataTypes/definitions/AttributeGroup.definition.js +1 -0
  187. package/lib/metadataTypes/definitions/AttributeSet.definition.js +11 -0
  188. package/lib/metadataTypes/definitions/Automation.definition.js +9 -0
  189. package/lib/metadataTypes/definitions/Campaign.definition.js +1 -0
  190. package/lib/metadataTypes/definitions/ContentArea.definition.js +1 -0
  191. package/lib/metadataTypes/definitions/DataExtension.definition.js +1 -0
  192. package/lib/metadataTypes/definitions/DataExtensionField.definition.js +1 -0
  193. package/lib/metadataTypes/definitions/DataExtensionTemplate.definition.js +1 -0
  194. package/lib/metadataTypes/definitions/DataExtract.definition.js +2 -1
  195. package/lib/metadataTypes/definitions/DataExtractType.definition.js +1 -0
  196. package/lib/metadataTypes/definitions/DeliveryProfile.definition.js +1 -0
  197. package/lib/metadataTypes/definitions/Discovery.definition.js +1 -0
  198. package/lib/metadataTypes/definitions/Email.definition.js +1 -0
  199. package/lib/metadataTypes/definitions/EmailSend.definition.js +8 -0
  200. package/lib/metadataTypes/definitions/Event.definition.js +9 -8
  201. package/lib/metadataTypes/definitions/FileLocation.definition.js +1 -0
  202. package/lib/metadataTypes/definitions/FileTransfer.definition.js +4 -0
  203. package/lib/metadataTypes/definitions/Filter.definition.js +1 -0
  204. package/lib/metadataTypes/definitions/Folder.definition.js +10 -8
  205. package/lib/metadataTypes/definitions/ImportFile.definition.js +8 -1
  206. package/lib/metadataTypes/definitions/Journey.definition.js +28 -0
  207. package/lib/metadataTypes/definitions/List.definition.js +1 -0
  208. package/lib/metadataTypes/definitions/MobileCode.definition.js +1 -0
  209. package/lib/metadataTypes/definitions/MobileKeyword.definition.js +7 -0
  210. package/lib/metadataTypes/definitions/MobileMessage.definition.js +9 -0
  211. package/lib/metadataTypes/definitions/Query.definition.js +3 -0
  212. package/lib/metadataTypes/definitions/Role.definition.js +1 -0
  213. package/lib/metadataTypes/definitions/Script.definition.js +1 -0
  214. package/lib/metadataTypes/definitions/SendClassification.definition.js +4 -0
  215. package/lib/metadataTypes/definitions/SenderProfile.definition.js +1 -0
  216. package/lib/metadataTypes/definitions/TransactionalEmail.definition.js +7 -0
  217. package/lib/metadataTypes/definitions/TransactionalMessage.definition.js +1 -0
  218. package/lib/metadataTypes/definitions/TransactionalPush.definition.js +3 -0
  219. package/lib/metadataTypes/definitions/TransactionalSMS.definition.js +4 -0
  220. package/lib/metadataTypes/definitions/TriggeredSend.definition.js +10 -3
  221. package/lib/metadataTypes/definitions/User.definition.js +3 -0
  222. package/lib/metadataTypes/definitions/Verification.definition.js +1 -0
  223. package/lib/util/auth.js +0 -1
  224. package/lib/util/cache.js +35 -0
  225. package/lib/util/cli.js +96 -140
  226. package/lib/util/config.js +11 -19
  227. package/lib/util/devops.js +42 -43
  228. package/lib/util/file.js +7 -10
  229. package/lib/util/init.config.js +6 -10
  230. package/lib/util/init.git.js +43 -57
  231. package/lib/util/init.js +35 -59
  232. package/lib/util/replaceContentBlockReference.js +110 -61
  233. package/lib/util/util.js +90 -4
  234. package/package.json +22 -19
  235. package/test/general.test.js +1144 -172
  236. package/test/mockRoot/.mcdevrc.json +1 -1
  237. package/test/mockRoot/deploy/testInstance/testBU/event/testExisting_event.event-meta.json +201 -0
  238. package/test/mockRoot/deploy/testInstance/testBU/event/testNew_event_withExistingDE.event-meta.json +233 -0
  239. package/test/mockRoot/deploy/testInstance/testBU/event/testNew_event_withSchema.event-meta.json +194 -0
  240. package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/4912312345678.TESTNEW_KEYWORD.mobileKeyword-meta.json +1 -0
  241. package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/4912312345678.TESTNEW_KEYWORD_BLOCKED.mobileKeyword-meta.json +1 -0
  242. package/test/resourceFactory.js +43 -11
  243. package/test/resources/1111111/dataFolder/retrieve-ContentTypeINshared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +364 -0
  244. package/test/resources/9999999/asset/{block-1157-retrieve-expected.html → build-asset_htmlblock-expected.html} +1 -1
  245. package/test/resources/9999999/asset/build-asset_htmlblock-expected.json +29 -0
  246. package/test/resources/9999999/asset/build-templatebasedemail-expected.json +65 -0
  247. package/test/resources/9999999/asset/resolveId-1295064-noPath-expected.json +3 -3
  248. package/test/resources/9999999/asset/resolveId-1295064-withPath-expected.json +3 -3
  249. package/test/resources/9999999/asset/retrieve-templatebasedemail-expected.json +65 -0
  250. package/test/resources/9999999/asset/template-emailTemplate-expected.json +20 -0
  251. package/test/resources/9999999/asset/template-templatebasedemail-expected.json +65 -0
  252. package/test/resources/9999999/asset/template-testExisting_asset_htmlblock-expected.json +29 -0
  253. package/test/resources/9999999/asset/testExisting_asset_htmlblock-retrieve-expected.html +23 -0
  254. package/test/resources/9999999/asset/{block-1157-retrieve-expected.json → testExisting_asset_htmlblock-retrieve-expected.json} +3 -3
  255. package/test/resources/9999999/asset/testExisting_asset_message-html-rcb-key-expected.html +6 -6
  256. package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-id-expected.amp +1 -1
  257. package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-key-expected.amp +4 -4
  258. package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-name-expected.amp +1 -1
  259. package/test/resources/9999999/asset/testExisting_asset_message-text-rcb-key-expected.amp +4 -4
  260. package/test/resources/9999999/asset/v1/content/assets/1295064/get-response.json +4 -4
  261. package/test/resources/9999999/asset/v1/content/assets/1295065/get-response.json +60 -0
  262. package/test/resources/9999999/asset/v1/content/assets/1295066/get-response.json +60 -0
  263. package/test/resources/9999999/asset/v1/content/assets/5289/get-response.json +75 -0
  264. package/test/resources/9999999/asset/v1/content/assets/808714/get-response.json +3 -3
  265. package/test/resources/9999999/asset/v1/content/assets/950143/get-response.json +97 -0
  266. package/test/resources/9999999/asset/v1/content/assets/get-response-customerKey=testExisting_asset.json +1 -1
  267. 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
  268. 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
  269. 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
  270. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN205,206,230,232,1,207,208,209,5.json +229 -0
  271. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN205,206,230,232,1.json +98 -1
  272. 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
  273. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN223,224,225,226,227,228,214,4.json +35 -0
  274. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN223,224,225,226,227,228.json +7 -0
  275. 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
  276. package/test/resources/9999999/automation/v1/queries/get-response-Name=testExisting_query.json +24 -0
  277. package/test/resources/9999999/automation/v1/scripts/get-response-name=testExisting_script.json +17 -0
  278. package/test/resources/9999999/automation/v1/scripts/get-response.json +2 -2
  279. package/test/resources/9999999/dataExtension/retrieve-CustomerKey=testNew_event_withSchema-response.xml +50 -0
  280. package/test/resources/9999999/dataExtension/retrieve-createdViaEvent-response.xml +50 -0
  281. package/test/resources/9999999/dataExtension/retrieve-response.xml +48 -0
  282. package/test/resources/9999999/dataExtension/retrieve_event_withSchema-expected.json +219 -0
  283. package/test/resources/9999999/dataExtension/update-afterCreatedViaEvent-response.xml +55 -0
  284. package/test/resources/9999999/dataExtension/update-callout-afterCreatedViaEvent-expected.xml +1 -0
  285. package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_event_withSchema-response.xml +461 -0
  286. package/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKeyINtestExisting_dataExtension,testNew_dataExtension-response.xml +133 -0
  287. package/test/resources/9999999/dataExtensionField/retrieve-response.xml +870 -0
  288. package/test/resources/9999999/dataFolder/retrieve-ContentType=asset-shared-QAA-response.xml +70 -0
  289. package/test/resources/9999999/dataFolder/retrieve-ContentType=asset-shared-response.xml +70 -0
  290. package/test/resources/9999999/dataFolder/retrieve-ContentType=journey-response.xml +48 -0
  291. 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
  292. 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
  293. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,journey-response.xml +92 -0
  294. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +115 -0
  295. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,ssjsactivity-response.xml +92 -0
  296. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared-QAA-response.xml +70 -0
  297. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset-shared,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +431 -0
  298. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINautomations,queryactivity-response.xml +70 -0
  299. package/test/resources/9999999/dataFolder/{retrieve-response.xml → retrieve-ContentTypeINdataextension,hidden,queryactivity,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml} +32 -119
  300. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINdataextension,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +117 -0
  301. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINhidden,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +46 -0
  302. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINshared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-QAA-response.xml +251 -0
  303. package/test/resources/9999999/dataFolder/retrieve-response-.xml +519 -0
  304. package/test/resources/9999999/event/build-expected.json +227 -0
  305. package/test/resources/9999999/event/get-expected.json +234 -0
  306. package/test/resources/9999999/event/post_withExistingDE-callout-expected.json +20 -0
  307. package/test/resources/9999999/event/post_withExistingDE-expected.json +23 -0
  308. package/test/resources/9999999/event/post_withSchema-callout-expected.json +199 -0
  309. package/test/resources/9999999/event/post_withSchema-expected.json +234 -0
  310. package/test/resources/9999999/event/put-callout-expected.json +204 -0
  311. package/test/resources/9999999/event/put-expected.json +233 -0
  312. package/test/resources/9999999/event/template-expected.json +227 -0
  313. package/test/resources/9999999/interaction/v1/eventDefinitions/get-response.json +252 -2
  314. package/test/resources/9999999/interaction/v1/eventDefinitions/key_testExisting_event/delete-response.txt +0 -0
  315. package/test/resources/9999999/interaction/v1/eventDefinitions/key_testExisting_event/put-response.json +242 -0
  316. package/test/resources/9999999/interaction/v1/eventDefinitions/post_withExistingDE-response.json +28 -0
  317. package/test/resources/9999999/interaction/v1/eventDefinitions/post_withSchema-response.json +243 -0
  318. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/delete-response.txt +1 -0
  319. package/test/resources/9999999/interaction/v1/interactions/3c3f4112-9b43-43ca-8a89-aa0375b2c1a2/get-response.json +4 -4
  320. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Quicksend/get-response.json +4 -4
  321. package/test/resources/9999999/interaction/v1/interactions/publishAsync/3c3f4112-9b43-43ca-8a89-aa0375b2c1a2/post-response.json +4 -0
  322. package/test/resources/9999999/interaction/v1/interactions/publishStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-failed.json +34 -0
  323. package/test/resources/9999999/interaction/v1/interactions/publishStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-success.json +5 -0
  324. package/test/resources/9999999/interaction/v1/interactions/publishStatus/45f06c0a-3ed2-48b2-a6a8-b5119253f01c/get-response-successWarnings.json +36 -0
  325. package/test/resources/9999999/journey/build-expected.json +5 -5
  326. package/test/resources/9999999/journey/get-multistep-expected.json +1 -1
  327. package/test/resources/9999999/journey/get-quicksend-expected.json +5 -5
  328. package/test/resources/9999999/journey/get-quicksend-rcb-id-expected.json +1 -1
  329. package/test/resources/9999999/journey/get-quicksend-rcb-key-expected.json +7 -7
  330. package/test/resources/9999999/journey/get-quicksend-rcb-name-expected.json +1 -1
  331. package/test/resources/9999999/journey/post-expected.json +1 -1
  332. package/test/resources/9999999/journey/publish-callout-expected.json +1 -0
  333. package/test/resources/9999999/journey/put-expected.json +1 -1
  334. package/test/resources/9999999/journey/template-expected.json +5 -5
  335. package/test/resources/9999999/mobileKeyword/build-expected.json +1 -0
  336. package/test/resources/9999999/mobileKeyword/get-expected.json +1 -0
  337. package/test/resources/9999999/mobileKeyword/post-create-expected.json +1 -0
  338. package/test/resources/9999999/mobileKeyword/template-expected.json +1 -0
  339. package/test/resources/{1111111/accountUser/retrieve-CustomerKey=testExisting_userANDActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-response.xml → 9999999/queryDefinition/retrieve-CustomerKey=badANDStatus=Active-response.xml} +10 -11
  340. package/test/resources/9999999/script/get_ampincluded-rcb-key-expected.html +2 -2
  341. package/test/resources/9999999/script/get_ampscript-expected.html +1 -0
  342. package/test/resources/9999999/script/get_ampscript-rcb-id-expected.html +1 -0
  343. package/test/resources/9999999/script/get_ampscript-rcb-key-expected.html +3 -2
  344. package/test/resources/9999999/script/get_ampscript-rcb-name-expected.html +3 -0
  345. package/test/resources/9999999/script/get_mixed-expected.html +2 -2
  346. package/test/resources/9999999/script/get_mixed-rcb-key-expected.html +2 -2
  347. package/test/resources/9999999/senderProfile/get-rcb-key-expected.json +4 -4
  348. package/test/resources/9999999/senderProfile/retrieve-response.xml +1 -1
  349. package/test/resources/9999999/triggeredSend/get-rcb-key-expected.json +4 -4
  350. package/test/resources/9999999/triggeredSendDefinition/retrieve-TriggeredSendStatusINNew,Active,Inactive,Moved,Canceled-response.xml +1 -1
  351. package/test/type.asset.test.js +189 -42
  352. package/test/type.automation.test.js +135 -59
  353. package/test/type.dataExtension.test.js +4 -4
  354. package/test/type.dataExtract.test.js +4 -4
  355. package/test/type.emailSend.test.js +3 -3
  356. package/test/type.event.test.js +286 -7
  357. package/test/type.journey.test.js +335 -9
  358. package/test/type.query.test.js +33 -29
  359. package/test/type.script.test.js +61 -11
  360. package/test/type.senderProfile.test.js +36 -3
  361. package/test/type.transactionalEmail.test.js +3 -3
  362. package/test/type.triggeredSend.test.js +75 -6
  363. package/test/type.user.test.js +1 -1
  364. package/test/utils.js +31 -9
  365. package/tsconfig.json +6 -1
  366. package/{jsconfig.json → tsconfig.npmScripts.json} +1 -1
  367. package/tsconfig.precommit.json +26 -0
  368. package/types/mcdev.d.js +39 -14
  369. /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=falseANDCustomerKey=testExisting_userANDEmaillike@-response.xml → retrieve-ActiveFlag=falseANDCustomerKey=testExisting_userANDEmaillike@-QAA-response.xml} +0 -0
  370. /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=falseANDEmaillike@-response.xml → retrieve-ActiveFlag=falseANDEmaillike@-QAA-response.xml} +0 -0
  371. /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=trueANDCustomerKey=testExisting_userANDEmaillike@-response.xml → retrieve-ActiveFlag=trueANDCustomerKey=testExisting_userANDEmaillike@-QAA-response.xml} +0 -0
  372. /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-response.xml → retrieve-ActiveFlag=trueANDEmailisNullORNamelikeapp userANDMustChangePassword=false-QAA-response.xml} +0 -0
  373. /package/test/resources/1111111/accountUser/{retrieve-ActiveFlag=trueANDEmaillike@-response.xml → retrieve-ActiveFlag=trueANDEmaillike@-QAA-response.xml} +0 -0
  374. /package/test/resources/1111111/businessUnit/{retrieve-ID=1111111-response.xml → retrieve-ID=1111111-QAA-response.xml} +0 -0
  375. /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
  376. /package/test/resources/1111111/dataFolder/{retrieve-response.xml → retrieve-response-.xml} +0 -0
  377. /package/test/resources/9999999/dataFolder/{retrieve-ContentType=asset-sharedORContentType=asset-response.xml → retrieve-ContentTypeINasset,asset-shared-response.xml} +0 -0
  378. /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
  379. /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
  380. /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
@@ -109,7 +109,7 @@ describe('type: script', () => {
109
109
 
110
110
  assert.equal(
111
111
  testUtils.getAPIHistoryLength(),
112
- 3,
112
+ 2,
113
113
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
114
114
  );
115
115
  return;
@@ -150,7 +150,7 @@ describe('type: script', () => {
150
150
 
151
151
  assert.equal(
152
152
  testUtils.getAPIHistoryLength(),
153
- 3,
153
+ 2,
154
154
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
155
155
  );
156
156
  return;
@@ -192,7 +192,7 @@ describe('type: script', () => {
192
192
 
193
193
  assert.equal(
194
194
  testUtils.getAPIHistoryLength(),
195
- 3,
195
+ 2,
196
196
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
197
197
  );
198
198
  return;
@@ -217,7 +217,7 @@ describe('type: script', () => {
217
217
  .exist;
218
218
  assert.equal(
219
219
  testUtils.getAPIHistoryLength(),
220
- 3,
220
+ 2,
221
221
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
222
222
  );
223
223
  return;
@@ -261,7 +261,7 @@ describe('type: script', () => {
261
261
  // check number of API calls
262
262
  assert.equal(
263
263
  testUtils.getAPIHistoryLength(),
264
- 5,
264
+ 4,
265
265
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
266
266
  );
267
267
  return;
@@ -312,7 +312,7 @@ describe('type: script', () => {
312
312
 
313
313
  assert.equal(
314
314
  testUtils.getAPIHistoryLength(),
315
- 3,
315
+ 2,
316
316
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
317
317
  );
318
318
  return;
@@ -364,11 +364,57 @@ describe('type: script', () => {
364
364
 
365
365
  assert.equal(
366
366
  testUtils.getAPIHistoryLength(),
367
- 3,
367
+ 2,
368
368
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
369
369
  );
370
370
  return;
371
371
  });
372
+
373
+ it('Should create a script template via buildTemplate with --dependencies', async () => {
374
+ // download first before we test buildTemplate
375
+ await handler.retrieve('testInstance/testBU', ['script', 'asset']);
376
+
377
+ handler.setOptions({ dependencies: true, skipInteraction: true });
378
+
379
+ // GIVEN there is a template
380
+ const templatedItems = await handler.buildTemplate(
381
+ 'testInstance/testBU',
382
+ 'script',
383
+ ['testExisting_script_ampscript'],
384
+ 'testSourceMarket'
385
+ );
386
+ // WHEN
387
+ assert.equal(process.exitCode, 0, 'buildTemplate should not have thrown an error');
388
+
389
+ assert.deepEqual(
390
+ Object.keys(templatedItems),
391
+ ['script', 'asset'],
392
+ 'expected specific types to be templated'
393
+ );
394
+
395
+ // script
396
+ assert.equal(
397
+ templatedItems.script ? Object.keys(templatedItems.script).length : 0,
398
+ 1,
399
+ 'unexpected number of scripts templated'
400
+ );
401
+ assert.deepEqual(
402
+ templatedItems.script.map((item) => item.key),
403
+ ['{{{prefix}}}script_ampscript'],
404
+ 'expected specific scripts to be templated'
405
+ );
406
+ // asset
407
+ assert.equal(
408
+ templatedItems.asset ? Object.keys(templatedItems.asset).length : 0,
409
+ 3,
410
+ 'unexpected number of assets templated'
411
+ );
412
+ assert.deepEqual(
413
+ templatedItems.asset.map((item) => item.customerKey),
414
+ ['{{{prefix}}}htmlblock1', '{{{prefix}}}asset_htmlblock', '{{{prefix}}}htmlblock2'],
415
+ 'expected specific assets to be templated'
416
+ );
417
+ });
372
418
  });
373
419
 
374
420
  describe('Delete ================', () => {
@@ -434,7 +480,11 @@ describe('type: script', () => {
434
480
  // retrieve result
435
481
  assert.deepEqual(
436
482
  replace['testInstance/testBU'].script,
437
- ['testExisting_script_ampincluded', 'testExisting_script_mixed'],
483
+ [
484
+ 'testExisting_script_ampscript',
485
+ 'testExisting_script_ampincluded',
486
+ 'testExisting_script_mixed',
487
+ ],
438
488
  'should have found the right scripts that need updating'
439
489
  );
440
490
  // get results from cache
@@ -482,7 +532,7 @@ describe('type: script', () => {
482
532
 
483
533
  assert.equal(
484
534
  testUtils.getAPIHistoryLength(),
485
- 15,
535
+ 8,
486
536
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
487
537
  );
488
538
  return;
@@ -548,7 +598,7 @@ describe('type: script', () => {
548
598
 
549
599
  assert.equal(
550
600
  testUtils.getAPIHistoryLength(),
551
- 15,
601
+ 8,
552
602
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
553
603
  );
554
604
  return;
@@ -619,7 +669,7 @@ describe('type: script', () => {
619
669
 
620
670
  assert.equal(
621
671
  testUtils.getAPIHistoryLength(),
622
- 15,
672
+ 8,
623
673
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
624
674
  );
625
675
  return;
@@ -128,6 +128,39 @@ describe('type: senderProfile', () => {
128
128
  );
129
129
  return;
130
130
  });
131
+
132
+ it('Should create a senderProfile template via buildTemplate with --dependencies', async () => {
133
+ // download first before we test buildTemplate
134
+ handler.setOptions({ dependencies: true, retrieve: true });
135
+
136
+ // GIVEN there is a template
137
+ const templatedItems = await handler.buildTemplate(
138
+ 'testInstance/testBU',
139
+ 'senderProfile',
140
+ ['testExisting_senderProfile'],
141
+ 'testSourceMarket'
142
+ );
143
+ // WHEN
144
+ assert.equal(process.exitCode, 0, 'buildTemplate should not have thrown an error');
145
+
146
+ assert.deepEqual(
147
+ Object.keys(templatedItems),
148
+ ['senderProfile'],
149
+ 'expected specific types to be templated'
150
+ );
151
+
152
+ // senderProfile
153
+ assert.equal(
154
+ templatedItems.senderProfile ? Object.keys(templatedItems.senderProfile).length : 0,
155
+ 1,
156
+ 'unexpected number of senderProfiles templated'
157
+ );
158
+ assert.deepEqual(
159
+ templatedItems.senderProfile.map((item) => item.CustomerKey),
160
+ ['{{{prefix}}}senderProfile'],
161
+ 'expected specific senderProfiles to be templated'
162
+ );
163
+ });
131
164
  });
132
165
 
133
166
  describe('Delete ================', () => {
@@ -175,7 +208,7 @@ describe('type: senderProfile', () => {
175
208
 
176
209
  assert.equal(
177
210
  testUtils.getAPIHistoryLength(),
178
- 13,
211
+ 7,
179
212
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
180
213
  );
181
214
  return;
@@ -210,7 +243,7 @@ describe('type: senderProfile', () => {
210
243
 
211
244
  assert.equal(
212
245
  testUtils.getAPIHistoryLength(),
213
- 13,
246
+ 7,
214
247
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
215
248
  );
216
249
  return;
@@ -245,7 +278,7 @@ describe('type: senderProfile', () => {
245
278
 
246
279
  assert.equal(
247
280
  testUtils.getAPIHistoryLength(),
248
- 13,
281
+ 7,
249
282
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
250
283
  );
251
284
  return;
@@ -36,7 +36,7 @@ describe('type: transactionalEmail', () => {
36
36
  );
37
37
  assert.equal(
38
38
  testUtils.getAPIHistoryLength(),
39
- 12,
39
+ 11,
40
40
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
41
41
  );
42
42
  return;
@@ -75,7 +75,7 @@ describe('type: transactionalEmail', () => {
75
75
  // check number of API calls
76
76
  assert.equal(
77
77
  testUtils.getAPIHistoryLength(),
78
- 14,
78
+ 13,
79
79
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
80
80
  );
81
81
  return;
@@ -137,7 +137,7 @@ describe('type: transactionalEmail', () => {
137
137
  );
138
138
  assert.equal(
139
139
  testUtils.getAPIHistoryLength(),
140
- 12,
140
+ 11,
141
141
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
142
142
  );
143
143
  return;
@@ -36,7 +36,7 @@ describe('type: triggeredSend', () => {
36
36
  );
37
37
  assert.equal(
38
38
  testUtils.getAPIHistoryLength(),
39
- 12,
39
+ 10,
40
40
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
41
41
  );
42
42
  return;
@@ -75,7 +75,7 @@ describe('type: triggeredSend', () => {
75
75
  // check number of API calls
76
76
  assert.equal(
77
77
  testUtils.getAPIHistoryLength(),
78
- 14,
78
+ 12,
79
79
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
80
80
  );
81
81
  return;
@@ -122,11 +122,80 @@ describe('type: triggeredSend', () => {
122
122
  );
123
123
  assert.equal(
124
124
  testUtils.getAPIHistoryLength(),
125
- 12,
125
+ 10,
126
126
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
127
127
  );
128
128
  return;
129
129
  });
130
+
131
+ it('Should create a script template via buildTemplate with --dependencies', async () => {
132
+ // download first before we test buildTemplate
133
+
134
+ handler.setOptions({ dependencies: true, retrieve: true });
135
+
136
+ // GIVEN there is a template
137
+ const templatedItems = await handler.buildTemplate(
138
+ 'testInstance/testBU',
139
+ 'triggeredSend',
140
+ ['testExisting_triggeredSend', 'testExisting_triggeredSend_rcb'],
141
+ 'testSourceMarket'
142
+ );
143
+ // WHEN
144
+ assert.equal(process.exitCode, 0, 'buildTemplate should not have thrown an error');
145
+
146
+ assert.deepEqual(
147
+ Object.keys(templatedItems),
148
+ ['triggeredSend', 'sendClassification', 'senderProfile', 'asset'],
149
+ 'expected specific types to be templated'
150
+ );
151
+
152
+ // triggeredSend
153
+ assert.equal(
154
+ templatedItems.triggeredSend ? Object.keys(templatedItems.triggeredSend).length : 0,
155
+ 2,
156
+ 'unexpected number of triggeredSends templated'
157
+ );
158
+ assert.deepEqual(
159
+ templatedItems.triggeredSend.map((item) => item.CustomerKey),
160
+ ['{{{prefix}}}triggeredSend', '{{{prefix}}}triggeredSend_rcb'],
161
+ 'expected specific triggeredSends to be templated'
162
+ );
163
+ // sendClassification
164
+ assert.equal(
165
+ templatedItems.sendClassification
166
+ ? Object.keys(templatedItems.sendClassification).length
167
+ : 0,
168
+ 1,
169
+ 'unexpected number of sendClassifications templated'
170
+ );
171
+ assert.deepEqual(
172
+ templatedItems.sendClassification.map((item) => item.CustomerKey),
173
+ ['{{{prefix}}}sendClassification'],
174
+ 'expected specific sendClassifications to be templated'
175
+ );
176
+ // senderProfile
177
+ assert.equal(
178
+ templatedItems.senderProfile ? Object.keys(templatedItems.senderProfile).length : 0,
179
+ 2,
180
+ 'unexpected number of senderProfiles templated'
181
+ );
182
+ assert.deepEqual(
183
+ templatedItems.senderProfile.map((item) => item.CustomerKey),
184
+ ['{{{prefix}}}senderProfile', '{{{prefix}}}senderProfile_rcb'],
185
+ 'expected specific senderProfiles to be templated'
186
+ );
187
+ // asset
188
+ assert.equal(
189
+ templatedItems.asset ? Object.keys(templatedItems.asset).length : 0,
190
+ 3,
191
+ 'unexpected number of assets templated'
192
+ );
193
+ assert.deepEqual(
194
+ templatedItems.asset.map((item) => item.customerKey),
195
+ ['{{{prefix}}}asset_htmlblock', '{{{prefix}}}htmlblock1', '{{{prefix}}}htmlblock2'],
196
+ 'expected specific assets to be templated'
197
+ );
198
+ });
130
199
  });
131
200
 
132
201
  describe('Delete ================', () => {
@@ -187,7 +256,7 @@ describe('type: triggeredSend', () => {
187
256
 
188
257
  assert.equal(
189
258
  testUtils.getAPIHistoryLength(),
190
- 24,
259
+ 16,
191
260
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
192
261
  );
193
262
  return;
@@ -222,7 +291,7 @@ describe('type: triggeredSend', () => {
222
291
 
223
292
  assert.equal(
224
293
  testUtils.getAPIHistoryLength(),
225
- 24,
294
+ 16,
226
295
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
227
296
  );
228
297
  return;
@@ -257,7 +326,7 @@ describe('type: triggeredSend', () => {
257
326
 
258
327
  assert.equal(
259
328
  testUtils.getAPIHistoryLength(),
260
- 24,
329
+ 16,
261
330
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
262
331
  );
263
332
  return;
@@ -55,7 +55,7 @@ describe('type: user', () => {
55
55
  await File.readFile(`./docs/user/testInstance.users.md`, {
56
56
  encoding: 'utf8',
57
57
  })
58
- ).replaceAll(regexFindDaysSinceLogin, [expectedDaysSinceLogin[0]]);
58
+ ).replaceAll(regexFindDaysSinceLogin, expectedDaysSinceLogin[0]);
59
59
  expect(actualFile).to.equal(expectedFile);
60
60
 
61
61
  assert.equal(
package/test/utils.js CHANGED
@@ -16,6 +16,17 @@ let apimock;
16
16
  import { handleSOAPRequest, handleRESTRequest, soapUrl, restUrl } from './resourceFactory.js';
17
17
  const authResources = File.readJsonSync(path.join(__dirname, './resources/auth.json'));
18
18
 
19
+ /**
20
+ * gets file from Retrieve folder
21
+ *
22
+ * @param {string} from source path (starting in bu folder)
23
+ * @param {string} to target path (starting in bu folder)
24
+ * @param {string} [mid] used when we need to test on ParentBU
25
+ * @returns {Promise.<{status:'ok'|'skipped'|'failed', statusMessage:string, file:string}>} -
26
+ */
27
+ export async function copyFile(from, to, mid = '9999999') {
28
+ return File.copyFileSimple(`./test/resources/${mid}/${from}`, `./test/resources/${mid}/${to}`);
29
+ }
19
30
  /**
20
31
  * gets file from Retrieve folder
21
32
  *
@@ -150,25 +161,34 @@ export function mockSetup(isDeploy) {
150
161
  noLogFile: true,
151
162
  // reset
152
163
  api: undefined,
153
- keySuffix: undefined,
164
+ autoMidSuffix: undefined,
154
165
  changeKeyField: undefined,
155
166
  changeKeyValue: undefined,
156
167
  commitHistory: undefined,
168
+ dependencies: undefined,
157
169
  errorLog: undefined,
158
170
  execute: undefined,
159
171
  filter: undefined,
160
172
  fixShared: undefined,
161
173
  fromRetrieve: undefined,
162
174
  json: undefined,
175
+ keySuffix: undefined,
163
176
  like: undefined,
164
- noMidSuffix: undefined,
177
+ noUpdate: undefined,
178
+ publish: undefined,
179
+ referenceFrom: undefined,
180
+ referenceTo: undefined,
165
181
  refresh: undefined,
166
- _runningTest: undefined,
182
+ retrieve: undefined,
167
183
  schedule: undefined,
184
+ skipDeploy: undefined,
168
185
  skipInteraction: undefined,
186
+ skipRetrieve: undefined,
187
+ skipStatusCheck: undefined,
188
+ _runningTest: undefined,
189
+ _welcomeMessageShown: undefined,
169
190
  });
170
191
  }
171
- // @ts-expect-error somehow, MockAdapter does not expect type AxiosInstance
172
192
  apimock = new MockAdapter(axiosInstance, { onNoMatch: 'throwException' });
173
193
  // set access_token to mid to allow for autorouting of mock to correct resources
174
194
  apimock.onPost(authResources.success.url).reply((config) => {
@@ -280,7 +300,7 @@ export function getRestCallout(method, url) {
280
300
  * @param {string} [objectType] optionall filter requests by object
281
301
  * @returns {object[]} json payload of the requests
282
302
  */
283
- export function getSoapCallout(requestAction, objectType) {
303
+ export function getSoapCallouts(requestAction, objectType) {
284
304
  const method = 'post';
285
305
  const url = '/Service.asmx';
286
306
  const subset = apimock.history[method];
@@ -290,10 +310,12 @@ export function getSoapCallout(requestAction, objectType) {
290
310
  // find soap requestst of the correct request type
291
311
  .filter((item) => item.headers.SOAPAction === requestAction)
292
312
  // find soap requestst of the correct request type
293
- .filter(
294
- (item) =>
295
- !objectType ||
296
- item.data.split('<ObjectType>')[1].split('</ObjectType>')[0] === objectType
313
+ .filter((item) =>
314
+ !objectType || item.data.includes('<ObjectType')
315
+ ? item.data.split('<ObjectType>')[1].split('</ObjectType>')[0] === objectType
316
+ : item.data.includes('<Objects xsi:type="')
317
+ ? item.data.split('<Objects xsi:type="')[1].split('">')[0] === objectType
318
+ : false
297
319
  )
298
320
  .map((item) => item.data);
299
321
  return myCallout;
package/tsconfig.json CHANGED
@@ -1,7 +1,12 @@
1
1
  {
2
2
  // Change this to match your project
3
- "include": ["lib/**/*"],
3
+ "include": ["lib/**/*.js", "types/**/*.js", "test/**/*.js"],
4
4
  "compilerOptions": {
5
+ "module": "nodenext",
6
+ "moduleResolution": "nodenext",
7
+ "checkJs": true,
8
+ "skipLibCheck": true,
9
+ "target": "es2022",
5
10
  // Tells TypeScript to read JS files, as
6
11
  // normally they are ignored as source files
7
12
  "allowJs": true,
@@ -2,7 +2,7 @@
2
2
  "include": ["lib/**/*.js", "types/**/*.js", "test/**/*.js"],
3
3
  "exclude": ["node_modules"],
4
4
  "compilerOptions": {
5
- "module": "NodeNext",
5
+ "module": "nodenext",
6
6
  "moduleResolution": "nodenext",
7
7
  "target": "es2022",
8
8
  "checkJs": true,
@@ -0,0 +1,26 @@
1
+ {
2
+ // Change this to match your project
3
+ "include": ["lib/**/*.js"],
4
+ "compilerOptions": {
5
+ "module": "nodenext",
6
+ "moduleResolution": "nodenext",
7
+ "target": "es2022",
8
+ "checkJs": true,
9
+ "skipLibCheck": true,
10
+ // Tells TypeScript to read JS files, as
11
+ // normally they are ignored as source files
12
+ "allowJs": true,
13
+ // Generate d.ts files
14
+ "declaration": true,
15
+ // This compiler run should
16
+ // only output d.ts files
17
+ "emitDeclarationOnly": true,
18
+ // Types should go into this directory.
19
+ // Removing this would place the .d.ts files
20
+ // next to the .js files
21
+ "outDir": "@types",
22
+ // go to js file when using IDE functions like
23
+ // "Go to Definition" in VSCode
24
+ "declarationMap": true
25
+ }
26
+ }
package/types/mcdev.d.js CHANGED
@@ -94,7 +94,7 @@
94
94
  * @property {string} Scale the number of places after the decimal that the field can hold; example: "0","1", ...
95
95
  */
96
96
  /**
97
- * @typedef {Object.<string, DataExtensionFieldItem>} DataExtensionFieldMap
97
+ * @typedef {Object.<string, DataExtensionFieldItem>} DataExtensionFieldMap key: name of field, value: DataExtensionFieldItem
98
98
  */
99
99
  /**
100
100
  * @typedef {object} DataExtensionItem
@@ -156,7 +156,7 @@
156
156
  * @property {number} [Client.ID] EID e.g:7281698
157
157
  * @property {number} [Client.ModifiedBy] AccountUserID of user who last modified this user
158
158
  * @property {'User'|'Installed Package'} c__type -
159
- * @property {boolean|string} [IsLocked] (API only)
159
+ * @property {boolean} [IsLocked] (API only)
160
160
  * @property {boolean} [Unlock] used to unlock a user that has IsLocked === true
161
161
  * @property {boolean} c__IsLocked_readOnly copy of IsLocked
162
162
  * @property {string} c__TimeZoneName name of timezone
@@ -175,11 +175,17 @@
175
175
  * @typedef {Object.<string, UserDocument>} UserDocumentMap key=customer key
176
176
  */
177
177
  /**
178
- * @typedef {UserDocument & object} UserDocumentDocument
179
- * @property {boolean | string} ActiveFlag user.ActiveFlag === true ? '✓' : '-'
180
- * @property {boolean | string} IsAPIUser user.IsAPIUser === true ? '✓' : '-'
181
- * @property {boolean | string} MustChangePassword user.MustChangePassword === true ? '✓' : '-'
182
- * @property {number | string} DefaultBusinessUnit default MID; BUName after we resolved it
178
+ * @typedef {object} UserDocumentDocumentHelper
179
+ * @property {string} ActiveFlagDocs docs: user.ActiveFlag === true ? '✓' : '-'
180
+ * @property {string} IsAPIUserDocs docs: user.IsAPIUser === true ? '✓' : '-'
181
+ * @property {string} MustChangePasswordDocs docs: user.MustChangePassword === true ? '✓' : '-'
182
+ * @property {string} DefaultBusinessUnitDocs docs: default MID; BUName after we resolved it
183
+ * @property {string} RolesDocs docs: list of roles as concatenated string
184
+ * @property {string} AssociatedBusDocs docs: list of associated BUs as concatenated string
185
+ * @property {string | number} ModifiedBy docs: user name who last modified this user
186
+ * @property {string} TimeZoneName docs: name of timezone
187
+ * @property {string} IsLockedDocs docs: if the user cannot login
188
+ * @typedef {UserDocument & UserDocumentDocumentHelper} UserDocumentDocument
183
189
  */
184
190
  /**
185
191
  * @typedef {object} AccountUserConfiguration
@@ -326,16 +332,9 @@
326
332
  * @typedef {import('simple-git').DiffResultTextFile & McdevDeltaPkgItem} DeltaPkgItem
327
333
  */
328
334
  /**
329
- * @typedef {import('sfmc-sdk/auth').default} SDKauth
330
- * @typedef {import('sfmc-sdk/rest').default} SDKrest
331
- * @typedef {import('sfmc-sdk/soap').default} SDKsoap
332
335
  * @typedef {import('sfmc-sdk/util').RestError} RestError
333
336
  * @typedef {import('sfmc-sdk/util').SOAPError} SOAPError
334
337
  * @typedef {SOAPError & RestError} SDKError
335
- * @typedef {object} SDK
336
- * @property {SDKauth} auth SDKauth
337
- * @property {SDKrest} rest SDKrest
338
- * @property {SDKsoap} soap SDKsoap
339
338
  */
340
339
 
341
340
  /**
@@ -471,4 +470,30 @@ complex
471
470
  * @property {boolean} supports.retrieveAsTemplate can you retrieve & template in one step
472
471
  */
473
472
 
473
+ /**
474
+ * @typedef {object} ListItem
475
+ * @property {object} [Client] wrapper
476
+ * @property {number} Client.ID owning BU's MID
477
+ * @property {string} [PartnerKey] not used
478
+ * @property {string} [CreatedDate] "2021-06-21T11:54:57.103"
479
+ * @property {string} [ModifiedDate] "2021-06-21T11:54:57.103"
480
+ * @property {number} [ID] unique identifier per BU
481
+ * @property {string} [ObjectID] not used
482
+ * @property {string} [CustomerKey] unique identifer per BU
483
+ * @property {string} [Path] customn field that tracks the exact directory path of the current folder including its own name
484
+ * @property {object} [ParentFolder] wrapper
485
+ * @property {number} ParentFolder.ID folder id of parent folder; 0 if current folder is already on top level
486
+ * @property {string} [ParentFolder.ObjectID] not used
487
+ * @property {string} [ParentFolder.Path] customn field that tracks the exact directory path of the current folder including its own name
488
+ * @property {string} Name folder name
489
+ * @property {string} [Description] deprecated option to describe the folder content
490
+ * @property {string} ContentType e.g. "shared_data"; see folder-subtypes for complete list
491
+ * @property {boolean} IsActive ?
492
+ * @property {boolean} IsEditable option to disable renaming/moving this folder via GUI
493
+ * @property {boolean} AllowChildren option to prevent creating subfolders via GUI
494
+ * @property {boolean} [_generated] helper flag for Deployer class to signal if the folder was auto-generated or manually placed
495
+ *
496
+ * @typedef {Object.<number, ListItem>} ListIdMap key=id
497
+ * @typedef {Object.<string, ListItem>} ListMap key=customer key
498
+ */
474
499
  export default {};