mcdev 6.0.2 → 7.0.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 (602) hide show
  1. package/.beautyamp.json +13 -0
  2. package/.eslintrc.json +7 -1
  3. package/.github/ISSUE_TEMPLATE/bug.yml +1 -0
  4. package/.github/PULL_REQUEST_TEMPLATE/pr_template_release.md +10 -3
  5. package/.github/workflows/close_issues_on_merge.yml +1 -1
  6. package/.github/workflows/code-test.yml +51 -3
  7. package/.github/workflows/coverage-base-update.yml +1 -1
  8. package/.github/workflows/coverage-develop-branch.yml +1 -1
  9. package/.github/workflows/coverage-main-branch.yml +1 -1
  10. package/.github/workflows/coverage.yml +2 -2
  11. package/.github/workflows/npm-publish.yml +3 -2
  12. package/.github/workflows/pr-labeler.yml +1 -1
  13. package/.husky/commit-msg +0 -2
  14. package/.husky/post-checkout +0 -3
  15. package/.husky/post-merge +2 -7
  16. package/.husky/pre-commit +5 -5
  17. package/.prettierrc +0 -8
  18. package/.vscode/extensions.json +2 -0
  19. package/.vscode/settings.json +15 -3
  20. package/@types/lib/Builder.d.ts +97 -0
  21. package/@types/lib/Builder.d.ts.map +1 -0
  22. package/@types/lib/Deployer.d.ts +99 -0
  23. package/@types/lib/Deployer.d.ts.map +1 -0
  24. package/@types/lib/MetadataTypeDefinitions.d.ts +80 -0
  25. package/@types/lib/MetadataTypeDefinitions.d.ts.map +1 -0
  26. package/@types/lib/MetadataTypeInfo.d.ts +78 -0
  27. package/@types/lib/MetadataTypeInfo.d.ts.map +1 -0
  28. package/@types/lib/Retriever.d.ts +66 -0
  29. package/@types/lib/Retriever.d.ts.map +1 -0
  30. package/@types/lib/cli.d.ts +3 -0
  31. package/@types/lib/cli.d.ts.map +1 -0
  32. package/@types/lib/index.d.ts +383 -0
  33. package/@types/lib/index.d.ts.map +1 -0
  34. package/@types/lib/metadataTypes/Asset.d.ts +1082 -0
  35. package/@types/lib/metadataTypes/Asset.d.ts.map +1 -0
  36. package/@types/lib/metadataTypes/AttributeGroup.d.ts +290 -0
  37. package/@types/lib/metadataTypes/AttributeGroup.d.ts.map +1 -0
  38. package/@types/lib/metadataTypes/AttributeSet.d.ts +968 -0
  39. package/@types/lib/metadataTypes/AttributeSet.d.ts.map +1 -0
  40. package/@types/lib/metadataTypes/Automation.d.ts +921 -0
  41. package/@types/lib/metadataTypes/Automation.d.ts.map +1 -0
  42. package/@types/lib/metadataTypes/Campaign.d.ts +190 -0
  43. package/@types/lib/metadataTypes/Campaign.d.ts.map +1 -0
  44. package/@types/lib/metadataTypes/ContentArea.d.ts +250 -0
  45. package/@types/lib/metadataTypes/ContentArea.d.ts.map +1 -0
  46. package/@types/lib/metadataTypes/DataExtension.d.ts +571 -0
  47. package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -0
  48. package/@types/lib/metadataTypes/DataExtensionField.d.ts +236 -0
  49. package/@types/lib/metadataTypes/DataExtensionField.d.ts.map +1 -0
  50. package/@types/lib/metadataTypes/DataExtensionTemplate.d.ts +175 -0
  51. package/@types/lib/metadataTypes/DataExtensionTemplate.d.ts.map +1 -0
  52. package/@types/lib/metadataTypes/DataExtract.d.ts +217 -0
  53. package/@types/lib/metadataTypes/DataExtract.d.ts.map +1 -0
  54. package/@types/lib/metadataTypes/DataExtractType.d.ts +80 -0
  55. package/@types/lib/metadataTypes/DataExtractType.d.ts.map +1 -0
  56. package/@types/lib/metadataTypes/DeliveryProfile.d.ts +102 -0
  57. package/@types/lib/metadataTypes/DeliveryProfile.d.ts.map +1 -0
  58. package/@types/lib/metadataTypes/Discovery.d.ts +189 -0
  59. package/@types/lib/metadataTypes/Discovery.d.ts.map +1 -0
  60. package/@types/lib/metadataTypes/Email.d.ts +384 -0
  61. package/@types/lib/metadataTypes/Email.d.ts.map +1 -0
  62. package/@types/lib/metadataTypes/EmailSend.d.ts +652 -0
  63. package/@types/lib/metadataTypes/EmailSend.d.ts.map +1 -0
  64. package/@types/lib/metadataTypes/Event.d.ts +958 -0
  65. package/@types/lib/metadataTypes/Event.d.ts.map +1 -0
  66. package/@types/lib/metadataTypes/FileLocation.d.ts +101 -0
  67. package/@types/lib/metadataTypes/FileLocation.d.ts.map +1 -0
  68. package/@types/lib/metadataTypes/FileTransfer.d.ts +228 -0
  69. package/@types/lib/metadataTypes/FileTransfer.d.ts.map +1 -0
  70. package/@types/lib/metadataTypes/Filter.d.ts +145 -0
  71. package/@types/lib/metadataTypes/Filter.d.ts.map +1 -0
  72. package/@types/lib/metadataTypes/Folder.d.ts +287 -0
  73. package/@types/lib/metadataTypes/Folder.d.ts.map +1 -0
  74. package/@types/lib/metadataTypes/ImportFile.d.ts +409 -0
  75. package/@types/lib/metadataTypes/ImportFile.d.ts.map +1 -0
  76. package/@types/lib/metadataTypes/Journey.d.ts +541 -0
  77. package/@types/lib/metadataTypes/Journey.d.ts.map +1 -0
  78. package/@types/lib/metadataTypes/List.d.ts +191 -0
  79. package/@types/lib/metadataTypes/List.d.ts.map +1 -0
  80. package/@types/lib/metadataTypes/MetadataType.d.ts +680 -0
  81. package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -0
  82. package/@types/lib/metadataTypes/MobileCode.d.ts +225 -0
  83. package/@types/lib/metadataTypes/MobileCode.d.ts.map +1 -0
  84. package/@types/lib/metadataTypes/MobileKeyword.d.ts +432 -0
  85. package/@types/lib/metadataTypes/MobileKeyword.d.ts.map +1 -0
  86. package/@types/lib/metadataTypes/MobileMessage.d.ts +931 -0
  87. package/@types/lib/metadataTypes/MobileMessage.d.ts.map +1 -0
  88. package/@types/lib/metadataTypes/Query.d.ts +299 -0
  89. package/@types/lib/metadataTypes/Query.d.ts.map +1 -0
  90. package/@types/lib/metadataTypes/Role.d.ts +164 -0
  91. package/@types/lib/metadataTypes/Role.d.ts.map +1 -0
  92. package/@types/lib/metadataTypes/Script.d.ts +305 -0
  93. package/@types/lib/metadataTypes/Script.d.ts.map +1 -0
  94. package/@types/lib/metadataTypes/SendClassification.d.ts +221 -0
  95. package/@types/lib/metadataTypes/SendClassification.d.ts.map +1 -0
  96. package/@types/lib/metadataTypes/SenderProfile.d.ts +257 -0
  97. package/@types/lib/metadataTypes/SenderProfile.d.ts.map +1 -0
  98. package/@types/lib/metadataTypes/TransactionalEmail.d.ts +230 -0
  99. package/@types/lib/metadataTypes/TransactionalEmail.d.ts.map +1 -0
  100. package/@types/lib/metadataTypes/TransactionalMessage.d.ts +163 -0
  101. package/@types/lib/metadataTypes/TransactionalMessage.d.ts.map +1 -0
  102. package/@types/lib/metadataTypes/TransactionalPush.d.ts +175 -0
  103. package/@types/lib/metadataTypes/TransactionalPush.d.ts.map +1 -0
  104. package/@types/lib/metadataTypes/TransactionalSMS.d.ts +205 -0
  105. package/@types/lib/metadataTypes/TransactionalSMS.d.ts.map +1 -0
  106. package/@types/lib/metadataTypes/TriggeredSend.d.ts +671 -0
  107. package/@types/lib/metadataTypes/TriggeredSend.d.ts.map +1 -0
  108. package/@types/lib/metadataTypes/User.d.ts +677 -0
  109. package/@types/lib/metadataTypes/User.d.ts.map +1 -0
  110. package/@types/lib/metadataTypes/Verification.d.ts +188 -0
  111. package/@types/lib/metadataTypes/Verification.d.ts.map +1 -0
  112. package/@types/lib/metadataTypes/definitions/Asset.definition.d.ts +692 -0
  113. package/@types/lib/metadataTypes/definitions/Asset.definition.d.ts.map +1 -0
  114. package/@types/lib/metadataTypes/definitions/AttributeGroup.definition.d.ts +246 -0
  115. package/@types/lib/metadataTypes/definitions/AttributeGroup.definition.d.ts.map +1 -0
  116. package/@types/lib/metadataTypes/definitions/AttributeSet.definition.d.ts +893 -0
  117. package/@types/lib/metadataTypes/definitions/AttributeSet.definition.d.ts.map +1 -0
  118. package/@types/lib/metadataTypes/definitions/Automation.definition.d.ts +616 -0
  119. package/@types/lib/metadataTypes/definitions/Automation.definition.d.ts.map +1 -0
  120. package/@types/lib/metadataTypes/definitions/Campaign.definition.d.ts +126 -0
  121. package/@types/lib/metadataTypes/definitions/Campaign.definition.d.ts.map +1 -0
  122. package/@types/lib/metadataTypes/definitions/ContentArea.definition.d.ts +182 -0
  123. package/@types/lib/metadataTypes/definitions/ContentArea.definition.d.ts.map +1 -0
  124. package/@types/lib/metadataTypes/definitions/DataExtension.definition.d.ts +237 -0
  125. package/@types/lib/metadataTypes/definitions/DataExtension.definition.d.ts.map +1 -0
  126. package/@types/lib/metadataTypes/definitions/DataExtensionField.definition.d.ts +121 -0
  127. package/@types/lib/metadataTypes/definitions/DataExtensionField.definition.d.ts.map +1 -0
  128. package/@types/lib/metadataTypes/definitions/DataExtensionTemplate.definition.d.ts +133 -0
  129. package/@types/lib/metadataTypes/definitions/DataExtensionTemplate.definition.d.ts.map +1 -0
  130. package/@types/lib/metadataTypes/definitions/DataExtract.definition.d.ts +156 -0
  131. package/@types/lib/metadataTypes/definitions/DataExtract.definition.d.ts.map +1 -0
  132. package/@types/lib/metadataTypes/definitions/DataExtractType.definition.d.ts +34 -0
  133. package/@types/lib/metadataTypes/definitions/DataExtractType.definition.d.ts.map +1 -0
  134. package/@types/lib/metadataTypes/definitions/DeliveryProfile.definition.d.ts +80 -0
  135. package/@types/lib/metadataTypes/definitions/DeliveryProfile.definition.d.ts.map +1 -0
  136. package/@types/lib/metadataTypes/definitions/Discovery.definition.d.ts +146 -0
  137. package/@types/lib/metadataTypes/definitions/Discovery.definition.d.ts.map +1 -0
  138. package/@types/lib/metadataTypes/definitions/Email.definition.d.ts +314 -0
  139. package/@types/lib/metadataTypes/definitions/Email.definition.d.ts.map +1 -0
  140. package/@types/lib/metadataTypes/definitions/EmailSend.definition.d.ts +582 -0
  141. package/@types/lib/metadataTypes/definitions/EmailSend.definition.d.ts.map +1 -0
  142. package/@types/lib/metadataTypes/definitions/Event.definition.d.ts +867 -0
  143. package/@types/lib/metadataTypes/definitions/Event.definition.d.ts.map +1 -0
  144. package/@types/lib/metadataTypes/definitions/FileLocation.definition.d.ts +68 -0
  145. package/@types/lib/metadataTypes/definitions/FileLocation.definition.d.ts.map +1 -0
  146. package/@types/lib/metadataTypes/definitions/FileTransfer.definition.d.ts +191 -0
  147. package/@types/lib/metadataTypes/definitions/FileTransfer.definition.d.ts.map +1 -0
  148. package/@types/lib/metadataTypes/definitions/Filter.definition.d.ts +147 -0
  149. package/@types/lib/metadataTypes/definitions/Filter.definition.d.ts.map +1 -0
  150. package/@types/lib/metadataTypes/definitions/Folder.definition.d.ts +174 -0
  151. package/@types/lib/metadataTypes/definitions/Folder.definition.d.ts.map +1 -0
  152. package/@types/lib/metadataTypes/definitions/ImportFile.definition.d.ts +306 -0
  153. package/@types/lib/metadataTypes/definitions/ImportFile.definition.d.ts.map +1 -0
  154. package/@types/lib/metadataTypes/definitions/Journey.definition.d.ts +426 -0
  155. package/@types/lib/metadataTypes/definitions/Journey.definition.d.ts.map +1 -0
  156. package/@types/lib/metadataTypes/definitions/List.definition.d.ts +118 -0
  157. package/@types/lib/metadataTypes/definitions/List.definition.d.ts.map +1 -0
  158. package/@types/lib/metadataTypes/definitions/MobileCode.definition.d.ts +167 -0
  159. package/@types/lib/metadataTypes/definitions/MobileCode.definition.d.ts.map +1 -0
  160. package/@types/lib/metadataTypes/definitions/MobileKeyword.definition.d.ts +276 -0
  161. package/@types/lib/metadataTypes/definitions/MobileKeyword.definition.d.ts.map +1 -0
  162. package/@types/lib/metadataTypes/definitions/MobileMessage.definition.d.ts +783 -0
  163. package/@types/lib/metadataTypes/definitions/MobileMessage.definition.d.ts.map +1 -0
  164. package/@types/lib/metadataTypes/definitions/Query.definition.d.ts +203 -0
  165. package/@types/lib/metadataTypes/definitions/Query.definition.d.ts.map +1 -0
  166. package/@types/lib/metadataTypes/definitions/Role.definition.d.ts +108 -0
  167. package/@types/lib/metadataTypes/definitions/Role.definition.d.ts.map +1 -0
  168. package/@types/lib/metadataTypes/definitions/Script.definition.d.ts +153 -0
  169. package/@types/lib/metadataTypes/definitions/Script.definition.d.ts.map +1 -0
  170. package/@types/lib/metadataTypes/definitions/SendClassification.definition.d.ts +151 -0
  171. package/@types/lib/metadataTypes/definitions/SendClassification.definition.d.ts.map +1 -0
  172. package/@types/lib/metadataTypes/definitions/SenderProfile.definition.d.ts +180 -0
  173. package/@types/lib/metadataTypes/definitions/SenderProfile.definition.d.ts.map +1 -0
  174. package/@types/lib/metadataTypes/definitions/TransactionalEmail.definition.d.ts +167 -0
  175. package/@types/lib/metadataTypes/definitions/TransactionalEmail.definition.d.ts.map +1 -0
  176. package/@types/lib/metadataTypes/definitions/TransactionalMessage.definition.d.ts +99 -0
  177. package/@types/lib/metadataTypes/definitions/TransactionalMessage.definition.d.ts.map +1 -0
  178. package/@types/lib/metadataTypes/definitions/TransactionalPush.definition.d.ts +119 -0
  179. package/@types/lib/metadataTypes/definitions/TransactionalPush.definition.d.ts.map +1 -0
  180. package/@types/lib/metadataTypes/definitions/TransactionalSMS.definition.d.ts +113 -0
  181. package/@types/lib/metadataTypes/definitions/TransactionalSMS.definition.d.ts.map +1 -0
  182. package/@types/lib/metadataTypes/definitions/TriggeredSend.definition.d.ts +560 -0
  183. package/@types/lib/metadataTypes/definitions/TriggeredSend.definition.d.ts.map +1 -0
  184. package/@types/lib/metadataTypes/definitions/User.definition.d.ts +423 -0
  185. package/@types/lib/metadataTypes/definitions/User.definition.d.ts.map +1 -0
  186. package/@types/lib/metadataTypes/definitions/Verification.definition.d.ts +129 -0
  187. package/@types/lib/metadataTypes/definitions/Verification.definition.d.ts.map +1 -0
  188. package/@types/lib/retrieveChangelog.d.ts +3 -0
  189. package/@types/lib/retrieveChangelog.d.ts.map +1 -0
  190. package/@types/lib/util/auth.d.ts +41 -0
  191. package/@types/lib/util/auth.d.ts.map +1 -0
  192. package/@types/lib/util/businessUnit.d.ts +21 -0
  193. package/@types/lib/util/businessUnit.d.ts.map +1 -0
  194. package/@types/lib/util/cache.d.ts +64 -0
  195. package/@types/lib/util/cache.d.ts.map +1 -0
  196. package/@types/lib/util/cli.d.ts +125 -0
  197. package/@types/lib/util/cli.d.ts.map +1 -0
  198. package/@types/lib/util/config.d.ts +45 -0
  199. package/@types/lib/util/config.d.ts.map +1 -0
  200. package/@types/lib/util/devops.d.ts +62 -0
  201. package/@types/lib/util/devops.d.ts.map +1 -0
  202. package/@types/lib/util/file.d.ts +20 -0
  203. package/@types/lib/util/file.d.ts.map +1 -0
  204. package/@types/lib/util/init.config.d.ts +66 -0
  205. package/@types/lib/util/init.config.d.ts.map +1 -0
  206. package/@types/lib/util/init.d.ts +72 -0
  207. package/@types/lib/util/init.d.ts.map +1 -0
  208. package/@types/lib/util/init.git.d.ts +40 -0
  209. package/@types/lib/util/init.git.d.ts.map +1 -0
  210. package/@types/lib/util/init.npm.d.ts +24 -0
  211. package/@types/lib/util/init.npm.d.ts.map +1 -0
  212. package/@types/lib/util/replaceContentBlockReference.d.ts +105 -0
  213. package/@types/lib/util/replaceContentBlockReference.d.ts.map +1 -0
  214. package/@types/lib/util/util.d.ts +322 -0
  215. package/@types/lib/util/util.d.ts.map +1 -0
  216. package/@types/types/mcdev.d.d.ts +1282 -0
  217. package/@types/types/mcdev.d.d.ts.map +1 -0
  218. package/LICENSE +1 -1
  219. package/README.md +7 -3
  220. package/boilerplate/files/.beautyamp.json +13 -0
  221. package/boilerplate/files/.prettierrc +3 -0
  222. package/boilerplate/files/.vscode/extensions.json +6 -1
  223. package/boilerplate/files/.vscode/settings.json +16 -4
  224. package/boilerplate/forcedUpdates.json +9 -0
  225. package/jsconfig.json +7 -2
  226. package/lib/Builder.js +49 -45
  227. package/lib/Deployer.js +100 -45
  228. package/lib/MetadataTypeDefinitions.js +6 -0
  229. package/lib/MetadataTypeInfo.js +4 -0
  230. package/lib/Retriever.js +33 -27
  231. package/lib/cli.js +363 -28
  232. package/lib/index.js +615 -55
  233. package/lib/metadataTypes/Asset.js +811 -159
  234. package/lib/metadataTypes/AttributeGroup.js +17 -12
  235. package/lib/metadataTypes/AttributeSet.js +20 -15
  236. package/lib/metadataTypes/Automation.js +125 -93
  237. package/lib/metadataTypes/Campaign.js +18 -6
  238. package/lib/metadataTypes/ContentArea.js +21 -18
  239. package/lib/metadataTypes/DataExtension.js +229 -113
  240. package/lib/metadataTypes/DataExtensionField.js +52 -53
  241. package/lib/metadataTypes/DataExtensionTemplate.js +17 -5
  242. package/lib/metadataTypes/DataExtract.js +62 -27
  243. package/lib/metadataTypes/DataExtractType.js +17 -5
  244. package/lib/metadataTypes/DeliveryProfile.js +47 -0
  245. package/lib/metadataTypes/Discovery.js +15 -4
  246. package/lib/metadataTypes/Email.js +22 -19
  247. package/lib/metadataTypes/EmailSend.js +135 -35
  248. package/lib/metadataTypes/Event.js +95 -60
  249. package/lib/metadataTypes/FileLocation.js +17 -5
  250. package/lib/metadataTypes/FileTransfer.js +62 -26
  251. package/lib/metadataTypes/Filter.js +16 -4
  252. package/lib/metadataTypes/Folder.js +67 -39
  253. package/lib/metadataTypes/ImportFile.js +341 -91
  254. package/lib/metadataTypes/Journey.js +681 -324
  255. package/lib/metadataTypes/List.js +26 -14
  256. package/lib/metadataTypes/MetadataType.js +501 -265
  257. package/lib/metadataTypes/MobileCode.js +17 -5
  258. package/lib/metadataTypes/MobileKeyword.js +59 -43
  259. package/lib/metadataTypes/MobileMessage.js +67 -40
  260. package/lib/metadataTypes/Query.js +46 -38
  261. package/lib/metadataTypes/Role.js +34 -23
  262. package/lib/metadataTypes/Script.js +127 -39
  263. package/lib/metadataTypes/SendClassification.js +120 -5
  264. package/lib/metadataTypes/SenderProfile.js +179 -0
  265. package/lib/metadataTypes/TransactionalEmail.js +30 -17
  266. package/lib/metadataTypes/TransactionalMessage.js +25 -11
  267. package/lib/metadataTypes/TransactionalPush.js +24 -9
  268. package/lib/metadataTypes/TransactionalSMS.js +78 -46
  269. package/lib/metadataTypes/TriggeredSend.js +191 -43
  270. package/lib/metadataTypes/User.js +90 -62
  271. package/lib/metadataTypes/Verification.js +39 -21
  272. package/lib/metadataTypes/definitions/Asset.definition.js +3 -3
  273. package/lib/metadataTypes/definitions/AttributeGroup.definition.js +7 -1
  274. package/lib/metadataTypes/definitions/AttributeSet.definition.js +2 -2
  275. package/lib/metadataTypes/definitions/Automation.definition.js +4 -1
  276. package/lib/metadataTypes/definitions/Campaign.definition.js +1 -1
  277. package/lib/metadataTypes/definitions/ContentArea.definition.js +1 -1
  278. package/lib/metadataTypes/definitions/DataExtension.definition.js +17 -1
  279. package/lib/metadataTypes/definitions/DataExtensionTemplate.definition.js +1 -1
  280. package/lib/metadataTypes/definitions/DataExtractType.definition.js +2 -2
  281. package/lib/metadataTypes/definitions/DeliveryProfile.definition.js +59 -0
  282. package/lib/metadataTypes/definitions/Discovery.definition.js +1 -1
  283. package/lib/metadataTypes/definitions/Email.definition.js +1 -1
  284. package/lib/metadataTypes/definitions/EmailSend.definition.js +19 -4
  285. package/lib/metadataTypes/definitions/Event.definition.js +140 -128
  286. package/lib/metadataTypes/definitions/FileLocation.definition.js +1 -1
  287. package/lib/metadataTypes/definitions/Filter.definition.js +1 -1
  288. package/lib/metadataTypes/definitions/Folder.definition.js +25 -2
  289. package/lib/metadataTypes/definitions/ImportFile.definition.js +52 -7
  290. package/lib/metadataTypes/definitions/Journey.definition.js +12 -0
  291. package/lib/metadataTypes/definitions/List.definition.js +1 -1
  292. package/lib/metadataTypes/definitions/MobileCode.definition.js +1 -1
  293. package/lib/metadataTypes/definitions/MobileMessage.definition.js +11 -5
  294. package/lib/metadataTypes/definitions/Query.definition.js +6 -0
  295. package/lib/metadataTypes/definitions/Script.definition.js +14 -14
  296. package/lib/metadataTypes/definitions/SendClassification.definition.js +60 -20
  297. package/lib/metadataTypes/definitions/SenderProfile.definition.js +185 -0
  298. package/lib/metadataTypes/definitions/TransactionalEmail.definition.js +2 -2
  299. package/lib/metadataTypes/definitions/TransactionalMessage.definition.js +69 -0
  300. package/lib/metadataTypes/definitions/TransactionalPush.definition.js +6 -0
  301. package/lib/metadataTypes/definitions/TransactionalSMS.definition.js +6 -0
  302. package/lib/metadataTypes/definitions/TriggeredSend.definition.js +15 -4
  303. package/lib/metadataTypes/definitions/Verification.definition.js +1 -1
  304. package/lib/retrieveChangelog.js +7 -2
  305. package/lib/util/auth.js +56 -21
  306. package/lib/util/businessUnit.js +20 -2
  307. package/lib/util/cache.js +37 -18
  308. package/lib/util/cli.js +72 -29
  309. package/lib/util/config.js +27 -9
  310. package/lib/util/devops.js +45 -24
  311. package/lib/util/file.js +58 -33
  312. package/lib/util/init.config.js +55 -24
  313. package/lib/util/init.git.js +6 -6
  314. package/lib/util/init.js +36 -14
  315. package/lib/util/init.npm.js +2 -2
  316. package/lib/util/replaceContentBlockReference.js +278 -0
  317. package/lib/util/util.js +152 -54
  318. package/package.json +33 -30
  319. package/test/general.test.js +1327 -4
  320. package/test/mockRoot/.mcdevrc.json +26 -4
  321. package/test/mockRoot/deploy/testInstance/_ParentBU_/dataExtension/testExisting_dataExtensionShared.dataExtension-meta.json +3 -4
  322. package/test/mockRoot/deploy/testInstance/_ParentBU_/dataExtension/testNew_dataExtensionShared.dataExtension-meta.json +1 -4
  323. package/test/mockRoot/deploy/testInstance/_ParentBU_/query/testNew_query.query-meta.json +11 -0
  324. package/test/mockRoot/deploy/testInstance/_ParentBU_/query/testNew_query.query-meta.sql +4 -0
  325. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset.asset-block-meta.html +12 -0
  326. package/test/mockRoot/deploy/testInstance/testBU/asset/block/testNew_asset.asset-block-meta.json +39 -0
  327. package/test/mockRoot/deploy/testInstance/testBU/automation/testExisting_automation.automation-meta.json +6 -6
  328. package/test/mockRoot/deploy/testInstance/testBU/automation/testNew_automation.automation-meta.json +7 -7
  329. package/test/mockRoot/deploy/testInstance/testBU/dataExtension/testExisting_dataExtension.dataExtension-meta.json +3 -4
  330. package/test/mockRoot/deploy/testInstance/testBU/dataExtension/testNew_dataExtension.dataExtension-meta.json +1 -4
  331. package/test/mockRoot/deploy/testInstance/testBU/emailSend/testExisting_emailSend.emailSend-meta.json +36 -0
  332. package/test/mockRoot/deploy/testInstance/testBU/emailSend/testNew_emailSend.emailSend-meta.json +36 -0
  333. package/test/mockRoot/deploy/testInstance/testBU/importFile/testExisting_importFile.importFile-meta.json +10 -4
  334. package/test/mockRoot/deploy/testInstance/testBU/importFile/testNew_importFile.importFile-meta.json +8 -4
  335. package/test/mockRoot/deploy/testInstance/testBU/journey/testExisting_journey_Quicksend.journey-meta.json +232 -0
  336. package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/NTIzOjc4OjA.mobileMessage-meta.json +2 -4
  337. package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/new.mobileMessage-meta.json +2 -4
  338. package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query.query-meta.json +1 -1
  339. package/test/mockRoot/deploy/testInstance/testBU/query/testExisting_query_fixKeys.query-meta.json +1 -1
  340. package/test/mockRoot/deploy/testInstance/testBU/query/testNew_query.query-meta.json +1 -1
  341. package/test/mockRoot/deploy/testInstance/testBU/sendClassification/testExisting_sendClassification.sendClassification-meta.json +8 -0
  342. package/test/mockRoot/deploy/testInstance/testBU/sendClassification/testNew_sendClassification.sendClassification-meta.json +8 -0
  343. package/test/mockRoot/deploy/testInstance/testBU/senderProfile/testExisting_senderProfile.senderProfile-meta.json +14 -0
  344. package/test/mockRoot/deploy/testInstance/testBU/senderProfile/testNew_senderProfile.senderProfile-meta.json +14 -0
  345. package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testExisting_temail.transactionalEmail-meta.json +1 -1
  346. package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testNew_temail.transactionalEmail-meta.json +1 -1
  347. package/test/mockRoot/deploy/testInstance/testBU/transactionalPush/testExisting_tpush.transactionalPush-meta.json +1 -3
  348. package/test/mockRoot/deploy/testInstance/testBU/transactionalPush/testNew_tpush.transactionalPush-meta.json +1 -3
  349. package/test/mockRoot/deploy/testInstance/testBU/transactionalSMS/testExisting_tsms.transactionalSMS-meta.json +1 -2
  350. package/test/mockRoot/deploy/testInstance/testBU/transactionalSMS/testNew_tsms.transactionalSMS-meta.json +1 -2
  351. package/test/mockRoot/deploy/testInstance/testBU/triggeredSend/testExisting_triggeredSend.triggeredSend-meta.json +4 -5
  352. package/test/mockRoot/deploy/testInstance/testBU/triggeredSend/testNew_triggeredSend.triggeredSend-meta.json +4 -5
  353. package/test/mockRoot/deploy/testInstance/testBU/verification/testExisting_39f6a488-20eb-4ba0-b0b9.verification-meta.json +1 -1
  354. package/test/mockRoot/deploy/testInstance/testBU/verification/testNew_39f6a488-20eb-4ba0-b0b9.verification-meta.json +1 -1
  355. package/test/resourceFactory.js +118 -7
  356. package/test/resources/1111111/automation/v1/queries/get-response.json +6 -0
  357. package/test/resources/1111111/automation/v1/queries/post-response.json +18 -0
  358. package/test/resources/1111111/dataExtension/create-expected.json +4 -7
  359. package/test/resources/1111111/dataExtension/retrieve-expected.json +2 -4
  360. package/test/resources/1111111/dataExtension/update-expected.json +7 -7
  361. package/test/resources/1111111/dataExtension/update-response.xml +3 -1
  362. package/test/resources/1111111/dataFolder/retrieve-ContentType=queryactivity-response.xml +48 -0
  363. package/test/resources/1111111/query/patch_keySuffix-expected.json +11 -0
  364. package/test/resources/1111111/query/patch_keySuffix-expected.sql +4 -0
  365. package/test/resources/9999999/asset/block-1157-retrieve-expected.html +4 -3
  366. package/test/resources/9999999/asset/build-templatebasedemail-expected.json +81 -0
  367. package/test/resources/9999999/asset/build-templatebasedemail-html-expected.html +20 -0
  368. package/test/resources/9999999/asset/build-templatebasedemail-preheader-expected.amp +1 -0
  369. package/test/resources/9999999/asset/create-expected.json +18 -0
  370. package/test/resources/9999999/asset/resolveId-1234-notFound-expected.json +1 -0
  371. package/test/resources/9999999/asset/resolveId-1295064-noPath-expected.json +8 -0
  372. package/test/resources/9999999/asset/resolveId-1295064-withPath-expected.json +8 -0
  373. package/test/resources/9999999/asset/retrieve-templatebasedemail-expected.json +84 -0
  374. package/test/resources/9999999/asset/retrieve-templatebasedemail-html-expected.html +20 -0
  375. package/test/resources/9999999/asset/retrieve-templatebasedemail-preheader-expected.amp +1 -0
  376. package/test/resources/9999999/asset/template-templatebasedemail-expected.json +81 -0
  377. package/test/resources/9999999/asset/template-templatebasedemail-html-expected.html +20 -0
  378. package/test/resources/9999999/asset/template-templatebasedemail-preheader-expected.amp +1 -0
  379. package/test/resources/9999999/asset/testExisting_asset_message-html-rcb-id-expected.html +33 -0
  380. package/test/resources/9999999/asset/testExisting_asset_message-html-rcb-key-expected.html +33 -0
  381. package/test/resources/9999999/asset/testExisting_asset_message-html-rcb-name-expected.html +35 -0
  382. package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-id-expected.amp +4 -0
  383. package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-key-expected.amp +4 -0
  384. package/test/resources/9999999/asset/testExisting_asset_message-preheader-rcb-name-expected.amp +4 -0
  385. package/test/resources/9999999/asset/testExisting_asset_message-text-rcb-id-expected.amp +4 -0
  386. package/test/resources/9999999/asset/testExisting_asset_message-text-rcb-key-expected.amp +4 -0
  387. package/test/resources/9999999/asset/testExisting_asset_message-text-rcb-name-expected.amp +4 -0
  388. package/test/resources/9999999/asset/v1/content/assets/1295064/get-response.json +1 -1
  389. package/test/resources/9999999/asset/v1/content/assets/5286/get-response.json +48 -0
  390. package/test/resources/9999999/asset/v1/content/assets/5289/get-response.json +198 -0
  391. package/test/resources/9999999/asset/v1/content/assets/808714/get-response.json +4 -3
  392. package/test/resources/9999999/asset/v1/content/assets/950143/delete-response.txt +1 -0
  393. package/test/resources/9999999/asset/v1/content/assets/get-response-customerKey=testExisting_asset.json +105 -0
  394. package/test/resources/9999999/asset/v1/content/assets/post-response.json +59 -0
  395. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,14.json +7 -0
  396. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN193,194,15.json +7 -0
  397. 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 +46 -0
  398. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN205,206,230,232,1.json +32 -0
  399. package/test/resources/9999999/asset/v1/content/assets/query/{post-response.json → post-response-assetType.idIN207,208,209,5.json} +45 -47
  400. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN214,4.json +35 -0
  401. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN215,216,217,218,219,220,221,222,223,224,225,226,227,228.json +7 -0
  402. package/test/resources/9999999/asset/v1/content/assets/query/post-response-customerKey=mcdev-issue-1157.json +46 -0
  403. package/test/resources/9999999/attributeGroup/retrieve-expected.json +1 -1
  404. package/test/resources/9999999/attributeSet/retrieve-expected.json +3 -3
  405. package/test/resources/9999999/automation/build-expected.json +7 -7
  406. package/test/resources/9999999/automation/create-expected.json +7 -7
  407. package/test/resources/9999999/automation/patch_fixKeys-pause-expected.json +6 -6
  408. package/test/resources/9999999/automation/patch_fixKeys-schedule-expected.json +6 -6
  409. package/test/resources/9999999/automation/retrieve-expected.json +7 -7
  410. package/test/resources/9999999/automation/template-expected.json +7 -7
  411. package/test/resources/9999999/automation/update-expected.json +6 -6
  412. package/test/resources/9999999/automation/v1/dataextracts/56c5370a-f988-4f36-b0ee-0f876573f6d7/delete-response.txt +1 -0
  413. package/test/resources/9999999/automation/v1/filetransfers/72c328ac-f5b0-4e37-91d3-a775666f15a6/delete-response.json +1 -0
  414. package/test/resources/9999999/automation/v1/imports/1ebf557b-372e-eb11-b81b-48df37d1dbd7/get-response.json +78 -0
  415. package/test/resources/9999999/automation/v1/imports/9d16f42c-2260-ed11-b849-48df37d1de8b/delete-response.txt +0 -0
  416. package/test/resources/9999999/automation/v1/imports/9d16f42c-2260-ed11-b849-48df37d1de8b/get-response.json +35 -0
  417. package/test/resources/9999999/automation/v1/imports/9d16f42c-2260-ed11-b849-48df37d1de8b/patch-response.json +14 -10
  418. package/test/resources/9999999/automation/v1/imports/get-response.json +78 -1
  419. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/get-response.json +1 -1
  420. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeysSuffix/get-response.json +17 -0
  421. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat_fixKeysSuffix/patch-response.json +18 -0
  422. package/test/resources/9999999/automation/v1/queries/abcde-607c-4940-afef-437965094dat/get-response.json +17 -0
  423. package/test/resources/9999999/automation/v1/queries/get-response.json +20 -3
  424. package/test/resources/9999999/automation/v1/scripts/39f6a488-20eb-4ba0-b0b9-023725b574e4/delete-response.txt +1 -0
  425. package/test/resources/9999999/automation/v1/scripts/get-response.json +3 -3
  426. package/test/resources/9999999/dataExtension/build-expected.json +3 -4
  427. package/test/resources/9999999/dataExtension/create-expected.json +1 -4
  428. package/test/resources/9999999/dataExtension/retrieve-Name=testExisting_dataExtension-response.xml +4 -4
  429. package/test/resources/9999999/dataExtension/retrieve-expected.json +3 -4
  430. package/test/resources/9999999/dataExtension/retrieve-response.xml +96 -1
  431. package/test/resources/9999999/dataExtension/template-expected.json +3 -4
  432. package/test/resources/9999999/dataExtension/update-expected.json +4 -3
  433. package/test/resources/9999999/dataExtension/update-response.xml +5 -3
  434. package/test/resources/9999999/dataExtensionField/retrieve-response.xml +72 -0
  435. package/test/resources/9999999/dataFolder/retrieve-ContentType=userinitiatedsends-response.xml +48 -0
  436. package/test/resources/9999999/deliveryProfile/get-expected.json +7 -0
  437. package/test/resources/9999999/emailSend/build-expected.json +43 -0
  438. package/test/resources/9999999/emailSend/get-expected.json +43 -0
  439. package/test/resources/9999999/emailSend/patch-expected.json +41 -0
  440. package/test/resources/9999999/emailSend/post-expected.json +41 -0
  441. package/test/resources/9999999/emailSend/template-expected.json +43 -0
  442. package/test/resources/9999999/emailSendDefinition/create-response.xml +98 -0
  443. package/test/resources/9999999/emailSendDefinition/delete-response.xml +36 -0
  444. package/test/resources/9999999/emailSendDefinition/retrieve-IsPlatformObject=falseANDDescriptionnotEqualsSFSendDefinition-response.xml +18 -8
  445. package/test/resources/9999999/emailSendDefinition/update-response.xml +97 -0
  446. package/test/resources/9999999/importDefinition/retrieve-CustomerKey=testExisting_importFile-response.xml +30 -0
  447. package/test/resources/9999999/importDefinition/retrieve-Name=testExisting_importFile-response.xml +30 -0
  448. package/test/resources/9999999/importFile/build-expected.json +11 -6
  449. package/test/resources/9999999/importFile/get-expected.json +13 -7
  450. package/test/resources/9999999/importFile/get-sms-expected.json +79 -0
  451. package/test/resources/9999999/importFile/patch-expected.json +12 -7
  452. package/test/resources/9999999/importFile/post-expected.json +8 -5
  453. package/test/resources/9999999/importFile/template-expected.json +10 -5
  454. package/test/resources/9999999/interaction/v1/eventDefinitions/get-response.json +124 -0
  455. package/test/resources/9999999/interaction/v1/interactions/3c3f4112-9b43-43ca-8a89-aa0375b2c1a2/delete-response.txt +1 -0
  456. package/test/resources/9999999/interaction/v1/interactions/3c3f4112-9b43-43ca-8a89-aa0375b2c1a2/get-response.json +253 -0
  457. package/test/resources/9999999/interaction/v1/interactions/get-response.json +83 -779
  458. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Multistep/get-response.json +457 -0
  459. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Quicksend/get-response.json +253 -0
  460. package/test/resources/9999999/interaction/v1/interactions/{key_0b76dccf-594c-b6dc-1acf-10c4493dcb84 → key_testExisting_temail}/get-response.json +5 -5
  461. package/test/resources/9999999/journey/build-expected.json +105 -449
  462. package/test/resources/9999999/journey/get-multistep-expected.json +413 -0
  463. package/test/resources/9999999/journey/get-quicksend-expected.json +232 -0
  464. package/test/resources/9999999/journey/get-quicksend-rcb-id-expected.json +232 -0
  465. package/test/resources/9999999/journey/get-quicksend-rcb-key-expected.json +232 -0
  466. package/test/resources/9999999/journey/get-quicksend-rcb-name-expected.json +232 -0
  467. package/test/resources/9999999/journey/get-transactionalEmail-expected.json +211 -0
  468. package/test/resources/9999999/journey/template-expected.json +105 -449
  469. package/test/resources/9999999/legacy/v1/beta/messaging/deliverypolicy/get-response.json +15 -0
  470. package/test/resources/9999999/legacy/v1/beta/mobile/imports/get-response.json +112 -0
  471. package/test/resources/9999999/legacy/v1/beta/mobile/message/NTQ3Ojc4OjA/get-response.json +1 -1
  472. package/test/resources/9999999/legacy/v1/beta/object/NWQwdnhEU3dFZWVBekJRQzdISWl0QTo0NTow/get-response.json +12 -0
  473. package/test/resources/9999999/list/retrieve-response.xml +13 -0
  474. package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail/get-response.json +1 -1
  475. package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail/patch-response.json +1 -1
  476. package/test/resources/9999999/mobileMessage/build-expected.json +2 -5
  477. package/test/resources/9999999/mobileMessage/get-expected.json +2 -5
  478. package/test/resources/9999999/mobileMessage/post-create-expected.json +2 -4
  479. package/test/resources/9999999/mobileMessage/post-update-expected.json +2 -5
  480. package/test/resources/9999999/mobileMessage/template-expected.json +2 -5
  481. package/test/resources/9999999/query/build-expected.json +1 -1
  482. package/test/resources/9999999/query/build-expected.sql +2 -1
  483. package/test/resources/9999999/query/get-expected.json +1 -1
  484. package/test/resources/9999999/query/get-expected.sql +2 -1
  485. package/test/resources/9999999/query/get2-expected.json +1 -1
  486. package/test/resources/9999999/query/patch-expected.json +1 -1
  487. package/test/resources/9999999/query/patch_fixKeys-expected.json +1 -1
  488. package/test/resources/9999999/query/patch_fixKeysSuffix-expected.json +11 -0
  489. package/test/resources/9999999/query/patch_fixKeysSuffix-expected.sql +6 -0
  490. package/test/resources/9999999/query/post-expected.json +1 -1
  491. package/test/resources/9999999/query/template-expected.json +1 -1
  492. package/test/resources/9999999/query/template-expected.sql +2 -1
  493. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query2ANDStatus=Active-response.xml +30 -0
  494. package/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixKeysSuffixANDStatus=Active-response.xml +30 -0
  495. package/test/resources/9999999/script/get_ampincluded-expected.html +5 -0
  496. package/test/resources/9999999/script/get_ampincluded-rcb-id-expected.html +5 -0
  497. package/test/resources/9999999/script/get_ampincluded-rcb-key-expected.html +5 -0
  498. package/test/resources/9999999/script/get_ampincluded-rcb-name-expected.html +5 -0
  499. package/test/resources/9999999/script/get_ampscript-expected.html +6 -1
  500. package/test/resources/9999999/script/get_ampscript-rcb-id-expected.html +8 -0
  501. package/test/resources/9999999/script/get_ampscript-rcb-key-expected.html +8 -0
  502. package/test/resources/9999999/script/get_ampscript-rcb-name-expected.html +10 -0
  503. package/test/resources/9999999/script/get_mixed-expected.html +5 -2
  504. package/test/resources/9999999/script/get_mixed-rcb-id-expected.html +12 -0
  505. package/test/resources/9999999/script/get_mixed-rcb-key-expected.html +12 -0
  506. package/test/resources/9999999/script/get_mixed-rcb-name-expected.html +14 -0
  507. package/test/resources/9999999/sendClassification/build-expected.json +8 -0
  508. package/test/resources/9999999/sendClassification/create-response.xml +51 -0
  509. package/test/resources/9999999/sendClassification/delete-response.xml +36 -0
  510. package/test/resources/9999999/sendClassification/get-expected.json +10 -0
  511. package/test/resources/9999999/sendClassification/patch-expected.json +8 -0
  512. package/test/resources/9999999/sendClassification/post-expected.json +8 -0
  513. package/test/resources/9999999/sendClassification/retrieve-response.xml +86 -0
  514. package/test/resources/9999999/sendClassification/template-expected.json +8 -0
  515. package/test/resources/9999999/sendClassification/update-response.xml +49 -0
  516. package/test/resources/9999999/senderProfile/build-expected.json +14 -0
  517. package/test/resources/9999999/senderProfile/create-response.xml +49 -0
  518. package/test/resources/9999999/senderProfile/delete-response.xml +36 -0
  519. package/test/resources/9999999/senderProfile/get-expected.json +16 -0
  520. package/test/resources/9999999/senderProfile/get-rcb-id-expected.json +16 -0
  521. package/test/resources/9999999/senderProfile/get-rcb-key-expected.json +16 -0
  522. package/test/resources/9999999/senderProfile/get-rcb-name-expected.json +16 -0
  523. package/test/resources/9999999/senderProfile/patch-expected.json +14 -0
  524. package/test/resources/9999999/senderProfile/post-expected.json +14 -0
  525. package/test/resources/9999999/senderProfile/retrieve-CustomerKey=Default-response.xml +44 -0
  526. package/test/resources/9999999/senderProfile/retrieve-CustomerKey=wrong-key-response.xml +26 -0
  527. package/test/resources/9999999/senderProfile/retrieve-response.xml +80 -0
  528. package/test/resources/9999999/senderProfile/template-expected.json +14 -0
  529. package/test/resources/9999999/senderProfile/update-response.xml +47 -0
  530. package/test/resources/9999999/transactionalEmail/build-expected.json +3 -3
  531. package/test/resources/9999999/transactionalEmail/get-expected.json +3 -3
  532. package/test/resources/9999999/transactionalEmail/patch-expected.json +3 -3
  533. package/test/resources/9999999/transactionalEmail/post-expected.json +2 -2
  534. package/test/resources/9999999/transactionalEmail/template-expected.json +3 -3
  535. package/test/resources/9999999/transactionalPush/build-expected.json +1 -1
  536. package/test/resources/9999999/transactionalPush/get-expected.json +1 -1
  537. package/test/resources/9999999/transactionalPush/patch-expected.json +1 -3
  538. package/test/resources/9999999/transactionalPush/post-expected.json +1 -3
  539. package/test/resources/9999999/transactionalPush/template-expected.json +1 -1
  540. package/test/resources/9999999/transactionalSMS/build-expected.amp +1 -1
  541. package/test/resources/9999999/transactionalSMS/build-expected.json +1 -2
  542. package/test/resources/9999999/transactionalSMS/get-expected.amp +1 -1
  543. package/test/resources/9999999/transactionalSMS/get-expected.json +1 -2
  544. package/test/resources/9999999/transactionalSMS/patch-expected.amp +1 -1
  545. package/test/resources/9999999/transactionalSMS/patch-expected.json +1 -2
  546. package/test/resources/9999999/transactionalSMS/post-expected.amp +1 -1
  547. package/test/resources/9999999/transactionalSMS/post-expected.json +1 -2
  548. package/test/resources/9999999/transactionalSMS/template-expected.amp +1 -1
  549. package/test/resources/9999999/transactionalSMS/template-expected.json +1 -2
  550. package/test/resources/9999999/triggeredSend/build-expected.json +5 -6
  551. package/test/resources/9999999/triggeredSend/get-expected.json +5 -6
  552. package/test/resources/9999999/triggeredSend/get-rcb-id-expected.json +29 -0
  553. package/test/resources/9999999/triggeredSend/get-rcb-key-expected.json +29 -0
  554. package/test/resources/9999999/triggeredSend/get-rcb-name-expected.json +29 -0
  555. package/test/resources/9999999/triggeredSend/patch-expected.json +5 -6
  556. package/test/resources/9999999/triggeredSend/post-expected.json +5 -6
  557. package/test/resources/9999999/triggeredSend/template-expected.json +5 -6
  558. package/test/resources/9999999/triggeredSendDefinition/create-response.xml +6 -1
  559. package/test/resources/9999999/triggeredSendDefinition/retrieve-TriggeredSendStatusINNew,Active,Inactive,Moved,Canceled-response.xml +53 -1
  560. package/test/resources/9999999/triggeredSendDefinition/update-response.xml +6 -1
  561. package/test/resources/9999999/verification/build-expected.json +1 -1
  562. package/test/resources/9999999/verification/get-expected.json +1 -1
  563. package/test/resources/9999999/verification/patch-expected.json +1 -1
  564. package/test/resources/9999999/verification/post-expected.json +1 -1
  565. package/test/resources/9999999/verification/template-expected.json +1 -1
  566. package/test/type.asset.test.js +733 -17
  567. package/test/type.attributeGroup.test.js +6 -2
  568. package/test/type.attributeSet.test.js +6 -2
  569. package/test/type.automation.test.js +174 -162
  570. package/test/type.dataExtension.test.js +41 -45
  571. package/test/type.dataExtract.test.js +22 -29
  572. package/test/type.deliveryProfile.test.js +45 -0
  573. package/test/type.emailSend.test.js +144 -0
  574. package/test/type.event.test.js +62 -0
  575. package/test/type.fileTransfer.test.js +21 -29
  576. package/test/type.importFile.test.js +61 -35
  577. package/test/type.journey.test.js +251 -45
  578. package/test/type.mobileKeyword.test.js +46 -54
  579. package/test/type.mobileMessage.test.js +28 -27
  580. package/test/type.query.test.js +303 -124
  581. package/test/type.script.test.js +288 -69
  582. package/test/type.sendClassification.test.js +156 -0
  583. package/test/type.senderProfile.test.js +254 -0
  584. package/test/type.transactionalEmail.test.js +15 -11
  585. package/test/type.transactionalPush.test.js +15 -11
  586. package/test/type.transactionalSMS.test.js +30 -23
  587. package/test/type.triggeredSend.test.js +130 -17
  588. package/test/type.user.test.js +22 -14
  589. package/test/type.verification.test.js +13 -10
  590. package/test/utils.js +76 -21
  591. package/tsconfig.json +21 -0
  592. package/types/mcdev.d.js +190 -66
  593. package/docs/dist/documentation.md +0 -8878
  594. package/test/mockRoot/deploy/testInstance/testBU/journey/testExisting_interaction.interaction-meta.json +0 -576
  595. package/test/mockRoot/deploy/testInstance/testBU/journey/testNew_interaction.interaction-meta.json +0 -266
  596. package/test/resources/9999999/interaction/v1/EventDefinitions/get-response.json +0 -43
  597. package/test/resources/9999999/interaction/v1/interactions/233d4413-922c-4568-85a5-e5cc77efc3be/delete-response.json +0 -1
  598. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_interaction/get-response.json +0 -592
  599. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_interaction/put-response.json +0 -592
  600. package/test/resources/9999999/interaction/v1/interactions/post-response.json +0 -280
  601. package/test/resources/9999999/journey/get-expected.json +0 -576
  602. package/test/resources/9999999/script/get_ampincluded-expected.ssjs +0 -5
