mcdev 4.1.3 → 4.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/.github/ISSUE_TEMPLATE/bug.yml +2 -0
  2. package/.github/dependabot.yml +1 -1
  3. package/.github/workflows/code-analysis.yml +2 -2
  4. package/.github/workflows/npm-publish.yml +4 -4
  5. package/README.md +6 -6
  6. package/docs/dist/documentation.md +123 -166
  7. package/lib/Retriever.js +8 -2
  8. package/lib/cli.js +1 -1
  9. package/lib/index.js +5 -16
  10. package/lib/metadataTypes/Asset.js +17 -9
  11. package/lib/metadataTypes/Automation.js +23 -12
  12. package/lib/metadataTypes/ContentArea.js +20 -7
  13. package/lib/metadataTypes/DataExtension.js +30 -12
  14. package/lib/metadataTypes/Email.js +1 -14
  15. package/lib/metadataTypes/EmailSendDefinition.js +2 -13
  16. package/lib/metadataTypes/MetadataType.js +26 -0
  17. package/lib/metadataTypes/Query.js +1 -12
  18. package/lib/metadataTypes/Script.js +1 -11
  19. package/lib/metadataTypes/TriggeredSendDefinition.js +2 -13
  20. package/lib/metadataTypes/definitions/Automation.definition.js +1 -0
  21. package/lib/metadataTypes/definitions/ContentArea.definition.js +1 -0
  22. package/lib/metadataTypes/definitions/DataExtension.definition.js +1 -0
  23. package/lib/metadataTypes/definitions/Email.definition.js +1 -0
  24. package/lib/metadataTypes/definitions/EmailSendDefinition.definition.js +1 -0
  25. package/lib/metadataTypes/definitions/Query.definition.js +1 -0
  26. package/lib/metadataTypes/definitions/Script.definition.js +1 -0
  27. package/lib/metadataTypes/definitions/TriggeredSendDefinition.definition.js +1 -0
  28. package/lib/util/cli.js +10 -11
  29. package/lib/util/devops.js +2 -2
  30. package/lib/util/init.git.js +12 -13
  31. package/lib/util/init.js +13 -21
  32. package/package.json +3 -3
  33. package/test/mockRoot/.mcdevrc.json +1 -1
package/lib/Retriever.js CHANGED
@@ -74,8 +74,8 @@ class Retriever {
74
74
  try {
75
75
  let result;
76
76
  if (!metadataTypes.includes(type) && !metadataTypes.includes(metadataType)) {
77
- if (changelogOnly) {
78
- // no extra caching needed for list view
77
+ if (changelogOnly && type !== 'folder') {
78
+ // no extra caching needed for list view except for folders
79
79
  continue;
80
80
  }
81
81
  Util.logger.info(`Caching dependent Metadata: ${metadataType}`);
@@ -115,6 +115,12 @@ class Retriever {
115
115
  )
116
116
  )
117
117
  ));
118
+ if (changelogOnly) {
119
+ // add folder to changelog
120
+ for (const key of Object.keys(result.metadata)) {
121
+ MetadataTypeInfo[type].setFolderPath(result.metadata[key]);
122
+ }
123
+ }
118
124
  }
119
125
  if (result) {
120
126
  if (Array.isArray(result)) {
package/lib/cli.js CHANGED
@@ -81,7 +81,7 @@ yargs
81
81
  handler: (argv) => {
82
82
  Mcdev.setSkipInteraction(argv.skipInteraction);
83
83
  Mcdev.setLoggingLevel(argv);
84
- Mcdev.initProject(argv.credentialsName, argv.skipInteraction);
84
+ Mcdev.initProject(argv.credentialsName);
85
85
  },
86
86
  })
