mcdev 7.10.1 → 8.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 (144) hide show
  1. package/.github/ISSUE_TEMPLATE/bug.yml +1 -0
  2. package/.github/workflows/code-test.yml +8 -100
  3. package/@types/lib/Deployer.d.ts.map +1 -1
  4. package/@types/lib/Retriever.d.ts.map +1 -1
  5. package/@types/lib/index.d.ts +16 -4
  6. package/@types/lib/index.d.ts.map +1 -1
  7. package/@types/lib/metadataTypes/Asset.d.ts +45 -8
  8. package/@types/lib/metadataTypes/Asset.d.ts.map +1 -1
  9. package/@types/lib/metadataTypes/Automation.d.ts +13 -4
  10. package/@types/lib/metadataTypes/Automation.d.ts.map +1 -1
  11. package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -1
  12. package/@types/lib/metadataTypes/DataExtensionField.d.ts.map +1 -1
  13. package/@types/lib/metadataTypes/Event.d.ts +6 -0
  14. package/@types/lib/metadataTypes/Event.d.ts.map +1 -1
  15. package/@types/lib/metadataTypes/Folder.d.ts +49 -12
  16. package/@types/lib/metadataTypes/Folder.d.ts.map +1 -1
  17. package/@types/lib/metadataTypes/ImportFile.d.ts +14 -0
  18. package/@types/lib/metadataTypes/ImportFile.d.ts.map +1 -1
  19. package/@types/lib/metadataTypes/Journey.d.ts +166 -6
  20. package/@types/lib/metadataTypes/Journey.d.ts.map +1 -1
  21. package/@types/lib/metadataTypes/MetadataType.d.ts +5 -3
  22. package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -1
  23. package/@types/lib/metadataTypes/definitions/Asset.definition.d.ts +45 -8
  24. package/@types/lib/metadataTypes/definitions/Automation.definition.d.ts +6 -0
  25. package/@types/lib/metadataTypes/definitions/Event.definition.d.ts +6 -0
  26. package/@types/lib/metadataTypes/definitions/Folder.definition.d.ts +49 -12
  27. package/@types/lib/metadataTypes/definitions/ImportFile.definition.d.ts +3 -0
  28. package/@types/lib/metadataTypes/definitions/Journey.definition.d.ts +159 -6
  29. package/@types/lib/util/cache.d.ts +2 -1
  30. package/@types/lib/util/cache.d.ts.map +1 -1
  31. package/@types/lib/util/devops.d.ts.map +1 -1
  32. package/@types/types/mcdev.d.d.ts +16 -0
  33. package/@types/types/mcdev.d.d.ts.map +1 -1
  34. package/boilerplate/files/.vscode/settings.json +5 -0
  35. package/eslint.config.js +2 -2
  36. package/lib/Deployer.js +3 -0
  37. package/lib/Retriever.js +8 -2
  38. package/lib/cli.js +29 -0
  39. package/lib/index.js +25 -28
  40. package/lib/metadataTypes/Asset.js +126 -10
  41. package/lib/metadataTypes/Automation.js +135 -40
  42. package/lib/metadataTypes/DataExtension.js +0 -10
  43. package/lib/metadataTypes/DataExtensionField.js +9 -15
  44. package/lib/metadataTypes/Event.js +42 -19
  45. package/lib/metadataTypes/Folder.js +98 -12
  46. package/lib/metadataTypes/ImportFile.js +90 -29
  47. package/lib/metadataTypes/Journey.js +182 -23
  48. package/lib/metadataTypes/MetadataType.js +38 -12
  49. package/lib/metadataTypes/definitions/Asset.definition.js +196 -142
  50. package/lib/metadataTypes/definitions/Automation.definition.js +6 -0
  51. package/lib/metadataTypes/definitions/DataExtension.definition.js +7 -6
  52. package/lib/metadataTypes/definitions/Event.definition.js +6 -0
  53. package/lib/metadataTypes/definitions/Folder.definition.js +69 -22
  54. package/lib/metadataTypes/definitions/ImportFile.definition.js +3 -0
  55. package/lib/metadataTypes/definitions/Journey.definition.js +165 -11
  56. package/lib/util/cache.js +24 -5
  57. package/lib/util/devops.js +20 -5
  58. package/package.json +16 -17
  59. package/test/general.test.js +8 -8
  60. package/test/mockRoot/.mcdev-validations.js +2 -3
  61. package/test/mockRoot/.mcdevrc.json +1 -1
  62. package/test/mockRoot/deploy/testInstance/testBU/importFile/testExisting_importFile.importFile-meta.json +2 -1
  63. package/test/mockRoot/deploy/testInstance/testBU/importFile/testNew_importFile.importFile-meta.json +2 -1
  64. package/test/resourceFactory.js +31 -5
  65. package/test/resources/1111111/dataExtension/update-expected.json +1 -1
  66. package/test/resources/9999999/asset/test_coderesource_js-retrieve-expected.js +1 -0
  67. package/test/resources/9999999/asset/test_coderesource_js-retrieve-expected.json +47 -0
  68. package/test/resources/9999999/asset/test_coderesource_json-retrieve-expected.json +47 -0
  69. package/test/resources/9999999/asset/test_coderesource_json-retrieve-expected.jsonc +1 -0
  70. package/test/resources/9999999/asset/test_coderesource_xml-retrieve-expected.json +46 -0
  71. package/test/resources/9999999/asset/test_coderesource_xml-retrieve-expected.xml +1 -0
  72. package/test/resources/9999999/asset/test_interactivecontent-retrieve-expected.json +43 -0
  73. package/test/resources/9999999/asset/test_landingpage-retrieve-expected.json +42 -0
  74. package/test/resources/9999999/asset/test_microsite-retrieve-expected.json +43 -0
  75. package/test/resources/9999999/asset/v1/content/assets/9451/get-response.json +61 -0
  76. package/test/resources/9999999/asset/v1/content/assets/9456/get-response.json +56 -0
  77. package/test/resources/9999999/asset/v1/content/assets/9458/get-response.json +56 -0
  78. package/test/resources/9999999/asset/v1/content/assets/9460/get-response.json +59 -0
  79. package/test/resources/9999999/asset/v1/content/assets/9463/get-response.json +61 -0
  80. package/test/resources/9999999/asset/v1/content/assets/9465/get-response.json +54 -0
  81. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN1,3,4,14,15,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,205,206,210,211,212,213,214,215,216,217,218,219,220,221,222.json +94 -1
  82. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN219,220,221,222,223,224,225,226,227,228,230,232,240,241,242,243,244,245.json +168 -0
  83. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN240,241,242,243,244,245.json +144 -0
  84. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN246,247,248,249.json +132 -0
  85. package/test/resources/9999999/dataExtension/update-callout-afterCreatedViaEvent-expected.xml +1 -1
  86. package/test/resources/9999999/dataFolder/{retrieve-ContentTypeINasset,asset-sha,automatio,dataexten,hidden,journey,list,mysubs,publicati,queryacti,salesforc,shared_da,shared_da,shared_sa,ssjsactiv,synchroni,triggered,triggered,useriniti-response.xml → retrieve-ContentTypeINasset,asset-sha,automatio,cloudpage,dataexten,hidden,journey,list,mysubs,publicati,queryacti,salesforc,shared_da,shared_da,shared_sa,ssjsactiv,synchroni,triggered,triggered,useriniti-response.xml} +44 -1
  87. package/test/resources/9999999/dataFolder/{retrieve-ContentTypeINasset,asset-sha,automatio,dataexten,hidden,journey,list,mysubs,publicati,queryacti,salesforc,shared_da,shared_da,shared_sa,ssjsactiv,synchroni,useriniti-response.xml → retrieve-ContentTypeINasset,asset-sha,automatio,cloudpage,dataexten,hidden,journey,list,mysubs,publicati,queryacti,salesforc,shared_da,shared_da,shared_sa,ssjsactiv,synchroni,useriniti-response.xml} +44 -0
  88. package/test/resources/9999999/dataFolder/{retrieve-ContentTypeINasset,asset-shared,dataextension,hidden,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml → retrieve-ContentTypeINasset,asset-shared,cloudpages,dataextension,hidden,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml} +44 -0
  89. package/test/resources/9999999/dataFolder/{retrieve-ContentTypeINasset,asset-shared,journey-response.xml → retrieve-ContentTypeINasset,asset-shared,cloudpages,journey-response.xml} +44 -0
  90. package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,cloudpages,ssjsactivity-response.xml +136 -0
  91. package/test/resources/9999999/dataFolder/{retrieve-ContentTypeINasset,asset-shared,ssjsactivity-response.xml → retrieve-ContentTypeINasset,asset-shared,cloudpages-response.xml} +29 -7
  92. package/test/resources/9999999/dataFolder/{+retrieve-response.xml → retrieve-response.xml} +23 -0
  93. package/test/resources/9999999/dataFolder/update-response.xml +31 -0
  94. package/test/resources/9999999/event/build-expected.json +0 -1
  95. package/test/resources/9999999/event/get-automation-expected.json +0 -1
  96. package/test/resources/9999999/event/get-expected.json +0 -2
  97. package/test/resources/9999999/event/get-published-expected.json +0 -2
  98. package/test/resources/9999999/event/post_withExistingDE-expected.json +0 -2
  99. package/test/resources/9999999/event/post_withSchema-callout-expected.json +3 -0
  100. package/test/resources/9999999/event/post_withSchema-expected.json +0 -2
  101. package/test/resources/9999999/event/put-callout-expected.json +3 -0
  102. package/test/resources/9999999/event/put-expected.json +0 -2
  103. package/test/resources/9999999/event/template-expected.json +0 -1
  104. package/test/resources/9999999/folder-deploy/Data Extensions/testExisting_folder.folder-meta.json +9 -0
  105. package/test/resources/9999999/importFile/get-dataImport-expected.json +1 -1
  106. package/test/resources/9999999/importFile/get-expected.json +4 -1
  107. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/audit/all/get-response-versionNumber=1.json +86 -0
  108. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/audit/all/get-response-versionNumber=2.json +101 -0
  109. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/audit/all/get-response-versionNumber=3.json +86 -0
  110. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/delete-response-versionNumber=1.txt +1 -0
  111. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/get-response-versionNumber=1.json +461 -0
  112. package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/get-response-versionNumber=3.json +461 -0
  113. package/test/resources/9999999/interaction/v1/interactions/dsfdsafdsa-922c-4568-85a5-e5cc77efc3be/audit/all/get-response-versionNumber=1.json +38 -0
  114. package/test/resources/9999999/interaction/v1/interactions/dsfdsafdsa-922c-4568-85a5-e5cc77efc3be/audit/all/get-response-versionNumber=2.json +53 -0
  115. package/test/resources/9999999/interaction/v1/interactions/get-response.json +2 -2
  116. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Multistep/get-response-versionNumber=1.json +461 -0
  117. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Quicksend/get-response-versionNumber=1.json +253 -0
  118. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail/get-response-versionNumber=1.json +219 -0
  119. package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail_notPublished/get-response-versionNumber=1.json +226 -0
  120. package/test/resources/9999999/interaction/v1/interactions/publishAsync/0175b971-71a3-4d8e-98ac-48121f3fbf4f/post-response-versionNumber=3.json +4 -0
  121. package/test/resources/9999999/journey/build-expected.json +0 -1
  122. package/test/resources/9999999/journey/create-transactionaEmail-publish-expected.json +0 -1
  123. package/test/resources/9999999/journey/get-multistep-expected.json +0 -4
  124. package/test/resources/9999999/journey/get-published-expected.json +0 -1
  125. package/test/resources/9999999/journey/get-quicksend-expected.json +0 -1
  126. package/test/resources/9999999/journey/get-quicksend-rcb-id-expected.json +0 -1
  127. package/test/resources/9999999/journey/get-quicksend-rcb-key-expected.json +0 -1
  128. package/test/resources/9999999/journey/get-quicksend-rcb-name-expected.json +0 -1
  129. package/test/resources/9999999/journey/get-transactionalEmail-expected.json +0 -1
  130. package/test/resources/9999999/journey/template-expected.json +0 -1
  131. package/test/resources/9999999/query/patch-expected.sql +1 -1
  132. package/test/resources/9999999/query/post-expected.sql +1 -1
  133. package/test/resources/9999999/script/patch-expected.ssjs +1 -0
  134. package/test/type.asset.test.js +123 -13
  135. package/test/type.automation.test.js +3 -1
  136. package/test/type.folder.test.js +12 -2
  137. package/test/type.journey.test.js +130 -1
  138. package/test/type.script.test.js +1 -0
  139. package/test/type.senderProfile.test.js +1 -0
  140. package/test/utils.js +2 -0
  141. package/types/mcdev.d.js +4 -0
  142. package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN219,220,221,222,223,224,225,226,227,228,230,232.json +0 -32
  143. /package/test/resources/9999999/dataFolder/{+retrieve-QAA-response.xml → retrieve-QAA-response.xml} +0 -0
  144. /package/test/resources/9999999/interaction/v1/interactions/publishAsync/0175b971-71a3-4d8e-98ac-48121f3fbf4f/{post-response.json → post-response-versionNumber=1.json} +0 -0