@@ -0,0 +1,278 @@
1
+ 'use strict';
2
+
3
+ import auth from './auth.js';
4
+ import cache from './cache.js';
5
+ import { Util } from '../util/util.js';
6
+
7
+ import Folder from '../metadataTypes/Folder.js';
8
+ import Asset from '../metadataTypes/Asset.js';
9
+
10
+ /**
11
+ * @typedef {import('../../types/mcdev.d.js').AuthObject} AuthObject
12
+ * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject
13
+ * @typedef {import('../../types/mcdev.d.js').Cache} Cache
14
+ * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract
15
+ * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem
16
+ * @typedef {import('../../types/mcdev.d.js').DeltaPkgItem} DeltaPkgItem
17
+ * @typedef {import('../../types/mcdev.d.js').McdevLogger} McdevLogger
18
+ * @typedef {import('../../types/mcdev.d.js').Logger} Logger
19
+ * @typedef {import('../../types/mcdev.d.js').Mcdevrc} Mcdevrc
20
+ * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem
21
+ * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff
22
+ * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj
23
+ * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap
24
+ * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj
25
+ * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeList} MultiMetadataTypeList
26
+ * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeMap} MultiMetadataTypeMap
27
+ * @typedef {import('../../types/mcdev.d.js').SkipInteraction} SkipInteraction
28
+ * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams
29
+ * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap
30
+ * @typedef {import('../../types/mcdev.d.js').TypeKeyCombo} TypeKeyCombo
31
+ * @typedef {import('../../types/mcdev.d.js').SDKError} SDKError
32
+ * @typedef {import('../../types/mcdev.d.js').AssetItemSimple} AssetItemSimple
33
+ * @typedef {import('../../types/mcdev.d.js').AssetItemSimpleMap} AssetItemSimpleMap
34
+ * @typedef {import('../../types/mcdev.d.js').AssetItemIdSimpleMap} AssetItemIdSimpleMap
35
+ * @typedef {import('../../types/mcdev.d.js').ContentBlockConversionTypes} ContentBlockConversionTypes
36
+ */
37
+
38
+ /**
39
+ * Util that contains logger and simple util methods
40
+ */
41
+ export default class ReplaceContentBlockReference {
42
+ /** @type {{id: AssetItemIdSimpleMap, key: AssetItemSimpleMap, name: AssetItemSimpleMap}} */
43
+ static assetCacheMap = {
44
+ id: {},
45
+ key: {},
46
+ name: {},
47
+ };
48
+ /** @type {{id: RegExp[], key: RegExp[], name: RegExp[]}} */
49
+ static #regexBy = {
50
+ // TODO: handle cases in which variables or functions are passed into ContentBlockByX
51
+
52
+ amp: {
53
+ id: [
54
+ /ContentBlockById\(\s*"([0-9]+)"\s*\)/gim,
55
+ /ContentBlockById\(\s*'([0-9]+)'\s*\)/gim,
56
+ /ContentBlockById\(\s*([0-9]+)\s*\)/gim,
57
+ ],
58
+ key: [
59
+ /ContentBlockByKey\(\s*"([a-z0-9-/._]+)"\s*\)/gim,
60
+ /ContentBlockByKey\(\s*'([a-z0-9-/._]+)'\s*\)/gim,
61
+ ],
62
+ name: [
63
+ /ContentBlockByName\(\s*"([ a-z0-9-\\._)(]+)"\s*\)/gim,
64
+ /ContentBlockByName\(\s*'([ a-z0-9-\\._)(]+)'\s*\)/gim,
65
+ ],
66
+ },
67
+ ssjs: {
68
+ id: [
69
+ /Platform.Function.ContentBlockById\(\s*"([0-9]+)"\s*\)/gim,
70
+ /Platform.Function.ContentBlockById\(\s*'([0-9]+)'\s*\)/gim,
71
+ /Platform.Function.ContentBlockById\(\s*([0-9]+)\s*\)/gim,
72
+ ],
73
+ key: [
74
+ /Platform.Function.ContentBlockByKey\(\s*"([a-z0-9-/._]+)"\s*\)/gim,
75
+ /Platform.Function.ContentBlockByKey\(\s*'([a-z0-9-/._]+)'\s*\)/gim,
76
+ ],
77
+ name: [
78
+ /Platform.Function.ContentBlockByName\(\s*"([ a-z0-9-\\._)(]+)"\s*\)/gim,
79
+ /Platform.Function.ContentBlockByName\(\s*'([ a-z0-9-\\._)(]+)'\s*\)/gim,
80
+ ],
81
+ },
82
+ };
83
+
84
+ /**
85
+ * used to equalize the reference in the code to whatever is set in the "to" field
86
+ *
87
+ * @param {string} str full code string
88
+ * @param {string} parentName name of the object that was passed in; used in error message only
89
+ * @param {ContentBlockConversionTypes[]} [fromList] what to replace
90
+ * @param {ContentBlockConversionTypes} [to] what to replace with
91
+ * @returns {string} replaced string
92
+ */
93
+ static replaceReference(str, parentName, fromList, to) {
94
+ if (!str) {
95
+ const ex = new Error('No string provided');
96
+ ex.code = 200;
97
+ throw ex;
98
+ }
99
+ fromList ||= Util.OPTIONS.referenceFrom;
100
+ to ||= Util.OPTIONS.referenceTo;
101
+ let result = str;
102
+ let changes = 0;
103
+ const languages = [
104
+ { name: 'ssjs', isSsjs: true },
105
+ { name: 'amp', isSsjs: false },
106
+ ];
107
+ for (const from of fromList) {
108
+ for (const lang of languages) {
109
+ for (const regex of this.#regexBy[lang.name][from]) {
110
+ result = result.replaceAll(regex, (match, identifier) => {
111
+ const referencedAsset = this.#getAssetBy(
112
+ from,
113
+ identifier,
114
+ parentName,
115
+ lang.isSsjs
116
+ );
117
+ if (referencedAsset && referencedAsset[to]) {
118
+ // make sure we not only found the asset but also have a replacement for it (folder issue could block swap to ContentBlockByName)
119
+ changes++;
120
+ return this.#replaceWith(referencedAsset, to, lang.isSsjs);
121
+ } else {
122
+ if (referencedAsset && !referencedAsset[to]) {
123
+ // this is expected to only happen if to=="name"
124
+ Util.logger.error(
125
+ ` - ${parentName}: Asset ${from} ${identifier} has no valid ${to} reference`
126
+ );
127
+ }
128
+ return match;
129
+ }
130
+ });
131
+ }
132
+ }
133
+ }
134
+ if (!changes) {
135
+ const ex = new Error('No changes made to the code.');
136
+ ex.code = 200;
137
+ throw ex;
138
+ }
139
+ return result;
140
+ }
141
+ /**
142
+ *
143
+ * @private
144
+ * @param {ContentBlockConversionTypes} from replace with
145
+ * @param {string|number} identifier id, key or name of asset
146
+ * @param {string} parentName name of the object that was passed in; used in error message only
147
+ * @param {boolean} [isSsjs] replaces backslashes with double backslashes in name if true
148
+ * @returns {AssetItemSimple} asset object
149
+ */
150
+ static #getAssetBy(from, identifier, parentName, isSsjs = false) {
151
+ let reference;
152
+ switch (from) {
153
+ case 'id': {
154
+ reference = ReplaceContentBlockReference.assetCacheMap.id[identifier];
155
+ break;
156
+ }
157
+ case 'key': {
158
+ reference = ReplaceContentBlockReference.assetCacheMap.key[identifier];
159
+ break;
160
+ }
161
+ case 'name': {
162
+ if (isSsjs) {
163
+ identifier = identifier.replaceAll('\\\\', '\\');
164
+ }
165
+ reference = ReplaceContentBlockReference.assetCacheMap.name[identifier];
166
+ break;
167
+ }
168
+ }
169
+ if (!reference) {
170
+ Util.logger.error(` - ${parentName}: Asset not found for ${from} ${identifier}`);
171
+ }
172
+ return reference;
173
+ }
174
+
175
+ /**
176
+ *
177
+ * @param {AssetItemSimple} asset asset object
178
+ * @param {ContentBlockConversionTypes} to replace with
179
+ * @param {boolean} [isSsjs] replaces backslashes with double backslashes in name if true
180
+ * @returns {string} replaced string
181
+ */
182
+ static #replaceWith(asset, to, isSsjs = false) {
183
+ switch (to) {
184
+ case 'id': {
185
+ return `${isSsjs ? 'Platform.Function.' : ''}ContentBlockById(${asset.id})`;
186
+ }
187
+ case 'key': {
188
+ return `${isSsjs ? 'Platform.Function.' : ''}ContentBlockByKey("${asset.key}")`;
189
+ }
190
+ case 'name': {
191
+ return `${isSsjs ? 'Platform.Function.' : ''}ContentBlockByName("${isSsjs ? asset.name.replaceAll('\\', '\\\\') : asset.name}")`;
192
+ }
193
+ }
194
+ }
195
+
196
+ /**
197
+ *
198
+ * @param {Mcdevrc} properties properties for auth
199
+ saved
200
+ * @param {BuObject} buObject properties for auth
201
+ */
202
+ static async createCacheMap(properties, buObject) {
203
+ const client = auth.getSDK(buObject);
204
+
205
+ if (!cache.getCache()) {
206
+ cache.initCache(buObject);
207
+ }
208
+ Util.logger.info('Caching folders');
209
+ Folder.buObject = buObject;
210
+ Folder.properties = properties;
211
+ Folder.client = client;
212
+ const resultFolder = await Folder.retrieveForCache(null, ['asset', 'asset-shared']);
213
+ cache.setMetadata('folder', resultFolder.metadata);
214
+
215
+ Util.logger.info('Caching assets');
216
+ Asset.buObject = buObject;
217
+ Asset.properties = properties;
218
+ Asset.client = client;
219
+ const resultAsset = await Asset.retrieveForCache(undefined, [
220
+ 'asset',
221
+ 'code',
222
+ 'textfile',
223
+ 'block',
224
+ 'other',
225
+ ]);
226
+ for (const element of Object.values(resultAsset.metadata)) {
227
+ // ensure we got the folder-path in our cache
228
+ Asset.setFolderPath(element);
229
+
230
+ // create actual cache map
231
+ const simpleAsset = {
232
+ id: element.id,
233
+ key: element.customerKey,
234
+ name: element.r__folder_Path
235
+ ? element.r__folder_Path.replaceAll('/', '\\') + '\\' + element.name
236
+ : null,
237
+ };
238
+ // ! note that ContentBlockByName expects backslashes between folders and file name, not forward slashes
239
+ ReplaceContentBlockReference.assetCacheMap.id[simpleAsset.id] = simpleAsset;
240
+ ReplaceContentBlockReference.assetCacheMap.key[simpleAsset.key] = simpleAsset;
241
+ if (simpleAsset.name) {
242
+ // while asset without path could still be found via search, it would no longer referencable via ContentBlockByName
243
+ ReplaceContentBlockReference.assetCacheMap.name[simpleAsset.name] = simpleAsset;
244
+ }
245
+ }
246
+
247
+ cache.setMetadata('asset', resultAsset.metadata);
248
+
249
+ Util.logger.info('Caching shared assets');
250
+ const resultAssetShared = await Asset.retrieveForCache(
251
+ undefined,
252
+ ['asset', 'code', 'textfile', 'block', 'other'],
253
+ true
254
+ );
255
+ for (const element of Object.values(resultAssetShared.metadata)) {
256
+ // ensure we got the folder-path in our cache
257
+ Asset.setFolderPath(element);
258
+
259
+ // create actual cache map
260
+ const simpleAsset = {
261
+ id: element.id,
262
+ key: element.customerKey,
263
+ name: element.r__folder_Path
264
+ ? element.r__folder_Path.replaceAll('/', '\\') + '\\' + element.name
265
+ : null,
266
+ };
267
+ // ! note that ContentBlockByName expects backslashes between folders and file name, not forward slashes
268
+ ReplaceContentBlockReference.assetCacheMap.id[simpleAsset.id] = simpleAsset;
269
+ ReplaceContentBlockReference.assetCacheMap.key[simpleAsset.key] = simpleAsset;
270
+ if (simpleAsset.name) {
271
+ // while asset without path could still be found via search, it would no longer referencable via ContentBlockByName
272
+ ReplaceContentBlockReference.assetCacheMap.name[simpleAsset.name] = simpleAsset;
273
+ }
274
+ }
275
+
276
+ // lets not put the shared assets into our cache to avoid confusing the system...
277
+ }
278
+ }
package/lib/util/util.js CHANGED
@@ -1,6 +1,5 @@
1
1
  'use strict';