87
87
  .command({
package/lib/index.js CHANGED
@@ -50,12 +50,10 @@ class Mcdev {
50
50
  into deploy directory
51
51
  * @param {string} [argv.filter] filter file paths that start with any
52
52
  * @param {TYPE.DeltaPkgItem[]} [argv.diffArr] list of files to include in delta package (skips git diff when provided)
53
- * @param {TYPE.skipInteraction} [argv.skipInteraction] allows to skip interactive wizard
54
53
  * @returns {Promise.<TYPE.DeltaPkgItem[]>} list of changed items
55
54
  */
56
55
  static async createDeltaPkg(argv) {
57
56
  Util.logger.info('Create Delta Package ::');
58
- Mcdev.setSkipInteraction(argv.skipInteraction);
59
57
  const properties = await config.getProperties();
60
58
  if (!(await config.checkProperties(properties))) {
61
59
  return null;
@@ -65,12 +63,7 @@ class Mcdev {
65
63
  ? // get source market and source BU from config
66
64
  DevOps.getDeltaList(properties, argv.range, true, argv.filter)
67
65
  : // If no custom filter was provided, use deployment marketLists & templating
68
- DevOps.buildDeltaDefinitions(
69
- properties,
70
- argv.range,
71
- argv.diffArr,
72
- argv.skipInteraction
73
- );
66
+ DevOps.buildDeltaDefinitions(properties, argv.range, argv.diffArr);
74
67
  }
75
68
 
76
69
  /**
@@ -90,17 +83,15 @@ class Mcdev {
90
83
  Cli.explainTypes();
91
84
  }
92
85
  /**
93
- * @param {boolean | TYPE.skipInteraction} [skipInteraction] signals what to insert automatically for things usually asked via wizard
94
86
  * @returns {Promise.<boolean>} success flag
95
87
  */
96
- static async upgrade(skipInteraction) {
97
- Mcdev.setSkipInteraction(skipInteraction);
88
+ static async upgrade() {
98
89
  const properties = await config.getProperties();
99
90
  if (!properties) {
100
91
  Util.logger.error('No config found. Please run mcdev init');
101
92
  return false;
102
93
  }
103
- if ((await InitGit.initGitRepo(skipInteraction)).status === 'error') {
94
+ if ((await InitGit.initGitRepo()).status === 'error') {
104
95
  return false;
105
96
  }
106
97
 
@@ -295,14 +286,12 @@ class Mcdev {
295
286
  * Creates template file for properties.json
296
287
  *
297
288
  * @param {string} [credentialsName] identifying name of the installed package / project
298
- * @param {boolean | TYPE.skipInteraction} [skipInteraction] signals what to insert automatically for things usually asked via wizard
299
289
  * @returns {Promise.<void>} -
300
290
  */
301
- static async initProject(credentialsName, skipInteraction) {
291
+ static async initProject(credentialsName) {
302
292
  Util.logger.info('mcdev:: Setting up project');
303
- Mcdev.setSkipInteraction(skipInteraction);
304
293
  const properties = await config.getProperties(!!credentialsName);
305
- await Init.initProject(properties, credentialsName, skipInteraction);
294
+ await Init.initProject(properties, credentialsName);
306
295
  }
307
296
 
308
297
  /**
@@ -755,15 +755,12 @@ class Asset extends MetadataType {
755
755
  }
756
756
  }
757
757
  }
758
-
759
758
  /**
760
- * parses retrieved Metadata before saving
759
+ * generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve
761
760
  *
762
- * @param {TYPE.AssetItem} metadata a single asset definition
763
- * @returns {TYPE.CodeExtractItem} parsed metadata definition
761
+ * @param {TYPE.MetadataTypeItem} metadata a single script activity definition
764
762
  */
765
- static parseMetadata(metadata) {
766
- // folder
763
+ static setFolderPath(metadata) {
767
764
  try {
768
765
  metadata.r__folder_Path = cache.searchForField(
769
766
  'folder',
@@ -773,12 +770,23 @@ class Asset extends MetadataType {
773
770
  );
774
771
  delete metadata.category;
775
772
  } catch (ex) {
776
- // ! if we don't catch this error here we end up saving the actual asset but not its corresponding JSON
777
- Util.logger.debug(ex.message);
778
773
  Util.logger.warn(
779
- ` - Could not find folder with ID ${metadata.category.id} for '${metadata.name}' (${metadata.customerKey})`
774
+ ` - ${this.definition.type} '${metadata[this.definition.nameField]}' (${
775
+ metadata[this.definition.keyField]
776
+ }): Could not find folder (${ex.message})`
780
777
  );
781
778
  }
779
+ }
780
+
781
+ /**
782
+ * parses retrieved Metadata before saving
783
+ *
784
+ * @param {TYPE.AssetItem} metadata a single asset definition
785
+ * @returns {TYPE.CodeExtractItem} parsed metadata definition
786
+ */
787
+ static parseMetadata(metadata) {
788
+ // folder
789
+ this.setFolderPath(metadata);
782
790
  // extract HTML for selected subtypes and convert payload for easier processing in MetadataType.saveResults()
783
791
  metadata = this._extractCode(metadata);
784
792
  return metadata;
@@ -73,6 +73,7 @@ class Automation extends MetadataType {
73
73
  'ProgramID',
74
74
  'Name',
75
75
  'CustomerKey',
76
+ 'CategoryID',
76
77
  'LastSaveDate',
77
78
  'LastSavedBy',
78
79
  'CreatedBy',
@@ -457,23 +458,23 @@ class Automation extends MetadataType {
457
458
  }
458
459
  }
459
460
  }
460
-
461
461
  /**
462
- * parses retrieved Metadata before saving
462
+ * generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve
463
463
  *
464
- * @param {TYPE.AutomationItem} metadata a single automation definition
465
- * @returns {TYPE.AutomationItem} parsed item
464
+ * @param {TYPE.MetadataTypeItem} metadata a single script activity definition
466
465
  */
467
- static parseMetadata(metadata) {
468
- // automations are often skipped due to lack of support.
466
+ static setFolderPath(metadata) {
467
+ const folderIdField = metadata[this.definition.folderIdField]
468
+ ? this.definition.folderIdField
469
+ : 'CategoryID';
469
470
  try {
470
471
  metadata.r__folder_Path = cache.searchForField(
471
472
  'folder',
472
- metadata.categoryId,
473
+ metadata[folderIdField],
473
474
  'ID',
474
475
  'Path'
475
476
  );
476
- delete metadata.categoryId;
477
+ delete metadata[folderIdField];
477
478
  if (metadata.r__folder_Path !== 'my automations') {
478
479
  Util.logger.verbose(
479
480
  `- automation '${
@@ -484,13 +485,23 @@ class Automation extends MetadataType {
484
485
  );
485
486
  }
486
487
  } catch (ex) {
487
- // * don't exit on missing folder for automation
488
488
  Util.logger.warn(
489
- ` - ${this.definition.typeName} '${metadata[this.definition.nameField]}': ${
490
- ex.message
491
- }`
489
+ ` - ${this.definition.type} '${metadata[this.definition.nameField]}' (${
490
+ metadata[this.definition.keyField]
491
+ }): Could not find folder (${ex.message})`
492
492
  );
493
493
  }
494
+ }
495
+
496
+ /**
497
+ * parses retrieved Metadata before saving
498
+ *
499
+ * @param {TYPE.AutomationItem} metadata a single automation definition
500
+ * @returns {TYPE.AutomationItem} parsed item
501
+ */
502
+ static parseMetadata(metadata) {
503
+ this.setFolderPath(metadata);
504
+ // automations are often skipped due to lack of support.
494
505
  try {
495
506
  if (metadata.type === 'scheduled' && metadata.schedule?.startDate) {
496
507
  // Starting Source == 'Schedule'
@@ -49,27 +49,40 @@ class ContentArea extends MetadataType {
49
49
  return this.parseMetadata(metadata);
50
50
  }
51
51
  /**
52
- * parses retrieved Metadata before saving
52
+ * generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve
53
53
  *
54
- * @param {TYPE.MetadataTypeItem} metadata a single item
55
- * @returns {TYPE.MetadataTypeItem} parsed item
54
+ * @param {TYPE.MetadataTypeItem} metadata a single script activity definition
56
55
  */
57
- static parseMetadata(metadata) {
58
- // folder
56
+ static setFolderPath(metadata) {
59
57
  try {
60
58
  metadata.r__folder_Path = cache.searchForField(
61
59
  'folder',
62
- metadata.CategoryID,
60
+ metadata[this.definition.folderIdField],
63
61
  'ID',
64
62
  'Path'
65
63
  );
64
+ delete metadata[this.definition.folderIdField];
66
65
  } catch (ex) {
67
- Util.logger.debug(`Classic Content Area '${metadata.CustomerKey}': ${ex.message}`);
66
+ Util.logger.debug(
67
+ ` - ${this.definition.type} '${metadata[this.definition.nameField]}' (${
68
+ metadata[this.definition.keyField]
69
+ }): Could not find folder (${ex.message})`
70
+ );
68
71
  // classic content blocks that reside in the main folder are
69
72
  // saved with CategoryID=0, instead of to the actual ID of
70
73
  // their parent root folder.
71
74
  metadata.r__folder_Path = 'my contents';
72
75
  }
76
+ }
77
+ /**
78
+ * parses retrieved Metadata before saving
79
+ *
80
+ * @param {TYPE.MetadataTypeItem} metadata a single item
81
+ * @returns {TYPE.MetadataTypeItem} parsed item
82
+ */
83
+ static parseMetadata(metadata) {
84
+ // folder
85
+ this.setFolderPath(metadata);
73
86
 
74
87
  // extract code
75
88
  const codeArr = [
@@ -914,22 +914,20 @@ class DataExtension extends MetadataType {
914
914
 
915
915
  return { metadata: metadata[customerKey], type: 'dataExtension' };
916
916
  }
917
-
918
917
  /**
919
- * parses retrieved Metadata before saving
918
+ * dataExtension logic that retrieves the folder path from cache and updates the given metadata with it after retrieve
919
+ * it also sets the content type which is basically the subtype
920
920
  *
921
- * @private
922
- * @param {TYPE.DataExtensionItem} metadata a single dataExtension definition
923
- * @returns {TYPE.DataExtensionItem} a single dataExtension definition
921
+ * @param {TYPE.MetadataTypeItem} metadata a single script activity definition
924
922
  */
925
- static _parseMetadata(metadata) {
923
+ static setFolderPath(metadata) {
926
924
  let error = false;
927
925
  let verbose = false;
928
926
  // data extension type (from folder)
929
927
  try {
930
928
  metadata.r__folder_ContentType = cache.searchForField(
931
929
  'folder',
932
- metadata.CategoryID,
930
+ metadata[this.definition.folderIdField],
933
931
  'ID',
934
932
  'ContentType'
935
933
  );
@@ -939,22 +937,26 @@ class DataExtension extends MetadataType {
939
937
  metadata.r__folder_ContentType = 'synchronizeddataextension';
940
938
  } else {
941
939
  error = true;
942
- Util.logger.warn(` - dataExtension '${metadata.Name}': ${ex.message}`);
940
+ Util.logger.warn(
941
+ ` - ${this.definition.type} '${metadata[this.definition.nameField]}' (${
942
+ metadata[this.definition.keyField]
943
+ }): Could not find folder (${ex.message})`
944
+ );
943
945
  }
944
946
  }
945
947
  // folder
946
948
  try {
947
949
  metadata.r__folder_Path = cache.searchForField(
948
950
  'folder',
949
- metadata.CategoryID,
951
+ metadata[this.definition.folderIdField],
950
952
  'ID',
951
953
  'Path'
952
954
  );
953
- delete metadata.CategoryID;
955
+ delete metadata[this.definition.folderIdField];
954
956
  } catch (ex) {
955
957
  if (/(_Salesforce)(_\d\d?\d?)?$/.test(metadata.Name)) {
956
958
  metadata.r__folder_Path = 'Synchronized Data Extensions';
957
- delete metadata.CategoryID;
959
+ delete metadata[this.definition.folderIdField];
958
960
 
959
961
  if (!verbose) {
960
962
  Util.logger.verbose(
@@ -962,9 +964,25 @@ class DataExtension extends MetadataType {
962
964
  );
963
965
  }
964
966
  } else if (!error) {
965
- Util.logger.error(`Data Extension '${metadata.Name}': ${ex.message}`);
967
+ Util.logger.error(
968
+ ` - ${this.definition.type} '${metadata[this.definition.nameField]}' (${
969
+ metadata[this.definition.keyField]
970
+ }): ${ex.message}`
971
+ );
966
972
  }
967
973
  }
974
+ }
975
+
976
+ /**
977
+ * parses retrieved Metadata before saving
978
+ *
979
+ * @private
980
+ * @param {TYPE.DataExtensionItem} metadata a single dataExtension definition
981
+ * @returns {TYPE.DataExtensionItem} a single dataExtension definition
982
+ */
983
+ static _parseMetadata(metadata) {
984
+ this.setFolderPath(metadata);
985
+
968
986
  // DataExtensionTemplate
969
987
  if (metadata.Template?.CustomerKey) {
970
988
  try {
@@ -3,7 +3,6 @@
3
3
  const TYPE = require('../../types/mcdev.d');
4
4
  const MetadataType = require('./MetadataType');
5
5
  const Util = require('../util/util');
6
- const cache = require('../util/cache');
7
6
 
8
7
  /**
9
8
  * Email MetadataType
@@ -56,19 +55,7 @@ class Email extends MetadataType {
56
55
  */
57
56
  static parseMetadata(metadata) {
58
57
  // folder
59
- try {
60
- metadata.r__folder_Path = cache.searchForField(
61
- 'folder',
62
- metadata.CategoryID,
63
- 'ID',
64
- 'Path'
65
- );
66
- delete metadata.CategoryID;
67
- } catch (ex) {
68
- Util.logger.warn(
69
- ` - Classic E-Mail '${metadata.Name}'/'${metadata.CustomerKey}': ${ex.message}`
70
- );
71
- }
58
+ super.setFolderPath(metadata);
72
59
 
73
60
  // extract code
74
61
  const codeArr = [
@@ -182,19 +182,8 @@ class EmailSendDefinition extends MetadataType {
182
182
  // remove IsPlatformObject, always has to be 'false'
183
183
  delete metadata.IsPlatformObject;
184
184
  // folder
185
- try {
186
- metadata.r__folder_Path = cache.searchForField(
187
- 'folder',
188
- metadata.CategoryID,
189
- 'ID',
190
- 'Path'
191
- );
192
- delete metadata.CategoryID;
193
- } catch (ex) {
194
- Util.logger.warn(
195
- ` - ${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': ${ex.message}`
196
- );
197
- }
185
+ super.setFolderPath(metadata);
186
+
198
187
  // email
199
188
  try {
200
189
  // classic
@@ -141,6 +141,32 @@ class MetadataType {
141
141
  static postRetrieveTasks(metadata, targetDir, isTemplating) {
142
142
  return JSON.parse(JSON.stringify(metadata));
143
143
  }
144
+ /**
145
+ * generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve
146
+ *
147
+ * @param {TYPE.MetadataTypeItem} metadata a single script activity definition
148
+ */
149
+ static setFolderPath(metadata) {
150
+ if (!this.definition.folderIdField) {
151
+ return;
152
+ }
153
+ try {
154
+ metadata.r__folder_Path = cache.searchForField(
155
+ 'folder',
156
+ metadata[this.definition.folderIdField],
157
+ 'ID',
158
+ 'Path'
159
+ );
160
+ delete metadata[this.definition.folderIdField];
161
+ } catch (ex) {
162
+ Util.logger.warn(
163
+ ` - ${this.definition.type} '${metadata[this.definition.nameField]}' (${
164
+ metadata[this.definition.keyField]
165
+ }): Could not find folder (${ex.message})`
166
+ );
167
+ }
168
+ }
169
+
144
170
  /**
145
171
  * Gets metadata from Marketing Cloud
146
172
  *
@@ -2,7 +2,6 @@
2
2
 
3
3
  const TYPE = require('../../types/mcdev.d');
4
4
  const MetadataType = require('./MetadataType');
5
- const Util = require('../util/util');
6
5
  const File = require('../util/file');
7
6
  const cache = require('../util/cache');
8
7
  const Mustache = require('mustache');
@@ -287,17 +286,7 @@ class Query extends MetadataType {
287
286
  */
288
287
  static parseMetadata(metadata) {
289
288
  // folder
290
- try {
291
- metadata.r__folder_Path = cache.searchForField(
292
- 'folder',
293
- metadata.categoryId,
294
- 'ID',
295
- 'Path'
296
- );
297
- delete metadata.categoryId;
298
- } catch (ex) {
299
- Util.logger.warn(` - Query '${metadata.key}': ${ex.message}`);
300
- }
289
+ super.setFolderPath(metadata);
301
290
 
302
291
  // extract SQL
303
292
  const codeArr = [
@@ -261,17 +261,7 @@ class Script extends MetadataType {
261
261
  */
262
262
  static parseMetadata(metadata) {
263
263
  // folder
264
- try {
265
- metadata.r__folder_Path = cache.searchForField(
266
- 'folder',
267
- metadata.categoryId,
268
- 'ID',
269
- 'Path'
270
- );
271
- delete metadata.categoryId;
272
- } catch (ex) {
273
- Util.logger.warn(` - Script '${metadata.key}': ${ex.message}`);
274
- }
264
+ super.setFolderPath(metadata);
275
265
 
276
266
  // extract SSJS
277
267
  const codeArr = [];
@@ -137,19 +137,8 @@ class TriggeredSendDefinition extends MetadataType {
137
137
  // remove IsPlatformObject, always has to be 'false'
138
138
  delete metadata.IsPlatformObject;
139
139
  // folder
140
- try {
141
- metadata.r__folder_Path = cache.searchForField(
142
- 'folder',
143
- metadata.CategoryID,
144
- 'ID',
145
- 'Path'
146
- );
147
- delete metadata.CategoryID;
148
- } catch (ex) {
149
- Util.logger.warn(
150
- ` - Triggered Send '${metadata.Name}'/'${metadata.CustomerKey}': ${ex.message}`
151
- );
152
- }
140
+ super.setFolderPath(metadata);
141
+
153
142
  // email
154
143
  try {
155
144
  // classic
@@ -40,6 +40,7 @@ module.exports = {
40
40
  idField: 'id',
41
41
  keyField: 'key',
42
42
  nameField: 'name',
43
+ folderIdField: 'categoryId',
43
44
  createdDateField: 'createdDate',
44
45
  createdNameField: 'createdByName',
45
46
  lastmodDateField: 'lastSavedDate',
@@ -6,6 +6,7 @@ module.exports = {
6
6
  keepId: true,
7
7
  keyField: 'CustomerKey',
8
8
  nameField: 'Name',
9
+ folderIdField: 'CategoryID',
9
10
  restPagination: null,
10
11
  type: 'contentArea',
11
12
  typeDescription:
@@ -80,6 +80,7 @@ module.exports = {
80
80
  idField: 'ObjectID',
81
81
  keyField: 'CustomerKey',
82
82
  nameField: 'Name',
83
+ folderIdField: 'CategoryID',
83
84
  createdDateField: 'CreatedDate',
84
85
  createdNameField: null,
85
86
  lastmodDateField: 'ModifiedDate',
@@ -6,6 +6,7 @@ module.exports = {
6
6
  keepId: true,
7
7
  keyField: 'CustomerKey',
8
8
  nameField: 'Name',
9
+ folderIdField: 'CategoryID',
9
10
  restPagination: null,
10
11
  type: 'email',
11
12
  typeDescription:
@@ -7,6 +7,7 @@ module.exports = {
7
7
  keepId: true,
8
8
  keyField: 'CustomerKey',
9
9
  nameField: 'Name',
10
+ folderIdField: 'CategoryID',
10
11
  createdDateField: 'CreatedDate',
11
12
  createdNameField: null,
12
13
  lastmodDateField: 'ModifiedDate',
@@ -9,6 +9,7 @@ module.exports = {
9
9
  idField: 'queryDefinitionId',
10
10
  keyField: 'key',
11
11
  nameField: 'name',
12
+ folderIdField: 'categoryId',
12
13
  createdDateField: 'createdDate',
13
14
  createdNameField: null,
14
15
  lastmodDateField: 'modifiedDate',
@@ -6,6 +6,7 @@ module.exports = {
6
6
  idField: 'ssjsActivityId',
7
7
  keyField: 'key',
8
8
  nameField: 'name',
9
+ folderIdField: 'categoryId',
9
10
  createdDateField: 'createdDate',
10
11
  createdNameField: 'createdBy',
11
12
  lastmodDateField: 'modifiedDate',
@@ -7,6 +7,7 @@ module.exports = {
7
7
  keepId: true,
8
8
  keyField: 'CustomerKey',
9
9
  nameField: 'Name',
10
+ folderIdField: 'CategoryID',
10
11
  createdDateField: 'CreatedDate',
11
12
  createdNameField: null,
12
13
  lastmodDateField: 'ModifiedDate',
package/lib/util/cli.js CHANGED
@@ -18,26 +18,25 @@ const Cli = {
18
18
  * used when initially setting up a project.
19
19
  * loads default config and adds first credential
20
20
  *
21
- * @param {TYPE.skipInteraction} [skipInteraction] signals what to insert automatically for things usually asked via wizard
22
21
  * @returns {Promise.<boolean>} success of init
23
22
  */
24
- async initMcdevConfig(skipInteraction) {
23
+ async initMcdevConfig() {
25
24
  Util.logger.info('-- Initialising server connection --');
26
25
  Util.logger.info('Please enter a name for your "Installed Package" credentials:');
27
26
  const propertiesTemplate = await config.getDefaultProperties();
28
27
  delete propertiesTemplate.credentials.default;
29
28
 
30
29
  // wait for the interaction to finish or else an outer await will run before this is done
31
- return this._setCredential(propertiesTemplate, null, skipInteraction);
30
+ return this._setCredential(propertiesTemplate, null);
32
31
  },
33
32
  /**
34
33
  * Extends template file for properties.json
35
34
  *
36
35
  * @param {TYPE.Mcdevrc} properties config file's json
37
- * @param {TYPE.skipInteraction} [skipInteraction] signals what to insert automatically for things usually asked via wizard
38
36
  * @returns {Promise.<void>} -
39
37
  */
40
- async addExtraCredential(properties, skipInteraction) {
38
+ async addExtraCredential(properties) {
39
+ const skipInteraction = Util.skipInteraction;
41
40
  if (!(await config.checkProperties(properties))) {
42
41
  // return null here to avoid seeing 2 error messages for the same issue
43
42
  return null;
@@ -54,7 +53,7 @@ const Cli = {
54
53
  `Credential '${skipInteraction.credentialName}' already existing. If you tried updating please provide run 'mcdev init ${skipInteraction.credentialName}'`
55
54
  );
56
55
  }
57
- return this._setCredential(properties, null, skipInteraction);
56
+ return this._setCredential(properties, null);
58
57
  }
59
58
  },
60
59
  /**
@@ -63,15 +62,15 @@ const Cli = {
63
62
  *
64
63
  * @param {TYPE.Mcdevrc} properties config file's json
65
64
  * @param {string} credName name of credential that needs updating
66
- * @param {TYPE.skipInteraction} [skipInteraction] signals what to insert automatically for things usually asked via wizard
67
65
  * @returns {Promise.<boolean>} success of update
68
66
  */
69
- async updateCredential(properties, credName, skipInteraction) {
67
+ async updateCredential(properties, credName) {
68
+ const skipInteraction = Util.skipInteraction;
70
69
  if (credName) {
71
70
  if (!skipInteraction) {
72
71
  Util.logger.info(`Please enter the details for '${credName}'`);
73
72
  }
74
- return await this._setCredential(properties, credName, skipInteraction);
73
+ return await this._setCredential(properties, credName);
75
74
  }
76
75
  },
77
76
  /**
@@ -226,10 +225,10 @@ const Cli = {
226
225
  *
227
226
  * @param {TYPE.Mcdevrc} properties from config file
228
227
  * @param {string} [credName] name of credential that needs updating
229
- * @param {TYPE.skipInteraction} [skipInteraction] signals what to insert automatically for things usually asked via wizard
230
228
  * @returns {Promise.<boolean | string>} success of refresh or credential name
231
229
  */
232
- async _setCredential(properties, credName, skipInteraction) {
230
+ async _setCredential(properties, credName) {
231
+ const skipInteraction = Util.skipInteraction;
233
232
  // Get user input
234
233
  let credentialsGood = null;
235
234
  let inputData;
@@ -249,10 +249,10 @@ const DevOps = {
249
249
  * @param {TYPE.Mcdevrc} properties project config file
250
250
  * @param {string} range git commit range
251
251
  * @param {TYPE.DeltaPkgItem[]} [diffArr] instead of running git diff the method can also get a list of files to process
252
- * @param {TYPE.SkipInteraction} [skipInteraction] allows to skip interactive wizard
253
252
  * @returns {Promise.<TYPE.DeltaPkgItem[]>} -
254
253
  */
255
- async buildDeltaDefinitions(properties, range, diffArr, skipInteraction) {
254
+ async buildDeltaDefinitions(properties, range, diffArr) {
255
+ const skipInteraction = Util.skipInteraction;
256
256
  // check if sourceTargetMapping is valid
257
257
  if (
258
258
  !properties.options.deployment.sourceTargetMapping ||