mcdev 5.0.1 → 5.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 (138) hide show
  1. package/.coverage-comment-template.svelte +177 -161
  2. package/.eslintrc.json +1 -0
  3. package/.github/ISSUE_TEMPLATE/bug.yml +2 -0
  4. package/.github/dependabot.yml +8 -0
  5. package/.github/workflows/coverage-base-update.yml +6 -2
  6. package/.github/workflows/coverage-develop-branch.yml +7 -6
  7. package/.github/workflows/coverage-main-branch.yml +7 -6
  8. package/.github/workflows/coverage.yml +7 -2
  9. package/.husky/commit-msg +1 -1
  10. package/.husky/post-checkout +35 -3
  11. package/.husky/post-merge +21 -0
  12. package/.husky/pre-commit +1 -0
  13. package/docs/dist/documentation.md +222 -62
  14. package/lib/Deployer.js +3 -4
  15. package/lib/cli.js +36 -8
  16. package/lib/index.js +175 -3
  17. package/lib/metadataTypes/Asset.js +4 -2
  18. package/lib/metadataTypes/Automation.js +413 -195
  19. package/lib/metadataTypes/DataExtension.js +6 -8
  20. package/lib/metadataTypes/DataExtensionField.js +5 -5
  21. package/lib/metadataTypes/Journey.js +11 -10
  22. package/lib/metadataTypes/MetadataType.js +76 -22
  23. package/lib/metadataTypes/MobileKeyword.js +165 -20
  24. package/lib/metadataTypes/MobileMessage.js +20 -28
  25. package/lib/metadataTypes/Query.js +26 -0
  26. package/lib/metadataTypes/Role.js +2 -3
  27. package/lib/metadataTypes/TransactionalSMS.js +5 -5
  28. package/lib/metadataTypes/User.js +3 -17
  29. package/lib/metadataTypes/definitions/Asset.definition.js +1 -0
  30. package/lib/metadataTypes/definitions/Automation.definition.js +52 -6
  31. package/lib/metadataTypes/definitions/DataExtension.definition.js +1 -0
  32. package/lib/metadataTypes/definitions/DataExtract.definition.js +1 -0
  33. package/lib/metadataTypes/definitions/EmailSend.definition.js +1 -0
  34. package/lib/metadataTypes/definitions/Event.definition.js +1 -0
  35. package/lib/metadataTypes/definitions/Filter.definition.js +1 -0
  36. package/lib/metadataTypes/definitions/ImportFile.definition.js +1 -0
  37. package/lib/metadataTypes/definitions/MobileKeyword.definition.js +20 -7
  38. package/lib/metadataTypes/definitions/MobileMessage.definition.js +50 -8
  39. package/lib/metadataTypes/definitions/Query.definition.js +1 -0
  40. package/lib/metadataTypes/definitions/Role.definition.js +1 -0
  41. package/lib/metadataTypes/definitions/TriggeredSend.definition.js +1 -0
  42. package/lib/metadataTypes/definitions/User.definition.js +2 -0
  43. package/lib/util/auth.js +4 -1
  44. package/lib/util/cli.js +1 -1
  45. package/lib/util/devops.js +13 -11
  46. package/lib/util/file.js +5 -3
  47. package/lib/util/util.js +153 -129
  48. package/package.json +11 -11
  49. package/test/general.test.js +26 -0
  50. package/test/mockRoot/.mcdevrc.json +3 -1
  51. package/test/mockRoot/deploy/testInstance/testBU/automation/testExisting_automation.automation-meta.json +53 -0
  52. package/test/mockRoot/deploy/testInstance/testBU/automation/testNew_automation.automation-meta.json +46 -0
  53. package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/{testNew_keyword.mobileKeyword-meta.json → 4912312345678.TESTNEW_KEYWORD.mobileKeyword-meta.json} +1 -4
  54. package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/{testNew_keyword_blocked.mobileKeyword-meta.json → 4912312345678.TESTNEW_KEYWORD_BLOCKED.mobileKeyword-meta.json} +1 -4
  55. package/test/mockRoot/deploy/testInstance/testBU/query/{testExistingQuery.query-meta.json → testExisting_query.query-meta.json} +2 -2
  56. package/test/mockRoot/deploy/testInstance/testBU/query/{testNewQuery.query-meta.json → testNew_query.query-meta.json} +2 -2
  57. package/test/mockRoot/deploy/testInstance/testBU/transactionalSMS/testExisting_tsms.transactionalSMS-meta.json +1 -1
  58. package/test/mockRoot/deploy/testInstance/testBU/transactionalSMS/testNew_tsms.transactionalSMS-meta.json +1 -1
  59. package/test/resourceFactory.js +64 -21
  60. package/test/resources/1111111/user/retrieve-expected.md +19 -0
  61. package/test/resources/9999999/automation/build-expected.json +58 -0
  62. package/test/resources/9999999/automation/create-expected.json +46 -0
  63. package/test/resources/9999999/automation/create-testNew_automation-expected.md +28 -0
  64. package/test/resources/9999999/automation/delete-response.xml +40 -0
  65. package/test/resources/9999999/automation/retrieve-expected.json +58 -0
  66. package/test/resources/9999999/automation/retrieve-testExisting_automation-expected.md +30 -0
  67. package/test/resources/9999999/automation/template-expected.json +58 -0
  68. package/test/resources/9999999/automation/update-expected.json +46 -0
  69. package/test/resources/9999999/automation/update-testExisting_automation-expected.md +28 -0
  70. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-1f7f8788c560/get-response.json +85 -0
  71. package/test/resources/9999999/automation/v1/automations/08afb0e2-b00a-4c88-ad2e-1f7f8788c560/patch-response.json +85 -0
  72. package/test/resources/9999999/automation/v1/automations/a8afb0e2-b00a-4c88-ad2e-1f7f8788c560/get-response.json +85 -0
  73. package/test/resources/9999999/automation/v1/automations/post-response.json +85 -0
  74. package/test/resources/9999999/automation/v1/dataextracts/56c5370a-f988-4f36-b0ee-0f876573f6d7/get-response.json +38 -0
  75. package/test/resources/9999999/automation/v1/dataextracts/get-response.json +20 -0
  76. package/test/resources/9999999/automation/v1/filetransfers/72c328ac-f5b0-4e37-91d3-a775666f15a6/get-response.json +18 -0
  77. package/test/resources/9999999/automation/v1/filetransfers/get-response.json +15 -0
  78. package/test/resources/9999999/automation/v1/imports/get-response.json +38 -0
  79. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/actions/start/post-response.txt +1 -0
  80. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/get-response.json +2 -2
  81. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/patch-response.json +2 -2
  82. package/test/resources/9999999/automation/v1/queries/get-response.json +4 -4
  83. package/test/resources/9999999/automation/v1/queries/post-response.json +2 -2
  84. package/test/resources/9999999/automation/v1/scripts/get-response.json +17 -0
  85. package/test/resources/9999999/dataExtension/retrieve-expected.md +18 -0
  86. package/test/resources/9999999/dataFolder/retrieve-ContentType=automations-response.xml +48 -0
  87. package/test/resources/9999999/dataFolder/retrieve-ContentType=queryactivity-response.xml +48 -0
  88. package/test/resources/9999999/dataFolder/retrieve-response.xml +22 -0
  89. package/test/resources/9999999/emailSendDefinition/retrieve-response.xml +85 -0
  90. package/test/resources/9999999/journey/build-expected.json +1 -1
  91. package/test/resources/9999999/journey/get-expected.json +1 -1
  92. package/test/resources/9999999/journey/put-expected.json +1 -1
  93. package/test/resources/9999999/journey/template-expected.json +1 -1
  94. package/test/resources/9999999/legacy/v1/beta/automations/notifications/RkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow/get-response.json +21 -0
  95. package/test/resources/9999999/legacy/v1/beta/automations/notifications/RkpOcE9qSVh2VUdnYTVJbWFfWW14dzoyNTow/post-response.json +0 -0
  96. package/test/resources/9999999/legacy/v1/beta/bulk/automations/automation/definition/get-response.json +30 -0
  97. package/test/resources/9999999/legacy/v1/beta/mobile/keyword/NXV4ZFMwTEFwRVczd3RaLUF5X3p5dzo4Njow/get-response.json +1 -1
  98. package/test/resources/9999999/legacy/v1/beta/mobile/keyword/get-response.json +1 -1
  99. package/test/resources/9999999/legacy/v1/beta/mobile/message/NTIzOjc4OjA/get-response.json +1 -1
  100. package/test/resources/9999999/legacy/v1/beta/mobile/message/get-response.json +1 -1
  101. package/test/resources/9999999/messaging/v1/sms/definitions/post-response.json +1 -1
  102. package/test/resources/9999999/messaging/v1/sms/definitions/testExisting_tsms/get-response.json +1 -1
  103. package/test/resources/9999999/messaging/v1/sms/definitions/testExisting_tsms/patch-response.json +1 -1
  104. package/test/resources/9999999/mobileKeyword/build-expected.json +1 -4
  105. package/test/resources/9999999/mobileKeyword/get-expected.json +1 -4
  106. package/test/resources/9999999/mobileKeyword/post-create-expected.json +1 -4
  107. package/test/resources/9999999/mobileKeyword/template-expected.json +1 -4
  108. package/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation-response.xml +30 -0
  109. package/test/resources/9999999/program/retrieve-CustomerKey=testNew_automation-response.xml +30 -0
  110. package/test/resources/9999999/program/retrieve-Name=testExisting_automation-response.xml +31 -0
  111. package/test/resources/9999999/program/retrieve-response.xml +32 -0
  112. package/test/resources/9999999/query/build-expected.json +2 -2
  113. package/test/resources/9999999/query/build-expected.sql +1 -1
  114. package/test/resources/9999999/query/get-expected.json +2 -2
  115. package/test/resources/9999999/query/get-expected.sql +1 -1
  116. package/test/resources/9999999/query/get2-expected.json +2 -2
  117. package/test/resources/9999999/query/patch-expected.json +2 -2
  118. package/test/resources/9999999/query/patch-expected.sql +1 -1
  119. package/test/resources/9999999/query/post-expected.json +2 -2
  120. package/test/resources/9999999/query/post-expected.sql +1 -1
  121. package/test/resources/9999999/query/template-expected.json +2 -2
  122. package/test/resources/9999999/query/template-expected.sql +1 -1
  123. package/test/resources/9999999/transactionalSMS/build-expected.json +1 -1
  124. package/test/resources/9999999/transactionalSMS/get-expected.json +1 -1
  125. package/test/resources/9999999/transactionalSMS/patch-expected.json +1 -1
  126. package/test/resources/9999999/transactionalSMS/post-expected.json +1 -1
  127. package/test/resources/9999999/transactionalSMS/template-expected.json +1 -1
  128. package/test/type.automation.test.js +259 -0
  129. package/test/type.dataExtension.test.js +16 -1
  130. package/test/type.mobileKeyword.test.js +57 -19
  131. package/test/type.query.test.js +39 -26
  132. package/test/type.user.test.js +44 -1
  133. package/test/utils.js +16 -5
  134. package/.coverage-comment-template.md +0 -20
  135. /package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/{testNew_keyword.mobileKeyword-meta.amp → 4912312345678.TESTNEW_KEYWORD.mobileKeyword-meta.amp} +0 -0
  136. /package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/{testNew_keyword_blocked.mobileKeyword-meta.amp → 4912312345678.TESTNEW_KEYWORD_BLOCKED.mobileKeyword-meta.amp} +0 -0
  137. /package/test/mockRoot/deploy/testInstance/testBU/query/{testExistingQuery.query-meta.sql → testExisting_query.query-meta.sql} +0 -0
  138. /package/test/mockRoot/deploy/testInstance/testBU/query/{testNewQuery.query-meta.sql → testNew_query.query-meta.sql} +0 -0
