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.
- package/.github/ISSUE_TEMPLATE/bug.yml +1 -0
- package/.github/workflows/code-test.yml +8 -100
- package/@types/lib/Deployer.d.ts.map +1 -1
- package/@types/lib/Retriever.d.ts.map +1 -1
- package/@types/lib/index.d.ts +16 -4
- package/@types/lib/index.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Asset.d.ts +45 -8
- package/@types/lib/metadataTypes/Asset.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Automation.d.ts +13 -4
- package/@types/lib/metadataTypes/Automation.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtensionField.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Event.d.ts +6 -0
- package/@types/lib/metadataTypes/Event.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Folder.d.ts +49 -12
- package/@types/lib/metadataTypes/Folder.d.ts.map +1 -1
- package/@types/lib/metadataTypes/ImportFile.d.ts +14 -0
- package/@types/lib/metadataTypes/ImportFile.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Journey.d.ts +166 -6
- package/@types/lib/metadataTypes/Journey.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MetadataType.d.ts +5 -3
- package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -1
- package/@types/lib/metadataTypes/definitions/Asset.definition.d.ts +45 -8
- package/@types/lib/metadataTypes/definitions/Automation.definition.d.ts +6 -0
- package/@types/lib/metadataTypes/definitions/Event.definition.d.ts +6 -0
- package/@types/lib/metadataTypes/definitions/Folder.definition.d.ts +49 -12
- package/@types/lib/metadataTypes/definitions/ImportFile.definition.d.ts +3 -0
- package/@types/lib/metadataTypes/definitions/Journey.definition.d.ts +159 -6
- package/@types/lib/util/cache.d.ts +2 -1
- package/@types/lib/util/cache.d.ts.map +1 -1
- package/@types/lib/util/devops.d.ts.map +1 -1
- package/@types/types/mcdev.d.d.ts +16 -0
- package/@types/types/mcdev.d.d.ts.map +1 -1
- package/boilerplate/files/.vscode/settings.json +5 -0
- package/eslint.config.js +2 -2
- package/lib/Deployer.js +3 -0
- package/lib/Retriever.js +8 -2
- package/lib/cli.js +29 -0
- package/lib/index.js +25 -28
- package/lib/metadataTypes/Asset.js +126 -10
- package/lib/metadataTypes/Automation.js +135 -40
- package/lib/metadataTypes/DataExtension.js +0 -10
- package/lib/metadataTypes/DataExtensionField.js +9 -15
- package/lib/metadataTypes/Event.js +42 -19
- package/lib/metadataTypes/Folder.js +98 -12
- package/lib/metadataTypes/ImportFile.js +90 -29
- package/lib/metadataTypes/Journey.js +182 -23
- package/lib/metadataTypes/MetadataType.js +38 -12
- package/lib/metadataTypes/definitions/Asset.definition.js +196 -142
- package/lib/metadataTypes/definitions/Automation.definition.js +6 -0
- package/lib/metadataTypes/definitions/DataExtension.definition.js +7 -6
- package/lib/metadataTypes/definitions/Event.definition.js +6 -0
- package/lib/metadataTypes/definitions/Folder.definition.js +69 -22
- package/lib/metadataTypes/definitions/ImportFile.definition.js +3 -0
- package/lib/metadataTypes/definitions/Journey.definition.js +165 -11
- package/lib/util/cache.js +24 -5
- package/lib/util/devops.js +20 -5
- package/package.json +16 -17
- package/test/general.test.js +8 -8
- package/test/mockRoot/.mcdev-validations.js +2 -3
- package/test/mockRoot/.mcdevrc.json +1 -1
- package/test/mockRoot/deploy/testInstance/testBU/importFile/testExisting_importFile.importFile-meta.json +2 -1
- package/test/mockRoot/deploy/testInstance/testBU/importFile/testNew_importFile.importFile-meta.json +2 -1
- package/test/resourceFactory.js +31 -5
- package/test/resources/1111111/dataExtension/update-expected.json +1 -1
- package/test/resources/9999999/asset/test_coderesource_js-retrieve-expected.js +1 -0
- package/test/resources/9999999/asset/test_coderesource_js-retrieve-expected.json +47 -0
- package/test/resources/9999999/asset/test_coderesource_json-retrieve-expected.json +47 -0
- package/test/resources/9999999/asset/test_coderesource_json-retrieve-expected.jsonc +1 -0
- package/test/resources/9999999/asset/test_coderesource_xml-retrieve-expected.json +46 -0
- package/test/resources/9999999/asset/test_coderesource_xml-retrieve-expected.xml +1 -0
- package/test/resources/9999999/asset/test_interactivecontent-retrieve-expected.json +43 -0
- package/test/resources/9999999/asset/test_landingpage-retrieve-expected.json +42 -0
- package/test/resources/9999999/asset/test_microsite-retrieve-expected.json +43 -0
- package/test/resources/9999999/asset/v1/content/assets/9451/get-response.json +61 -0
- package/test/resources/9999999/asset/v1/content/assets/9456/get-response.json +56 -0
- package/test/resources/9999999/asset/v1/content/assets/9458/get-response.json +56 -0
- package/test/resources/9999999/asset/v1/content/assets/9460/get-response.json +59 -0
- package/test/resources/9999999/asset/v1/content/assets/9463/get-response.json +61 -0
- package/test/resources/9999999/asset/v1/content/assets/9465/get-response.json +54 -0
- 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
- 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
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN240,241,242,243,244,245.json +144 -0
- package/test/resources/9999999/asset/v1/content/assets/query/post-response-assetType.idIN246,247,248,249.json +132 -0
- package/test/resources/9999999/dataExtension/update-callout-afterCreatedViaEvent-expected.xml +1 -1
- 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
- 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
- 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
- package/test/resources/9999999/dataFolder/{retrieve-ContentTypeINasset,asset-shared,journey-response.xml → retrieve-ContentTypeINasset,asset-shared,cloudpages,journey-response.xml} +44 -0
- package/test/resources/9999999/dataFolder/retrieve-ContentTypeINasset,asset-shared,cloudpages,ssjsactivity-response.xml +136 -0
- package/test/resources/9999999/dataFolder/{retrieve-ContentTypeINasset,asset-shared,ssjsactivity-response.xml → retrieve-ContentTypeINasset,asset-shared,cloudpages-response.xml} +29 -7
- package/test/resources/9999999/dataFolder/{+retrieve-response.xml → retrieve-response.xml} +23 -0
- package/test/resources/9999999/dataFolder/update-response.xml +31 -0
- package/test/resources/9999999/event/build-expected.json +0 -1
- package/test/resources/9999999/event/get-automation-expected.json +0 -1
- package/test/resources/9999999/event/get-expected.json +0 -2
- package/test/resources/9999999/event/get-published-expected.json +0 -2
- package/test/resources/9999999/event/post_withExistingDE-expected.json +0 -2
- package/test/resources/9999999/event/post_withSchema-callout-expected.json +3 -0
- package/test/resources/9999999/event/post_withSchema-expected.json +0 -2
- package/test/resources/9999999/event/put-callout-expected.json +3 -0
- package/test/resources/9999999/event/put-expected.json +0 -2
- package/test/resources/9999999/event/template-expected.json +0 -1
- package/test/resources/9999999/folder-deploy/Data Extensions/testExisting_folder.folder-meta.json +9 -0
- package/test/resources/9999999/importFile/get-dataImport-expected.json +1 -1
- package/test/resources/9999999/importFile/get-expected.json +4 -1
- package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/audit/all/get-response-versionNumber=1.json +86 -0
- package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/audit/all/get-response-versionNumber=2.json +101 -0
- package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/audit/all/get-response-versionNumber=3.json +86 -0
- package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/delete-response-versionNumber=1.txt +1 -0
- package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/get-response-versionNumber=1.json +461 -0
- package/test/resources/9999999/interaction/v1/interactions/0175b971-71a3-4d8e-98ac-48121f3fbf4f/get-response-versionNumber=3.json +461 -0
- package/test/resources/9999999/interaction/v1/interactions/dsfdsafdsa-922c-4568-85a5-e5cc77efc3be/audit/all/get-response-versionNumber=1.json +38 -0
- package/test/resources/9999999/interaction/v1/interactions/dsfdsafdsa-922c-4568-85a5-e5cc77efc3be/audit/all/get-response-versionNumber=2.json +53 -0
- package/test/resources/9999999/interaction/v1/interactions/get-response.json +2 -2
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Multistep/get-response-versionNumber=1.json +461 -0
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_journey_Quicksend/get-response-versionNumber=1.json +253 -0
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail/get-response-versionNumber=1.json +219 -0
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_temail_notPublished/get-response-versionNumber=1.json +226 -0
- package/test/resources/9999999/interaction/v1/interactions/publishAsync/0175b971-71a3-4d8e-98ac-48121f3fbf4f/post-response-versionNumber=3.json +4 -0
- package/test/resources/9999999/journey/build-expected.json +0 -1
- package/test/resources/9999999/journey/create-transactionaEmail-publish-expected.json +0 -1
- package/test/resources/9999999/journey/get-multistep-expected.json +0 -4
- package/test/resources/9999999/journey/get-published-expected.json +0 -1
- package/test/resources/9999999/journey/get-quicksend-expected.json +0 -1
- package/test/resources/9999999/journey/get-quicksend-rcb-id-expected.json +0 -1
- package/test/resources/9999999/journey/get-quicksend-rcb-key-expected.json +0 -1
- package/test/resources/9999999/journey/get-quicksend-rcb-name-expected.json +0 -1
- package/test/resources/9999999/journey/get-transactionalEmail-expected.json +0 -1
- package/test/resources/9999999/journey/template-expected.json +0 -1
- package/test/resources/9999999/query/patch-expected.sql +1 -1
- package/test/resources/9999999/query/post-expected.sql +1 -1
- package/test/resources/9999999/script/patch-expected.ssjs +1 -0
- package/test/type.asset.test.js +123 -13
- package/test/type.automation.test.js +3 -1
- package/test/type.folder.test.js +12 -2
- package/test/type.journey.test.js +130 -1
- package/test/type.script.test.js +1 -0
- package/test/type.senderProfile.test.js +1 -0
- package/test/utils.js +2 -0
- package/types/mcdev.d.js +4 -0
- 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
- /package/test/resources/9999999/dataFolder/{+retrieve-QAA-response.xml → retrieve-QAA-response.xml} +0 -0
- /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
|
-
|
|
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:
|
|
83
|
-
isUpdateable:
|
|
84
|
-
retrieving:
|
|
85
|
-
template:
|
|
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(
|
|
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
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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 (
|
package/lib/util/devops.js
CHANGED
|
@@ -100,7 +100,17 @@ const DevOps = {
|
|
|
100
100
|
'add/update': 0,
|
|
101
101
|
move: 0,
|
|
102
102
|
};
|
|
103
|
-
|
|
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
|
-
|
|
491
|
-
|
|
492
|
-
|
|
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": "
|
|
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": "
|
|
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.
|
|
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.
|
|
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.
|
|
90
|
+
"yocto-spinner": "0.2.2"
|
|
91
91
|
},
|
|
92
92
|
"devDependencies": {
|
|
93
|
-
"@eslint/js": "9.
|
|
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.
|
|
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.
|
|
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.
|
|
108
|
-
"eslint-plugin-mocha": "
|
|
109
|
-
"eslint-plugin-prettier": "5.2.
|
|
110
|
-
"eslint-plugin-unicorn": "
|
|
111
|
-
"fast-xml-parser": "5.
|
|
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.
|
|
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.
|
|
119
|
-
"typescript": "5.
|
|
117
|
+
"prettier-eslint": "16.4.1",
|
|
118
|
+
"typescript": "5.8.3"
|
|
120
119
|
},
|
|
121
120
|
"optionalDependencies": {
|
|
122
121
|
"fsevents": "*"
|
package/test/general.test.js
CHANGED
|
@@ -226,7 +226,7 @@ describe('GENERAL', () => {
|
|
|
226
226
|
|
|
227
227
|
assert.equal(
|
|
228
228
|
testUtils.getAPIHistoryLength(),
|
|
229
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
47
|
+
|
|
49
48
|
const temp = codeExtractItemArr;
|
|
50
49
|
|
|
51
50
|
return {
|
|
@@ -26,10 +26,11 @@
|
|
|
26
26
|
"c__dataAction": "AddUpdate",
|
|
27
27
|
"c__subscriberImportType": "DataExtension",
|
|
28
28
|
"destination": {
|
|
29
|
-
"
|
|
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
|
}
|