mcdev 4.3.3 → 5.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/.coverage-comment-template.md +20 -0
- package/.coverage-comment-template.svelte +178 -0
- package/.eslintrc.json +2 -0
- package/.fork/.prettierrc +6 -0
- package/.fork/custom-commands.json +13 -1
- package/.github/ISSUE_TEMPLATE/bug.yml +2 -0
- package/.github/workflows/code-test.yml +36 -0
- package/.github/workflows/coverage-base-update.yml +57 -0
- package/.github/workflows/coverage-develop-branch.yml +41 -0
- package/.github/workflows/coverage-main-branch.yml +41 -0
- package/.github/workflows/coverage.yml +77 -0
- package/.husky/post-checkout +1 -1
- package/.prettierrc +1 -1
- package/.vscode/extensions.json +0 -4
- package/boilerplate/config.json +1 -1
- package/boilerplate/files/.prettierrc +1 -1
- package/boilerplate/files/.vscode/extensions.json +1 -1
- package/boilerplate/files/.vscode/settings.json +1 -0
- package/boilerplate/forcedUpdates.json +8 -0
- package/docs/dist/documentation.md +1261 -433
- package/lib/Builder.js +6 -1
- package/lib/Deployer.js +34 -10
- package/lib/MetadataTypeDefinitions.js +8 -6
- package/lib/MetadataTypeInfo.js +8 -6
- package/lib/Retriever.js +4 -1
- package/lib/cli.js +54 -42
- package/lib/index.js +82 -8
- package/lib/metadataTypes/Asset.js +185 -31
- package/lib/metadataTypes/AttributeGroup.js +0 -1
- package/lib/metadataTypes/Automation.js +48 -5
- package/lib/metadataTypes/Campaign.js +20 -7
- package/lib/metadataTypes/ContentArea.js +1 -1
- package/lib/metadataTypes/DataExtension.js +221 -184
- package/lib/metadataTypes/DataExtensionField.js +12 -19
- package/lib/metadataTypes/DataExtensionTemplate.js +1 -1
- package/lib/metadataTypes/DataExtract.js +1 -1
- package/lib/metadataTypes/DataExtractType.js +1 -1
- package/lib/metadataTypes/Email.js +1 -1
- package/lib/metadataTypes/{EmailSendDefinition.js → EmailSend.js} +5 -5
- package/lib/metadataTypes/{EventDefinition.js → Event.js} +17 -35
- package/lib/metadataTypes/{FtpLocation.js → FileLocation.js} +2 -2
- package/lib/metadataTypes/FileTransfer.js +8 -7
- package/lib/metadataTypes/Filter.js +1 -1
- package/lib/metadataTypes/Folder.js +8 -3
- package/lib/metadataTypes/ImportFile.js +6 -6
- package/lib/metadataTypes/{Interaction.js → Journey.js} +311 -147
- package/lib/metadataTypes/List.js +2 -2
- package/lib/metadataTypes/MetadataType.js +318 -90
- package/lib/metadataTypes/MobileCode.js +0 -1
- package/lib/metadataTypes/MobileKeyword.js +336 -40
- package/lib/metadataTypes/MobileMessage.js +473 -0
- package/lib/metadataTypes/Query.js +114 -32
- package/lib/metadataTypes/Role.js +60 -21
- package/lib/metadataTypes/Script.js +5 -7
- package/lib/metadataTypes/SendClassification.js +40 -0
- package/lib/metadataTypes/SetDefinition.js +1 -7
- package/lib/metadataTypes/TransactionalEmail.js +2 -3
- package/lib/metadataTypes/TransactionalMessage.js +1 -2
- package/lib/metadataTypes/TransactionalSMS.js +8 -15
- package/lib/metadataTypes/{TriggeredSendDefinition.js → TriggeredSend.js} +35 -27
- package/lib/metadataTypes/User.js +1177 -0
- package/lib/metadataTypes/definitions/Asset.definition.js +2 -4
- package/lib/metadataTypes/definitions/AttributeGroup.definition.js +1 -0
- package/lib/metadataTypes/definitions/Automation.definition.js +3 -2
- package/lib/metadataTypes/definitions/Campaign.definition.js +79 -4
- package/lib/metadataTypes/definitions/ContentArea.definition.js +1 -0
- package/lib/metadataTypes/definitions/DataExtension.definition.js +2 -1
- package/lib/metadataTypes/definitions/DataExtensionField.definition.js +1 -0
- package/lib/metadataTypes/definitions/DataExtensionTemplate.definition.js +1 -0
- package/lib/metadataTypes/definitions/DataExtract.definition.js +1 -0
- package/lib/metadataTypes/definitions/DataExtractType.definition.js +1 -0
- package/lib/metadataTypes/definitions/Discovery.definition.js +1 -0
- package/lib/metadataTypes/definitions/Email.definition.js +1 -0
- package/lib/metadataTypes/definitions/{EmailSendDefinition.definition.js → EmailSend.definition.js} +4 -2
- package/lib/metadataTypes/definitions/{EventDefinition.definition.js → Event.definition.js} +2 -1
- package/lib/metadataTypes/definitions/{FtpLocation.definition.js → FileLocation.definition.js} +4 -3
- package/lib/metadataTypes/definitions/FileTransfer.definition.js +3 -2
- package/lib/metadataTypes/definitions/Filter.definition.js +1 -0
- package/lib/metadataTypes/definitions/Folder.definition.js +2 -0
- package/lib/metadataTypes/definitions/ImportFile.definition.js +4 -3
- package/lib/metadataTypes/definitions/{Interaction.definition.js → Journey.definition.js} +11 -2
- package/lib/metadataTypes/definitions/List.definition.js +1 -0
- package/lib/metadataTypes/definitions/MobileCode.definition.js +3 -1
- package/lib/metadataTypes/definitions/MobileKeyword.definition.js +27 -17
- package/lib/metadataTypes/definitions/MobileMessage.definition.js +743 -0
- package/lib/metadataTypes/definitions/Query.definition.js +3 -2
- package/lib/metadataTypes/definitions/Role.definition.js +5 -0
- package/lib/metadataTypes/definitions/Script.definition.js +1 -0
- package/lib/metadataTypes/definitions/SendClassification.definition.js +114 -0
- package/lib/metadataTypes/definitions/SetDefinition.definition.js +1 -0
- package/lib/metadataTypes/definitions/TransactionalEmail.definition.js +2 -1
- package/lib/metadataTypes/definitions/TransactionalPush.definition.js +1 -0
- package/lib/metadataTypes/definitions/TransactionalSMS.definition.js +1 -0
- package/lib/metadataTypes/definitions/{TriggeredSendDefinition.definition.js → TriggeredSend.definition.js} +5 -3
- package/lib/metadataTypes/definitions/User.definition.js +365 -0
- package/lib/retrieveChangelog.js +1 -2
- package/lib/util/auth.js +29 -9
- package/lib/util/businessUnit.js +3 -3
- package/lib/util/cli.js +55 -7
- package/lib/util/devops.js +93 -8
- package/lib/util/file.js +55 -13
- package/lib/util/init.config.js +1 -2
- package/lib/util/init.npm.js +3 -3
- package/lib/util/util.js +68 -14
- package/package.json +16 -15
- package/test/general.test.js +62 -0
- package/test/mockRoot/.mcdevrc.json +7 -5
- package/test/mockRoot/deploy/testInstance/_ParentBU_/user/testBlocked_user.user-meta.json +23 -0
- package/test/mockRoot/deploy/testInstance/_ParentBU_/user/testExisting_user.user-meta.json +31 -0
- package/test/mockRoot/deploy/testInstance/_ParentBU_/user/testNew_user.user-meta.json +27 -0
- package/test/mockRoot/deploy/testInstance/testBU/dataExtension/{childBU_dataextension_test.dataExtension-meta.json → testExisting_dataExtension.dataExtension-meta.json} +2 -2
- package/test/mockRoot/deploy/testInstance/testBU/dataExtension/{testDataExtension.dataExtension-meta.json → testNew_dataExtension.dataExtension-meta.json} +2 -2
- package/test/mockRoot/deploy/testInstance/testBU/journey/testExisting_interaction.interaction-meta.json +576 -0
- package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/testNew_keyword.mobileKeyword-meta.amp +2 -0
- package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/testNew_keyword.mobileKeyword-meta.json +10 -0
- package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/testNew_keyword_blocked.mobileKeyword-meta.amp +2 -0
- package/test/mockRoot/deploy/testInstance/testBU/mobileKeyword/testNew_keyword_blocked.mobileKeyword-meta.json +10 -0
- package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/NTIzOjc4OjA.mobileMessage-meta.amp +1 -0
- package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/NTIzOjc4OjA.mobileMessage-meta.json +61 -0
- package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/new.mobileMessage-meta.amp +1 -0
- package/test/mockRoot/deploy/testInstance/testBU/mobileMessage/new.mobileMessage-meta.json +60 -0
- package/test/mockRoot/deploy/testInstance/testBU/query/testExistingQuery.query-meta.json +1 -1
- package/test/mockRoot/deploy/testInstance/testBU/query/testNewQuery.query-meta.json +1 -1
- package/test/mockRoot/deploy/testInstance/testBU/query/testNewQuery.query-meta.sql +1 -1
- package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testExisting_temail.transactionalEmail-meta.json +1 -1
- package/test/mockRoot/deploy/testInstance/testBU/transactionalEmail/testNew_temail.transactionalEmail-meta.json +1 -1
- package/test/resourceFactory.js +13 -0
- package/test/resources/1111111/accountUser/configure-response.xml +70 -0
- package/test/resources/1111111/accountUser/create-response.xml +97 -0
- package/test/resources/1111111/accountUser/retrieve-response.xml +156 -0
- package/test/resources/1111111/accountUser/update-response.xml +111 -0
- package/test/resources/1111111/accountUserAccount/retrieve-response.xml +77 -0
- package/test/resources/1111111/platform/v1/setup/quickflow/data/get-response.json +455 -0
- package/test/resources/1111111/role/retrieve-response.xml +76 -0
- package/test/resources/1111111/user/build-expected.json +16 -0
- package/test/resources/1111111/user/create-expected.json +21 -0
- package/test/resources/1111111/user/retrieve-expected.json +24 -0
- package/test/resources/1111111/user/template-expected.json +16 -0
- package/test/resources/1111111/user/update-expected.json +21 -0
- package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/delete-response.json +1 -0
- package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/get-response.json +17 -0
- package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/patch-response.json +3 -3
- package/test/resources/9999999/automation/v1/queries/get-response.json +21 -4
- package/test/resources/9999999/automation/v1/queries/post-response.json +4 -4
- package/test/resources/9999999/data/v1/customobjectdata/key/{childBU_dataextension_test → testExisting_dataExtension}/rowset/get-response.json +1 -1
- package/test/resources/9999999/dataExtension/build-expected.json +3 -3
- package/test/resources/9999999/dataExtension/create-expected.json +2 -2
- package/test/resources/9999999/dataExtension/create-response.xml +8 -3
- package/test/resources/9999999/dataExtension/retrieve-expected.json +3 -3
- package/test/resources/9999999/dataExtension/retrieve-response.xml +9 -4
- package/test/resources/9999999/dataExtension/template-expected.json +3 -3
- package/test/resources/9999999/dataExtension/update-expected.json +3 -3
- package/test/resources/9999999/dataExtension/update-response.xml +9 -4
- package/test/resources/9999999/dataExtensionField/retrieve-response.xml +14 -9
- package/test/resources/9999999/interaction/v1/interactions/get-response.json +312 -0
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_interaction/get-response.json +312 -0
- package/test/resources/9999999/interaction/v1/interactions/key_testExisting_interaction/put-response.json +592 -0
- package/test/resources/9999999/journey/build-expected.json +572 -0
- package/test/resources/9999999/journey/get-expected.json +576 -0
- package/test/resources/9999999/journey/put-expected.json +576 -0
- package/test/resources/9999999/journey/template-expected.json +572 -0
- package/test/resources/9999999/legacy/v1/beta/mobile/keyword/NXV4ZFMwTEFwRVczd3RaLUF5X3p5dzo4Njow/get-response.json +42 -0
- package/test/resources/9999999/legacy/v1/beta/mobile/keyword/cTVJaG5oSDJPVUNHcUh6Z3pQT2tVdzo4Njow/delete-response.json +0 -0
- package/test/resources/9999999/legacy/v1/beta/mobile/keyword/get-response.json +1 -0
- package/test/resources/9999999/legacy/v1/beta/mobile/keyword/post-response.json +3 -0
- package/test/resources/9999999/legacy/v1/beta/mobile/message/NTIzOjc4OjA/delete-response.json +0 -0
- package/test/resources/9999999/legacy/v1/beta/mobile/message/NTIzOjc4OjA/get-response.json +106 -0
- package/test/resources/9999999/legacy/v1/beta/mobile/message/NTIzOjc4OjA/post-response.json +0 -0
- package/test/resources/9999999/legacy/v1/beta/mobile/message/NTQ3Ojc4OjA/get-response.json +127 -0
- package/test/resources/9999999/legacy/v1/beta/mobile/message/get-response.json +129 -0
- package/test/resources/9999999/legacy/v1/beta/mobile/message/post-response.json +3 -0
- package/test/resources/9999999/legacy/v1/beta2/data/campaign/get-response.json +29 -0
- package/test/resources/9999999/messaging/v1/email/definitions/post-response.json +1 -1
- package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail/get-response.json +1 -1
- package/test/resources/9999999/messaging/v1/email/definitions/testExisting_temail/patch-response.json +1 -1
- package/test/resources/9999999/mobileKeyword/build-expected.amp +2 -0
- package/test/resources/9999999/mobileKeyword/build-expected.json +9 -0
- package/test/resources/9999999/mobileKeyword/get-expected.amp +2 -0
- package/test/resources/9999999/mobileKeyword/get-expected.json +15 -0
- package/test/resources/9999999/mobileKeyword/post-create-expected.amp +2 -0
- package/test/resources/9999999/mobileKeyword/post-create-expected.json +17 -0
- package/test/resources/9999999/mobileKeyword/template-expected.amp +2 -0
- package/test/resources/9999999/mobileKeyword/template-expected.json +9 -0
- package/test/resources/9999999/mobileMessage/build-expected.amp +1 -0
- package/test/resources/9999999/mobileMessage/build-expected.json +60 -0
- package/test/resources/9999999/mobileMessage/get-expected.amp +1 -0
- package/test/resources/9999999/mobileMessage/get-expected.json +61 -0
- package/test/resources/9999999/mobileMessage/post-create-expected.amp +1 -0
- package/test/resources/9999999/mobileMessage/post-create-expected.json +63 -0
- package/test/resources/9999999/mobileMessage/post-update-expected.amp +1 -0
- package/test/resources/9999999/mobileMessage/post-update-expected.json +61 -0
- package/test/resources/9999999/mobileMessage/template-expected.amp +1 -0
- package/test/resources/9999999/mobileMessage/template-expected.json +60 -0
- package/test/resources/9999999/query/build-expected.json +1 -1
- package/test/resources/9999999/query/get-expected.json +1 -1
- package/test/resources/9999999/query/get2-expected.json +11 -0
- package/test/resources/9999999/query/patch-expected.json +1 -1
- package/test/resources/9999999/query/post-expected.json +1 -1
- package/test/resources/9999999/query/template-expected.json +1 -1
- package/test/resources/9999999/queryDefinition/retrieve-response.xml +30 -0
- package/test/resources/9999999/transactionalEmail/build-expected.json +5 -5
- package/test/resources/9999999/transactionalEmail/get-expected.json +1 -1
- package/test/resources/9999999/transactionalEmail/patch-expected.json +1 -1
- package/test/resources/9999999/transactionalEmail/post-expected.json +1 -1
- package/test/resources/9999999/transactionalEmail/template-expected.json +5 -5
- package/test/resources/9999999/transactionalPush/build-expected.json +2 -2
- package/test/resources/9999999/transactionalPush/template-expected.json +2 -2
- package/test/resources/9999999/transactionalSMS/build-expected.json +3 -3
- package/test/resources/9999999/transactionalSMS/template-expected.json +3 -3
- package/test/{dataExtension.test.js → type.dataExtension.test.js} +78 -21
- package/test/{interaction.test.js → type.journey.test.js} +64 -30
- package/test/type.mobileKeyword.test.js +250 -0
- package/test/type.mobileMessage.test.js +205 -0
- package/test/{query.test.js → type.query.test.js} +102 -5
- package/test/{transactionalEmail.test.js → type.transactionalEmail.test.js} +40 -2
- package/test/{transactionalPush.test.js → type.transactionalPush.test.js} +41 -2
- package/test/{transactionalSMS.test.js → type.transactionalSMS.test.js} +73 -3
- package/test/type.user.test.js +160 -0
- package/test/utils.js +17 -5
- package/types/mcdev.d.js +48 -15
- package/.github/workflows/code-analysis.yml +0 -57
- package/lib/metadataTypes/AccountUser.js +0 -426
- package/lib/metadataTypes/definitions/AccountUser.definition.js +0 -227
- package/test/mockRoot/deploy/testInstance/testBU/interaction/testExisting_interaction.interaction-meta.json +0 -266
- package/test/resources/9999999/interaction/build-expected.json +0 -260
- package/test/resources/9999999/interaction/get-expected.json +0 -264
- package/test/resources/9999999/interaction/put-expected.json +0 -264
- package/test/resources/9999999/interaction/template-expected.json +0 -260
- package/test/resources/9999999/interaction/v1/interactions/put-response.json +0 -280
- /package/test/mockRoot/deploy/testInstance/testBU/{interaction → journey}/testNew_interaction.interaction-meta.json +0 -0
- /package/test/resources/9999999/{interaction → journey}/post-expected.json +0 -0
package/lib/Builder.js
CHANGED
|
@@ -206,7 +206,12 @@ saved
|
|
|
206
206
|
if (!(await config.checkProperties(properties))) {
|
|
207
207
|
return null;
|
|
208
208
|
}
|
|
209
|
-
|
|
209
|
+
try {
|
|
210
|
+
Util.verifyMarketList(listName, properties);
|
|
211
|
+
} catch (ex) {
|
|
212
|
+
Util.logger.error(ex.message);
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
210
215
|
if (type && !MetadataTypeInfo[type]) {
|
|
211
216
|
Util.logger.error(`:: '${type}' is not a valid metadata type`);
|
|
212
217
|
return;
|
package/lib/Deployer.js
CHANGED
|
@@ -38,8 +38,6 @@ class Deployer {
|
|
|
38
38
|
// prep folders for auto-creation
|
|
39
39
|
MetadataTypeInfo.folder.client = auth.getSDK(buObject);
|
|
40
40
|
MetadataTypeInfo.folder.properties = this.properties;
|
|
41
|
-
// Remove tmp folder of previous deploys
|
|
42
|
-
File.removeSync('tmp');
|
|
43
41
|
}
|
|
44
42
|
/**
|
|
45
43
|
* Deploys all metadata located in the 'deploy' directory to the specified business unit
|
|
@@ -82,6 +80,10 @@ class Deployer {
|
|
|
82
80
|
}
|
|
83
81
|
let counter_credBu = 0;
|
|
84
82
|
if (businessUnit === '*') {
|
|
83
|
+
if (Util.OPTIONS.changeKeyValue) {
|
|
84
|
+
Util.logger.error('--changeKeyValue is not supported for deployments to all BUs');
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
85
87
|
// all credentials and all BUs shall be deployed to
|
|
86
88
|
const deployFolders = await File.readDirectories(
|
|
87
89
|
properties.directories.deploy,
|
|
@@ -129,6 +131,12 @@ class Deployer {
|
|
|
129
131
|
}
|
|
130
132
|
|
|
131
133
|
if (bu === '*' && properties.credentials && properties.credentials[cred]) {
|
|
134
|
+
if (Util.OPTIONS.changeKeyValue) {
|
|
135
|
+
Util.logger.error(
|
|
136
|
+
'--changeKeyValue is not supported for deployments to all BUs'
|
|
137
|
+
);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
132
140
|
// valid credential given and -all- BUs targeted
|
|
133
141
|
Util.logger.info(`\n :: Deploying all BUs for ${cred}`);
|
|
134
142
|
let counter_credBu = 0;
|
|
@@ -185,7 +193,7 @@ class Deployer {
|
|
|
185
193
|
*/
|
|
186
194
|
static async _deployBU(cred, bu, properties, typeArr, keyArr, fromRetrieve) {
|
|
187
195
|
const buPath = `${cred}/${bu}`;
|
|
188
|
-
Util.logger.info(`::Deploying ${buPath}`);
|
|
196
|
+
Util.logger.info(`:: Deploying to ${buPath}`);
|
|
189
197
|
const buObject = await Cli.getCredentialObject(properties, buPath, null, true);
|
|
190
198
|
let multiMetadataTypeMap;
|
|
191
199
|
|
|
@@ -208,13 +216,16 @@ class Deployer {
|
|
|
208
216
|
* @param {TYPE.SupportedMetadataTypes[]} [typeArr] limit deployment to given metadata type (can include subtype)
|
|
209
217
|
* @param {string[]} [keyArr] limit deployment to given metadata keys
|
|
210
218
|
* @param {boolean} [fromRetrieve] if true, no folders will be updated/created
|
|
219
|
+
* @param {boolean} [isRefresh] optional flag to indicate that triggeredSend should be refreshed after deployment of assets
|
|
211
220
|
* @returns {Promise.<TYPE.MultiMetadataTypeMap>} Promise of all deployed metadata
|
|
212
221
|
*/
|
|
213
|
-
async _deploy(typeArr, keyArr, fromRetrieve) {
|
|
222
|
+
async _deploy(typeArr, keyArr, fromRetrieve, isRefresh) {
|
|
214
223
|
if (await File.pathExists(this.deployDir)) {
|
|
215
224
|
/** @type {TYPE.MultiMetadataTypeMap} */
|
|
216
225
|
this.metadata = Deployer.readBUMetadata(this.deployDir, typeArr);
|
|
217
|
-
|
|
226
|
+
|
|
227
|
+
// filter found metadata by key if given
|
|
228
|
+
if (typeArr && Array.isArray(keyArr)) {
|
|
218
229
|
for (const selectedType of typeArr) {
|
|
219
230
|
const type = selectedType.split('-')[0];
|
|
220
231
|
this.metadata[type] = Util.filterObjByKeys(this.metadata[type], keyArr);
|
|
@@ -223,14 +234,25 @@ class Deployer {
|
|
|
223
234
|
} else {
|
|
224
235
|
this.metadata = null;
|
|
225
236
|
Util.logger.error(
|
|
226
|
-
'
|
|
237
|
+
'Please create a directory called deploy and include your metadata in it: ' +
|
|
227
238
|
this.deployDir
|
|
228
239
|
);
|
|
240
|
+
return null;
|
|
229
241
|
}
|
|
230
242
|
if (this.metadata === null || !Object.keys(this.metadata).length) {
|
|
231
243
|
Util.logger.error('No metadata found in deploy folder for selected BU');
|
|
232
244
|
return null;
|
|
233
245
|
}
|
|
246
|
+
if (Util.OPTIONS.changeKeyValue && Object.keys(this.metadata).length) {
|
|
247
|
+
if (Object.keys(this.metadata).length > 1) {
|
|
248
|
+
Util.logger.error('--changeKeyValue expects a single type to be deployed');
|
|
249
|
+
return null;
|
|
250
|
+
} else if (Object.keys(Object.values(this.metadata)[0]).length > 1) {
|
|
251
|
+
Util.logger.error('--changeKeyValue expects a single key to be deployed');
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
|
|
234
256
|
if (!fromRetrieve) {
|
|
235
257
|
await Deployer.createFolderDefinitions(
|
|
236
258
|
this.deployDir,
|
|
@@ -239,13 +261,14 @@ class Deployer {
|
|
|
239
261
|
);
|
|
240
262
|
}
|
|
241
263
|
const foundDeployTypes = Object.keys(this.metadata)
|
|
264
|
+
// remove empty types
|
|
265
|
+
.filter((type) => Object.keys(this.metadata[type]).length)
|
|
266
|
+
// make sure we keep the subtype in this list if that's what the user defined
|
|
242
267
|
.map((type) =>
|
|
243
268
|
type === 'asset' && Util.includesStartsWith(typeArr, type)
|
|
244
269
|
? typeArr[Util.includesStartsWithIndex(typeArr, type)]
|
|
245
270
|
: type
|
|
246
|
-
)
|
|
247
|
-
// remove empty types
|
|
248
|
-
.filter((type) => Object.keys(this.metadata[type]).length);
|
|
271
|
+
);
|
|
249
272
|
if (!foundDeployTypes.length) {
|
|
250
273
|
throw new Error('No metadata found for deployment');
|
|
251
274
|
}
|
|
@@ -275,7 +298,8 @@ class Deployer {
|
|
|
275
298
|
const result = await MetadataTypeInfo[type].deploy(
|
|
276
299
|
this.metadata[type],
|
|
277
300
|
this.deployDir,
|
|
278
|
-
this.retrieveDir
|
|
301
|
+
this.retrieveDir,
|
|
302
|
+
isRefresh
|
|
279
303
|
);
|
|
280
304
|
multiMetadataTypeMap[type] = result;
|
|
281
305
|
cache.mergeMetadata(type, result);
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Provides access to all metadataType classes
|
|
5
5
|
*/
|
|
6
6
|
const MetadataTypeDefinitions = {
|
|
7
|
-
accountUser: require('./metadataTypes/definitions/AccountUser.definition'),
|
|
8
7
|
asset: require('./metadataTypes/definitions/Asset.definition'),
|
|
9
8
|
attributeGroup: require('./metadataTypes/definitions/AttributeGroup.definition'),
|
|
10
9
|
automation: require('./metadataTypes/definitions/Automation.definition'),
|
|
@@ -17,25 +16,28 @@ const MetadataTypeDefinitions = {
|
|
|
17
16
|
dataExtractType: require('./metadataTypes/definitions/DataExtractType.definition'),
|
|
18
17
|
discovery: require('./metadataTypes/definitions/Discovery.definition'),
|
|
19
18
|
email: require('./metadataTypes/definitions/Email.definition'),
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
emailSend: require('./metadataTypes/definitions/EmailSend.definition'),
|
|
20
|
+
event: require('./metadataTypes/definitions/Event.definition'),
|
|
21
|
+
fileLocation: require('./metadataTypes/definitions/FileLocation.definition'),
|
|
22
22
|
fileTransfer: require('./metadataTypes/definitions/FileTransfer.definition'),
|
|
23
23
|
filter: require('./metadataTypes/definitions/Filter.definition'),
|
|
24
24
|
folder: require('./metadataTypes/definitions/Folder.definition'),
|
|
25
|
-
ftpLocation: require('./metadataTypes/definitions/FtpLocation.definition'),
|
|
26
25
|
importFile: require('./metadataTypes/definitions/ImportFile.definition'),
|
|
27
|
-
|
|
26
|
+
journey: require('./metadataTypes/definitions/Journey.definition'),
|
|
28
27
|
list: require('./metadataTypes/definitions/List.definition'),
|
|
29
28
|
mobileCode: require('./metadataTypes/definitions/MobileCode.definition'),
|
|
30
29
|
mobileKeyword: require('./metadataTypes/definitions/MobileKeyword.definition'),
|
|
30
|
+
mobileMessage: require('./metadataTypes/definitions/MobileMessage.definition'),
|
|
31
31
|
query: require('./metadataTypes/definitions/Query.definition'),
|
|
32
32
|
role: require('./metadataTypes/definitions/Role.definition'),
|
|
33
33
|
script: require('./metadataTypes/definitions/Script.definition'),
|
|
34
|
+
sendClassification: require('./metadataTypes/definitions/SendClassification.definition'),
|
|
34
35
|
setDefinition: require('./metadataTypes/definitions/SetDefinition.definition'),
|
|
35
36
|
transactionalEmail: require('./metadataTypes/definitions/TransactionalEmail.definition'),
|
|
36
37
|
transactionalPush: require('./metadataTypes/definitions/TransactionalPush.definition'),
|
|
37
38
|
transactionalSMS: require('./metadataTypes/definitions/TransactionalSMS.definition'),
|
|
38
|
-
|
|
39
|
+
triggeredSend: require('./metadataTypes/definitions/TriggeredSend.definition'),
|
|
40
|
+
user: require('./metadataTypes/definitions/User.definition'),
|
|
39
41
|
};
|
|
40
42
|
|
|
41
43
|
module.exports = MetadataTypeDefinitions;
|
package/lib/MetadataTypeInfo.js
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Provides access to all metadataType classes
|
|
5
5
|
*/
|
|
6
6
|
const MetadataTypeInfo = {
|
|
7
|
-
accountUser: require('./metadataTypes/AccountUser'),
|
|
8
7
|
asset: require('./metadataTypes/Asset'),
|
|
9
8
|
attributeGroup: require('./metadataTypes/AttributeGroup'),
|
|
10
9
|
automation: require('./metadataTypes/Automation'),
|
|
@@ -17,25 +16,28 @@ const MetadataTypeInfo = {
|
|
|
17
16
|
dataExtractType: require('./metadataTypes/DataExtractType'),
|
|
18
17
|
discovery: require('./metadataTypes/Discovery'),
|
|
19
18
|
email: require('./metadataTypes/Email'),
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
emailSend: require('./metadataTypes/EmailSend'),
|
|
20
|
+
event: require('./metadataTypes/Event'),
|
|
21
|
+
fileLocation: require('./metadataTypes/FileLocation'),
|
|
22
22
|
fileTransfer: require('./metadataTypes/FileTransfer'),
|
|
23
23
|
filter: require('./metadataTypes/Filter'),
|
|
24
24
|
folder: require('./metadataTypes/Folder'),
|
|
25
|
-
ftpLocation: require('./metadataTypes/FtpLocation'),
|
|
26
25
|
importFile: require('./metadataTypes/ImportFile'),
|
|
27
|
-
|
|
26
|
+
journey: require('./metadataTypes/Journey'),
|
|
28
27
|
list: require('./metadataTypes/List'),
|
|
29
28
|
mobileCode: require('./metadataTypes/MobileCode'),
|
|
30
29
|
mobileKeyword: require('./metadataTypes/MobileKeyword'),
|
|
30
|
+
mobileMessage: require('./metadataTypes/MobileMessage'),
|
|
31
31
|
query: require('./metadataTypes/Query'),
|
|
32
32
|
role: require('./metadataTypes/Role'),
|
|
33
33
|
script: require('./metadataTypes/Script'),
|
|
34
|
+
sendClassification: require('./metadataTypes/SendClassification'),
|
|
34
35
|
setDefinition: require('./metadataTypes/SetDefinition'),
|
|
35
36
|
transactionalEmail: require('./metadataTypes/TransactionalEmail'),
|
|
36
37
|
transactionalPush: require('./metadataTypes/TransactionalPush'),
|
|
37
38
|
transactionalSMS: require('./metadataTypes/TransactionalSMS'),
|
|
38
|
-
|
|
39
|
+
triggeredSend: require('./metadataTypes/TriggeredSend'),
|
|
40
|
+
user: require('./metadataTypes/User'),
|
|
39
41
|
};
|
|
40
42
|
|
|
41
43
|
module.exports = MetadataTypeInfo;
|
package/lib/Retriever.js
CHANGED
|
@@ -65,7 +65,10 @@ class Retriever {
|
|
|
65
65
|
for (const type in deployOrder) {
|
|
66
66
|
const subTypeArr = deployOrder[type];
|
|
67
67
|
// if types were added by getMetadataHierachy() for caching, make sure the key-list is set to [null] for them which will retrieve all
|
|
68
|
-
|
|
68
|
+
// if we have a subtype, we need to find the correct key-list for it
|
|
69
|
+
typeKeyMap[type] = typeKeyMap[type] ||
|
|
70
|
+
typeKeyMap[Object.keys(typeKeyMap).find((k) => k.startsWith(type + '-'))] || [null];
|
|
71
|
+
|
|
69
72
|
// add client to metadata process class instead of passing every time
|
|
70
73
|
MetadataTypeInfo[type].client = auth.getSDK(this.buObject);
|
|
71
74
|
MetadataTypeInfo[type].properties = this.properties;
|
package/lib/cli.js
CHANGED
|
@@ -34,13 +34,12 @@ yargs
|
|
|
34
34
|
});
|
|
35
35
|
},
|
|
36
36
|
handler: (argv) => {
|
|
37
|
-
Mcdev.
|
|
38
|
-
Mcdev.setLoggingLevel(argv);
|
|
37
|
+
Mcdev.setOptions(argv);
|
|
39
38
|
Mcdev.retrieve(argv.BU, csvToArray(argv.TYPE), csvToArray(argv.KEY));
|
|
40
39
|
},
|
|
41
40
|
})
|
|
42
41
|
.command({
|
|
43
|
-
command: 'deploy [BU] [TYPE] [KEY] [fromRetrieve]',
|
|
42
|
+
command: 'deploy [BU] [TYPE] [KEY] [--fromRetrieve] [--refresh]',
|
|
44
43
|
aliases: ['d'],
|
|
45
44
|
desc: 'deploys local metadata to a business unit',
|
|
46
45
|
builder: (yargs) => {
|
|
@@ -58,14 +57,29 @@ yargs
|
|
|
58
57
|
type: 'string',
|
|
59
58
|
describe: 'metadata key that shall be exclusively uploaded',
|
|
60
59
|
})
|
|
61
|
-
.
|
|
60
|
+
.option('changeKeyField', {
|
|
62
61
|
type: 'string',
|
|
62
|
+
describe:
|
|
63
|
+
'enables updating the key of the deployed metadata with the value in provided field (e.g. c__newKey). Can be used to sync name and key fields.',
|
|
64
|
+
})
|
|
65
|
+
.option('changeKeyValue', {
|
|
66
|
+
type: 'string',
|
|
67
|
+
describe:
|
|
68
|
+
'allows updating the key of the metadata to the provided value. Only available if a single type and key is deployed',
|
|
69
|
+
})
|
|
70
|
+
.option('fromRetrieve', {
|
|
71
|
+
type: 'boolean',
|
|
63
72
|
describe: 'optionally deploy from retrieve folder',
|
|
73
|
+
})
|
|
74
|
+
.option('refresh', {
|
|
75
|
+
type: 'boolean',
|
|
76
|
+
describe:
|
|
77
|
+
'optional for asset-message: runs refresh command for related triggeredSends after deploy',
|
|
64
78
|
});
|
|
65
79
|
},
|
|
66
80
|
handler: (argv) => {
|
|
67
|
-
Mcdev.
|
|
68
|
-
|
|
81
|
+
Mcdev.setOptions(argv);
|
|
82
|
+
|
|
69
83
|
Mcdev.deploy(argv.BU, csvToArray(argv.TYPE), csvToArray(argv.KEY), argv.fromRetrieve);
|
|
70
84
|
},
|
|
71
85
|
})
|
|
@@ -79,8 +93,7 @@ yargs
|
|
|
79
93
|
});
|
|
80
94
|
},
|
|
81
95
|
handler: (argv) => {
|
|
82
|
-
Mcdev.
|
|
83
|
-
Mcdev.setLoggingLevel(argv);
|
|
96
|
+
Mcdev.setOptions(argv);
|
|
84
97
|
Mcdev.initProject(argv.credentialsName);
|
|
85
98
|
},
|
|
86
99
|
})
|
|
@@ -88,8 +101,7 @@ yargs
|
|
|
88
101
|
command: 'join',
|
|
89
102
|
desc: `clones an existing project from git`,
|
|
90
103
|
handler: (argv) => {
|
|
91
|
-
Mcdev.
|
|
92
|
-
Mcdev.setLoggingLevel(argv);
|
|
104
|
+
Mcdev.setOptions(argv);
|
|
93
105
|
Mcdev.joinProject();
|
|
94
106
|
},
|
|
95
107
|
})
|
|
@@ -104,8 +116,7 @@ yargs
|
|
|
104
116
|
});
|
|
105
117
|
},
|
|
106
118
|
handler: (argv) => {
|
|
107
|
-
Mcdev.
|
|
108
|
-
Mcdev.setLoggingLevel(argv);
|
|
119
|
+
Mcdev.setOptions(argv);
|
|
109
120
|
Mcdev.findBUs(argv.credentialsName);
|
|
110
121
|
},
|
|
111
122
|
})
|
|
@@ -119,8 +130,7 @@ yargs
|
|
|
119
130
|
});
|
|
120
131
|
},
|
|
121
132
|
handler: (argv) => {
|
|
122
|
-
Mcdev.
|
|
123
|
-
Mcdev.setLoggingLevel(argv);
|
|
133
|
+
Mcdev.setOptions(argv);
|
|
124
134
|
Mcdev.badKeys(argv.BU);
|
|
125
135
|
},
|
|
126
136
|
})
|
|
@@ -142,8 +152,7 @@ yargs
|
|
|
142
152
|
});
|
|
143
153
|
},
|
|
144
154
|
handler: (argv) => {
|
|
145
|
-
Mcdev.
|
|
146
|
-
Mcdev.setLoggingLevel(argv);
|
|
155
|
+
Mcdev.setOptions(argv);
|
|
147
156
|
Mcdev.document(argv.BU, argv.TYPE);
|
|
148
157
|
},
|
|
149
158
|
})
|
|
@@ -168,8 +177,7 @@ yargs
|
|
|
168
177
|
});
|
|
169
178
|
},
|
|
170
179
|
handler: (argv) => {
|
|
171
|
-
Mcdev.
|
|
172
|
-
Mcdev.setLoggingLevel(argv);
|
|
180
|
+
Mcdev.setOptions(argv);
|
|
173
181
|
Mcdev.deleteByKey(argv.BU, argv.TYPE, argv.EXTERNALKEY);
|
|
174
182
|
},
|
|
175
183
|
})
|
|
@@ -198,8 +206,7 @@ yargs
|
|
|
198
206
|
});
|
|
199
207
|
},
|
|
200
208
|
handler: (argv) => {
|
|
201
|
-
Mcdev.
|
|
202
|
-
Mcdev.setLoggingLevel(argv);
|
|
209
|
+
Mcdev.setOptions(argv);
|
|
203
210
|
Mcdev.retrieveAsTemplate(argv.BU, argv.TYPE, csvToArray(argv.NAME), argv.MARKET);
|
|
204
211
|
},
|
|
205
212
|
})
|
|
@@ -228,8 +235,7 @@ yargs
|
|
|
228
235
|
});
|
|
229
236
|
},
|
|
230
237
|
handler: (argv) => {
|
|
231
|
-
Mcdev.
|
|
232
|
-
Mcdev.setLoggingLevel(argv);
|
|
238
|
+
Mcdev.setOptions(argv);
|
|
233
239
|
Mcdev.buildTemplate(argv.BU, argv.TYPE, csvToArray(argv.KEY), argv.MARKET);
|
|
234
240
|
},
|
|
235
241
|
})
|
|
@@ -257,8 +263,7 @@ yargs
|
|
|
257
263
|
});
|
|
258
264
|
},
|
|
259
265
|
handler: (argv) => {
|
|
260
|
-
Mcdev.
|
|
261
|
-
Mcdev.setLoggingLevel(argv);
|
|
266
|
+
Mcdev.setOptions(argv);
|
|
262
267
|
Mcdev.buildDefinition(argv.BU, argv.TYPE, argv.NAME, argv.MARKET);
|
|
263
268
|
},
|
|
264
269
|
})
|
|
@@ -282,8 +287,7 @@ yargs
|
|
|
282
287
|
});
|
|
283
288
|
},
|
|
284
289
|
handler: (argv) => {
|
|
285
|
-
Mcdev.
|
|
286
|
-
Mcdev.setLoggingLevel(argv);
|
|
290
|
+
Mcdev.setOptions(argv);
|
|
287
291
|
Mcdev.buildDefinitionBulk(argv.LISTNAME, argv.TYPE, argv.NAME);
|
|
288
292
|
},
|
|
289
293
|
})
|
|
@@ -292,8 +296,7 @@ yargs
|
|
|
292
296
|
aliases: ['st'],
|
|
293
297
|
desc: 'lets you choose what metadata types to retrieve',
|
|
294
298
|
handler: (argv) => {
|
|
295
|
-
Mcdev.
|
|
296
|
-
Mcdev.setLoggingLevel(argv);
|
|
299
|
+
Mcdev.setOptions(argv);
|
|
297
300
|
Mcdev.selectTypes();
|
|
298
301
|
},
|
|
299
302
|
})
|
|
@@ -301,14 +304,19 @@ yargs
|
|
|
301
304
|
command: 'explainTypes',
|
|
302
305
|
aliases: ['et'],
|
|
303
306
|
desc: 'explains metadata types that can be retrieved',
|
|
307
|
+
builder: (yargs) => {
|
|
308
|
+
yargs.option('json', {
|
|
309
|
+
type: 'boolean',
|
|
310
|
+
describe: 'optionaly return info in json format',
|
|
311
|
+
});
|
|
312
|
+
},
|
|
304
313
|
handler: (argv) => {
|
|
305
|
-
Mcdev.
|
|
306
|
-
Mcdev.setLoggingLevel(argv);
|
|
314
|
+
Mcdev.setOptions(argv);
|
|
307
315
|
Mcdev.explainTypes();
|
|
308
316
|
},
|
|
309
317
|
})
|
|
310
318
|
.command({
|
|
311
|
-
command: 'createDeltaPkg [range] [filter]',
|
|
319
|
+
command: 'createDeltaPkg [range] [--filter <BU>] [--commitHistory <number>]',
|
|
312
320
|
aliases: ['cdp'],
|
|
313
321
|
desc: 'Copies commit-based file delta into deploy folder',
|
|
314
322
|
builder: (yargs) => {
|
|
@@ -317,15 +325,18 @@ yargs
|
|
|
317
325
|
type: 'string',
|
|
318
326
|
describe: 'Pull Request target branch or git commit range',
|
|
319
327
|
})
|
|
320
|
-
.
|
|
328
|
+
.option('filter', {
|
|
321
329
|
type: 'string',
|
|
322
330
|
describe:
|
|
323
|
-
'Disable templating & instead filter by the specified
|
|
331
|
+
'Disable templating & instead filter by the specified BU path (comma separated), can include subtype, will be prefixed with "retrieve/"',
|
|
332
|
+
})
|
|
333
|
+
.option('commitHistory', {
|
|
334
|
+
type: 'number',
|
|
335
|
+
describe: 'Number of commits to look back for changes (supersedes config)',
|
|
324
336
|
});
|
|
325
337
|
},
|
|
326
338
|
handler: (argv) => {
|
|
327
|
-
Mcdev.
|
|
328
|
-
Mcdev.setLoggingLevel(argv);
|
|
339
|
+
Mcdev.setOptions(argv);
|
|
329
340
|
Mcdev.createDeltaPkg(argv);
|
|
330
341
|
},
|
|
331
342
|
})
|
|
@@ -350,8 +361,7 @@ yargs
|
|
|
350
361
|
});
|
|
351
362
|
},
|
|
352
363
|
handler: (argv) => {
|
|
353
|
-
Mcdev.
|
|
354
|
-
Mcdev.setLoggingLevel(argv);
|
|
364
|
+
Mcdev.setOptions(argv);
|
|
355
365
|
Mcdev.getFilesToCommit(argv.BU, argv.TYPE, csvToArray(argv.KEY));
|
|
356
366
|
},
|
|
357
367
|
})
|
|
@@ -375,8 +385,7 @@ yargs
|
|
|
375
385
|
});
|
|
376
386
|
},
|
|
377
387
|
handler: (argv) => {
|
|
378
|
-
Mcdev.
|
|
379
|
-
Mcdev.setLoggingLevel(argv);
|
|
388
|
+
Mcdev.setOptions(argv);
|
|
380
389
|
Mcdev.refresh(argv.BU, argv.TYPE, csvToArray(argv.KEY));
|
|
381
390
|
},
|
|
382
391
|
})
|
|
@@ -385,8 +394,7 @@ yargs
|
|
|
385
394
|
aliases: ['up'],
|
|
386
395
|
desc: 'Add NPM dependencies and IDE configuration files to your project',
|
|
387
396
|
handler: (argv) => {
|
|
388
|
-
Mcdev.
|
|
389
|
-
Mcdev.setLoggingLevel(argv);
|
|
397
|
+
Mcdev.setOptions(argv);
|
|
390
398
|
Mcdev.upgrade(argv.skipInteraction);
|
|
391
399
|
},
|
|
392
400
|
})
|
|
@@ -406,12 +414,16 @@ yargs
|
|
|
406
414
|
alias: ['yes', 'y'],
|
|
407
415
|
description: 'Interactive questions where possible and go with defaults instead',
|
|
408
416
|
})
|
|
417
|
+
.option('api', {
|
|
418
|
+
description: 'Print API calls to log ',
|
|
419
|
+
choices: ['log', 'cli'],
|
|
420
|
+
})
|
|
409
421
|
.demandCommand(1, 'Please enter a valid command')
|
|
410
422
|
.strict()
|
|
411
423
|
.recommendCommands()
|
|
412
424
|
.wrap(yargs.terminalWidth())
|
|
413
425
|
.epilog(
|
|
414
|
-
'Copyright
|
|
426
|
+
'Copyright 2023. Accenture. Get support at https://github.com/Accenture/sfmc-devtools/issues'
|
|
415
427
|
)
|
|
416
428
|
.help().argv;
|
|
417
429
|
|
package/lib/index.js
CHANGED
|
@@ -42,6 +42,42 @@ class Mcdev {
|
|
|
42
42
|
static setLoggingLevel(argv) {
|
|
43
43
|
Util.setLoggingLevel(argv);
|
|
44
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* allows setting system wide / command related options
|
|
47
|
+
*
|
|
48
|
+
* @param {object} argv list of command line parameters given by user
|
|
49
|
+
* @returns {void}
|
|
50
|
+
*/
|
|
51
|
+
static setOptions(argv) {
|
|
52
|
+
const knownOptions = [
|
|
53
|
+
'api',
|
|
54
|
+
'commitHistory',
|
|
55
|
+
'changeKeyField',
|
|
56
|
+
'changeKeyValue',
|
|
57
|
+
'filter',
|
|
58
|
+
'fromRetrieve',
|
|
59
|
+
'json',
|
|
60
|
+
'refresh',
|
|
61
|
+
'skipInteraction',
|
|
62
|
+
];
|
|
63
|
+
for (const option of knownOptions) {
|
|
64
|
+
if (argv[option] !== undefined) {
|
|
65
|
+
Util.OPTIONS[option] = argv[option];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// set logging level
|
|
69
|
+
const loggingOptions = ['silent', 'verbose', 'debug'];
|
|
70
|
+
for (const option of loggingOptions) {
|
|
71
|
+
if (argv[option] !== undefined) {
|
|
72
|
+
this.setLoggingLevel(argv);
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// set skip interaction
|
|
77
|
+
if (argv.skipInteraction !== undefined) {
|
|
78
|
+
this.setSkipInteraction(argv.skipInteraction);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
45
81
|
/**
|
|
46
82
|
* handler for 'mcdev createDeltaPkg
|
|
47
83
|
*
|
|
@@ -61,9 +97,14 @@ class Mcdev {
|
|
|
61
97
|
|
|
62
98
|
return argv.filter
|
|
63
99
|
? // get source market and source BU from config
|
|
64
|
-
DevOps.getDeltaList(properties, argv.range, true, argv.filter)
|
|
100
|
+
DevOps.getDeltaList(properties, argv.range, true, argv.filter, argv.commitHistory)
|
|
65
101
|
: // If no custom filter was provided, use deployment marketLists & templating
|
|
66
|
-
DevOps.buildDeltaDefinitions(
|
|
102
|
+
DevOps.buildDeltaDefinitions(
|
|
103
|
+
properties,
|
|
104
|
+
argv.range,
|
|
105
|
+
argv.diffArr,
|
|
106
|
+
argv.commitHistory
|
|
107
|
+
);
|
|
67
108
|
}
|
|
68
109
|
|
|
69
110
|
/**
|
|
@@ -77,10 +118,10 @@ class Mcdev {
|
|
|
77
118
|
await Cli.selectTypes(properties);
|
|
78
119
|
}
|
|
79
120
|
/**
|
|
80
|
-
* @returns {
|
|
121
|
+
* @returns {object[]} list of supported types with their apiNames
|
|
81
122
|
*/
|
|
82
123
|
static explainTypes() {
|
|
83
|
-
Cli.explainTypes();
|
|
124
|
+
return Cli.explainTypes();
|
|
84
125
|
}
|
|
85
126
|
/**
|
|
86
127
|
* @returns {Promise.<boolean>} success flag
|
|
@@ -214,6 +255,15 @@ class Mcdev {
|
|
|
214
255
|
cache.initCache(buObject);
|
|
215
256
|
cred = buObject.credential;
|
|
216
257
|
bu = buObject.businessUnit;
|
|
258
|
+
// clean up old folders after types were renamed
|
|
259
|
+
// TODO: Remove this with version 5.0.0
|
|
260
|
+
const renamedTypes = {
|
|
261
|
+
emailSend: 'emailSendDefinition',
|
|
262
|
+
event: 'eventDefinition',
|
|
263
|
+
fileLocation: 'ftpLocation',
|
|
264
|
+
triggeredSend: 'triggeredSendDefinition',
|
|
265
|
+
user: 'accountUser',
|
|
266
|
+
};
|
|
217
267
|
Util.logger.info(`\n :: Retrieving ${cred}/${bu}\n`);
|
|
218
268
|
const retrieveTypesArr = [];
|
|
219
269
|
if (selectedTypesArr) {
|
|
@@ -238,6 +288,18 @@ class Mcdev {
|
|
|
238
288
|
if (!keys) {
|
|
239
289
|
// dont delete directories if we are just re-retrieving a single file
|
|
240
290
|
await File.remove(File.normalizePath(removePathArr));
|
|
291
|
+
// clean up old folders after types were renamed
|
|
292
|
+
// TODO: Remove this with version 5.0.0
|
|
293
|
+
if (renamedTypes[type]) {
|
|
294
|
+
await File.remove(
|
|
295
|
+
File.normalizePath([
|
|
296
|
+
properties.directories.retrieve,
|
|
297
|
+
cred,
|
|
298
|
+
bu,
|
|
299
|
+
renamedTypes[type],
|
|
300
|
+
])
|
|
301
|
+
);
|
|
302
|
+
}
|
|
241
303
|
}
|
|
242
304
|
}
|
|
243
305
|
}
|
|
@@ -249,6 +311,15 @@ class Mcdev {
|
|
|
249
311
|
retrieveTypesArr.push(
|
|
250
312
|
...new Set(properties.metaDataTypes.retrieve.map((type) => type.split('-')[0]))
|
|
251
313
|
);
|
|
314
|
+
for (const selectedType of retrieveTypesArr) {
|
|
315
|
+
const test = Util._isValidType(selectedType);
|
|
316
|
+
if (!test) {
|
|
317
|
+
Util.logger.error(
|
|
318
|
+
`Please remove the type ${selectedType} from your ${Util.configFileName}`
|
|
319
|
+
);
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
252
323
|
}
|
|
253
324
|
const retriever = new Retriever(properties, buObject);
|
|
254
325
|
|
|
@@ -339,7 +410,7 @@ class Mcdev {
|
|
|
339
410
|
return;
|
|
340
411
|
}
|
|
341
412
|
try {
|
|
342
|
-
const parentBUOnlyTypes = ['
|
|
413
|
+
const parentBUOnlyTypes = ['user', 'role'];
|
|
343
414
|
const buObject = await Cli.getCredentialObject(
|
|
344
415
|
properties,
|
|
345
416
|
parentBUOnlyTypes.includes(type) ? businessUnit.split('/')[0] : businessUnit,
|
|
@@ -365,7 +436,7 @@ class Mcdev {
|
|
|
365
436
|
* @param {string} businessUnit references credentials from properties.json
|
|
366
437
|
* @param {string} type supported metadata type
|
|
367
438
|
* @param {string} customerKey Identifier of metadata
|
|
368
|
-
* @returns {Promise.<
|
|
439
|
+
* @returns {Promise.<boolean>} true if successful, false otherwise
|
|
369
440
|
*/
|
|
370
441
|
static async deleteByKey(businessUnit, type, customerKey) {
|
|
371
442
|
Util.logger.info('mcdev:: delete');
|
|
@@ -384,10 +455,13 @@ class Mcdev {
|
|
|
384
455
|
Util.logger.error(ex.message);
|
|
385
456
|
return;
|
|
386
457
|
}
|
|
458
|
+
Util.logger.info(
|
|
459
|
+
Util.getGrayMsg(` - Deleting ${type} with key ${customerKey} on BU ${businessUnit}`)
|
|
460
|
+
);
|
|
387
461
|
try {
|
|
388
462
|
MetadataTypeInfo[type].properties = properties;
|
|
389
463
|
MetadataTypeInfo[type].buObject = buObject;
|
|
390
|
-
await MetadataTypeInfo[type].deleteByKey(customerKey);
|
|
464
|
+
return await MetadataTypeInfo[type].deleteByKey(customerKey);
|
|
391
465
|
} catch (ex) {
|
|
392
466
|
Util.logger.errorStack(ex, ` - Deleting ${type} failed`);
|
|
393
467
|
}
|
|
@@ -404,7 +478,7 @@ class Mcdev {
|
|
|
404
478
|
static async refresh(businessUnit, type, keyArr) {
|
|
405
479
|
Util.logger.info('mcdev:: refresh');
|
|
406
480
|
if (!type || !Util._isValidType(type, true)) {
|
|
407
|
-
type = '
|
|
481
|
+
type = 'triggeredSend';
|
|
408
482
|
Util.logger.info(' - setting type to ' + type);
|
|
409
483
|
}
|
|
410
484
|
const properties = await config.getProperties();
|