mcdev 3.1.1 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/.eslintrc.json +67 -7
  2. package/.github/ISSUE_TEMPLATE/bug.yml +5 -1
  3. package/.github/ISSUE_TEMPLATE/task.md +1 -1
  4. package/.github/PULL_REQUEST_TEMPLATE.md +5 -3
  5. package/.github/dependabot.yml +14 -0
  6. package/.github/workflows/code-analysis.yml +57 -0
  7. package/.husky/commit-msg +10 -0
  8. package/.husky/post-checkout +5 -0
  9. package/.husky/pre-commit +2 -1
  10. package/.prettierrc +8 -0
  11. package/.vscode/settings.json +1 -1
  12. package/LICENSE +2 -2
  13. package/README.md +134 -45
  14. package/boilerplate/config.json +5 -11
  15. package/boilerplate/files/.prettierrc +8 -0
  16. package/boilerplate/files/.vscode/extensions.json +0 -1
  17. package/boilerplate/files/.vscode/settings.json +28 -2
  18. package/boilerplate/files/README.md +2 -2
  19. package/boilerplate/forcedUpdates.json +10 -0
  20. package/boilerplate/npm-dependencies.json +5 -5
  21. package/docs/dist/documentation.md +2795 -1724
  22. package/jsconfig.json +1 -1
  23. package/lib/Builder.js +166 -75
  24. package/lib/Deployer.js +244 -96
  25. package/lib/MetadataTypeDefinitions.js +2 -0
  26. package/lib/MetadataTypeInfo.js +2 -0
  27. package/lib/Retriever.js +61 -84
  28. package/lib/cli.js +133 -25
  29. package/lib/index.js +242 -563
  30. package/lib/metadataTypes/AccountUser.js +101 -95
  31. package/lib/metadataTypes/Asset.js +677 -248
  32. package/lib/metadataTypes/AttributeGroup.js +23 -12
  33. package/lib/metadataTypes/Automation.js +456 -357
  34. package/lib/metadataTypes/Campaign.js +33 -93
  35. package/lib/metadataTypes/ContentArea.js +31 -11
  36. package/lib/metadataTypes/DataExtension.js +391 -376
  37. package/lib/metadataTypes/DataExtensionField.js +131 -54
  38. package/lib/metadataTypes/DataExtensionTemplate.js +22 -4
  39. package/lib/metadataTypes/DataExtract.js +67 -50
  40. package/lib/metadataTypes/DataExtractType.js +14 -8
  41. package/lib/metadataTypes/Discovery.js +21 -16
  42. package/lib/metadataTypes/Email.js +32 -12
  43. package/lib/metadataTypes/EmailSendDefinition.js +85 -80
  44. package/lib/metadataTypes/EventDefinition.js +69 -47
  45. package/lib/metadataTypes/FileTransfer.js +78 -54
  46. package/lib/metadataTypes/Filter.js +11 -4
  47. package/lib/metadataTypes/Folder.js +149 -117
  48. package/lib/metadataTypes/FtpLocation.js +14 -8
  49. package/lib/metadataTypes/ImportFile.js +69 -69
  50. package/lib/metadataTypes/Interaction.js +19 -4
  51. package/lib/metadataTypes/List.js +54 -13
  52. package/lib/metadataTypes/MetadataType.js +687 -479
  53. package/lib/metadataTypes/MobileCode.js +46 -0
  54. package/lib/metadataTypes/MobileKeyword.js +114 -0
  55. package/lib/metadataTypes/Query.js +204 -103
  56. package/lib/metadataTypes/Role.js +76 -61
  57. package/lib/metadataTypes/Script.js +146 -82
  58. package/lib/metadataTypes/SetDefinition.js +20 -8
  59. package/lib/metadataTypes/TriggeredSendDefinition.js +78 -58
  60. package/lib/metadataTypes/definitions/Asset.definition.js +21 -10
  61. package/lib/metadataTypes/definitions/AttributeGroup.definition.js +12 -0
  62. package/lib/metadataTypes/definitions/Automation.definition.js +10 -5
  63. package/lib/metadataTypes/definitions/Campaign.definition.js +44 -1
  64. package/lib/metadataTypes/definitions/DataExtension.definition.js +4 -0
  65. package/lib/metadataTypes/definitions/DataExtensionTemplate.definition.js +6 -0
  66. package/lib/metadataTypes/definitions/DataExtract.definition.js +18 -14
  67. package/lib/metadataTypes/definitions/Discovery.definition.js +12 -0
  68. package/lib/metadataTypes/definitions/EmailSendDefinition.definition.js +4 -0
  69. package/lib/metadataTypes/definitions/EventDefinition.definition.js +22 -0
  70. package/lib/metadataTypes/definitions/FileTransfer.definition.js +4 -0
  71. package/lib/metadataTypes/definitions/Filter.definition.js +4 -0
  72. package/lib/metadataTypes/definitions/Folder.definition.js +6 -0
  73. package/lib/metadataTypes/definitions/FtpLocation.definition.js +4 -0
  74. package/lib/metadataTypes/definitions/ImportFile.definition.js +10 -5
  75. package/lib/metadataTypes/definitions/Interaction.definition.js +4 -0
  76. package/lib/metadataTypes/definitions/MobileCode.definition.js +163 -0
  77. package/lib/metadataTypes/definitions/MobileKeyword.definition.js +253 -0
  78. package/lib/metadataTypes/definitions/Query.definition.js +4 -0
  79. package/lib/metadataTypes/definitions/Role.definition.js +5 -0
  80. package/lib/metadataTypes/definitions/Script.definition.js +4 -0
  81. package/lib/metadataTypes/definitions/SetDefinition.definition.js +28 -0
  82. package/lib/metadataTypes/definitions/TriggeredSendDefinition.definition.js +4 -0
  83. package/lib/retrieveChangelog.js +7 -6
  84. package/lib/util/auth.js +117 -0
  85. package/lib/util/businessUnit.js +55 -66
  86. package/lib/util/cache.js +194 -0
  87. package/lib/util/cli.js +90 -116
  88. package/lib/util/config.js +302 -0
  89. package/lib/util/devops.js +240 -50
  90. package/lib/util/file.js +120 -191
  91. package/lib/util/init.config.js +195 -69
  92. package/lib/util/init.git.js +45 -50
  93. package/lib/util/init.js +72 -59
  94. package/lib/util/init.npm.js +48 -39
  95. package/lib/util/util.js +280 -564
  96. package/package.json +44 -33
  97. package/test/dataExtension.test.js +152 -0
  98. package/test/mockRoot/.mcdev-auth.json +8 -0
  99. package/test/mockRoot/.mcdevrc.json +67 -0
  100. package/test/mockRoot/deploy/testInstance/testBU/dataExtension/childBU_dataextension_test.dataExtension-meta.json +39 -0
  101. package/test/mockRoot/deploy/testInstance/testBU/dataExtension/testDataExtension.dataExtension-meta.json +23 -0
  102. package/test/mockRoot/deploy/testInstance/testBU/query/testExistingQuery.query-meta.json +11 -0
  103. package/test/mockRoot/deploy/testInstance/testBU/query/testExistingQuery.query-meta.sql +4 -0
  104. package/test/mockRoot/deploy/testInstance/testBU/query/testQuery.query-meta.json +11 -0
  105. package/test/mockRoot/deploy/testInstance/testBU/query/testQuery.query-meta.sql +4 -0
  106. package/test/query.test.js +149 -0
  107. package/test/resourceFactory.js +142 -0
  108. package/test/resources/1111111/dataFolder/retrieve-response.xml +43 -0
  109. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/patch-response.json +18 -0
  110. package/test/resources/9999999/automation/v1/queries/get-response.json +24 -0
  111. package/test/resources/9999999/automation/v1/queries/post-response.json +18 -0
  112. package/test/resources/9999999/dataExtension/build-expected.json +51 -0
  113. package/test/resources/9999999/dataExtension/create-expected.json +23 -0
  114. package/test/resources/9999999/dataExtension/create-response.xml +54 -0
  115. package/test/resources/9999999/dataExtension/retrieve-expected.json +51 -0
  116. package/test/resources/9999999/dataExtension/retrieve-response.xml +47 -0
  117. package/test/resources/9999999/dataExtension/template-expected.json +51 -0
  118. package/test/resources/9999999/dataExtension/update-expected.json +55 -0
  119. package/test/resources/9999999/dataExtension/update-response.xml +52 -0
  120. package/test/resources/9999999/dataExtensionField/retrieve-response.xml +93 -0
  121. package/test/resources/9999999/dataExtensionTemplate/retrieve-response.xml +303 -0
  122. package/test/resources/9999999/dataFolder/retrieve-response.xml +65 -0
  123. package/test/resources/9999999/query/build-expected.json +8 -0
  124. package/test/resources/9999999/query/get-expected.json +11 -0
  125. package/test/resources/9999999/query/patch-expected.json +11 -0
  126. package/test/resources/9999999/query/post-expected.json +11 -0
  127. package/test/resources/9999999/query/template-expected.json +8 -0
  128. package/test/resources/auth.json +32 -0
  129. package/test/resources/rest404-response.json +5 -0
  130. package/test/resources/retrieve-response.xml +21 -0
  131. package/test/utils.js +107 -0
  132. package/types/mcdev.d.js +301 -0
  133. package/CHANGELOG.md +0 -126
  134. package/PULL_REQUEST_TEMPLATE.md +0 -19
  135. package/test/util/file.js +0 -51
