mcdev 3.1.3 → 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 (134) hide show
  1. package/.eslintrc.json +67 -7
  2. package/.github/ISSUE_TEMPLATE/bug.yml +2 -1
  3. package/.github/PULL_REQUEST_TEMPLATE.md +5 -3
  4. package/.github/dependabot.yml +14 -0
  5. package/.github/workflows/code-analysis.yml +57 -0
  6. package/.husky/commit-msg +10 -0
  7. package/.husky/post-checkout +5 -0
  8. package/.husky/pre-commit +2 -1
  9. package/.prettierrc +8 -0
  10. package/.vscode/settings.json +1 -1
  11. package/LICENSE +2 -2
  12. package/README.md +134 -45
  13. package/boilerplate/config.json +5 -11
  14. package/boilerplate/files/.prettierrc +8 -0
  15. package/boilerplate/files/.vscode/extensions.json +0 -1
  16. package/boilerplate/files/.vscode/settings.json +28 -2
  17. package/boilerplate/files/README.md +2 -2
  18. package/boilerplate/forcedUpdates.json +10 -0
  19. package/boilerplate/npm-dependencies.json +5 -5
  20. package/docs/dist/documentation.md +2795 -1724
  21. package/jsconfig.json +1 -1
  22. package/lib/Builder.js +166 -75
  23. package/lib/Deployer.js +244 -96
  24. package/lib/MetadataTypeDefinitions.js +2 -0
  25. package/lib/MetadataTypeInfo.js +2 -0
  26. package/lib/Retriever.js +61 -84
  27. package/lib/cli.js +116 -11
  28. package/lib/index.js +241 -561
  29. package/lib/metadataTypes/AccountUser.js +101 -95
  30. package/lib/metadataTypes/Asset.js +677 -248
  31. package/lib/metadataTypes/AttributeGroup.js +23 -12
  32. package/lib/metadataTypes/Automation.js +451 -354
  33. package/lib/metadataTypes/Campaign.js +33 -93
  34. package/lib/metadataTypes/ContentArea.js +31 -11
  35. package/lib/metadataTypes/DataExtension.js +387 -372
  36. package/lib/metadataTypes/DataExtensionField.js +131 -54
  37. package/lib/metadataTypes/DataExtensionTemplate.js +22 -4
  38. package/lib/metadataTypes/DataExtract.js +61 -48
  39. package/lib/metadataTypes/DataExtractType.js +14 -8
  40. package/lib/metadataTypes/Discovery.js +21 -16
  41. package/lib/metadataTypes/Email.js +32 -12
  42. package/lib/metadataTypes/EmailSendDefinition.js +85 -80
  43. package/lib/metadataTypes/EventDefinition.js +61 -43
  44. package/lib/metadataTypes/FileTransfer.js +72 -52
  45. package/lib/metadataTypes/Filter.js +11 -4
  46. package/lib/metadataTypes/Folder.js +149 -117
  47. package/lib/metadataTypes/FtpLocation.js +14 -8
  48. package/lib/metadataTypes/ImportFile.js +61 -64
  49. package/lib/metadataTypes/Interaction.js +19 -4
  50. package/lib/metadataTypes/List.js +54 -13
  51. package/lib/metadataTypes/MetadataType.js +668 -454
  52. package/lib/metadataTypes/MobileCode.js +46 -0
  53. package/lib/metadataTypes/MobileKeyword.js +114 -0
  54. package/lib/metadataTypes/Query.js +204 -103
  55. package/lib/metadataTypes/Role.js +76 -61
  56. package/lib/metadataTypes/Script.js +145 -81
  57. package/lib/metadataTypes/SetDefinition.js +20 -8
  58. package/lib/metadataTypes/TriggeredSendDefinition.js +78 -58
  59. package/lib/metadataTypes/definitions/Asset.definition.js +21 -10
  60. package/lib/metadataTypes/definitions/AttributeGroup.definition.js +12 -0
  61. package/lib/metadataTypes/definitions/Automation.definition.js +10 -5
  62. package/lib/metadataTypes/definitions/Campaign.definition.js +44 -1
  63. package/lib/metadataTypes/definitions/DataExtension.definition.js +4 -0
  64. package/lib/metadataTypes/definitions/DataExtensionTemplate.definition.js +6 -0
  65. package/lib/metadataTypes/definitions/DataExtract.definition.js +18 -14
  66. package/lib/metadataTypes/definitions/Discovery.definition.js +12 -0
  67. package/lib/metadataTypes/definitions/EmailSendDefinition.definition.js +4 -0
  68. package/lib/metadataTypes/definitions/EventDefinition.definition.js +22 -0
  69. package/lib/metadataTypes/definitions/FileTransfer.definition.js +4 -0
  70. package/lib/metadataTypes/definitions/Filter.definition.js +4 -0
  71. package/lib/metadataTypes/definitions/Folder.definition.js +6 -0
  72. package/lib/metadataTypes/definitions/FtpLocation.definition.js +4 -0
  73. package/lib/metadataTypes/definitions/ImportFile.definition.js +10 -5
  74. package/lib/metadataTypes/definitions/Interaction.definition.js +4 -0
  75. package/lib/metadataTypes/definitions/MobileCode.definition.js +163 -0
  76. package/lib/metadataTypes/definitions/MobileKeyword.definition.js +253 -0
  77. package/lib/metadataTypes/definitions/Query.definition.js +4 -0
  78. package/lib/metadataTypes/definitions/Role.definition.js +5 -0
  79. package/lib/metadataTypes/definitions/Script.definition.js +4 -0
  80. package/lib/metadataTypes/definitions/SetDefinition.definition.js +28 -0
  81. package/lib/metadataTypes/definitions/TriggeredSendDefinition.definition.js +4 -0
  82. package/lib/retrieveChangelog.js +7 -6
  83. package/lib/util/auth.js +117 -0
  84. package/lib/util/businessUnit.js +55 -66
  85. package/lib/util/cache.js +194 -0
  86. package/lib/util/cli.js +90 -116
  87. package/lib/util/config.js +302 -0
  88. package/lib/util/devops.js +240 -50
  89. package/lib/util/file.js +120 -191
  90. package/lib/util/init.config.js +195 -69
  91. package/lib/util/init.git.js +45 -50
  92. package/lib/util/init.js +72 -59
  93. package/lib/util/init.npm.js +48 -39
  94. package/lib/util/util.js +280 -564
  95. package/package.json +44 -33
  96. package/test/dataExtension.test.js +152 -0
  97. package/test/mockRoot/.mcdev-auth.json +8 -0
  98. package/test/mockRoot/.mcdevrc.json +67 -0
  99. package/test/mockRoot/deploy/testInstance/testBU/dataExtension/childBU_dataextension_test.dataExtension-meta.json +39 -0
  100. package/test/mockRoot/deploy/testInstance/testBU/dataExtension/testDataExtension.dataExtension-meta.json +23 -0
  101. package/test/mockRoot/deploy/testInstance/testBU/query/testExistingQuery.query-meta.json +11 -0
  102. package/test/mockRoot/deploy/testInstance/testBU/query/testExistingQuery.query-meta.sql +4 -0
  103. package/test/mockRoot/deploy/testInstance/testBU/query/testQuery.query-meta.json +11 -0
  104. package/test/mockRoot/deploy/testInstance/testBU/query/testQuery.query-meta.sql +4 -0
  105. package/test/query.test.js +149 -0
  106. package/test/resourceFactory.js +142 -0
  107. package/test/resources/1111111/dataFolder/retrieve-response.xml +43 -0
  108. package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/patch-response.json +18 -0
  109. package/test/resources/9999999/automation/v1/queries/get-response.json +24 -0
  110. package/test/resources/9999999/automation/v1/queries/post-response.json +18 -0
  111. package/test/resources/9999999/dataExtension/build-expected.json +51 -0
  112. package/test/resources/9999999/dataExtension/create-expected.json +23 -0
  113. package/test/resources/9999999/dataExtension/create-response.xml +54 -0
  114. package/test/resources/9999999/dataExtension/retrieve-expected.json +51 -0
  115. package/test/resources/9999999/dataExtension/retrieve-response.xml +47 -0
  116. package/test/resources/9999999/dataExtension/template-expected.json +51 -0
  117. package/test/resources/9999999/dataExtension/update-expected.json +55 -0
  118. package/test/resources/9999999/dataExtension/update-response.xml +52 -0
  119. package/test/resources/9999999/dataExtensionField/retrieve-response.xml +93 -0
  120. package/test/resources/9999999/dataExtensionTemplate/retrieve-response.xml +303 -0
  121. package/test/resources/9999999/dataFolder/retrieve-response.xml +65 -0
  122. package/test/resources/9999999/query/build-expected.json +8 -0
  123. package/test/resources/9999999/query/get-expected.json +11 -0
  124. package/test/resources/9999999/query/patch-expected.json +11 -0
  125. package/test/resources/9999999/query/post-expected.json +11 -0
  126. package/test/resources/9999999/query/template-expected.json +8 -0
  127. package/test/resources/auth.json +32 -0
  128. package/test/resources/rest404-response.json +5 -0
  129. package/test/resources/retrieve-response.xml +21 -0
  130. package/test/utils.js +107 -0
  131. package/types/mcdev.d.js +301 -0
  132. package/CHANGELOG.md +0 -126
  133. package/PULL_REQUEST_TEMPLATE.md +0 -19
  134. 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,37 +16,42 @@ 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} templateVariables 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
