mcdev 7.10.1 → 8.0.1
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 +2 -0
- package/.github/workflows/code-test.yml +8 -100
- package/.github/workflows/coverage-base-update.yml +2 -2
- package/.github/workflows/coverage.yml +1 -1
- package/@types/lib/Deployer.d.ts.map +1 -1
- package/@types/lib/Retriever.d.ts.map +1 -1
- package/@types/lib/index.d.ts +17 -4
- package/@types/lib/index.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Asset.d.ts +46 -8
- package/@types/lib/metadataTypes/Asset.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Automation.d.ts +14 -4
- package/@types/lib/metadataTypes/Automation.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtension.d.ts +1 -0
- package/@types/lib/metadataTypes/DataExtension.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtensionField.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtract.d.ts +1 -0
- package/@types/lib/metadataTypes/DataExtract.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Event.d.ts +8 -0
- package/@types/lib/metadataTypes/Event.d.ts.map +1 -1
- package/@types/lib/metadataTypes/FileTransfer.d.ts +1 -0
- package/@types/lib/metadataTypes/FileTransfer.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 +15 -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 +6 -3
- package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MobileKeyword.d.ts +1 -0
- package/@types/lib/metadataTypes/MobileKeyword.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Query.d.ts +1 -0
- package/@types/lib/metadataTypes/Query.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Script.d.ts +1 -0
- package/@types/lib/metadataTypes/Script.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/lib/util/util.d.ts +8 -1
- package/@types/lib/util/util.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 +27 -31
- package/lib/metadataTypes/Asset.js +155 -17
- package/lib/metadataTypes/Automation.js +137 -40
- package/lib/metadataTypes/DataExtension.js +2 -10
- package/lib/metadataTypes/DataExtensionField.js +9 -15
- package/lib/metadataTypes/DataExtract.js +2 -0
- package/lib/metadataTypes/Event.js +63 -32
- package/lib/metadataTypes/FileTransfer.js +2 -0
- package/lib/metadataTypes/Folder.js +99 -27
- package/lib/metadataTypes/ImportFile.js +92 -29
- package/lib/metadataTypes/Journey.js +184 -24
- package/lib/metadataTypes/MetadataType.js +53 -25
- package/lib/metadataTypes/MobileKeyword.js +2 -0
- package/lib/metadataTypes/Query.js +2 -0
- package/lib/metadataTypes/Script.js +2 -0
- 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 +41 -8
- package/lib/util/devops.js +20 -5
- package/lib/util/file.js +10 -1
- package/lib/util/util.js +26 -12
- package/package.json +18 -19
- 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 +45 -0
- package/test/resources/9999999/asset/test_coderesource_json-retrieve-expected.json +45 -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 +44 -0
- package/test/resources/9999999/asset/test_coderesource_xml-retrieve-expected.xml +1 -0
- package/test/resources/9999999/asset/test_interactivecontent-retrieve-expected.json +41 -0
- package/test/resources/9999999/asset/test_landingpage-retrieve-expected.json +40 -0
- package/test/resources/9999999/asset/test_microsite-retrieve-expected.json +41 -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
|
@@ -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 (
|
|
@@ -167,6 +186,19 @@ export default {
|
|
|
167
186
|
* @returns {number} folder ID
|
|
168
187
|
*/
|
|
169
188
|
getFolderId(r__folder_Path, overrideMID, allowOtherBu = true) {
|
|
189
|
+
const folder = this.getFolderByPath(r__folder_Path, overrideMID, allowOtherBu);
|
|
190
|
+
return folder?.ID;
|
|
191
|
+
},
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* helper for setFolderId
|
|
195
|
+
*
|
|
196
|
+
* @param {string} r__folder_Path folder path value
|
|
197
|
+
* @param {number} [overrideMID] ignore currentMID and use alternative (for example parent MID)
|
|
198
|
+
* @param {boolean} allowOtherBu getting folder from other BU; FALSE for folder parent search
|
|
199
|
+
* @returns {object} folder item
|
|
200
|
+
*/
|
|
201
|
+
getFolderByPath(r__folder_Path, overrideMID, allowOtherBu = true) {
|
|
170
202
|
if (!r__folder_Path) {
|
|
171
203
|
throw new Error('r__folder_Path not set');
|
|
172
204
|
}
|
|
@@ -175,18 +207,19 @@ export default {
|
|
|
175
207
|
if (!folderMap) {
|
|
176
208
|
throw new Error('No folders found in cache');
|
|
177
209
|
}
|
|
210
|
+
const folderPath_lower = r__folder_Path.toLowerCase();
|
|
178
211
|
const potentialFolders = [];
|
|
179
212
|
for (const folder of Object.values(folderMap)) {
|
|
180
|
-
if (folder.Path ===
|
|
213
|
+
if (folder.Path.toLowerCase() === folderPath_lower) {
|
|
181
214
|
if (folder?.Client?.ID === (overrideMID || currentMID)) {
|
|
182
|
-
return folder
|
|
215
|
+
return folder;
|
|
183
216
|
} else if (allowOtherBu) {
|
|
184
217
|
potentialFolders.push(folder);
|
|
185
218
|
}
|
|
186
219
|
}
|
|
187
220
|
}
|
|
188
221
|
if (potentialFolders.length >= 1) {
|
|
189
|
-
return potentialFolders[0]
|
|
222
|
+
return potentialFolders[0];
|
|
190
223
|
} else {
|
|
191
224
|
throw new Error(`No folders found with path ${r__folder_Path}`);
|
|
192
225
|
}
|
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/lib/util/file.js
CHANGED
|
@@ -571,6 +571,15 @@ const File = {
|
|
|
571
571
|
* @returns {Promise.<boolean>} success of config load
|
|
572
572
|
*/
|
|
573
573
|
async initPrettier(filetype = 'html') {
|
|
574
|
+
if (Util.OPTIONS.format === false) {
|
|
575
|
+
// auto-formatting was disabled via CLI option
|
|
576
|
+
return;
|
|
577
|
+
}
|
|
578
|
+
const properties = await config.getProperties();
|
|
579
|
+
if (Util.OPTIONS.format !== true && properties.options.formatOnSave === false) {
|
|
580
|
+
// auto-formatting was disabled via config file
|
|
581
|
+
return;
|
|
582
|
+
}
|
|
574
583
|
if (FileFs.prettierConfig === null || FileFs.prettierConfigFileType !== filetype) {
|
|
575
584
|
// run this if no config was yet found or if the filetype previously used to initialize it differs (because it results in a potentially different config!)
|
|
576
585
|
FileFs.prettierConfigFileType = filetype;
|
|
@@ -591,7 +600,7 @@ const File = {
|
|
|
591
600
|
return true;
|
|
592
601
|
} catch (ex) {
|
|
593
602
|
FileFs.prettierConfig = false;
|
|
594
|
-
Util.logger.error('Cannot apply auto-formatting to your code:' + ex.message);
|
|
603
|
+
Util.logger.error('Cannot apply auto-formatting to your code: ' + ex.message);
|
|
595
604
|
return false;
|
|
596
605
|
}
|
|
597
606
|
} else {
|
package/lib/util/util.js
CHANGED
|
@@ -904,6 +904,32 @@ export const Util = {
|
|
|
904
904
|
` - 🚧 ${type} support is currently still in beta. Please report any issues here: https://github.com/Accenture/sfmc-devtools/issues/new/choose`
|
|
905
905
|
);
|
|
906
906
|
},
|
|
907
|
+
|
|
908
|
+
/**
|
|
909
|
+
* outputs a warning that the given method is deprecated
|
|
910
|
+
*
|
|
911
|
+
* @param {string} method name of the method
|
|
912
|
+
* @param {string} [useInstead] optionally specify which method to use instead
|
|
913
|
+
*/
|
|
914
|
+
logDeprecated(method, useInstead = '') {
|
|
915
|
+
Util.logger.warn(
|
|
916
|
+
` 💥 '${method}' is deprecated and will be sunset in a future version. ${useInstead ? `Please use ${useInstead} instead.` : ''}`
|
|
917
|
+
);
|
|
918
|
+
},
|
|
919
|
+
|
|
920
|
+
/**
|
|
921
|
+
* helper for MetadataType class to issue a similar error message for unsupported methods
|
|
922
|
+
*
|
|
923
|
+
* @param {any} definition type definition object
|
|
924
|
+
* @param {string} method name of the method thats not supported
|
|
925
|
+
* @param {MetadataTypeItem} [item] metadata item
|
|
926
|
+
*/
|
|
927
|
+
logNotSupported: function (definition, method, item) {
|
|
928
|
+
Util.logger.error(
|
|
929
|
+
` ☇ skipping ${item ? Util.getTypeKeyName(definition, item) : definition.type}: ${method} is not supported for ${definition.type}`
|
|
930
|
+
);
|
|
931
|
+
},
|
|
932
|
+
|
|
907
933
|
// defined colors for logging things in different colors
|
|
908
934
|
color: {
|
|
909
935
|
reset: '\x1B[0m',
|
|
@@ -1317,18 +1343,6 @@ export const Util = {
|
|
|
1317
1343
|
return acc;
|
|
1318
1344
|
}, {});
|
|
1319
1345
|
},
|
|
1320
|
-
/**
|
|
1321
|
-
* helper for MetadataType class to issue a similar error message for unsupported methods
|
|
1322
|
-
*
|
|
1323
|
-
* @param {any} definition type definition object
|
|
1324
|
-
* @param {string} method name of the method thats not supported
|
|
1325
|
-
* @param {MetadataTypeItem} [item] metadata item
|
|
1326
|
-
*/
|
|
1327
|
-
notSupportedError: function (definition, method, item) {
|
|
1328
|
-
Util.logger.error(
|
|
1329
|
-
` ☇ skipping ${item ? Util.getTypeKeyName(definition, item) : definition.type}: ${method} is not supported yet for ${definition.type}`
|
|
1330
|
-
);
|
|
1331
|
-
},
|
|
1332
1346
|
};
|
|
1333
1347
|
|
|
1334
1348
|
Util.startLogger(false, true);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcdev",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "8.0.1",
|
|
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.28.0",
|
|
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.29",
|
|
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.28.0",
|
|
106
105
|
"eslint-config-ssjs": "2.0.0",
|
|
107
|
-
"eslint-plugin-jsdoc": "50.
|
|
108
|
-
"eslint-plugin-mocha": "
|
|
109
|
-
"eslint-plugin-prettier": "5.
|
|
110
|
-
"eslint-plugin-unicorn": "
|
|
111
|
-
"fast-xml-parser": "5.
|
|
112
|
-
"globals": "16.
|
|
106
|
+
"eslint-plugin-jsdoc": "50.7.1",
|
|
107
|
+
"eslint-plugin-mocha": "11.0.0",
|
|
108
|
+
"eslint-plugin-prettier": "5.4.1",
|
|
109
|
+
"eslint-plugin-unicorn": "59.0.1",
|
|
110
|
+
"fast-xml-parser": "5.2.3",
|
|
111
|
+
"globals": "16.2.0",
|
|
113
112
|
"husky": "9.1.7",
|
|
114
|
-
"lint-staged": "15.
|
|
115
|
-
"mocha": "11.
|
|
113
|
+
"lint-staged": "15.5.1",
|
|
114
|
+
"mocha": "11.5.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
|
}
|
package/test/mockRoot/deploy/testInstance/testBU/importFile/testNew_importFile.importFile-meta.json
CHANGED
|
@@ -24,10 +24,11 @@
|
|
|
24
24
|
"c__subscriberImportType": "DataExtension",
|
|
25
25
|
"c__dataAction": "AddUpdate",
|
|
26
26
|
"destination": {
|
|
27
|
-
"
|
|
27
|
+
"c__type": "DataExtension",
|
|
28
28
|
"r__dataExtension_key": "testExisting_dataExtension"
|
|
29
29
|
},
|
|
30
30
|
"source": {
|
|
31
|
+
"c__type": "File Location",
|
|
31
32
|
"r__fileLocation_name": "ExactTarget Enhanced FTP"
|
|
32
33
|
}
|
|
33
34
|
}
|