2
2
 
3
- import TYPE from '../../types/mcdev.d.js';
4
3
  import MetadataDefinitions from './../MetadataTypeDefinitions.js';
5
4
  import process from 'node:process';
6
5
  import toposort from 'toposort';
@@ -12,17 +11,45 @@ import { readJsonSync } from 'fs-extra/esm';
12
11
  import { fileURLToPath } from 'node:url';
13
12
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
14
13
 
14
+ /**
15
+ * @typedef {import('../../types/mcdev.d.js').AuthObject} AuthObject
16
+ * @typedef {import('../../types/mcdev.d.js').BuObject} BuObject
17
+ * @typedef {import('../../types/mcdev.d.js').Cache} Cache
18
+ * @typedef {import('../../types/mcdev.d.js').CodeExtract} CodeExtract
19
+ * @typedef {import('../../types/mcdev.d.js').CodeExtractItem} CodeExtractItem
20
+ * @typedef {import('../../types/mcdev.d.js').DeltaPkgItem} DeltaPkgItem
21
+ * @typedef {import('../../types/mcdev.d.js').McdevLogger} McdevLogger
22
+ * @typedef {import('../../types/mcdev.d.js').Logger} Logger
23
+ * @typedef {import('../../types/mcdev.d.js').Mcdevrc} Mcdevrc
24
+ * @typedef {import('../../types/mcdev.d.js').MetadataTypeItem} MetadataTypeItem
25
+ * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemDiff} MetadataTypeItemDiff
26
+ * @typedef {import('../../types/mcdev.d.js').MetadataTypeItemObj} MetadataTypeItemObj
27
+ * @typedef {import('../../types/mcdev.d.js').MetadataTypeMap} MetadataTypeMap
28
+ * @typedef {import('../../types/mcdev.d.js').MetadataTypeMapObj} MetadataTypeMapObj
29
+ * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeList} MultiMetadataTypeList
30
+ * @typedef {import('../../types/mcdev.d.js').MultiMetadataTypeMap} MultiMetadataTypeMap
31
+ * @typedef {import('../../types/mcdev.d.js').SkipInteraction} SkipInteraction
32
+ * @typedef {import('../../types/mcdev.d.js').SoapRequestParams} SoapRequestParams
33
+ * @typedef {import('../../types/mcdev.d.js').TemplateMap} TemplateMap
34
+ * @typedef {import('../../types/mcdev.d.js').TypeKeyCombo} TypeKeyCombo
35
+ * @typedef {import('../../types/mcdev.d.js').SDKError} SDKError
36
+ */
37
+
15
38
  /**
16
39
  * Util that contains logger and simple util methods
17
40
  */