@@ -186,17 +186,17 @@ Provides default functionality that can be overwritten by child metadata type cl
186
186
  <dt><a href="#csvToArray">csvToArray(csv)</a> ⇒ <code>Array.&lt;string&gt;</code></dt>
187
187
  <dd><p>helper to convert CSVs into an array. if only one value was given, it&#39;s also returned as an array</p>
188
188
  </dd>
189
+ <dt><a href="#Automation.">Automation.(metadataMap, key)</a> ⇒ <code>Promise.&lt;void&gt;</code></dt>
190
+ <dd><p>helper for <a href="#Automation.postDeployTasks">postDeployTasks</a></p>
191
+ </dd>
192
+ <dt><a href="#Automation.">Automation.(metadataMap, originalMetadataMap, key)</a></dt>
193
+ <dd><p>helper for <a href="postDeployTasks">postDeployTasks</a></p>
194
+ </dd>
189
195
  <dt><a href="#getUserName">getUserName(userList, item, fieldname)</a> ⇒ <code>string</code></dt>
190
196
  <dd></dd>
191
197
  <dt><a href="#setupSDK">setupSDK(sessionKey, authObject)</a> ⇒ <code><a href="#SDK">SDK</a></code></dt>
192
198
  <dd><p>Returns an SDK instance to be used for API calls</p>
193
199
  </dd>
194
- <dt><a href="#createNewLoggerTransport">createNewLoggerTransport()</a> ⇒ <code>object</code></dt>
195
- <dd><p>wrapper around our standard winston logging to console and logfile</p>
196
- </dd>
197
- <dt><a href="#startLogger">startLogger()</a> ⇒ <code>void</code></dt>
198
- <dd><p>initiate winston logger</p>
199
- </dd>
200
200
  </dl>
201
201
 
202
202
  ## Typedefs
