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
@@ -17,6 +17,10 @@ import cache from '../util/cache.js';
17
17
  * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj
18
18
  * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams
19
19
  * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap
20
+ *
21
+ * @typedef {import('../../types/mcdev.d.js').ListItem} ListItem
22
+ * @typedef {import('../../types/mcdev.d.js').ListMap} ListMap
23
+ * @typedef {import('../../types/mcdev.d.js').ListIdMap} ListIdMap
20
24
  */
21
25
 
22
26
  /**
@@ -32,20 +36,27 @@ class Folder extends MetadataType {
32
36
  * @param {string[]} [additionalFields] Returns specified fields even if their retrieve definition is not set to true
33
37
  * @param {string[]} [subTypeArr] content type of folder
34
38
  * @param {string} [key] customer key of single item to retrieve
35
- * @returns {Promise} Promise
39
+ * @returns {Promise.<{metadata: ListMap, type: string}>} Promise
36
40
  */
37
41
  static async retrieve(retrieveDir, additionalFields, subTypeArr, key) {
38
42
  if (key) {
39
43
  Util.logger.error(`Folder.retrieve() does not support key parameter`);
40
44
  }
41
- const queryAllFolders = await this.retrieveHelper(additionalFields, true, subTypeArr);
42
-
45
+ /** @type {ListItem[]} */
46
+ const queryAllFolders = await this.retrieveHelper(additionalFields, false, subTypeArr);
43
47
  if (this.buObject.eid !== this.buObject.mid) {
44
- queryAllFolders.push(
45
- ...(await this.retrieveHelper(additionalFields, false, subTypeArr))
46
- );
48
+ const selectedParentTypes = subTypeArr?.length
49
+ ? subTypeArr.filter((item) => this.definition.folderTypesFromParent.includes(item))
50
+ : subTypeArr;
51
+ if (!subTypeArr?.length || selectedParentTypes.length) {
52
+ queryAllFolders.push(
53
+ ...(await this.retrieveHelper(additionalFields, true, selectedParentTypes))
54
+ );
55
+ }
47
56
  }
57
+
48
58
  const sortPairs = toposort(queryAllFolders.map((a) => [a.ParentFolder.ID, a.ID]));
59
+ /** @type {ListIdMap} */
49
60
  const idMap = {};
50
61
  for (const val of queryAllFolders) {
51
62
  // Contact Builder Lists create a folder called "Audiences" with the same Customer Key as the
@@ -64,6 +75,7 @@ class Folder extends MetadataType {
64
75
  }
65
76
 
66
77
  // create root node for attaching, but will be deleted later
78
+ // @ts-expect-error we set an incomplete ListItem for ID==0 which is flagged by ts
67
79
  idMap[0] = {
68
80
  Name: '<ROOT>',
69
81
  };
@@ -113,6 +125,7 @@ class Folder extends MetadataType {
113
125
  }
114
126
 
115
127
  // build a new map using the customer key instead of id
128
+ /** @type {ListMap} */
116
129
  const metadata = {};
117
130
  for (const id in idMap) {
118
131
  // remove keys which are listed in other BUs and skip root
@@ -156,7 +169,7 @@ class Folder extends MetadataType {
156
169
  `Downloaded: ${this.definition.type} (${Object.keys(savedMetadata).length})`
157
170
  );
158
171
  }
159
- return { metadata: metadata, type: this.definition.type };
172
+ return { metadata, type: this.definition.type };
160
173
  }
161
174
 
162
175
  /**
@@ -164,7 +177,7 @@ class Folder extends MetadataType {
164
177
  *
165
178
  * @param {void | string[]} [_] parameter not used
166
179
  * @param {string[]} [subTypeArr] content type of folder
167
- * @returns {Promise} Promise
180
+ * @returns {Promise.<{metadata: ListMap, type: string}>} Promise
168
181
  */
169
182
  static retrieveForCache(_, subTypeArr) {
170
183
  return this.retrieve(null, null, subTypeArr, null);
@@ -175,8 +188,8 @@ class Folder extends MetadataType {
175
188
  * and comparing to check if create or update operation is needed.
176
189
  * Copied due to having a dependency on itself, meaning the created need to be serial
177
190
  *
178
- * @param {MetadataTypeMap} metadata metadata mapped by their keyField
179
- * @returns {Promise.<object>} Promise of saved metadata
191
+ * @param {ListMap} metadata metadata mapped by their keyField
192
+ * @returns {Promise.<ListMap>} Promise of saved metadata
180
193
  */
181
194
  static async upsert(metadata) {
182
195
  const orignalMetadata = structuredClone(metadata);
@@ -185,6 +198,7 @@ class Folder extends MetadataType {
185
198
  let createCount = 0;
186
199
  let createFailedCount = 0;
187
200
  let filteredByPreDeploy = 0;
201
+ /** @type {ListMap} */
188
202
  const upsertResults = {};
189
203
  const sortPairs = toposort(
190
204
  Object.keys(metadata).map((customerKey) => [
@@ -262,6 +276,15 @@ class Folder extends MetadataType {
262
276
  continue;
263
277
  }
264
278
  }
279
+ if (existingId && Util.OPTIONS.noUpdate) {
280
+ Util.logger.verbose(
281
+ ` - skipping ${this.definition.type} ${
282
+ deployableMetadata?.Path ||
283
+ deployableMetadata[this.definition.nameField]
284
+ }: --noUpdate flag is set`
285
+ );
286
+ continue;
287
+ }
265
288
 
266
289
  let result;
267
290
  // since deployableMetadata will be modified for deploy, make a copy for reference
@@ -339,12 +362,12 @@ class Folder extends MetadataType {
339
362
  /**
340
363
  * creates a folder based on metatadata
341
364
  *
342
- * @param {MetadataTypeItem} metadataEntry metadata of the folder
343
- * @returns {Promise} Promise
365
+ * @param {ListItem} metadataEntry metadata of the folder
366
+ * @returns {Promise.<any>} Promise of api response
344
367
  */
345
368
  static async create(metadataEntry) {
346
- if (metadataEntry?.Parent?.ID === 0) {
347
- Util.logger.error(
369
+ if (metadataEntry?.ParentFolder?.ID === 0) {
370
+ Util.logger.debug(
348
371
  `${this.definition.type}-${metadataEntry.ContentType}.create:: Cannot create Root Folder: ${metadataEntry.Name}`
349
372
  );
350
373
  return {};
@@ -361,7 +384,7 @@ class Folder extends MetadataType {
361
384
  const response = await super.createREST(restPayload, '/email/v1/category', true);
362
385
  if (response?.objectId) {
363
386
  // convert the response to the same format as the SOAP response
364
- metadataEntry.ID = response.objectId;
387
+ metadataEntry.ID = response.categoryId;
365
388
  // the following is a bit of a hack to make the response look like the SOAP response; not sure if we actually need that anywhere like this --> future developers feel free to double check
366
389
  const returnObject = {
367
390
  Results: [
@@ -405,7 +428,7 @@ class Folder extends MetadataType {
405
428
  * Updates a single Folder.
406
429
  *
407
430
  * @param {MetadataTypeItem} metadataEntry single metadata entry
408
- * @returns {Promise} Promise
431
+ * @returns {Promise.<any>} Promise of api response
409
432
  */
410
433
  static async update(metadataEntry) {
411
434
  const path = metadataEntry.Path;
@@ -434,8 +457,8 @@ class Folder extends MetadataType {
434
457
  /**
435
458
  * prepares a folder for deployment
436
459
  *
437
- * @param {MetadataTypeItem} metadata a single folder definition
438
- * @returns {Promise.<MetadataTypeItem>} Promise of parsed folder metadata
460
+ * @param {ListItem} metadata a single folder definition
461
+ * @returns {Promise.<ListItem>} Promise of parsed folder metadata
439
462
  */
440
463
  static async preDeployTasks(metadata) {
441
464
  if (!this.definition.deployFolderTypes.includes(metadata.ContentType.toLowerCase())) {
@@ -467,12 +490,7 @@ class Folder extends MetadataType {
467
490
  }
468
491
  // retreive ID based on the matching Path of the parent folder
469
492
  else if (metadata?.ParentFolder?.Path) {
470
- metadata.ParentFolder.ID = cache.searchForField(
471
- 'folder',
472
- metadata.ParentFolder.Path,
473
- 'Path',
474
- 'ID'
475
- );
493
+ metadata.ParentFolder.ID = cache.getFolderId(metadata.ParentFolder.Path);
476
494
  return metadata;
477
495
  } else {
478
496
  Util.metadataLogger(
@@ -488,13 +506,13 @@ class Folder extends MetadataType {
488
506
  /**
489
507
  * Returns file contents mapped to their filename without '.json' ending
490
508
  *
491
- * @param {string} dir directory that contains '.json' files to be read
509
+ * @param {string} dir directory with json files, e.g. /retrieve/cred/bu/folder, /deploy/cred/bu/folder, /template/folder
492
510
  * @param {boolean} [listBadKeys] do not print errors, used for badKeys()
493
- * @returns {Promise.<MetadataTypeMap>} fileName => fileContent map
511
+ * @returns {Promise.<ListMap>} fileName => fileContent map
494
512
  */
495
513
  static async getJsonFromFS(dir, listBadKeys) {
496
514
  try {
497
- /** @type {MetadataTypeMap} */
515
+ /** @type {ListMap} */
498
516
  const fileName2FileContent = {};
499
517
  const directories = File.readDirectoriesSync(dir, 10, true);
500
518
  let newCounter = 0;
@@ -564,28 +582,24 @@ class Folder extends MetadataType {
564
582
  * @param {string[]} [additionalFields] Returns specified fields even if their retrieve definition is not set to true
565
583
  * @param {boolean} [queryAllAccounts] which queryAllAccounts setting to use
566
584
  * @param {string[]} [contentTypeList] content type of folder
567
- * @returns {Promise.<object>} soap object
585
+ * @returns {Promise.<ListItem[]>} soap object
568
586
  */
569
587
  static async retrieveHelper(additionalFields, queryAllAccounts, contentTypeList) {
570
588
  const options = { QueryAllAccounts: !!queryAllAccounts };
571
589
  if (contentTypeList) {
572
- for (const contentType of contentTypeList) {
573
- options.filter = options.filter
574
- ? {
575
- leftOperand: {
576
- leftOperand: 'ContentType',
577
- operator: 'equals',
578
- rightOperand: contentType,
579
- },
580
- operator: 'OR',
581
- rightOperand: options.filter,
582
- }
583
- : {
584
- leftOperand: 'ContentType',
585
- operator: 'equals',
586
- rightOperand: contentType,
587
- };
588
- }
590
+ const newFilter = {
591
+ leftOperand: 'ContentType',
592
+ operator: contentTypeList.length === 1 ? 'equals' : 'IN',
593
+ rightOperand:
594
+ contentTypeList.length === 1 ? contentTypeList[0] : contentTypeList.sort(),
595
+ };
596
+ options.filter = options.filter
597
+ ? {
598
+ leftOperand: newFilter,
599
+ operator: 'OR',
600
+ rightOperand: options.filter,
601
+ }
602
+ : newFilter;
589
603
  }
590
604
  const response = await this.client.soap.retrieveBulk(
591
605
  'DataFolder',
@@ -599,8 +613,8 @@ class Folder extends MetadataType {
599
613
  /**
600
614
  * Gets executed after retreive of metadata type
601
615
  *
602
- * @param {MetadataTypeItem} metadata metadata mapped by their keyField
603
- * @returns {MetadataTypeItem} cloned metadata
616
+ * @param {ListItem} metadata metadata mapped by their keyField
617
+ * @returns {ListItem} cloned metadata
604
618
  */
605
619
  static postRetrieveTasks(metadata) {
606
620
  return structuredClone(metadata);
@@ -608,12 +622,13 @@ class Folder extends MetadataType {
608
622
  /**
609
623
  * Helper for writing Metadata to disk, used for Retrieve and deploy
610
624
  *
611
- * @param {MetadataTypeMap} results metadata results from deploy
625
+ * @param {ListMap} results metadata results from deploy
612
626
  * @param {string} retrieveDir directory where metadata should be stored after deploy/retrieve
613
627
  * @param {number | string} mid unused parameter
614
- * @returns {Promise.<object>} Promise of saved metadata
628
+ * @returns {Promise.<ListMap>} Promise of saved metadata
615
629
  */
616
630
  static async saveResults(results, retrieveDir, mid) {
631
+ /** @type {ListMap} */
617
632
  const savedResults = {};
618
633
  for (const metadataEntry in results) {
619
634
  try {