18
41
  export const Util = {
42
+ isRunViaVSCodeExtension:
43
+ process.env.VSCODE_AMD_ENTRYPOINT === 'vs/workbench/api/node/extensionHostProcess' || // run via VSCode extension
44
+ process.env.VSCODE_CRASH_REPORTER_PROCESS_TYPE === 'extensionHost',
19
45
  authFileName: '.mcdev-auth.json',
20
46
  boilerplateDirectory: '../../boilerplate',
21
47
  configFileName: '.mcdevrc.json',
48
+ defaultGitBranch: 'main',
22
49
  parentBuName: '_ParentBU_',
23
50
  standardizedSplitChar: '/',
24
- /** @type {TYPE.skipInteraction} */
25
- skipInteraction: false,
51
+ /** @type {SkipInteraction} */
52
+ skipInteraction: null,
26
53
  packageJsonMcdev: readJsonSync(path.join(__dirname, '../../package.json')),
27
54
  OPTIONS: {},
28
55
  changedKeysMap: {},
@@ -68,7 +95,7 @@ export const Util = {
68
95
  * check if a market name exists in current mcdev config
69
96
  *
70
97
  * @param {string} market market localizations
71
- * @param {TYPE.Mcdevrc} properties local mcdev config
98
+ * @param {Mcdevrc} properties local mcdev config
72
99
  * @returns {boolean} found market or not
73
100
  */
74
101
  checkMarket(market, properties) {
@@ -89,7 +116,7 @@ export const Util = {
89
116
  * ensure provided MarketList exists and it's content including markets and BUs checks out
90
117
  *
91
118
  * @param {string} mlName name of marketList
92
- * @param {TYPE.Mcdevrc} properties General configuration to be used in retrieve
119
+ * @param {Mcdevrc} properties General configuration to be used in retrieve
93
120
  */
94
121
  verifyMarketList(mlName, properties) {
95
122
  if (properties.marketList[mlName]) {
@@ -135,7 +162,7 @@ export const Util = {
135
162
  * @returns {void}
136
163
  */
137
164
  signalFatalError() {
138
- Util.logger.debug('Util.signalFataError() sets process.exitCode = 1 unless already set');
165
+ // Util.logger.debug('Util.signalFataError() sets process.exitCode = 1 unless already set');
139
166
  process.exitCode ||= 1;
140
167
  },
141
168
  /**
@@ -162,12 +189,12 @@ export const Util = {
162
189
  /**
163
190
  * helper for Mcdev.retrieve, Mcdev.retrieveAsTemplate and Mcdev.deploy
164
191
  *
165
- * @param {TYPE.SupportedMetadataTypes} selectedType type or type-subtype
192
+ * @param {string} selectedType type or type-subtype
166
193
  * @param {boolean} [handleOutside] if the API reponse is irregular this allows you to handle it outside of this generic method
167
194
  * @returns {boolean} type ok or not
168
195
  */
169
196
  _isValidType(selectedType, handleOutside) {
170
- const [type, subType] = Util.getTypeAndSubType(selectedType);
197
+ const { type, subType } = Util.getTypeAndSubType(selectedType);
171
198
  if (type && !MetadataDefinitions[type]) {
172
199
  if (!handleOutside) {
173
200
  Util.logger.error(`:: '${type}' is not a valid metadata type`);
@@ -186,27 +213,51 @@ export const Util = {
186
213
  return true;
187
214
  },
188
215
 
216
+ /**
217
+ * helper for Mcdev.retrieve, Mcdev.retrieveAsTemplate and Mcdev.deploy
218
+ *
219
+ * @param {Mcdevrc} properties javascript object in .mcdevrc.json
220
+ * @param {string} businessUnit name of BU
221
+ * @param {boolean} [handleOutside] if the API reponse is irregular this allows you to handle it outside of this generic method
222
+ * @returns {boolean} bu found or not
223
+ */
224
+ _isValidBU(properties, businessUnit, handleOutside) {
225
+ const [cred, bu] = businessUnit ? businessUnit.split('/') : [null, null];
226
+ if (!properties.credentials[cred]) {
227
+ if (!handleOutside) {
228
+ Util.logger.error(`Credential not found`);
229
+ }
230
+ return false;
231
+ } else if (!properties.credentials[cred].businessUnits[bu]) {
232
+ if (!handleOutside) {
233
+ Util.logger.error(`BU not found in credential`);
234
+ }
235
+ return false;
236
+ }
237
+ return true;
238
+ },
239
+
189
240
  /**
190
241
  * helper that deals with extracting type and subtype
191
242
  *
192
243
  * @param {string} selectedType "type" or "type-subtype"
193
- * @returns {string[]} first elem is type, second elem is subType
244
+ * @returns {{type:string, subType:string}} first elem is type, second elem is subType
194
245
  */
195
246
  getTypeAndSubType(selectedType) {
196
247
  if (selectedType) {
197
248
  const temp = selectedType.split('-');
198
249
  const type = temp.shift(); // remove first item which is the main typ
199
250
  const subType = temp.join('-'); // subType can include "-"
200
- return [type, subType];
251
+ return { type, subType };
201
252
  } else {
202
- return [];
253
+ return { type: null, subType: null };
203
254
  }
204
255
  },
205
256
 
206
257
  /**
207
258
  * helper for getDefaultProperties()
208
259
  *
209
- * @returns {TYPE.SupportedMetadataTypes[]} type choices
260
+ * @returns {string[]} type choices
210
261
  */
211
262
  getRetrieveTypeChoices() {
212
263
  const typeChoices = [];
@@ -251,8 +302,9 @@ export const Util = {
251
302
  // silly: 6
252
303
  // }
253
304
  if (
254
- process.env.VSCODE_AMD_ENTRYPOINT === 'vs/workbench/api/node/extensionHostProcess' ||
255
- process.env.VSCODE_CRASH_REPORTER_PROCESS_TYPE === 'extensionHost'
305
+ this.isRunViaVSCodeExtension || // run via VSCode extension
306
+ process.env.FORK_PROCESS_ID || // run via Git-Fork
307
+ process.env.PATH.toLowerCase().includes('sourcetree') // run via Atlassian SourceTree
256
308
  ) {
257
309
  Util.OPTIONS.noLogColors = true;
258
310
  }
@@ -287,20 +339,23 @@ export const Util = {
287
339
  )
288
340
  ),
289
341
  });
290
- transports.fileError = new winston.transports.File({
291
- // Write logs to additional error-logfile for better visibility of errors
292
- filename: 'logs/' + logFileName + '-errors.log',
293
- level: 'error', // only log errors
294
- lazy: true, // if true, log files will be created on demand, not at the initialization time.
295
- format: winston.format.combine(
296
- winston.format.uncolorize(),
297
- winston.format.timestamp({ format: 'HH:mm:ss.SSS' }),
298
- winston.format.simple(),
299
- winston.format.printf(
300
- (info) => `${info.timestamp} ${info.level}: ${info.message}`
301
- )
302
- ),
303
- });
342
+ if (Util.OPTIONS.errorLog) {
343
+ // used by CI/CD solutions like Copado to quickly show the error message to admins/users
344
+ transports.fileError = new winston.transports.File({
345
+ // Write logs to additional error-logfile for better visibility of errors
346
+ filename: 'logs/' + logFileName + '-errors.log',
347
+ level: 'error', // only log errors
348
+ lazy: true, // if true, log files will be created on demand, not at the initialization time.
349
+ format: winston.format.combine(
350
+ winston.format.uncolorize(),
351
+ winston.format.timestamp({ format: 'HH:mm:ss.SSS' }),
352
+ winston.format.simple(),
353
+ winston.format.printf(
354
+ (info) => `${info.timestamp} ${info.level}: ${info.message}`
355
+ )
356
+ ),
357
+ });
358
+ }
304
359
  }
305
360
  return transports;
306
361
  },
@@ -309,7 +364,7 @@ export const Util = {
309
364
  /**
310
365
  * Logger that creates timestamped log file in 'logs/' directory
311
366
  *
312
- * @type {TYPE.Logger}
367
+ * @type {Logger}
313
368
  */
314
369
  logger: null,
315
370
  /**
@@ -339,11 +394,12 @@ export const Util = {
339
394
  transports: Object.values(Util.loggerTransports),
340
395
  });
341
396
  const winstonError = myWinston.error;
397
+ /** @type {McdevLogger} */
342
398
  const winstonExtension = {
343
399
  /**
344
400
  * helper that prints better stack trace for errors
345
401
  *
346
- * @param {Error} ex the error
402
+ * @param {SDKError} ex the error
347
403
  * @param {string} [message] optional custom message to be printed as error together with the exception's message
348
404
  * @returns {void}
349
405
  */
@@ -428,7 +484,7 @@ export const Util = {
428
484
  * key-value pairs (obj)
429
485
  *
430
486
  * @param {string | object} str JSON object or its stringified version, which has values to be replaced
431
- * @param {TYPE.TemplateMap} obj key value object which contains keys to be replaced and values to be replaced with
487
+ * @param {TemplateMap} obj key value object which contains keys to be replaced and values to be replaced with
432
488
  * @returns {string | object} replaced version of str
433
489
  */
434
490
  replaceByObject: function (str, obj) {
@@ -448,7 +504,7 @@ export const Util = {
448
504
 
449
505
  sortable.sort((a, b) => b[1].length - a[1].length);
450
506
  for (const pair of sortable) {
451
- const escVal = pair[1].toString().replaceAll(/[-/\\^$*+?.()|[\]{}]/g, '\\$&');
507
+ const escVal = pair[1].toString().replaceAll(/[-/\\^$*+?.()|[\]{}]/g, String.raw`\$&`);
452
508
  const regString = new RegExp(escVal, 'g');
453
509
  str = str.replace(regString, '{{{' + pair[0] + '}}}');
454
510
  }
@@ -462,7 +518,7 @@ export const Util = {
462
518
  * get key of an object based on the first matching value
463
519
  *
464
520
  * @param {object} objs object of objects to be searched
465
- * @param {string} val value to be searched for
521
+ * @param {string | number} val value to be searched for
466
522
  * @returns {string} key
467
523
  */
468
524
  inverseGet: function (objs, val) {
@@ -548,40 +604,45 @@ export const Util = {
548
604
 
549
605
  // sort list & remove the undefined dependencies
550
606
  const flatList = toposort(dependencies).filter((a) => !!a);
551
- const finalList = {};
607
+ /** @type {Object.<string, null | Set.<string>>} */
608
+ const setList = {};
552
609
  // group subtypes per type
553
- for (const type of flatList) {
554
- if (type.includes('-')) {
555
- const [key, subKey] = Util.getTypeAndSubType(type);
556
- if (finalList[key] === null) {
610
+ for (const flatType of flatList) {
611
+ if (flatType.includes('-')) {
612
+ const { type, subType } = Util.getTypeAndSubType(flatType);
613
+ if (setList[type] === null) {
557
614
  // if main type is already required, then don't filter by subtypes
558
615
  continue;
559
- } else if (finalList[key] && subKey) {
616
+ } else if (setList[type] && subType) {
560
617
  // add another subtype to the set
561
- finalList[key].add(subKey);
618
+ setList[type].add(subType);
562
619
  continue;
563
620
  } else {
564
621
  // create a new set with the first subtype; subKey will be always set here
565
- finalList[key] = new Set([subKey]);
622
+ setList[type] = new Set([subType]);
566
623
  }
567
- if (subTypeDeps[key]) {
624
+ if (subTypeDeps[type]) {
568
625
  // check if there are depndent subtypes that need to be added
569
- const temp = [...subTypeDeps[key]].map((a) => {
626
+ /** @type {string[]} */
627
+ const temp = [...subTypeDeps[type]].map((a) => {
570
628
  const temp = a.split('-');
571
629
  temp.shift(); // remove first item which is the main type
572
630
  return temp.join('-'); // subType can include "-"
573
631
  });
574
- finalList[key].add(...temp);
632
+ for (const item of temp) {
633
+ setList[type].add(item);
634
+ }
575
635
  }
576
636
  } else {
577
- finalList[type] = null;
637
+ setList[flatType] = null;
578
638
  }
579
639
  }
580
640
  // convert sets into arrays
581
- for (const type of Object.keys(finalList)) {
582
- if (finalList[type] instanceof Set) {
583
- finalList[type] = [...finalList[type]];
584
- }
641
+ /** @type {Object.<string, string[]>} */
642
+ const finalList = {};
643
+
644
+ for (const type of Object.keys(setList)) {
645
+ finalList[type] = setList[type] instanceof Set ? [...setList[type]] : null;
585
646
  }
586
647
 
587
648
  return finalList;
@@ -630,10 +691,10 @@ export const Util = {
630
691
  /**
631
692
  * standardize check to ensure only one result is returned from template search
632
693
  *
633
- * @param {TYPE.MetadataTypeItem[]} results array of metadata
694
+ * @param {MetadataTypeItem[]} results array of metadata
634
695
  * @param {string} keyToSearch the field which contains the searched value
635
696
  * @param {string} searchValue the value which is being looked for
636
- * @returns {TYPE.MetadataTypeItem} metadata to be used in building template
697
+ * @returns {MetadataTypeItem} metadata to be used in building template
637
698
  */
638
699
  templateSearchResult(results, keyToSearch, searchValue) {
639
700
  const matching = results.filter((item) => item[keyToSearch] === searchValue);
@@ -838,8 +899,8 @@ export const Util = {
838
899
  }
839
900
  // Remove special chars
840
901
  search = search.replaceAll(
841
- new RegExp('([\\.\\\\\\+\\*\\?\\[\\^\\]\\$\\(\\)\\{\\}\\=\\!\\<\\>\\|\\:\\-])', 'g'),
842
- '\\$1'
902
+ new RegExp(String.raw`([\.\\\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:\-])`, 'g'),
903
+ String.raw`\$1`
843
904
  );
844
905
  // Replace % and _ with equivalent regex
845
906
  search = search.replaceAll('%', '.*').replaceAll('_', '.');
@@ -849,7 +910,7 @@ export const Util = {
849
910
  /**
850
911
  * returns true if no LIKE filter is defined or if all filters match
851
912
  *
852
- * @param {TYPE.MetadataTypeItem} metadata a single metadata item
913
+ * @param {MetadataTypeItem} metadata a single metadata item
853
914
  * @param {object} [filters] only used in recursive calls
854
915
  * @returns {boolean} true if no LIKE filter is defined or if all filters match
855
916
  */
@@ -892,6 +953,43 @@ export const Util = {
892
953
  capitalizeFirstLetter(str) {
893
954
  return str.charAt(0).toUpperCase() + str.slice(1);
894
955
  },
956
+ /**
957
+ * helper for Retriever and Deployer class
958
+ *
959
+ * @param {string[]} typeArr -
960
+ * @param {string[]} keyArr -
961
+ * @param {boolean} [returnEmpty] returns array with null element if false/not set; Retriever needs this to be false; Deployer needs it to be true
962
+ * @returns {TypeKeyCombo} -
963
+ */
964
+ createTypeKeyCombo(typeArr, keyArr, returnEmpty = false) {
965
+ if (!keyArr || (Array.isArray(keyArr) && !keyArr.length)) {
966
+ // no keys were provided, ensure we retrieve all
967
+ keyArr = returnEmpty ? null : [null];
968
+ }
969
+ /** @type {TypeKeyCombo} */
970
+ const typeKeyMap = {};
971
+ // no keys or array of keys was provided (likely called via CLI or to retrieve all)
972
+ // transform into TypeKeyCombo to iterate over it
973
+ for (const type of typeArr) {
974
+ typeKeyMap[type] = keyArr;
975
+ }
976
+ return typeKeyMap;
977
+ },
978
+ /**
979
+ * async version of Array.find()
980
+ * returns the first element in the provided array that satisfies the provided testin function
981
+ *
982
+ * @param {Array} arr your test array
983
+ * @param {Function} asyncCallback callback
984
+ * @returns {Promise.<any | undefined>} first element that passed the test
985
+ */
986
+ async findAsync(arr, asyncCallback) {
987
+ for (const element of arr) {
988
+ if (await asyncCallback(element)) {
989
+ return element;
990
+ }
991
+ }
992
+ },
895
993
  };
896
994
 
897
995
  Util.startLogger(false, true);