@@ -1,11 +1,14 @@
1
1
  'use strict';
2
2
 
3
+ const TYPE = require('../../types/mcdev.d');
3
4
  const MetadataType = require('./MetadataType');
4
5
  const Util = require('../util/util');
5
6
  const File = require('../util/file');
7
+ const cache = require('../util/cache');
6
8
 
7
9
  /**
8
10
  * ImportFile MetadataType
11
+ *
9
12
  * @augments MetadataType
10
13
  */
11
14
  class ImportFile extends MetadataType {
@@ -13,72 +16,79 @@ class ImportFile extends MetadataType {
13
16
  * Retrieves Metadata of Import File.
14
17
  * Endpoint /automation/v1/imports/ return all Import Files with all details.
15
18
  * Currently it is not needed to loop over Imports with endpoint /automation/v1/imports/{id}
16
- * @param {String} retrieveDir Directory where retrieved metadata directory will be saved
17
- * @returns {Promise} Promise
19
+ *
20
+ * @param {string} retrieveDir Directory where retrieved metadata directory will be saved
21
+ * @param {void} [_] unused parameter
22
+ * @param {void} [__] unused parameter
23
+ * @param {void} [___] unused parameter
24
+ * @param {string} [key] customer key of single item to retrieve
25
+ * @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise
18
26
  */
19
- static retrieve(retrieveDir) {
20
- return super.retrieveREST(retrieveDir, '/automation/v1/imports/', null);
27
+ static retrieve(retrieveDir, _, __, ___, key) {
28
+ return super.retrieveREST(retrieveDir, '/automation/v1/imports/', null, null, key);
21
29
  }
22
30
 
23
31
  /**
24
32
  * Retrieves import definition metadata for caching
25
- * @returns {Promise} Promise
33
+ *
34
+ * @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise
26
35
  */
27
36
  static async retrieveForCache() {
28
- return super.retrieveREST(null, '/automation/v1/imports/', null);
37
+ return super.retrieveREST(null, '/automation/v1/imports/');
29
38
  }
30
39
 
31
40
  /**
32
41
  * Retrieve a specific Import Definition by Name
33
- * @param {String} templateDir Directory where retrieved metadata directory will be saved
34
- * @param {String} name name of the metadata file
35
- * @param {Object} variables variables to be replaced in the metadata
36
- * @returns {Promise} Promise
42
+ *
43
+ * @param {string} templateDir Directory where retrieved metadata directory will be saved
44
+ * @param {string} name name of the metadata file
45
+ * @param {TYPE.TemplateMap} templateVariables variables to be replaced in the metadata
46
+ * @returns {Promise.<TYPE.MetadataTypeItemObj>} Promise
37
47
  */
38
- static async retrieveAsTemplate(templateDir, name, variables) {
39
- const options = {
40
- uri: '/automation/v1/imports/?$filter=name%20eq%20' + name.split(' ').join('%20'),
41
- };
42
-
43
- const res = await this.client.RestClient.get(options);
44
- if (res.body && Array.isArray(res.body.items) && res.body.items.length) {
48
+ static async retrieveAsTemplate(templateDir, name, templateVariables) {
49
+ const res = await this.client.rest.get(
50
+ '/automation/v1/imports/?$filter=name%20eq%20' + encodeURIComponent(name)
51
+ );
52
+ if (Array.isArray(res?.items) && res?.items.length) {
45
53
  // eq-operator returns a similar, not exact match and hence might return more than 1 entry
46
- const [metadata] = res.body.items.filter((item) => item.name === name);
54
+ const metadata = res.items.find((item) => item.name === name);
47
55
  if (!metadata) {
48
56
  Util.logger.error(`No ${this.definition.typeName} found with name "${name}"`);
49
57
  return;
50
58
  }
51
-
59
+ const originalKey = metadata[this.definition.keyField];
52
60
  const val = JSON.parse(
53
- Util.replaceByObject(JSON.stringify(this.parseMetadata(metadata)), variables)
61
+ Util.replaceByObject(
62
+ JSON.stringify(this.parseMetadata(metadata)),
63
+ templateVariables
64
+ )
54
65
  );
55
66
 
56
67
  // remove all fields listed in Definition for templating
57
68
  this.keepTemplateFields(val);
58
- File.writeJSONToFile(
69
+ await File.writeJSONToFile(
59
70
  [templateDir, this.definition.type].join('/'),
60
- val.customerKey + '.' + this.definition.type + '-meta',
61
- JSON.parse(Util.replaceByObject(JSON.stringify(val), variables))
62
- );
63
- Util.logger.info(
64
- `ImportFile.retrieveAsTemplate:: Written Metadata to filesystem (${name})`
71
+ originalKey + '.' + this.definition.type + '-meta',
72
+ JSON.parse(Util.replaceByObject(JSON.stringify(val), templateVariables))
65
73
  );
74
+ Util.logger.info(`- templated ${this.definition.type}: ${name}`);
66
75
  return { metadata: val, type: this.definition.type };
67
- } else if (res.body && res.body.items) {
76
+ } else if (res?.items) {
68
77
  Util.logger.error(`No ${this.definition.typeName} found with name "${name}"`);
69
78
  } else {
70
79
  throw new Error(
71
80
  `Encountered unknown error when retrieveing ${
72
81
  this.definition.typeName
73
- } "${name}": ${JSON.stringify(res.body)}`
82
+ } "${name}": ${JSON.stringify(res)}`
74
83
  );
75
84
  }
76
85
  }
77
86
 
78
87
  /**
79
88
  * manages post retrieve steps
80
- * @param {Object} importDef a single importDef
81
- * @returns {Object[]} metadata
89
+ *
90
+ * @param {TYPE.MetadataTypeItem} importDef a single importDef
91
+ * @returns {TYPE.MetadataTypeItem} metadata
82
92
  */
83
93
  static postRetrieveTasks(importDef) {
84
94
  const val = this.parseMetadata(importDef);
@@ -87,7 +97,8 @@ class ImportFile extends MetadataType {
87
97
 
88
98
  /**
89
99
  * Creates a single Import File
90
- * @param {Object} importFile a single Import File
100
+ *
101
+ * @param {TYPE.MetadataTypeItem} importFile a single Import File
91
102
  * @returns {Promise} Promise
92
103
  */
93
104
  static create(importFile) {
@@ -96,7 +107,8 @@ class ImportFile extends MetadataType {
96
107
 
97
108
  /**
98
109
  * Updates a single Import File
99
- * @param {Object} importFile a single Import File
110
+ *
111
+ * @param {TYPE.MetadataTypeItem} importFile a single Import File
100
112
  * @returns {Promise} Promise
101
113
  */
102
114
  static update(importFile) {
@@ -108,12 +120,12 @@ class ImportFile extends MetadataType {
108
120
 
109
121
  /**
110
122
  * prepares a import definition for deployment
111
- * @param {Object} metadata a single importDef
123
+ *
124
+ * @param {TYPE.MetadataTypeItem} metadata a single importDef
112
125
  * @returns {Promise} Promise
113
126
  */
114
127
  static async preDeployTasks(metadata) {
115
- metadata.fileTransferLocationId = Util.getFromCache(
116
- this.cache,
128
+ metadata.fileTransferLocationId = cache.searchForField(
117
129
  'ftpLocation',
118
130
  metadata.r__ftpLocation_name,
119
131
  'name',
@@ -122,29 +134,21 @@ class ImportFile extends MetadataType {
122
134
  delete metadata.r__ftpLocation_name;
123
135
 
124
136
  if (metadata.c__destinationType === 'DataExtension') {
125
- try {
126
- metadata.destinationObjectId = Util.getFromCache(
127
- this.cache,
128
- 'dataExtension',
129
- metadata.r__dataExtension_CustomerKey,
130
- 'CustomerKey',
131
- 'ObjectID'
132
- );
133
- delete metadata.r__dataExtension_CustomerKey;
134
- } catch (ex) {
135
- throw new Error(`ImportFile ${metadata.customerKey}: ${ex.message}`);
136
- }
137
+ metadata.destinationObjectId = cache.searchForField(
138
+ 'dataExtension',
139
+ metadata.r__dataExtension_CustomerKey,
140
+ 'CustomerKey',
141
+ 'ObjectID'
142
+ );
143
+ delete metadata.r__dataExtension_CustomerKey;
137
144
  } else if (metadata.c__destinationType === 'List') {
138
- try {
139
- metadata.destinationObjectId = Util.getListObjectIdFromCache(
140
- this.cache,
141
- metadata.r__list_PathName,
142
- 'ObjectID'
143
- );
144
- delete metadata.r__list_PathName;
145
- } catch (ex) {
146
- throw new Error(`ImportFile ${metadata.customerKey}: ${ex.message}`);
147
- }
145
+ metadata.destinationObjectId = cache.getListObjectId(
146
+ metadata.r__list_PathName,
147
+ 'ObjectID'
148
+ );
149
+ // destinationId is also needed for List types
150
+ metadata.destinationId = cache.getListObjectId(metadata.r__list_PathName, 'ID');
151
+ delete metadata.r__list_PathName;
148
152
  }
149
153
  // When the destinationObjectTypeId is 584 is refers to Mobile Connect which is not supported as an Import Type
150
154
  metadata.destinationObjectTypeId =
@@ -157,12 +161,12 @@ class ImportFile extends MetadataType {
157
161
 
158
162
  /**
159
163
  * parses retrieved Metadata before saving
160
- * @param {Object} metadata a single import definition
161
- * @returns {Object} parsed metadata definition
164
+ *
165
+ * @param {TYPE.MetadataTypeItem} metadata a single import definition
166
+ * @returns {TYPE.MetadataTypeItem} parsed metadata definition
162
167
  */
163
168
  static parseMetadata(metadata) {
164
- metadata.r__ftpLocation_name = Util.getFromCache(
165
- this.cache,
169
+ metadata.r__ftpLocation_name = cache.searchForField(
166
170
  'ftpLocation',
167
171
  metadata.fileTransferLocationId,
168
172
  'id',
@@ -178,8 +182,7 @@ class ImportFile extends MetadataType {
178
182
  delete metadata.destinationObjectTypeId;
179
183
  if (metadata.c__destinationType === 'DataExtension') {
180
184
  try {
181
- metadata.r__dataExtension_CustomerKey = Util.getFromCache(
182
- this.cache,
185
+ metadata.r__dataExtension_CustomerKey = cache.searchForField(
183
186
  'dataExtension',
184
187
  metadata.destinationObjectId,
185
188
  'ObjectID',
@@ -187,18 +190,17 @@ class ImportFile extends MetadataType {
187
190
  );
188
191
  delete metadata.destinationObjectId;
189
192
  } catch (ex) {
190
- Util.logger.error(`ImportFile ${metadata.customerKey}: ${ex.message}`);
193
+ Util.logger.warn(` - ImportFile ${metadata.customerKey}: ${ex.message}`);
191
194
  }
192
195
  } else if (metadata.c__destinationType === 'List') {
193
196
  try {
194
- metadata.r__list_PathName = Util.getListPathNameFromCache(
195
- this.cache,
197
+ metadata.r__list_PathName = cache.getListPathName(
196
198
  metadata.destinationObjectId,
197
199
  'ObjectID'
198
200
  );
199
201
  delete metadata.destinationObjectId;
200
202
  } catch (ex) {
201
- Util.logger.error(`ImportFile ${metadata.customerKey}: ${ex.message}`);
203
+ Util.logger.warn(` - ImportFile ${metadata.customerKey}: ${ex.message}`);
202
204
  }
203
205
  }
204
206
 
@@ -218,7 +220,5 @@ class ImportFile extends MetadataType {
218
220
 
219
221
  // Assign definition to static attributes
220
222
  ImportFile.definition = require('../MetadataTypeDefinitions').importFile;
221
- ImportFile.cache = {};
222
- ImportFile.client = undefined;
223
223
 
224
224
  module.exports = ImportFile;
@@ -1,20 +1,35 @@
1
1
  'use strict';
2
2
 
3
+ const TYPE = require('../../types/mcdev.d');
3
4
  const MetadataType = require('./MetadataType');
4
5
 
5
6
  /**
6
7
  * Script MetadataType
8
+ *
7
9
  * @augments MetadataType
8
10
  */
9
11
  class Interaction extends MetadataType {
10
12
  /**
11
13
  * Retrieves Metadata of Interaction
12
14
  * Endpoint /interaction/v1/interactions?extras=all&pageSize=50000 return 50000 Scripts with all details.
13
- * @param {String} retrieveDir Directory where retrieved metadata directory will be saved
14
- * @returns {Promise} Promise
15
+ *
16
+ * @param {string} retrieveDir Directory where retrieved metadata directory will be saved
17
+ * @param {void} [_] unused parameter
18
+ * @param {void} [__] unused parameter
19
+ * @param {void} [___] unused parameter
20
+ * @param {string} [key] customer key of single item to retrieve
21
+ * @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise
15
22
  */
16
- static retrieve(retrieveDir) {
17
- return super.retrieveREST(retrieveDir, '/interaction/v1/interactions?extras=all', null);
23
+ static retrieve(retrieveDir, _, __, ___, key) {
24
+ return super.retrieveREST(
25
+ retrieveDir,
26
+ `/interaction/v1/interactions${
27
+ key ? '/key:' + encodeURIComponent(key) : ''
28
+ }?extras=all`,
29
+ null,
30
+ null,
31
+ key
32
+ );
18
33
  }
19
34
  }
20
35
 
@@ -1,24 +1,53 @@
1
1
  'use strict';
2
2
 
3
+ const TYPE = require('../../types/mcdev.d');
3
4
  const MetadataType = require('./MetadataType');
4
5
  const Util = require('../util/util');
6
+ const cache = require('../util/cache');
5
7
 
6
8
  /**
7
9
  * List MetadataType
10
+ *
8
11
  * @augments MetadataType
9
12
  */
10
13
  class List extends MetadataType {
11
14
  /**
12
15
  * Retrieves Metadata of Lists
13
- * @param {String} retrieveDir Directory where retrieved metadata directory will be saved
14
- * @returns {Promise} Promise
16
+ *
17
+ * @param {string} retrieveDir Directory where retrieved metadata directory will be saved
18
+ * @param {void} [_] unused parameter
19
+ * @param {void} [__] unused parameter
20
+ * @param {void} [___] unused parameter
21
+ * @param {string} [key] customer key of single item to retrieve
22
+ * @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise
15
23
  */
16
- static retrieve(retrieveDir) {
17
- return super.retrieveSOAPgeneric(retrieveDir);
24
+ static retrieve(retrieveDir, _, __, ___, key) {
25
+ /** @type {TYPE.SoapRequestParams} */
26
+ let requestParams = null;
27
+ if (key) {
28
+ requestParams = {
29
+ filter: {
30
+ leftOperand: {
31
+ leftOperand: 'CustomerKey',
32
+ operator: 'equals',
33
+ rightOperand: key,
34
+ },
35
+ operator: 'OR',
36
+ rightOperand: {
37
+ // deviating from standard here by allowing to search without the rather weird key which includes the folder name!
38
+ leftOperand: 'ListName',
39
+ operator: 'equals',
40
+ rightOperand: key,
41
+ },
42
+ },
43
+ };
44
+ }
45
+ return super.retrieveSOAP(retrieveDir, null, requestParams);
18
46
  }
19
47
  /**
20
48
  * Gets metadata cache with limited fields and does not store value to disk
21
- * @returns {Promise<Object>} Promise of metadata
49
+ *
50
+ * @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of metadata
22
51
  */
23
52
  static async retrieveForCache() {
24
53
  const results = await this.retrieve(null);
@@ -28,24 +57,36 @@ class List extends MetadataType {
28
57
  return results;
29
58
  }
30
59
 
60
+ /**
61
+ * Delete a metadata item from the specified business unit
62
+ *
63
+ * @param {TYPE.BuObject} buObject references credentials
64
+ * @param {string} customerKey Identifier of data extension
65
+ * @returns {Promise.<boolean>} deletion success status
66
+ */
67
+ static deleteByKey(buObject, customerKey) {
68
+ return super.deleteByKeySOAP(buObject, customerKey, false);
69
+ }
70
+
31
71
  /**
32
72
  * manages post retrieve steps
33
- * @param {Object} list a single list
34
- * @returns {Object[]} metadata
73
+ *
74
+ * @param {TYPE.MetadataTypeItem} list a single list
75
+ * @returns {TYPE.MetadataTypeItem} metadata
35
76
  */
36
77
  static postRetrieveTasks(list) {
37
78
  return this.parseMetadata(list);
38
79
  }
39
80
  /**
40
81
  * parses retrieved Metadata before saving
41
- * @param {Object} metadata a single list definition
42
- * @param {Boolean} [parseForCache] if set to true, the Category ID is kept
43
- * @returns {Array} Array with one metadata object and one sql string
82
+ *
83
+ * @param {TYPE.MetadataTypeItem} metadata a single list definition
84
+ * @param {boolean} [parseForCache] if set to true, the Category ID is kept
85
+ * @returns {TYPE.MetadataTypeItem} Array with one metadata object and one sql string
44
86
  */
45
87
  static parseMetadata(metadata, parseForCache) {
46
88
  try {
47
- metadata.r__folder_Path = Util.getFromCache(
48
- this.cache,
89
+ metadata.r__folder_Path = cache.searchForField(
49
90
  'folder',
50
91
  metadata.Category,
51
92
  'ID',
@@ -56,7 +97,7 @@ class List extends MetadataType {
56
97
  }
57
98
  return metadata;
58
99
  } catch (ex) {
59
- Util.logger.warn(`List ${metadata.ID}: '${metadata.CustomerKey}': ${ex.message}`);
100
+ Util.logger.warn(` - List ${metadata.ID}: '${metadata.CustomerKey}': ${ex.message}`);
60
101
  }
61
102
  }
62
103
  }