48
  static async retrieveAsTemplate(templateDir, name, templateVariables) {
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) {
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;
@@ -58,30 +66,29 @@ class ImportFile extends MetadataType {
58
66
 
59
67
  // remove all fields listed in Definition for templating
60
68
  this.keepTemplateFields(val);
61
- File.writeJSONToFile(
69
+ await File.writeJSONToFile(
62
70
  [templateDir, this.definition.type].join('/'),
63
71
  originalKey + '.' + this.definition.type + '-meta',
64
72
  JSON.parse(Util.replaceByObject(JSON.stringify(val), templateVariables))
65
73
  );
66
- Util.logger.info(
67
- `ImportFile.retrieveAsTemplate:: Written Metadata to filesystem (${name})`
68
- );
74
+ Util.logger.info(`- templated ${this.definition.type}: ${name}`);
69
75
  return { metadata: val, type: this.definition.type };
70
- } else if (res.body && res.body.items) {
76
+ } else if (res?.items) {
71
77
  Util.logger.error(`No ${this.definition.typeName} found with name "${name}"`);
72
78
  } else {
73
79
  throw new Error(
74
80
  `Encountered unknown error when retrieveing ${
75
81
  this.definition.typeName
76
- } "${name}": ${JSON.stringify(res.body)}`
82
+ } "${name}": ${JSON.stringify(res)}`
77
83
  );
78
84
  }
79
85
  }
80
86
 
81
87
  /**
82
88
  * manages post retrieve steps
83
- * @param {Object} importDef a single importDef
84
- * @returns {Object[]} metadata
89
+ *
90
+ * @param {TYPE.MetadataTypeItem} importDef a single importDef
91
+ * @returns {TYPE.MetadataTypeItem} metadata
85
92
  */
86
93
  static postRetrieveTasks(importDef) {
87
94
  const val = this.parseMetadata(importDef);
@@ -90,7 +97,8 @@ class ImportFile extends MetadataType {
90
97
 
91
98
  /**
92
99
  * Creates a single Import File
93
- * @param {Object} importFile a single Import File
100
+ *
101
+ * @param {TYPE.MetadataTypeItem} importFile a single Import File
94
102
  * @returns {Promise} Promise
95
103
  */
96
104
  static create(importFile) {
@@ -99,7 +107,8 @@ class ImportFile extends MetadataType {
99
107
 
100
108
  /**
101
109
  * Updates a single Import File
102
- * @param {Object} importFile a single Import File
110
+ *
111
+ * @param {TYPE.MetadataTypeItem} importFile a single Import File
103
112
  * @returns {Promise} Promise
104
113
  */
105
114
  static update(importFile) {
@@ -111,12 +120,12 @@ class ImportFile extends MetadataType {
111
120
 
112
121
  /**
113
122
  * prepares a import definition for deployment
114
- * @param {Object} metadata a single importDef
123
+ *
124
+ * @param {TYPE.MetadataTypeItem} metadata a single importDef
115
125
  * @returns {Promise} Promise
116
126
  */
117
127
  static async preDeployTasks(metadata) {
118
- metadata.fileTransferLocationId = Util.getFromCache(
119
- this.cache,
128
+ metadata.fileTransferLocationId = cache.searchForField(
120
129
  'ftpLocation',
121
130
  metadata.r__ftpLocation_name,
122
131
  'name',
@@ -125,29 +134,21 @@ class ImportFile extends MetadataType {
125
134
  delete metadata.r__ftpLocation_name;
126
135
 
127
136
  if (metadata.c__destinationType === 'DataExtension') {
128
- try {
129
- metadata.destinationObjectId = Util.getFromCache(
130
- this.cache,
131
- 'dataExtension',
132
- metadata.r__dataExtension_CustomerKey,
133
- 'CustomerKey',
134
- 'ObjectID'
135
- );
136
- delete metadata.r__dataExtension_CustomerKey;
137
- } catch (ex) {
138
- throw new Error(`ImportFile ${metadata.customerKey}: ${ex.message}`);
139
- }
137
+ metadata.destinationObjectId = cache.searchForField(
138
+ 'dataExtension',
139
+ metadata.r__dataExtension_CustomerKey,
140
+ 'CustomerKey',
141
+ 'ObjectID'
142
+ );
143
+ delete metadata.r__dataExtension_CustomerKey;
140
144
  } else if (metadata.c__destinationType === 'List') {
141
- try {
142
- metadata.destinationObjectId = Util.getListObjectIdFromCache(
143
- this.cache,
144
- metadata.r__list_PathName,
145
- 'ObjectID'
146
- );
147
- delete metadata.r__list_PathName;
148
- } catch (ex) {
149
- throw new Error(`ImportFile ${metadata.customerKey}: ${ex.message}`);
150
- }
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;
151
152
  }
152
153
  // When the destinationObjectTypeId is 584 is refers to Mobile Connect which is not supported as an Import Type
153
154
  metadata.destinationObjectTypeId =
@@ -160,12 +161,12 @@ class ImportFile extends MetadataType {
160
161
 
161
162
  /**
162
163
  * parses retrieved Metadata before saving
163
- * @param {Object} metadata a single import definition
164
- * @returns {Object} parsed metadata definition
164
+ *
165
+ * @param {TYPE.MetadataTypeItem} metadata a single import definition
166
+ * @returns {TYPE.MetadataTypeItem} parsed metadata definition
165
167
  */
166
168
  static parseMetadata(metadata) {
167
- metadata.r__ftpLocation_name = Util.getFromCache(
168
- this.cache,
169
+ metadata.r__ftpLocation_name = cache.searchForField(
169
170
  'ftpLocation',
170
171
  metadata.fileTransferLocationId,
171
172
  'id',
@@ -181,8 +182,7 @@ class ImportFile extends MetadataType {
181
182
  delete metadata.destinationObjectTypeId;
182
183
  if (metadata.c__destinationType === 'DataExtension') {
183
184
  try {
184
- metadata.r__dataExtension_CustomerKey = Util.getFromCache(
185
- this.cache,
185
+ metadata.r__dataExtension_CustomerKey = cache.searchForField(
186
186
  'dataExtension',
187
187
  metadata.destinationObjectId,
188
188
  'ObjectID',
@@ -190,18 +190,17 @@ class ImportFile extends MetadataType {
190
190
  );
191
191
  delete metadata.destinationObjectId;
192
192
  } catch (ex) {
193
- Util.logger.error(`ImportFile ${metadata.customerKey}: ${ex.message}`);
193
+ Util.logger.warn(` - ImportFile ${metadata.customerKey}: ${ex.message}`);
194
194
  }
195
195
  } else if (metadata.c__destinationType === 'List') {
196
196
  try {
197
- metadata.r__list_PathName = Util.getListPathNameFromCache(
198
- this.cache,
197
+ metadata.r__list_PathName = cache.getListPathName(
199
198
  metadata.destinationObjectId,
200
199
  'ObjectID'
201
200
  );
202
201
  delete metadata.destinationObjectId;
203
202
  } catch (ex) {
204
- Util.logger.error(`ImportFile ${metadata.customerKey}: ${ex.message}`);
203
+ Util.logger.warn(` - ImportFile ${metadata.customerKey}: ${ex.message}`);
205
204
  }
206
205
  }
207
206
 
@@ -221,7 +220,5 @@ class ImportFile extends MetadataType {
221
220
 
222
221
  // Assign definition to static attributes
223
222
  ImportFile.definition = require('../MetadataTypeDefinitions').importFile;
224
- ImportFile.cache = {};
225
- ImportFile.client = undefined;
226
223
 
227
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
  }