@@ -496,6 +496,8 @@ main class
496
496
  * [.buildDefinition(businessUnit, selectedType, name, market)](#Mcdev.buildDefinition) ⇒ <code>Promise.&lt;void&gt;</code>
497
497
  * [.buildDefinitionBulk(listName, type, name)](#Mcdev.buildDefinitionBulk) ⇒ <code>Promise.&lt;void&gt;</code>
498
498
  * [.getFilesToCommit(businessUnit, selectedType, keyArr)](#Mcdev.getFilesToCommit) ⇒ <code>Promise.&lt;Array.&lt;string&gt;&gt;</code>
499
+ * [.execute(businessUnit, [selectedTypesArr], keys)](#Mcdev.execute) ⇒ <code>Promise.&lt;boolean&gt;</code>
500
+ * [._executeBU(cred, bu, [selectedTypesArr], keyArr)](#Mcdev._executeBU) ⇒ <code>Promise.&lt;boolean&gt;</code>
499
501
 
500
502
  <a name="Mcdev.setSkipInteraction"></a>
501
503
 
@@ -748,6 +750,35 @@ Build a specific metadata file based on a template using a list of bu-market com
748
750
  | selectedType | <code>string</code> | supported metadata type |
749
751
  | keyArr | <code>Array.&lt;string&gt;</code> | customerkey of the metadata |
750
752
 
753
+ <a name="Mcdev.execute"></a>
754
+
755
+ ### Mcdev.execute(businessUnit, [selectedTypesArr], keys) ⇒ <code>Promise.&lt;boolean&gt;</code>
756
+ Start an item (query)
757
+
758
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
759
+ **Returns**: <code>Promise.&lt;boolean&gt;</code> - true if all started successfully, false if not
760
+
761
+ | Param | Type | Description |
762
+ | --- | --- | --- |
763
+ | businessUnit | <code>string</code> | name of BU |
764
+ | [selectedTypesArr] | <code>Array.&lt;TYPE.SupportedMetadataTypes&gt;</code> | limit to given metadata types |
765
+ | keys | <code>Array.&lt;string&gt;</code> | customerkey of the metadata |
766
+
767
+ <a name="Mcdev._executeBU"></a>
768
+
769
+ ### Mcdev.\_executeBU(cred, bu, [selectedTypesArr], keyArr) ⇒ <code>Promise.&lt;boolean&gt;</code>
770
+ helper for [execute](execute)
771
+
772
+ **Kind**: static method of [<code>Mcdev</code>](#Mcdev)
773
+ **Returns**: <code>Promise.&lt;boolean&gt;</code> - true if all items were executed, false otherwise
774
+
775
+ | Param | Type | Description |
776
+ | --- | --- | --- |
777
+ | cred | <code>string</code> | name of Credential |
778
+ | bu | <code>string</code> | name of BU |
779
+ | [selectedTypesArr] | <code>Array.&lt;TYPE.SupportedMetadataTypes&gt;</code> | limit execution to given metadata type |
780
+ | keyArr | <code>Array.&lt;string&gt;</code> | customerkey of the metadata |
781
+
751
782
  <a name="Asset"></a>
752
783
 
753
784
  ## Asset ⇐ [<code>MetadataType</code>](#MetadataType)
@@ -1206,16 +1237,15 @@ Automation MetadataType
1206
1237
  * [.retrieveChangelog()](#Automation.retrieveChangelog) ⇒ <code>Promise.&lt;TYPE.AutomationMapObj&gt;</code>
1207
1238
  * [.retrieveForCache()](#Automation.retrieveForCache) ⇒ <code>Promise.&lt;TYPE.AutomationMapObj&gt;</code>
1208
1239
  * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Automation.retrieveAsTemplate) ⇒ <code>Promise.&lt;TYPE.AutomationItemObj&gt;</code>
1209
- * [.postRetrieveTasks(metadata)](#Automation.postRetrieveTasks) ⇒ <code>TYPE.AutomationItem</code>
1240
+ * [.postRetrieveTasks(metadata)](#Automation.postRetrieveTasks) ⇒ <code>TYPE.AutomationItem</code> \| <code>void</code>
1210
1241
  * [.deploy(metadata, targetBU, retrieveDir, [isRefresh])](#Automation.deploy) ⇒ <code>Promise.&lt;TYPE.AutomationMap&gt;</code>
1211
1242
  * [.create(metadata)](#Automation.create) ⇒ <code>Promise</code>
1212
1243
  * [.update(metadata, metadataBefore)](#Automation.update) ⇒ <code>Promise</code>
1213
1244
  * [.preDeployTasks(metadata)](#Automation.preDeployTasks) ⇒ <code>Promise.&lt;TYPE.AutomationItem&gt;</code>
1214
1245
  * [.validateDeployMetadata(metadata)](#Automation.validateDeployMetadata) ⇒ <code>boolean</code>
1215
- * [.postDeployTasks(metadata, originalMetadata)](#Automation.postDeployTasks) ⇒ <code>Promise.&lt;void&gt;</code>
1246
+ * [.postDeployTasks(metadataMap, originalMetadataMap)](#Automation.postDeployTasks) ⇒ <code>Promise.&lt;void&gt;</code>
1216
1247
  * [.setFolderPath(metadata)](#Automation.setFolderPath)
1217
1248
  * [.setFolderId(metadata)](#Automation.setFolderId)
1218
- * [.parseMetadata(metadata)](#Automation.parseMetadata) ⇒ <code>TYPE.AutomationItem</code> \| <code>void</code>
1219
1249
  * [._buildSchedule(scheduleObject)](#Automation._buildSchedule) ⇒ <code>TYPE.AutomationScheduleSoap</code>
1220
1250
  * [._calcTime(offsetServer, dateInput, [offsetInput])](#Automation._calcTime) ⇒ <code>string</code>
1221
1251
  * [.document([metadata])](#Automation.document) ⇒ <code>Promise.&lt;void&gt;</code>
@@ -1268,11 +1298,11 @@ Retrieve a specific Automation Definition by Name
1268
1298
 
1269
1299
  <a name="Automation.postRetrieveTasks"></a>
1270
1300
 
1271
- ### Automation.postRetrieveTasks(metadata) ⇒ <code>TYPE.AutomationItem</code>
1301
+ ### Automation.postRetrieveTasks(metadata) ⇒ <code>TYPE.AutomationItem</code> \| <code>void</code>
1272
1302
  manages post retrieve steps
1273
1303
 
1274
1304
  **Kind**: static method of [<code>Automation</code>](#Automation)
1275
- **Returns**: <code>TYPE.AutomationItem</code> - metadata
1305
+ **Returns**: <code>TYPE.AutomationItem</code> \| <code>void</code> - parsed item
1276
1306
 
1277
1307
  | Param | Type | Description |
1278
1308
  | --- | --- | --- |
@@ -1345,7 +1375,7 @@ Whitelisted Activites are deployed but require configuration
1345
1375
 
1346
1376
  <a name="Automation.postDeployTasks"></a>
1347
1377
 
1348
- ### Automation.postDeployTasks(metadata, originalMetadata) ⇒ <code>Promise.&lt;void&gt;</code>
1378
+ ### Automation.postDeployTasks(metadataMap, originalMetadataMap) ⇒ <code>Promise.&lt;void&gt;</code>
1349
1379
  Gets executed after deployment of metadata type
1350
1380
 
1351
1381
  **Kind**: static method of [<code>Automation</code>](#Automation)
@@ -1353,8 +1383,8 @@ Gets executed after deployment of metadata type
1353
1383
 
1354
1384
  | Param | Type | Description |
1355
1385
  | --- | --- | --- |
1356
- | metadata | <code>TYPE.AutomationMap</code> | metadata mapped by their keyField |
1357
- | originalMetadata | <code>TYPE.AutomationMap</code> | metadata to be updated (contains additioanl fields) |
1386
+ | metadataMap | <code>TYPE.AutomationMap</code> | metadata mapped by their keyField |
1387
+ | originalMetadataMap | <code>TYPE.AutomationMap</code> | metadata to be updated (contains additioanl fields) |
1358
1388
 
1359
1389
  <a name="Automation.setFolderPath"></a>
1360
1390
 
@@ -1378,18 +1408,6 @@ automation-specific script that retrieves the folder ID from cache and updates t
1378
1408
  | --- | --- | --- |
1379
1409
  | metadata | <code>TYPE.MetadataTypeItem</code> | a single item |
1380
1410
 
1381
- <a name="Automation.parseMetadata"></a>
1382
-
1383
- ### Automation.parseMetadata(metadata) ⇒ <code>TYPE.AutomationItem</code> \| <code>void</code>
1384
- parses retrieved Metadata before saving
1385
-
1386
- **Kind**: static method of [<code>Automation</code>](#Automation)
1387
- **Returns**: <code>TYPE.AutomationItem</code> \| <code>void</code> - parsed item
1388
-
1389
- | Param | Type | Description |
1390
- | --- | --- | --- |
1391
- | metadata | <code>TYPE.AutomationItem</code> | a single automation definition |
1392
-
1393
1411
  <a name="Automation._buildSchedule"></a>
1394
1412
 
1395
1413
  ### Automation.\_buildSchedule(scheduleObject) ⇒ <code>TYPE.AutomationScheduleSoap</code>
@@ -3155,6 +3173,7 @@ Provides default functionality that can be overwritten by child metadata type cl
3155
3173
  * [.create(metadata, deployDir)](#MetadataType.create) ⇒ <code>void</code>
3156
3174
  * [.update(metadata, [metadataBefore])](#MetadataType.update) ⇒ <code>void</code>
3157
3175
  * [.refresh()](#MetadataType.refresh) ⇒ <code>void</code>
3176
+ * [.execute()](#MetadataType.execute) ⇒ <code>void</code>
3158
3177
  * [.hasChanged(cachedVersion, metadata, [fieldName])](#MetadataType.hasChanged) ⇒ <code>boolean</code>
3159
3178
  * [.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent])](#MetadataType.hasChangedGeneric) ⇒ <code>boolean</code>
3160
3179
  * [.upsert(metadataMap, deployDir, [isRefresh])](#MetadataType.upsert) ⇒ <code>Promise.&lt;TYPE.MetadataTypeMap&gt;</code>
@@ -3167,6 +3186,8 @@ Provides default functionality that can be overwritten by child metadata type cl
3167
3186
  * [.getSOAPErrorMsg(ex)](#MetadataType.getSOAPErrorMsg) ⇒ <code>string</code>
3168
3187
  * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#MetadataType.retrieveSOAP) ⇒ <code>Promise.&lt;TYPE.MetadataTypeMapObj&gt;</code>
3169
3188
  * [.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve])](#MetadataType.retrieveREST) ⇒ <code>Promise.&lt;{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}&gt;</code>
3189
+ * [.executeREST(uri, key)](#MetadataType.executeREST) ⇒ <code>Promise.&lt;string&gt;</code>
3190
+ * [.runDocumentOnRetrieve([singleRetrieve], metadataMap)](#MetadataType.runDocumentOnRetrieve) ⇒ <code>Promise.&lt;void&gt;</code>
3170
3191
  * [.parseResponseBody(body, [singleRetrieve])](#MetadataType.parseResponseBody) ⇒ <code>TYPE.MetadataTypeMap</code>
3171
3192
  * [.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin)](#MetadataType.deleteFieldByDefinition) ⇒ <code>void</code>
3172
3193
  * [.removeNotCreateableFields(metadataEntry)](#MetadataType.removeNotCreateableFields) ⇒ <code>void</code>
@@ -3465,6 +3486,12 @@ Abstract update method that needs to be implemented in child metadata type
3465
3486
  ### MetadataType.refresh() ⇒ <code>void</code>
3466
3487
  Abstract refresh method that needs to be implemented in child metadata type
3467
3488
 
3489
+ **Kind**: static method of [<code>MetadataType</code>](#MetadataType)
3490
+ <a name="MetadataType.execute"></a>
3491
+
3492
+ ### MetadataType.execute() ⇒ <code>void</code>
3493
+ Abstract execute method that needs to be implemented in child metadata type
3494
+
3468
3495
  **Kind**: static method of [<code>MetadataType</code>](#MetadataType)
3469
3496
  <a name="MetadataType.hasChanged"></a>
3470
3497
 
@@ -3632,6 +3659,32 @@ Retrieves Metadata for Rest Types
3632
3659
  | [templateVariables] | <code>TYPE.TemplateMap</code> | variables to be replaced in the metadata |
3633
3660
  | [singleRetrieve] | <code>string</code> \| <code>number</code> | key of single item to filter by |
3634
3661
 
3662
+ <a name="MetadataType.executeREST"></a>
3663
+
3664
+ ### MetadataType.executeREST(uri, key) ⇒ <code>Promise.&lt;string&gt;</code>
3665
+ Used to execute a query/automation etc.
3666
+
3667
+ **Kind**: static method of [<code>MetadataType</code>](#MetadataType)
3668
+ **Returns**: <code>Promise.&lt;string&gt;</code> - 'OK' if started execution successfully, otherwise - 'Error'
3669
+
3670
+ | Param | Type | Description |
3671
+ | --- | --- | --- |
3672
+ | uri | <code>string</code> | REST endpoint where the POST request should be sent |
3673
+ | key | <code>string</code> | item key |
3674
+
3675
+ <a name="MetadataType.runDocumentOnRetrieve"></a>
3676
+
3677
+ ### MetadataType.runDocumentOnRetrieve([singleRetrieve], metadataMap) ⇒ <code>Promise.&lt;void&gt;</code>
3678
+ helper for [retrieveREST](retrieveREST) and [retrieveSOAP](retrieveSOAP)
3679
+
3680
+ **Kind**: static method of [<code>MetadataType</code>](#MetadataType)
3681
+ **Returns**: <code>Promise.&lt;void&gt;</code> - -
3682
+
3683
+ | Param | Type | Description |
3684
+ | --- | --- | --- |
3685
+ | [singleRetrieve] | <code>string</code> \| <code>number</code> | key of single item to filter by |
3686
+ | metadataMap | <code>TYPE.MetadataTypeMap</code> | saved metadata |
3687
+
3635
3688
  <a name="MetadataType.parseResponseBody"></a>
3636
3689
 
3637
3690
  ### MetadataType.parseResponseBody(body, [singleRetrieve]) ⇒ <code>TYPE.MetadataTypeMap</code>
@@ -4006,11 +4059,13 @@ MobileKeyword MetadataType
4006
4059
 
4007
4060
  * [MobileKeyword](#MobileKeyword) ⇐ [<code>MetadataType</code>](#MetadataType)
4008
4061
  * [.retrieve(retrieveDir, [_], [__], [key])](#MobileKeyword.retrieve) ⇒ <code>Promise.&lt;TYPE.MetadataTypeMapObj&gt;</code> \| <code>void</code>
4062
+ * [.parseResponseBody(body, [singleRetrieve])](#MobileKeyword.parseResponseBody) ⇒ <code>TYPE.MetadataTypeMap</code>
4063
+ * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MobileKeyword.createOrUpdate) ⇒ <code>&#x27;create&#x27;</code> \| <code>&#x27;update&#x27;</code> \| <code>&#x27;skip&#x27;</code>
4009
4064
  * [.retrieveForCache(_, __, [key])](#MobileKeyword.retrieveForCache) ⇒ <code>Promise.&lt;TYPE.MetadataTypeMapObj&gt;</code>
4010
- * [.retrieveAsTemplate(templateDir, name, templateVariables)](#MobileKeyword.retrieveAsTemplate) ⇒ <code>Promise.&lt;TYPE.MetadataTypeItemObj&gt;</code>
4011
- * [.create(MobileKeyword)](#MobileKeyword.create) ⇒ <code>Promise</code>
4065
+ * [.retrieveAsTemplate(templateDir, key, templateVariables)](#MobileKeyword.retrieveAsTemplate) ⇒ <code>Promise.&lt;TYPE.MetadataTypeItemObj&gt;</code>
4066
+ * [.create(metadata)](#MobileKeyword.create) ⇒ <code>Promise</code>
4012
4067
  * [.update(metadata)](#MobileKeyword.update) ⇒ <code>Promise</code>
4013
- * [.postRetrieveTasks(metadata)](#MobileKeyword.postRetrieveTasks) ⇒ <code>TYPE.CodeExtractItem</code> \| <code>TYPE.MetadataTypeItem</code>
4068
+ * [.postRetrieveTasks(metadata)](#MobileKeyword.postRetrieveTasks) ⇒ <code>TYPE.CodeExtractItem</code> \| <code>TYPE.MetadataTypeItem</code> \| <code>void</code>
4014
4069
  * [.prepExtractedCode(metadataScript)](#MobileKeyword.prepExtractedCode) ⇒ <code>Object</code>
4015
4070
  * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileKeyword.buildDefinitionForNested) ⇒ <code>Promise.&lt;Array.&lt;Array.&lt;string&gt;&gt;&gt;</code>
4016
4071
  * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#MobileKeyword.buildTemplateForNested) ⇒ <code>Promise.&lt;Array.&lt;Array.&lt;string&gt;&gt;&gt;</code>
@@ -4039,6 +4094,35 @@ Endpoint /legacy/v1/beta/mobile/keyword/ return all Mobile Keywords with all det
4039
4094
  | [__] | <code>void</code> | unused parameter |
4040
4095
  | [key] | <code>string</code> | customer key of single item to retrieve |
4041
4096
 
4097
+ <a name="MobileKeyword.parseResponseBody"></a>
4098
+
4099
+ ### MobileKeyword.parseResponseBody(body, [singleRetrieve]) ⇒ <code>TYPE.MetadataTypeMap</code>
4100
+ Builds map of metadata entries mapped to their keyfields
4101
+
4102
+ **Kind**: static method of [<code>MobileKeyword</code>](#MobileKeyword)
4103
+ **Returns**: <code>TYPE.MetadataTypeMap</code> - keyField => metadata map
4104
+
4105
+ | Param | Type | Description |
4106
+ | --- | --- | --- |
4107
+ | body | <code>object</code> | json of response body |
4108
+ | [singleRetrieve] | <code>string</code> \| <code>number</code> | key of single item to filter by |
4109
+
4110
+ <a name="MobileKeyword.createOrUpdate"></a>
4111
+
4112
+ ### MobileKeyword.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate) ⇒ <code>&#x27;create&#x27;</code> \| <code>&#x27;update&#x27;</code> \| <code>&#x27;skip&#x27;</code>
4113
+ helper for [upsert](#MetadataType.upsert)
4114
+
4115
+ **Kind**: static method of [<code>MobileKeyword</code>](#MobileKeyword)
4116
+ **Returns**: <code>&#x27;create&#x27;</code> \| <code>&#x27;update&#x27;</code> \| <code>&#x27;skip&#x27;</code> - action to take
4117
+
4118
+ | Param | Type | Description |
4119
+ | --- | --- | --- |
4120
+ | metadataMap | <code>TYPE.MetadataTypeMap</code> | list of metadata |
4121
+ | metadataKey | <code>string</code> | key of item we are looking at |
4122
+ | hasError | <code>boolean</code> | error flag from previous code |
4123
+ | metadataToUpdate | <code>Array.&lt;TYPE.MetadataTypeItemDiff&gt;</code> | list of items to update |
4124
+ | metadataToCreate | <code>Array.&lt;TYPE.MetadataTypeItem&gt;</code> | list of items to create |
4125
+
4042
4126
  <a name="MobileKeyword.retrieveForCache"></a>
4043
4127
 
4044
4128
  ### MobileKeyword.retrieveForCache(_, __, [key]) ⇒ <code>Promise.&lt;TYPE.MetadataTypeMapObj&gt;</code>
@@ -4055,8 +4139,8 @@ Retrieves event definition metadata for caching
4055
4139
 
4056
4140
  <a name="MobileKeyword.retrieveAsTemplate"></a>
4057
4141
 
4058
- ### MobileKeyword.retrieveAsTemplate(templateDir, name, templateVariables) ⇒ <code>Promise.&lt;TYPE.MetadataTypeItemObj&gt;</code>
4059
- Retrieve a specific keyword
4142
+ ### MobileKeyword.retrieveAsTemplate(templateDir, key, templateVariables) ⇒ <code>Promise.&lt;TYPE.MetadataTypeItemObj&gt;</code>
4143
+ retrieve an item and create a template from it
4060
4144
 
4061
4145
  **Kind**: static method of [<code>MobileKeyword</code>](#MobileKeyword)
4062
4146
  **Returns**: <code>Promise.&lt;TYPE.MetadataTypeItemObj&gt;</code> - Promise of metadata
@@ -4064,20 +4148,20 @@ Retrieve a specific keyword
4064
4148
  | Param | Type | Description |
4065
4149
  | --- | --- | --- |
4066
4150
  | templateDir | <code>string</code> | Directory where retrieved metadata directory will be saved |
4067
- | name | <code>string</code> | name of the metadata file |
4151
+ | key | <code>string</code> | name of the metadata file |
4068
4152
  | templateVariables | <code>TYPE.TemplateMap</code> | variables to be replaced in the metadata |
4069
4153
 
4070
4154
  <a name="MobileKeyword.create"></a>
4071
4155
 
4072
- ### MobileKeyword.create(MobileKeyword) ⇒ <code>Promise</code>
4073
- Creates a single Event Definition
4156
+ ### MobileKeyword.create(metadata) ⇒ <code>Promise</code>
4157
+ Creates a single item
4074
4158
 
4075
4159
  **Kind**: static method of [<code>MobileKeyword</code>](#MobileKeyword)
4076
4160
  **Returns**: <code>Promise</code> - Promise
4077
4161
 
4078
4162
  | Param | Type | Description |
4079
4163
  | --- | --- | --- |
4080
- | MobileKeyword | <code>TYPE.MetadataTypeItem</code> | a single Event Definition |
4164
+ | metadata | <code>TYPE.MetadataTypeItem</code> | a single item |
4081
4165
 
4082
4166
  <a name="MobileKeyword.update"></a>
4083
4167
 
@@ -4093,11 +4177,11 @@ Updates a single item
4093
4177
 
4094
4178
  <a name="MobileKeyword.postRetrieveTasks"></a>
4095
4179
 
4096
- ### MobileKeyword.postRetrieveTasks(metadata) ⇒ <code>TYPE.CodeExtractItem</code> \| <code>TYPE.MetadataTypeItem</code>
4180
+ ### MobileKeyword.postRetrieveTasks(metadata) ⇒ <code>TYPE.CodeExtractItem</code> \| <code>TYPE.MetadataTypeItem</code> \| <code>void</code>
4097
4181
  manages post retrieve steps
4098
4182
 
4099
4183
  **Kind**: static method of [<code>MobileKeyword</code>](#MobileKeyword)
4100
- **Returns**: <code>TYPE.CodeExtractItem</code> \| <code>TYPE.MetadataTypeItem</code> - Array with one metadata object and one ssjs string
4184
+ **Returns**: <code>TYPE.CodeExtractItem</code> \| <code>TYPE.MetadataTypeItem</code> \| <code>void</code> - Array with one metadata object and one ssjs string; or single metadata object; nothing if filtered
4101
4185
 
4102
4186
  | Param | Type | Description |
4103
4187
  | --- | --- | --- |
@@ -4503,6 +4587,7 @@ Query MetadataType
4503
4587
 
4504
4588
  * [Query](#Query) ⇐ [<code>MetadataType</code>](#MetadataType)
4505
4589
  * [.retrieve(retrieveDir, [_], [__], [key])](#Query.retrieve) ⇒ <code>Promise.&lt;{metadata: TYPE.QueryMap, type: string}&gt;</code>
4590
+ * [.execute(keyArr)](#Query.execute) ⇒ <code>Promise.&lt;boolean&gt;</code>
4506
4591
  * [.retrieveForCache()](#Query.retrieveForCache) ⇒ <code>Promise.&lt;{metadata: TYPE.QueryMap, type: string}&gt;</code>
4507
4592
  * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Query.retrieveAsTemplate) ⇒ <code>Promise.&lt;{metadata: Query, type: string}&gt;</code>
4508
4593
  * [.postRetrieveTasks(metadata)](#Query.postRetrieveTasks) ⇒ <code>TYPE.CodeExtractItem</code>
@@ -4532,6 +4617,18 @@ Retrieves Metadata of queries
4532
4617
  | [__] | <code>void</code> | unused parameter |
4533
4618
  | [key] | <code>string</code> | customer key of single item to retrieve |
4534
4619
 
4620
+ <a name="Query.execute"></a>
4621
+
4622
+ ### Query.execute(keyArr) ⇒ <code>Promise.&lt;boolean&gt;</code>
4623
+ a function to start query execution via API
4624
+
4625
+ **Kind**: static method of [<code>Query</code>](#Query)
4626
+ **Returns**: <code>Promise.&lt;boolean&gt;</code> - Returns true if all items were executed successfully, otherwise false
4627
+
4628
+ | Param | Type | Description |
4629
+ | --- | --- | --- |
4630
+ | keyArr | <code>Array.&lt;string&gt;</code> | customerkey of the metadata |
4631
+
4535
4632
  <a name="Query.retrieveForCache"></a>
4536
4633
 
4537
4634
  ### Query.retrieveForCache() ⇒ <code>Promise.&lt;{metadata: TYPE.QueryMap, type: string}&gt;</code>
@@ -5788,19 +5885,21 @@ CLI entry for SFMC DevTools
5788
5885
  * [.includesStartsWith(arr, search)](#Util.includesStartsWith) ⇒ <code>boolean</code>
5789
5886
  * [.includesStartsWithIndex(arr, search)](#Util.includesStartsWithIndex) ⇒ <code>number</code>
5790
5887
  * [.checkMarket(market, properties)](#Util.checkMarket) ⇒ <code>boolean</code>
5791
- * [.verifyMarketList(mlName, properties)](#Util.verifyMarketList) ⇒ <code>void</code>
5888
+ * [.verifyMarketList(mlName, properties)](#Util.verifyMarketList)
5792
5889
  * [.signalFatalError()](#Util.signalFatalError) ⇒ <code>void</code>
5793
5890
  * [.isTrue(attrValue)](#Util.isTrue) ⇒ <code>boolean</code>
5794
5891
  * [.isFalse(attrValue)](#Util.isFalse) ⇒ <code>boolean</code>
5795
5892
  * [._isValidType(selectedType, [handleOutside])](#Util._isValidType) ⇒ <code>boolean</code>
5796
5893
  * [.getTypeAndSubType(selectedType)](#Util.getTypeAndSubType) ⇒ <code>Array.&lt;string&gt;</code>
5797
5894
  * [.getRetrieveTypeChoices()](#Util.getRetrieveTypeChoices) ⇒ <code>Array.&lt;TYPE.SupportedMetadataTypes&gt;</code>
5895
+ * [._createNewLoggerTransport([noLogFile])](#Util._createNewLoggerTransport) ⇒ <code>object</code>
5896
+ * [.startLogger([restart], [noLogFile])](#Util.startLogger) ⇒ <code>void</code>
5798
5897
  * [.metadataLogger(level, type, method, payload, [source])](#Util.metadataLogger) ⇒ <code>void</code>
5799
5898
  * [.replaceByObject(str, obj)](#Util.replaceByObject) ⇒ <code>string</code> \| <code>object</code>
5800
5899
  * [.inverseGet(objs, val)](#Util.inverseGet) ⇒ <code>string</code>
5801
5900
  * [.getMetadataHierachy(metadataTypes)](#Util.getMetadataHierachy) ⇒ <code>Object.&lt;string, Array.&lt;string&gt;&gt;</code>
5802
5901
  * [.resolveObjPath(path, obj)](#Util.resolveObjPath) ⇒ <code>any</code>
5803
- * [.execSync(cmd, [args], [hideOutput])](#Util.execSync) ⇒ <code>string</code>
5902
+ * [.execSync(cmd, [args], [hideOutput])](#Util.execSync) ⇒ <code>string</code> \| <code>void</code>
5804
5903
  * [.templateSearchResult(results, keyToSearch, searchValue)](#Util.templateSearchResult) ⇒ <code>TYPE.MetadataTypeItem</code>
5805
5904
  * [.setLoggingLevel(argv)](#Util.setLoggingLevel) ⇒ <code>void</code>
5806
5905
  * [.logBeta(type)](#Util.logBeta)
@@ -5874,11 +5973,10 @@ check if a market name exists in current mcdev config
5874
5973
 
5875
5974
  <a name="Util.verifyMarketList"></a>
5876
5975
 
5877
- ### Util.verifyMarketList(mlName, properties) ⇒ <code>void</code>
5976
+ ### Util.verifyMarketList(mlName, properties)
5878
5977
  ensure provided MarketList exists and it's content including markets and BUs checks out
5879
5978
 
5880
5979
  **Kind**: static method of [<code>Util</code>](#Util)
5881
- **Returns**: <code>void</code> - throws errors if problems were found
5882
5980
 
5883
5981
  | Param | Type | Description |
5884
5982
  | --- | --- | --- |
@@ -5947,6 +6045,30 @@ helper for getDefaultProperties()
5947
6045
 
5948
6046
  **Kind**: static method of [<code>Util</code>](#Util)
5949
6047
  **Returns**: <code>Array.&lt;TYPE.SupportedMetadataTypes&gt;</code> - type choices
6048
+ <a name="Util._createNewLoggerTransport"></a>
6049
+
6050
+ ### Util.\_createNewLoggerTransport([noLogFile]) ⇒ <code>object</code>
6051
+ wrapper around our standard winston logging to console and logfile
6052
+
6053
+ **Kind**: static method of [<code>Util</code>](#Util)
6054
+ **Returns**: <code>object</code> - initiated logger for console and file
6055
+
6056
+ | Param | Type | Default | Description |
6057
+ | --- | --- | --- | --- |
6058
+ | [noLogFile] | <code>boolean</code> | <code>false</code> | optional flag to indicate if we should log to file; CLI logs are always on |
6059
+
6060
+ <a name="Util.startLogger"></a>
6061
+
6062
+ ### Util.startLogger([restart], [noLogFile]) ⇒ <code>void</code>
6063
+ initiate winston logger
6064
+
6065
+ **Kind**: static method of [<code>Util</code>](#Util)
6066
+
6067
+ | Param | Type | Default | Description |
6068
+ | --- | --- | --- | --- |
6069
+ | [restart] | <code>boolean</code> | <code>false</code> | if true, logger will be restarted; otherwise, an existing logger will be used |
6070
+ | [noLogFile] | <code>boolean</code> | <code>false</code> | if false, logger will log to file; otherwise, only to console |
6071
+
5950
6072
  <a name="Util.metadataLogger"></a>
5951
6073
 
5952
6074
  ### Util.metadataLogger(level, type, method, payload, [source]) ⇒ <code>void</code>
@@ -6016,11 +6138,11 @@ let's you dynamically walk down an object and get a value
6016
6138
 
6017
6139
  <a name="Util.execSync"></a>
6018
6140
 
6019
- ### Util.execSync(cmd, [args], [hideOutput]) ⇒ <code>string</code>
6141
+ ### Util.execSync(cmd, [args], [hideOutput]) ⇒ <code>string</code> \| <code>void</code>
6020
6142
  helper to run other commands as if run manually by user
6021
6143
 
6022
6144
  **Kind**: static method of [<code>Util</code>](#Util)
6023
- **Returns**: <code>string</code> - output of command if hideOutput is true
6145
+ **Returns**: <code>string</code> \| <code>void</code> - output of command if hideOutput is true
6024
6146
 
6025
6147
  | Param | Type | Description |
6026
6148
  | --- | --- | --- |
@@ -7653,19 +7775,21 @@ Util that contains logger and simple util methods
7653
7775
  * [.includesStartsWith(arr, search)](#Util.includesStartsWith) ⇒ <code>boolean</code>
7654
7776
  * [.includesStartsWithIndex(arr, search)](#Util.includesStartsWithIndex) ⇒ <code>number</code>
7655
7777
  * [.checkMarket(market, properties)](#Util.checkMarket) ⇒ <code>boolean</code>
7656
- * [.verifyMarketList(mlName, properties)](#Util.verifyMarketList) ⇒ <code>void</code>
7778
+ * [.verifyMarketList(mlName, properties)](#Util.verifyMarketList)
7657
7779
  * [.signalFatalError()](#Util.signalFatalError) ⇒ <code>void</code>
7658
7780
  * [.isTrue(attrValue)](#Util.isTrue) ⇒ <code>boolean</code>
7659
7781
  * [.isFalse(attrValue)](#Util.isFalse) ⇒ <code>boolean</code>
7660
7782
  * [._isValidType(selectedType, [handleOutside])](#Util._isValidType) ⇒ <code>boolean</code>
7661
7783
  * [.getTypeAndSubType(selectedType)](#Util.getTypeAndSubType) ⇒ <code>Array.&lt;string&gt;</code>
7662
7784
  * [.getRetrieveTypeChoices()](#Util.getRetrieveTypeChoices) ⇒ <code>Array.&lt;TYPE.SupportedMetadataTypes&gt;</code>
7785
+ * [._createNewLoggerTransport([noLogFile])](#Util._createNewLoggerTransport) ⇒ <code>object</code>
7786
+ * [.startLogger([restart], [noLogFile])](#Util.startLogger) ⇒ <code>void</code>
7663
7787
  * [.metadataLogger(level, type, method, payload, [source])](#Util.metadataLogger) ⇒ <code>void</code>
7664
7788
  * [.replaceByObject(str, obj)](#Util.replaceByObject) ⇒ <code>string</code> \| <code>object</code>
7665
7789
  * [.inverseGet(objs, val)](#Util.inverseGet) ⇒ <code>string</code>
7666
7790
  * [.getMetadataHierachy(metadataTypes)](#Util.getMetadataHierachy) ⇒ <code>Object.&lt;string, Array.&lt;string&gt;&gt;</code>
7667
7791
  * [.resolveObjPath(path, obj)](#Util.resolveObjPath) ⇒ <code>any</code>
7668
- * [.execSync(cmd, [args], [hideOutput])](#Util.execSync) ⇒ <code>string</code>
7792
+ * [.execSync(cmd, [args], [hideOutput])](#Util.execSync) ⇒ <code>string</code> \| <code>void</code>
7669
7793
  * [.templateSearchResult(results, keyToSearch, searchValue)](#Util.templateSearchResult) ⇒ <code>TYPE.MetadataTypeItem</code>
7670
7794
  * [.setLoggingLevel(argv)](#Util.setLoggingLevel) ⇒ <code>void</code>
7671
7795
  * [.logBeta(type)](#Util.logBeta)
@@ -7739,11 +7863,10 @@ check if a market name exists in current mcdev config
7739
7863
 
7740
7864
  <a name="Util.verifyMarketList"></a>
7741
7865
 
7742
- ### Util.verifyMarketList(mlName, properties) ⇒ <code>void</code>
7866
+ ### Util.verifyMarketList(mlName, properties)
7743
7867
  ensure provided MarketList exists and it's content including markets and BUs checks out
7744
7868
 
7745
7869
  **Kind**: static method of [<code>Util</code>](#Util)
7746
- **Returns**: <code>void</code> - throws errors if problems were found
7747
7870
 
7748
7871
  | Param | Type | Description |
7749
7872
  | --- | --- | --- |
@@ -7812,6 +7935,30 @@ helper for getDefaultProperties()
7812
7935
 
7813
7936
  **Kind**: static method of [<code>Util</code>](#Util)
7814
7937
  **Returns**: <code>Array.&lt;TYPE.SupportedMetadataTypes&gt;</code> - type choices
7938
+ <a name="Util._createNewLoggerTransport"></a>
7939
+
7940
+ ### Util.\_createNewLoggerTransport([noLogFile]) ⇒ <code>object</code>
7941
+ wrapper around our standard winston logging to console and logfile
7942
+
7943
+ **Kind**: static method of [<code>Util</code>](#Util)
7944
+ **Returns**: <code>object</code> - initiated logger for console and file
7945
+
7946
+ | Param | Type | Default | Description |
7947
+ | --- | --- | --- | --- |
7948
+ | [noLogFile] | <code>boolean</code> | <code>false</code> | optional flag to indicate if we should log to file; CLI logs are always on |
7949
+
7950
+ <a name="Util.startLogger"></a>
7951
+
7952
+ ### Util.startLogger([restart], [noLogFile]) ⇒ <code>void</code>
7953
+ initiate winston logger
7954
+
7955
+ **Kind**: static method of [<code>Util</code>](#Util)
7956
+
7957
+ | Param | Type | Default | Description |
7958
+ | --- | --- | --- | --- |
7959
+ | [restart] | <code>boolean</code> | <code>false</code> | if true, logger will be restarted; otherwise, an existing logger will be used |
7960
+ | [noLogFile] | <code>boolean</code> | <code>false</code> | if false, logger will log to file; otherwise, only to console |
7961
+
7815
7962
  <a name="Util.metadataLogger"></a>
7816
7963
 
7817
7964
  ### Util.metadataLogger(level, type, method, payload, [source]) ⇒ <code>void</code>
@@ -7881,11 +8028,11 @@ let's you dynamically walk down an object and get a value
7881
8028
 
7882
8029
  <a name="Util.execSync"></a>
7883
8030
 
7884
- ### Util.execSync(cmd, [args], [hideOutput]) ⇒ <code>string</code>
8031
+ ### Util.execSync(cmd, [args], [hideOutput]) ⇒ <code>string</code> \| <code>void</code>
7885
8032
  helper to run other commands as if run manually by user
7886
8033
 
7887
8034
  **Kind**: static method of [<code>Util</code>](#Util)
7888
- **Returns**: <code>string</code> - output of command if hideOutput is true
8035
+ **Returns**: <code>string</code> \| <code>void</code> - output of command if hideOutput is true
7889
8036
 
7890
8037
  | Param | Type | Description |
7891
8038
  | --- | --- | --- |
@@ -8019,6 +8166,32 @@ helper to convert CSVs into an array. if only one value was given, it's also ret
8019
8166
  | --- | --- | --- |
8020
8167
  | csv | <code>string</code> | potentially comma-separated value or null |
8021
8168
 
8169
+ <a name="Automation."></a>
8170
+
8171
+ ## Automation.(metadataMap, key) ⇒ <code>Promise.&lt;void&gt;</code>
8172
+ helper for [postDeployTasks](#Automation.postDeployTasks)
8173
+
8174
+ **Kind**: global function
8175
+ **Returns**: <code>Promise.&lt;void&gt;</code> - -
8176
+
8177
+ | Param | Type | Description |
8178
+ | --- | --- | --- |
8179
+ | metadataMap | <code>TYPE.AutomationMap</code> | metadata mapped by their keyField |
8180
+ | key | <code>string</code> | current customer key |
8181
+
8182
+ <a name="Automation."></a>
8183
+
8184
+ ## Automation.(metadataMap, originalMetadataMap, key)
8185
+ helper for [postDeployTasks](postDeployTasks)
8186
+
8187
+ **Kind**: global function
8188
+
8189
+ | Param | Type | Description |
8190
+ | --- | --- | --- |
8191
+ | metadataMap | <code>TYPE.AutomationMap</code> | metadata mapped by their keyField |
8192
+ | originalMetadataMap | <code>TYPE.AutomationMap</code> | metadata to be updated (contains additioanl fields) |
8193
+ | key | <code>string</code> | current customer key |
8194
+
8022
8195
  <a name="getUserName"></a>
8023
8196
 
8024
8197
  ## getUserName(userList, item, fieldname) ⇒ <code>string</code>
@@ -8044,19 +8217,6 @@ Returns an SDK instance to be used for API calls
8044
8217
  | sessionKey | <code>string</code> | key for specific BU |
8045
8218
  | authObject | <code>TYPE.AuthObject</code> | credentials for specific BU |
8046
8219
 
8047
- <a name="createNewLoggerTransport"></a>
8048
-
8049
- ## createNewLoggerTransport() ⇒ <code>object</code>
8050
- wrapper around our standard winston logging to console and logfile
8051
-
8052
- **Kind**: global function
8053
- **Returns**: <code>object</code> - initiated logger for console and file
8054
- <a name="startLogger"></a>
8055
-
8056
- ## startLogger() ⇒ <code>void</code>
8057
- initiate winston logger
8058
-
8059
- **Kind**: global function
8060
8220
  <a name="TypeKeyCombo"></a>
8061
8221
 
8062
8222
  ## TypeKeyCombo : <code>Object.&lt;string, string&gt;</code>
package/lib/Deployer.js CHANGED
@@ -18,7 +18,6 @@ class Deployer {
18
18
  /**
19
19
  * Creates a Deployer, uses v2 auth if v2AuthOptions are passed.
20
20
  *
21
- *
22
21
  * @param {TYPE.Mcdevrc} properties General configuration to be used in retrieve
23
22
  * @param {TYPE.BuObject} buObject properties for auth
24
23
  */
@@ -104,7 +103,7 @@ class Deployer {
104
103
  buMultiMetadataTypeMap[cred + '/' + bu] = multiMetadataTypeMap;
105
104
  counter_credBu++;
106
105
  Util.logger.info('');
107
- Util.restartLogger();
106
+ Util.startLogger(true);
108
107
  }
109
108
  } else {
110
109
  // anything but "*" passed in
@@ -158,7 +157,7 @@ class Deployer {
158
157
  buMultiMetadataTypeMap[cred + '/' + buPath] = multiMetadataTypeMap;
159
158
  counter_credBu++;
160
159
  Util.logger.info('');
161
- Util.restartLogger();
160
+ Util.startLogger(true);
162
161
  }
163
162
  Util.logger.info(`\n :: ${counter_credBu} BUs for ${cred}\n`);
164
163
  } else {
@@ -388,7 +387,7 @@ class Deployer {
388
387
  const allFolders = Object.keys(metadata[metadataType])
389
388
  .filter(
390
389
  // filter out root folders (which would not have a slash in their path)
391
- (key) => metadata[metadataType][key].r__folder_Path.includes('/')
390
+ (key) => metadata[metadataType][key].r__folder_Path?.includes('/')
392
391
  )
393
392
  .filter(
394
393
  // filter out dataExtension folders other than standard & shared (--> synchronized / salesforce are not allowed)