@@ -7,6 +7,7 @@ export default {
7
7
  'asset',
8
8
  'automations',
9
9
  'contextual_suppression_list',
10
+ 'cloudpages',
10
11
  'dataextension',
11
12
  'filteractivity',
12
13
  'filterdefinition',
@@ -37,6 +38,7 @@ export default {
37
38
  // lower-case values!
38
39
  'asset',
39
40
  'automations',
41
+ 'cloudpages',
40
42
  'dataextension',
41
43
  'filteractivity',
42
44
  'filterdefinition',
@@ -54,7 +56,8 @@ export default {
54
56
  'triggered_send_journeybuilder',
55
57
  'triggered_send',
56
58
  ],
57
- deployFolderTypesRest: ['automations', 'journey', 'triggered_send_journeybuilder'],
59
+ deployFolderTypesEmailRest: ['automations', 'journey', 'triggered_send_journeybuilder'],
60
+ deployFolderTypesAssetRest: ['cloudpages'],
58
61
  deployFolderBlacklist: [
59
62
  // lower-case values!
60
63
  'shared data extensions',
@@ -125,6 +128,13 @@ export default {
125
128
  retrieving: true,
126
129
  template: false,
127
130
  },
131
+ description: {
132
+ // used for cloudpages folders only
133
+ isCreateable: true,
134
+ isUpdateable: true,
135
+ retrieving: false,
136
+ template: false,
137
+ },
128
138
  CreatedDate: {
129
139
  isCreateable: false,
130
140
  isUpdateable: false,
@@ -143,6 +153,20 @@ export default {
143
153
  retrieving: true,
144
154
  template: true,
145
155
  },
156
+ categoryType: {
157
+ // REST only, used for cloudpages folders only
158
+ isCreateable: true,
159
+ isUpdateable: true,
160
+ retrieving: false,
161
+ template: false,
162
+ },
163
+ catType: {
164
+ // REST only, equal to SOAP's ContentType
165
+ isCreateable: true,
166
+ isUpdateable: false,
167
+ retrieving: false,
168
+ template: false,
169
+ },
146
170
  IsActive: {
147
171
  isCreateable: true,
148
172
  isUpdateable: true,
@@ -155,24 +179,54 @@ export default {
155
179
  retrieving: true,
156
180
  template: true,
157
181
  },
182
+ editable: {
183
+ // used for cloudpages folders only
184
+ isCreateable: true,
185
+ isUpdateable: true,
186
+ retrieving: false,
187
+ template: false,
188
+ },
158
189
  AllowChildren: {
159
190
  isCreateable: true,
160
191
  isUpdateable: true,
161
192
  retrieving: true,
162
193
  template: true,
163
194
  },
195
+ extendable: {
196
+ // used for cloudpages folders only
197
+ isCreateable: true,
198
+ isUpdateable: true,
199
+ retrieving: false,
200
+ template: false,
201
+ },
164
202
  ObjectID: {
165
203
  isCreateable: false,
166
204
  isUpdateable: false,
167
205
  retrieving: false,
168
206
  template: false,
169
207
  },
208
+ objectId: {
209
+ // REST only, equal to SOAP's ObjectID
210
+ // automation/journey folders only
211
+ isCreateable: false,
212
+ isUpdateable: false,
213
+ retrieving: false,
214
+ template: false,
215
+ },
170
216
  Name: {
171
217
  isCreateable: true,
172
218
  isUpdateable: true,
173
219
  retrieving: true,
174
220
  template: true,
175
221
  },
222
+ name: {
223
+ // REST only, equal to SOAP's Name
224
+ // cloudpages and automation/journey folders only
225
+ isCreateable: true,
226
+ isUpdateable: true,
227
+ retrieving: false,
228
+ template: false,
229
+ },
176
230
  'ParentFolder.CustomerKey': {
177
231
  isCreateable: false,
178
232
  isUpdateable: false,
@@ -185,6 +239,20 @@ export default {
185
239
  retrieving: true,
186
240
  template: false,
187
241
  },
242
+ parentCatId: {
243
+ // REST only, used for journey/automation folders, equal to SOAP's ParentFolder.ID
244
+ isCreateable: true,
245
+ isUpdateable: true,
246
+ retrieving: false,
247
+ template: false,
248
+ },
249
+ parentId: {
250
+ // REST only, used for cloudpages folders, equal to SOAP's ParentFolder.ID
251
+ isCreateable: true,
252
+ isUpdateable: true,
253
+ retrieving: false,
254
+ template: false,
255
+ },
188
256
  'ParentFolder.PartnerKey': {
189
257
  isCreateable: false,
190
258
  isUpdateable: false,
@@ -221,26 +289,5 @@ export default {
221
289
  retrieving: false,
222
290
  template: false,
223
291
  },
224
- catType: {
225
- // REST only, equal to SOAP's ContentType
226
- isCreateable: true,
227
- isUpdateable: false,
228
- retrieving: false,
229
- template: false,
230
- },
231
- name: {
232
- // REST only, equal to SOAP's ParentFolder.ID
233
- isCreateable: true,
234
- isUpdateable: false,
235
- retrieving: false,
236
- template: false,
237
- },
238
- parentCatId: {
239
- // REST only, equal to SOAP's ParentFolder.ID
240
- isCreateable: true,
241
- isUpdateable: false,
242
- retrieving: false,
243
- template: false,
244
- },
245
292
  },
246
293
  };
@@ -14,6 +14,7 @@ export default {
14
14
  List: 13,
15
15
  SMS: 584,
16
16
  Push: 613,
17
+ WhatsApp: 2600,
17
18
  },
18
19
  hasExtended: true,
19
20
  idField: 'importDefinitionId',
@@ -25,6 +26,8 @@ export default {
25
26
  lastmodDateField: 'modifiedDate',
26
27
  lastmodNameField: null,
27
28
  restPagination: true,
29
+ restPageSize: 100,
30
+ restConcurrentLimit: 2,
28
31
  subscriberImportTypeMapping: {
29
32
  DataExtension: 255,
30
33
  Email: 0,
@@ -79,10 +79,10 @@ export default {
79
79
  template: true,
80
80
  },
81
81
  'activities[].id': {
82
- isCreateable: true,
83
- isUpdateable: true,
84
- retrieving: true,
85
- template: true,
82
+ isCreateable: false,
83
+ isUpdateable: false,
84
+ retrieving: false,
85
+ template: false,
86
86
  },
87
87
  'activities[].key': {
88
88
  isCreateable: true,
@@ -112,6 +112,147 @@ export default {
112
112
  skipValidation: true,
113
113
  },
114
114
  'activities[].arguments': {
115
+ isCreateable: true,
116
+ isUpdateable: true,
117
+ retrieving: true,
118
+ template: true,
119
+ },
120
+ 'activities[].arguments.waitEndDateAttributeDataBound': {
121
+ isCreateable: true,
122
+ isUpdateable: true,
123
+ retrieving: true,
124
+ template: true,
125
+ },
126
+ 'activities[].arguments.waitDefinitionId': {
127
+ isCreateable: false,
128
+ isUpdateable: false,
129
+ retrieving: false,
130
+ template: false,
131
+ },
132
+ 'activities[].arguments.waitForEventId': {
133
+ isCreateable: true,
134
+ isUpdateable: true,
135
+ retrieving: true,
136
+ template: true,
137
+ },
138
+ 'activities[].arguments.executionMode': {
139
+ isCreateable: true,
140
+ isUpdateable: true,
141
+ retrieving: true,
142
+ template: true,
143
+ },
144
+ 'activities[].arguments.startActivityKey': {
145
+ isCreateable: true,
146
+ isUpdateable: true,
147
+ retrieving: true,
148
+ template: true,
149
+ },
150
+ 'activities[].arguments.waitQueueId': {
151
+ isCreateable: true,
152
+ isUpdateable: true,
153
+ retrieving: true,
154
+ template: true,
155
+ },
156
+ 'activities[].arguments.activityId': {
157
+ isCreateable: true,
158
+ isUpdateable: true,
159
+ retrieving: true,
160
+ template: true,
161
+ },
162
+ 'activities[].arguments.definitionId': {
163
+ isCreateable: true,
164
+ isUpdateable: true,
165
+ retrieving: true,
166
+ template: true,
167
+ },
168
+ 'activities[].arguments.emailSubjectDataBound': {
169
+ isCreateable: true,
170
+ isUpdateable: true,
171
+ retrieving: true,
172
+ template: true,
173
+ },
174
+ 'activities[].arguments.contactId': {
175
+ isCreateable: true,
176
+ isUpdateable: true,
177
+ retrieving: true,
178
+ template: true,
179
+ },
180
+ 'activities[].arguments.contactKey': {
181
+ isCreateable: true,
182
+ isUpdateable: true,
183
+ retrieving: true,
184
+ template: true,
185
+ },
186
+ 'activities[].arguments.emailAddress': {
187
+ isCreateable: true,
188
+ isUpdateable: true,
189
+ retrieving: true,
190
+ template: true,
191
+ },
192
+ 'activities[].arguments.sourceCustomObjectId': {
193
+ isCreateable: true,
194
+ isUpdateable: true,
195
+ retrieving: true,
196
+ template: true,
197
+ },
198
+ 'activities[].arguments.sourceCustomObjectKey': {
199
+ isCreateable: true,
200
+ isUpdateable: true,
201
+ retrieving: true,
202
+ template: true,
203
+ },
204
+ 'activities[].arguments.fieldType': {
205
+ isCreateable: true,
206
+ isUpdateable: true,
207
+ retrieving: true,
208
+ template: true,
209
+ },
210
+ 'activities[].arguments.eventData': {
211
+ isCreateable: true,
212
+ isUpdateable: true,
213
+ retrieving: true,
214
+ template: true,
215
+ },
216
+ 'activities[].arguments.obfuscationProperties': {
217
+ isCreateable: true,
218
+ isUpdateable: true,
219
+ retrieving: true,
220
+ template: true,
221
+ },
222
+ 'activities[].arguments.customObjectKey': {
223
+ isCreateable: true,
224
+ isUpdateable: true,
225
+ retrieving: true,
226
+ template: true,
227
+ },
228
+ 'activities[].arguments.definitionInstanceId': {
229
+ isCreateable: true,
230
+ isUpdateable: true,
231
+ retrieving: true,
232
+ template: true,
233
+ },
234
+ 'activities[].arguments.filterResult': {
235
+ isCreateable: true,
236
+ isUpdateable: true,
237
+ retrieving: true,
238
+ template: true,
239
+ },
240
+ 'activities[].arguments.version': {
241
+ isCreateable: true,
242
+ isUpdateable: true,
243
+ retrieving: true,
244
+ template: true,
245
+ },
246
+ 'activities[].arguments.requestObjectId': {
247
+ isCreateable: true,
248
+ isUpdateable: true,
249
+ retrieving: true,
250
+ template: true,
251
+ },
252
+ 'activities[].arguments.activityData': {
253
+ skipValidation: true,
254
+ },
255
+ 'activities[].arguments.objectMap': {
115
256
  skipValidation: true,
116
257
  },
117
258
  'activities[].configurationArguments': {
@@ -120,6 +261,12 @@ export default {
120
261
  retrieving: true,
121
262
  template: true,
122
263
  },
264
+ 'activities[].configurationArguments.isActivityBatchValidated': {
265
+ isCreateable: true,
266
+ isUpdateable: true,
267
+ retrieving: true,
268
+ template: true,
269
+ },
123
270
  'activities[].configurationArguments.triggeredSendKey': {
124
271
  // if used during create then we are stuck with old data
125
272
  isCreateable: false,
@@ -437,6 +584,12 @@ export default {
437
584
  retrieving: true,
438
585
  template: true,
439
586
  },
587
+ 'activities[].configurationArguments.triggeredSend.updateSubscriber': {
588
+ isCreateable: true,
589
+ isUpdateable: true,
590
+ retrieving: true,
591
+ template: true,
592
+ },
440
593
  'activities[].configurationArguments.applicationExtensionKey': {
441
594
  isCreateable: true,
442
595
  isUpdateable: true,
@@ -752,7 +905,6 @@ export default {
752
905
  retrieving: true,
753
906
  template: true,
754
907
  },
755
-
756
908
  'triggers[].arguments.dequeueReason': {
757
909
  isCreateable: true,
758
910
  isUpdateable: true,
@@ -834,7 +986,15 @@ export default {
834
986
  retrieving: true,
835
987
  template: true,
836
988
  },
989
+ 'triggers[].configurationArguments.objectApiName': {
990
+ // journey capitalization; rewritten to event way of writing it by mcdev
991
+ isCreateable: true,
992
+ isUpdateable: true,
993
+ retrieving: true,
994
+ template: true,
995
+ },
837
996
  'triggers[].configurationArguments.objectAPIName': {
997
+ // capitalization like on event, customly created by mcdev in journey
838
998
  isCreateable: true,
839
999
  isUpdateable: true,
840
1000
  retrieving: true,
@@ -913,12 +1073,6 @@ export default {
913
1073
  retrieving: true,
914
1074
  template: true,
915
1075
  },
916
- 'triggers[].configurationArguments.objectApiName': {
917
- isCreateable: true,
918
- isUpdateable: true,
919
- retrieving: true,
920
- template: true,
921
- },
922
1076
  'triggers[].configurationArguments.additionalObjectFilterCriteria': {
923
1077
  isCreateable: true,
924
1078
  isUpdateable: true,
package/lib/util/cache.js CHANGED
@@ -122,15 +122,34 @@ export default {
122
122
  * @param {string} searchField field name (key in object) which contains the unique identifer
123
123
  * @param {string} returnField field which should be returned
124
124
  * @param {number} [overrideMID] ignore currentMID and use alternative (for example parent MID)
125
+ * @param {boolean} caseInsensitive optional; if true, search is case insensitive
125
126
  * @returns {string} value of specified field. Error is thrown if not found
126
127
  */
127
- searchForField(metadataType, searchValue, searchField, returnField, overrideMID) {
128
+ searchForField(
129
+ metadataType,
130
+ searchValue,
131
+ searchField,
132
+ returnField,
133
+ overrideMID,
134
+ caseInsensitive = false
135
+ ) {
136
+ if (caseInsensitive) {
137
+ searchValue = (searchValue + '').toLowerCase();
138
+ }
128
139
  for (const key in dataStore[overrideMID || currentMID]?.[metadataType]) {
129
140
  if (
130
- Util.resolveObjPath(
131
- searchField,
132
- dataStore[overrideMID || currentMID][metadataType][key]
133
- ) == searchValue
141
+ (caseInsensitive &&
142
+ (
143
+ Util.resolveObjPath(
144
+ searchField,
145
+ dataStore[overrideMID || currentMID][metadataType][key]
146
+ ) + ''
147
+ ).toLowerCase() == searchValue) ||
148
+ (!caseInsensitive &&
149
+ Util.resolveObjPath(
150
+ searchField,
151
+ dataStore[overrideMID || currentMID][metadataType][key]
152
+ ) == searchValue)
134
153
  ) {
135
154
  try {
136
155
  if (
@@ -100,7 +100,17 @@ const DevOps = {
100
100
  'add/update': 0,
101
101
  move: 0,
102
102
  };
103
- const diffSummary = await git.diffSummary([range]);
103
+ let diffSummary;
104
+ try {
105
+ diffSummary = await git.diffSummary([range]);
106
+ } catch (ex) {
107
+ const error = ex.message.startsWith('fatal: ambiguous argument')
108
+ ? new Error(
109
+ `Make sure you checked out the branches mentioned in your git range (${rangeUserInput})`
110
+ )
111
+ : ex;
112
+ throw error;
113
+ }
104
114
  Util.logger.info(`Found ${diffSummary.files.length} changed files in the commit range`);
105
115
  /**
106
116
  * @type {DeltaPkgItem[]}
@@ -486,10 +496,15 @@ const DevOps = {
486
496
  // skip this source-target mapping
487
497
  continue;
488
498
  }
489
-
490
- const delta = Array.isArray(diffArr)
491
- ? diffArr
492
- : await DevOps.getDeltaList(properties, range, false, sourceBU, commitHistory);
499
+ let delta;
500
+ try {
501
+ delta = Array.isArray(diffArr)
502
+ ? diffArr
503
+ : await DevOps.getDeltaList(properties, range, false, sourceBU, commitHistory);
504
+ } catch (ex) {
505
+ Util.logger.error(ex.message);
506
+ return;
507
+ }
493
508
  // If only chaing templating and buildDefinition if required
494
509
  if (!delta || delta.length === 0) {
495
510
  // skip this source-target mapping
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcdev",
3
- "version": "7.10.1",
3
+ "version": "8.0.0",
4
4
  "description": "Accenture Salesforce Marketing Cloud DevTools",
5
5
  "author": "Accenture: joern.berkefeld, douglas.midgley, robert.zimmermann, maciej.barnas",
6
6
  "license": "MIT",
@@ -45,7 +45,7 @@
45
45
  "mcdev": "./lib/cli.js"
46
46
  },
47
47
  "engines": {
48
- "node": ">=18.18.2"
48
+ "node": "^18.20.0 || ^20.10.0 || >=21.0.0"
49
49
  },
50
50
  "scripts": {
51
51
  "start": "node lib/cli.js",
@@ -74,12 +74,12 @@
74
74
  "console.table": "0.10.0",
75
75
  "deep-equal": "2.2.3",
76
76
  "fs-extra": "11.3.0",
77
- "inquirer": "12.4.2",
77
+ "inquirer": "12.6.0",
78
78
  "json-to-table": "4.2.1",
79
79
  "mustache": "4.2.0",
80
80
  "p-limit": "6.2.0",
81
81
  "prettier": "3.5.3",
82
- "prettier-plugin-sql": "0.18.1",
82
+ "prettier-plugin-sql": "0.19.0",
83
83
  "semver": "7.7.1",
84
84
  "sfmc-sdk": "2.1.2",
85
85
  "simple-git": "3.27.0",
@@ -87,36 +87,35 @@
87
87
  "update-notifier": "7.3.1",
88
88
  "winston": "3.17.0",
89
89
  "yargs": "17.7.2",
90
- "yocto-spinner": "0.2.0"
90
+ "yocto-spinner": "0.2.2"
91
91
  },
92
92
  "devDependencies": {
93
- "@eslint/js": "9.21.0",
93
+ "@eslint/js": "9.25.1",
94
94
  "@types/fs-extra": "11.0.4",
95
95
  "@types/inquirer": "9.0.7",
96
96
  "@types/mocha": "10.0.8",
97
- "@types/node": "22.13.9",
97
+ "@types/node": "22.15.3",
98
98
  "@types/yargs": "17.0.33",
99
99
  "assert": "2.1.0",
100
100
  "axios-mock-adapter": "2.0.0",
101
101
  "c8": "10.1.3",
102
102
  "chai": "5.2.0",
103
103
  "chai-files": "1.4.0",
104
- "eslint": "9.21.0",
105
- "eslint-config-prettier": "10.0.1",
104
+ "eslint": "9.25.1",
106
105
  "eslint-config-ssjs": "2.0.0",
107
- "eslint-plugin-jsdoc": "50.6.3",
108
- "eslint-plugin-mocha": "10.5.0",
109
- "eslint-plugin-prettier": "5.2.3",
110
- "eslint-plugin-unicorn": "56.0.1",
111
- "fast-xml-parser": "5.0.8",
106
+ "eslint-plugin-jsdoc": "50.6.11",
107
+ "eslint-plugin-mocha": "11.0.0",
108
+ "eslint-plugin-prettier": "5.2.6",
109
+ "eslint-plugin-unicorn": "59.0.0",
110
+ "fast-xml-parser": "5.2.1",
112
111
  "globals": "16.0.0",
113
112
  "husky": "9.1.7",
114
- "lint-staged": "15.4.3",
113
+ "lint-staged": "15.5.1",
115
114
  "mocha": "11.1.0",
116
115
  "mock-fs": "5.3.0",
117
116
  "npm-run-all": "4.1.5",
118
- "prettier-eslint": "16.3.0",
119
- "typescript": "5.7.3"
117
+ "prettier-eslint": "16.4.1",
118
+ "typescript": "5.8.3"
120
119
  },
121
120
  "optionalDependencies": {
122
121
  "fsevents": "*"
@@ -226,7 +226,7 @@ describe('GENERAL', () => {
226
226
 
227
227
  assert.equal(
228
228
  testUtils.getAPIHistoryLength(),
229
- 76,
229
+ 80,
230
230
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
231
231
  );
232
232
  return;
@@ -286,7 +286,7 @@ describe('GENERAL', () => {
286
286
 
287
287
  assert.equal(
288
288
  testUtils.getAPIHistoryLength(),
289
- 76,
289
+ 80,
290
290
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
291
291
  );
292
292
  return;
@@ -346,7 +346,7 @@ describe('GENERAL', () => {
346
346
 
347
347
  assert.equal(
348
348
  testUtils.getAPIHistoryLength(),
349
- 76,
349
+ 80,
350
350
  'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests'
351
351
  );
352
352
  return;
@@ -987,7 +987,7 @@ describe('GENERAL', () => {
987
987
  // download first before we test buildTemplate
988
988
  await handler.retrieve('testInstance/testBU');
989
989
 
990
- const expectedApiCallsRetrieve = 97;
990
+ const expectedApiCallsRetrieve = 101;
991
991
  assert.equal(
992
992
  testUtils.getAPIHistoryLength(),
993
993
  expectedApiCallsRetrieve,
@@ -1229,7 +1229,7 @@ describe('GENERAL', () => {
1229
1229
  await testUtils.getActualDeployFile('testTemplated_query', 'query', 'sql')
1230
1230
  ).to.equal(await testUtils.getExpectedFile('9999999', 'query', 'build', 'sql'));
1231
1231
 
1232
- const expectedApiCallsRetrieve = 101;
1232
+ const expectedApiCallsRetrieve = 105;
1233
1233
  assert.equal(
1234
1234
  testUtils.getAPIHistoryLength(),
1235
1235
  expectedApiCallsRetrieve,
@@ -1603,7 +1603,7 @@ describe('GENERAL', () => {
1603
1603
  // download everything before we test buildTemplate
1604
1604
  await handler.retrieve('testInstance/testBU');
1605
1605
 
1606
- const expectedApiCallsRetrieve = 97;
1606
+ const expectedApiCallsRetrieve = 101;
1607
1607
  assert.equal(
1608
1608
  testUtils.getAPIHistoryLength(),
1609
1609
  expectedApiCallsRetrieve,
@@ -1814,7 +1814,7 @@ describe('GENERAL', () => {
1814
1814
  await testUtils.getActualDeployFile('testTemplated_query', 'query', 'sql')
1815
1815
  ).to.equal(await testUtils.getExpectedFile('9999999', 'query', 'build', 'sql'));
1816
1816
 
1817
- const expectedApiCallsRetrieve = 101;
1817
+ const expectedApiCallsRetrieve = 105;
1818
1818
  assert.equal(
1819
1819
  testUtils.getAPIHistoryLength(),
1820
1820
  expectedApiCallsRetrieve,
@@ -2005,7 +2005,7 @@ describe('GENERAL', () => {
2005
2005
  // download first before we test buildTemplate
2006
2006
  await handler.retrieve('testInstance/testBU');
2007
2007
 
2008
- const expectedApiCallsRetrieve = 97;
2008
+ const expectedApiCallsRetrieve = 101;
2009
2009
  assert.equal(
2010
2010
  testUtils.getAPIHistoryLength(),
2011
2011
  expectedApiCallsRetrieve,
@@ -1,3 +1,4 @@
1
+ /* eslint-disable no-unused-vars */
1
2
  'use strict';
2
3
  /**
3
4
  * @typedef {Object.<string, any>} MetadataTypeItem generic metadata item
@@ -39,13 +40,11 @@ const buPrefixBlacklistMap = {
39
40
  * @returns {validationRuleList} MetadataItem
40
41
  */
41
42
  export function validation(definition, item, targetDir, codeExtractItemArr, Util) {
42
- Util.logger.verbose('just here to not get a warning about the unused property Util');
43
-
44
43
  const bu =
45
44
  (targetDir.includes('/') ? targetDir.split('/').pop() : targetDir.split('\\').pop()) ||
46
45
  'not-found';
47
46
  const prefixBlacklist = buPrefixBlacklistMap[bu] || [];
48
- // eslint-disable-next-line no-unused-vars -- codeExtractItemArr is not used in this example
47
+
49
48
  const temp = codeExtractItemArr;
50
49
 
51
50
  return {
@@ -175,5 +175,5 @@
175
175
  "verification"
176
176
  ]
177
177
  },
178
- "version": "7.10.1"
178
+ "version": "8.0.0"
179
179
  }
@@ -26,10 +26,11 @@
26
26
  "c__dataAction": "AddUpdate",
27
27
  "c__subscriberImportType": "DataExtension",
28
28
  "destination": {
29
- "c__destinationType": "DataExtension",
29
+ "c__type": "DataExtension",
30
30
  "r__dataExtension_key": "testExisting_dataExtension"
31
31
  },
32
32
  "source": {
33
+ "c__type": "File Location",
33
34
  "r__fileLocation_name": "ExactTarget Enhanced FTP"
34
35
  }
35
36
  }