mcdev 3.1.3 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +67 -7
- package/.github/ISSUE_TEMPLATE/bug.yml +2 -1
- package/.github/PULL_REQUEST_TEMPLATE.md +5 -3
- package/.github/dependabot.yml +14 -0
- package/.github/workflows/code-analysis.yml +57 -0
- package/.husky/commit-msg +10 -0
- package/.husky/post-checkout +5 -0
- package/.husky/pre-commit +2 -1
- package/.prettierrc +8 -0
- package/.vscode/settings.json +1 -1
- package/LICENSE +2 -2
- package/README.md +134 -45
- package/boilerplate/config.json +5 -11
- package/boilerplate/files/.prettierrc +8 -0
- package/boilerplate/files/.vscode/extensions.json +0 -1
- package/boilerplate/files/.vscode/settings.json +30 -2
- package/boilerplate/files/README.md +2 -2
- package/boilerplate/forcedUpdates.json +10 -0
- package/boilerplate/npm-dependencies.json +5 -5
- package/docs/dist/documentation.md +2807 -1730
- package/jsconfig.json +1 -1
- package/lib/Builder.js +171 -74
- package/lib/Deployer.js +244 -96
- package/lib/MetadataTypeDefinitions.js +2 -0
- package/lib/MetadataTypeInfo.js +2 -0
- package/lib/Retriever.js +61 -84
- package/lib/cli.js +116 -11
- package/lib/index.js +241 -561
- package/lib/metadataTypes/AccountUser.js +117 -103
- package/lib/metadataTypes/Asset.js +705 -255
- package/lib/metadataTypes/AttributeGroup.js +23 -12
- package/lib/metadataTypes/Automation.js +489 -392
- package/lib/metadataTypes/Campaign.js +33 -93
- package/lib/metadataTypes/ContentArea.js +31 -11
- package/lib/metadataTypes/DataExtension.js +387 -372
- package/lib/metadataTypes/DataExtensionField.js +131 -54
- package/lib/metadataTypes/DataExtensionTemplate.js +22 -4
- package/lib/metadataTypes/DataExtract.js +61 -48
- package/lib/metadataTypes/DataExtractType.js +14 -8
- package/lib/metadataTypes/Discovery.js +21 -16
- package/lib/metadataTypes/Email.js +32 -12
- package/lib/metadataTypes/EmailSendDefinition.js +85 -80
- package/lib/metadataTypes/EventDefinition.js +61 -43
- package/lib/metadataTypes/FileTransfer.js +72 -52
- package/lib/metadataTypes/Filter.js +11 -4
- package/lib/metadataTypes/Folder.js +149 -117
- package/lib/metadataTypes/FtpLocation.js +14 -8
- package/lib/metadataTypes/ImportFile.js +61 -64
- package/lib/metadataTypes/Interaction.js +19 -4
- package/lib/metadataTypes/List.js +54 -13
- package/lib/metadataTypes/MetadataType.js +664 -454
- package/lib/metadataTypes/MobileCode.js +46 -0
- package/lib/metadataTypes/MobileKeyword.js +114 -0
- package/lib/metadataTypes/Query.js +206 -105
- package/lib/metadataTypes/Role.js +76 -61
- package/lib/metadataTypes/Script.js +147 -83
- package/lib/metadataTypes/SetDefinition.js +20 -8
- package/lib/metadataTypes/TriggeredSendDefinition.js +78 -58
- package/lib/metadataTypes/definitions/Asset.definition.js +21 -10
- package/lib/metadataTypes/definitions/AttributeGroup.definition.js +12 -0
- package/lib/metadataTypes/definitions/Automation.definition.js +10 -5
- package/lib/metadataTypes/definitions/Campaign.definition.js +44 -1
- package/lib/metadataTypes/definitions/DataExtension.definition.js +4 -0
- package/lib/metadataTypes/definitions/DataExtensionTemplate.definition.js +6 -0
- package/lib/metadataTypes/definitions/DataExtract.definition.js +18 -14
- package/lib/metadataTypes/definitions/Discovery.definition.js +12 -0
- package/lib/metadataTypes/definitions/EmailSendDefinition.definition.js +4 -0
- package/lib/metadataTypes/definitions/EventDefinition.definition.js +22 -0
- package/lib/metadataTypes/definitions/FileTransfer.definition.js +4 -0
- package/lib/metadataTypes/definitions/Filter.definition.js +4 -0
- package/lib/metadataTypes/definitions/Folder.definition.js +6 -0
- package/lib/metadataTypes/definitions/FtpLocation.definition.js +4 -0
- package/lib/metadataTypes/definitions/ImportFile.definition.js +10 -5
- package/lib/metadataTypes/definitions/Interaction.definition.js +4 -0
- package/lib/metadataTypes/definitions/MobileCode.definition.js +163 -0
- package/lib/metadataTypes/definitions/MobileKeyword.definition.js +253 -0
- package/lib/metadataTypes/definitions/Query.definition.js +4 -0
- package/lib/metadataTypes/definitions/Role.definition.js +5 -0
- package/lib/metadataTypes/definitions/Script.definition.js +4 -0
- package/lib/metadataTypes/definitions/SetDefinition.definition.js +28 -0
- package/lib/metadataTypes/definitions/TriggeredSendDefinition.definition.js +4 -0
- package/lib/retrieveChangelog.js +7 -6
- package/lib/util/auth.js +117 -0
- package/lib/util/businessUnit.js +55 -66
- package/lib/util/cache.js +194 -0
- package/lib/util/cli.js +90 -116
- package/lib/util/config.js +302 -0
- package/lib/util/devops.js +250 -50
- package/lib/util/file.js +141 -201
- package/lib/util/init.config.js +208 -75
- package/lib/util/init.git.js +45 -50
- package/lib/util/init.js +72 -59
- package/lib/util/init.npm.js +48 -39
- package/lib/util/util.js +280 -564
- package/package.json +45 -34
- package/test/dataExtension.test.js +152 -0
- package/test/mockRoot/.mcdev-auth.json +8 -0
- package/test/mockRoot/.mcdevrc.json +67 -0
- package/test/mockRoot/deploy/testInstance/testBU/dataExtension/childBU_dataextension_test.dataExtension-meta.json +39 -0
- package/test/mockRoot/deploy/testInstance/testBU/dataExtension/testDataExtension.dataExtension-meta.json +23 -0
- package/test/mockRoot/deploy/testInstance/testBU/query/testExistingQuery.query-meta.json +11 -0
- package/test/mockRoot/deploy/testInstance/testBU/query/testExistingQuery.query-meta.sql +4 -0
- package/test/mockRoot/deploy/testInstance/testBU/query/testQuery.query-meta.json +11 -0
- package/test/mockRoot/deploy/testInstance/testBU/query/testQuery.query-meta.sql +4 -0
- package/test/query.test.js +149 -0
- package/test/resourceFactory.js +142 -0
- package/test/resources/1111111/dataFolder/retrieve-response.xml +43 -0
- package/test/resources/9999999/automation/v1/queries/549f0568-607c-4940-afef-437965094dat/patch-response.json +18 -0
- package/test/resources/9999999/automation/v1/queries/get-response.json +24 -0
- package/test/resources/9999999/automation/v1/queries/post-response.json +18 -0
- package/test/resources/9999999/dataExtension/build-expected.json +51 -0
- package/test/resources/9999999/dataExtension/create-expected.json +23 -0
- package/test/resources/9999999/dataExtension/create-response.xml +54 -0
- package/test/resources/9999999/dataExtension/retrieve-expected.json +51 -0
- package/test/resources/9999999/dataExtension/retrieve-response.xml +47 -0
- package/test/resources/9999999/dataExtension/template-expected.json +51 -0
- package/test/resources/9999999/dataExtension/update-expected.json +55 -0
- package/test/resources/9999999/dataExtension/update-response.xml +52 -0
- package/test/resources/9999999/dataExtensionField/retrieve-response.xml +93 -0
- package/test/resources/9999999/dataExtensionTemplate/retrieve-response.xml +303 -0
- package/test/resources/9999999/dataFolder/retrieve-response.xml +65 -0
- package/test/resources/9999999/query/build-expected.json +8 -0
- package/test/resources/9999999/query/get-expected.json +11 -0
- package/test/resources/9999999/query/patch-expected.json +11 -0
- package/test/resources/9999999/query/post-expected.json +11 -0
- package/test/resources/9999999/query/template-expected.json +8 -0
- package/test/resources/auth.json +32 -0
- package/test/resources/rest404-response.json +5 -0
- package/test/resources/retrieve-response.xml +21 -0
- package/test/utils.js +107 -0
- package/types/mcdev.d.js +301 -0
- package/CHANGELOG.md +0 -126
- package/PULL_REQUEST_TEMPLATE.md +0 -19
- 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
|
-
*
|
|
17
|
-
* @
|
|
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
|
-
*
|
|
33
|
+
*
|
|
34
|
+
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise
|
|
26
35
|
*/
|
|
27
36
|
static async retrieveForCache() {
|
|
28
|
-
return super.retrieveREST(null, '/automation/v1/imports/'
|
|
37
|
+
return super.retrieveREST(null, '/automation/v1/imports/');
|
|
29
38
|
}
|
|
30
39
|
|
|
31
40
|
/**
|
|
32
41
|
* Retrieve a specific Import Definition by Name
|
|
33
|
-
*
|
|
34
|
-
* @param {
|
|
35
|
-
* @param {
|
|
36
|
-
* @
|
|
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
|
|
40
|
-
|
|
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
|
|
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
|
|
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
|
|
82
|
+
} "${name}": ${JSON.stringify(res)}`
|
|
77
83
|
);
|
|
78
84
|
}
|
|
79
85
|
}
|
|
80
86
|
|
|
81
87
|
/**
|
|
82
88
|
* manages post retrieve steps
|
|
83
|
-
*
|
|
84
|
-
* @
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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 =
|
|
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
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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
|
-
|
|
142
|
-
metadata.
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
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
|
-
*
|
|
164
|
-
* @
|
|
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 =
|
|
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 =
|
|
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.
|
|
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 =
|
|
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.
|
|
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
|
-
*
|
|
14
|
-
* @
|
|
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(
|
|
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
|
-
*
|
|
14
|
-
* @
|
|
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
|
-
|
|
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
|
-
*
|
|
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
|
-
*
|
|
34
|
-
* @
|
|
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
|
-
*
|
|
42
|
-
* @param {
|
|
43
|
-
* @
|
|
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 =
|
|
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
|
}
|