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.
- package/.eslintrc.json +67 -7
- package/.github/ISSUE_TEMPLATE/bug.yml +5 -1
- package/.github/ISSUE_TEMPLATE/task.md +1 -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 +28 -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 +2795 -1724
- package/jsconfig.json +1 -1
- package/lib/Builder.js +166 -75
- 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 +133 -25
- package/lib/index.js +242 -563
- package/lib/metadataTypes/AccountUser.js +101 -95
- package/lib/metadataTypes/Asset.js +677 -248
- package/lib/metadataTypes/AttributeGroup.js +23 -12
- package/lib/metadataTypes/Automation.js +456 -357
- package/lib/metadataTypes/Campaign.js +33 -93
- package/lib/metadataTypes/ContentArea.js +31 -11
- package/lib/metadataTypes/DataExtension.js +391 -376
- package/lib/metadataTypes/DataExtensionField.js +131 -54
- package/lib/metadataTypes/DataExtensionTemplate.js +22 -4
- package/lib/metadataTypes/DataExtract.js +67 -50
- 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 +69 -47
- package/lib/metadataTypes/FileTransfer.js +78 -54
- 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 +69 -69
- package/lib/metadataTypes/Interaction.js +19 -4
- package/lib/metadataTypes/List.js +54 -13
- package/lib/metadataTypes/MetadataType.js +687 -479
- package/lib/metadataTypes/MobileCode.js +46 -0
- package/lib/metadataTypes/MobileKeyword.js +114 -0
- package/lib/metadataTypes/Query.js +204 -103
- package/lib/metadataTypes/Role.js +76 -61
- package/lib/metadataTypes/Script.js +146 -82
- 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 +240 -50
- package/lib/util/file.js +120 -191
- package/lib/util/init.config.js +195 -69
- 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 +44 -33
- 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,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
|
-
*
|
|
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
|
-
static async retrieveAsTemplate(templateDir, name,
|
|
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) {
|
|
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
|
|
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(
|
|
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
|
-
|
|
61
|
-
JSON.parse(Util.replaceByObject(JSON.stringify(val),
|
|
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
|
|
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
|
|
82
|
+
} "${name}": ${JSON.stringify(res)}`
|
|
74
83
|
);
|
|
75
84
|
}
|
|
76
85
|
}
|
|
77
86
|
|
|
78
87
|
/**
|
|
79
88
|
* manages post retrieve steps
|
|
80
|
-
*
|
|
81
|
-
* @
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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 =
|
|
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
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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
|
-
|
|
139
|
-
metadata.
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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
|
-
*
|
|
161
|
-
* @
|
|
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 =
|
|
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 =
|
|
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.
|
|
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 =
|
|
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.
|
|
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
|
-
*
|
|
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
|
}
|