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,58 +1,77 @@
|
|
|
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');
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* MessageSendActivity MetadataType
|
|
10
|
+
*
|
|
9
11
|
* @augments MetadataType
|
|
10
12
|
*/
|
|
11
13
|
class AccountUser extends MetadataType {
|
|
12
14
|
/**
|
|
13
15
|
* Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata
|
|
14
|
-
*
|
|
15
|
-
* @param {
|
|
16
|
-
* @param {
|
|
17
|
-
* @
|
|
16
|
+
*
|
|
17
|
+
* @param {string} retrieveDir Directory where retrieved metadata directory will be saved
|
|
18
|
+
* @param {void} _ unused parameter
|
|
19
|
+
* @param {TYPE.BuObject} buObject properties for auth
|
|
20
|
+
* @param {void} [___] unused parameter
|
|
21
|
+
* @param {string} [key] customer key of single item to retrieve
|
|
22
|
+
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of metadata
|
|
18
23
|
*/
|
|
19
|
-
static async retrieve(retrieveDir, _, buObject) {
|
|
24
|
+
static async retrieve(retrieveDir, _, buObject, ___, key) {
|
|
20
25
|
if (buObject.eid !== buObject.mid) {
|
|
21
|
-
Util.logger.info('Skipping User retrieval on non-parent BU');
|
|
26
|
+
Util.logger.info(' - Skipping User retrieval on non-parent BU');
|
|
22
27
|
return;
|
|
23
28
|
}
|
|
24
|
-
|
|
29
|
+
return this._retrieve(retrieveDir, buObject, key);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata
|
|
33
|
+
*
|
|
34
|
+
* @param {TYPE.BuObject} buObject properties for auth
|
|
35
|
+
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of metadata
|
|
36
|
+
*/
|
|
37
|
+
static async retrieveChangelog(buObject) {
|
|
38
|
+
return this._retrieve(null, buObject, null);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Retrieves SOAP based metadata of metadata type into local filesystem. executes callback with retrieved metadata
|
|
42
|
+
*
|
|
43
|
+
* @private
|
|
44
|
+
* @param {string} retrieveDir Directory where retrieved metadata directory will be saved
|
|
45
|
+
* @param {TYPE.BuObject} buObject properties for auth
|
|
46
|
+
* @param {string} [key] customer key of single item to retrieve
|
|
47
|
+
* @returns {Promise.<TYPE.MetadataTypeMapObj>} Promise of metadata
|
|
48
|
+
*/
|
|
49
|
+
static async _retrieve(retrieveDir, buObject, key) {
|
|
50
|
+
Util.logger.info(' - Caching dependent Metadata: AccountUserAccount');
|
|
25
51
|
|
|
26
52
|
// get BUs that each users have access to
|
|
27
53
|
const optionsBUs = {};
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
'Account.ID',
|
|
37
|
-
'Account.Name',
|
|
38
|
-
],
|
|
39
|
-
optionsBUs,
|
|
40
|
-
(ex, response) => (ex ? reject(ex) : resolve(response.body.Results))
|
|
41
|
-
);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
54
|
+
|
|
55
|
+
const resultsBatch = (
|
|
56
|
+
await this.client.soap.retrieveBulk(
|
|
57
|
+
'AccountUserAccount',
|
|
58
|
+
['AccountUser.AccountUserID', 'AccountUser.UserID', 'Account.ID', 'Account.Name'],
|
|
59
|
+
optionsBUs
|
|
60
|
+
)
|
|
61
|
+
).Results;
|
|
44
62
|
this.userIdBuMap = {};
|
|
45
|
-
|
|
63
|
+
for (const item of resultsBatch) {
|
|
46
64
|
this.userIdBuMap[item.AccountUser.AccountUserID] =
|
|
47
65
|
this.userIdBuMap[item.AccountUser.AccountUserID] || [];
|
|
48
66
|
this.userIdBuMap[item.AccountUser.AccountUserID].push({
|
|
49
67
|
ID: item.Account.ID,
|
|
50
68
|
Name: item.Account.Name,
|
|
51
69
|
});
|
|
52
|
-
}
|
|
70
|
+
}
|
|
53
71
|
// get actual user details
|
|
54
|
-
|
|
55
|
-
|
|
72
|
+
/** @type {TYPE.SoapRequestParams} */
|
|
73
|
+
let requestParams = {
|
|
74
|
+
QueryAllAccounts: true,
|
|
56
75
|
|
|
57
76
|
filter: {
|
|
58
77
|
leftOperand: {
|
|
@@ -79,13 +98,26 @@ class AccountUser extends MetadataType {
|
|
|
79
98
|
},
|
|
80
99
|
},
|
|
81
100
|
};
|
|
101
|
+
if (key) {
|
|
102
|
+
// move original filter down one level into rightOperand and add key filter into leftOperand
|
|
103
|
+
requestParams = {
|
|
104
|
+
filter: {
|
|
105
|
+
leftOperand: {
|
|
106
|
+
leftOperand: 'CustomerKey',
|
|
107
|
+
operator: 'equals',
|
|
108
|
+
rightOperand: key,
|
|
109
|
+
},
|
|
110
|
+
operator: 'AND',
|
|
111
|
+
rightOperand: requestParams.filter,
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
}
|
|
82
115
|
|
|
83
|
-
return super.
|
|
116
|
+
return super.retrieveSOAP(retrieveDir, buObject, requestParams);
|
|
84
117
|
}
|
|
85
118
|
/**
|
|
86
119
|
*
|
|
87
120
|
* @param {string} date first date
|
|
88
|
-
* @param {string} date2 second date
|
|
89
121
|
* @returns {number} time difference
|
|
90
122
|
*/
|
|
91
123
|
static timeSinceDate(date) {
|
|
@@ -98,61 +130,66 @@ class AccountUser extends MetadataType {
|
|
|
98
130
|
date = new Date(date);
|
|
99
131
|
const now = new Date();
|
|
100
132
|
const timediff = now - date;
|
|
101
|
-
if (isNaN(timediff)) {
|
|
102
|
-
return NaN;
|
|
133
|
+
if (Number.isNaN(timediff)) {
|
|
134
|
+
return Number.NaN;
|
|
103
135
|
}
|
|
104
136
|
let result;
|
|
105
137
|
switch (interval) {
|
|
106
|
-
case 'years':
|
|
138
|
+
case 'years': {
|
|
107
139
|
result = now.getFullYear() - date.getFullYear();
|
|
108
140
|
break;
|
|
109
|
-
|
|
141
|
+
}
|
|
142
|
+
case 'months': {
|
|
110
143
|
result =
|
|
111
144
|
now.getFullYear() * 12 +
|
|
112
145
|
now.getMonth() -
|
|
113
146
|
(date.getFullYear() * 12 + date.getMonth());
|
|
114
147
|
break;
|
|
115
|
-
|
|
148
|
+
}
|
|
149
|
+
case 'weeks': {
|
|
116
150
|
result = Math.floor(timediff / week);
|
|
117
151
|
break;
|
|
118
|
-
|
|
152
|
+
}
|
|
153
|
+
case 'days': {
|
|
119
154
|
result = Math.floor(timediff / day);
|
|
120
155
|
break;
|
|
121
|
-
|
|
156
|
+
}
|
|
157
|
+
case 'hours': {
|
|
122
158
|
result = Math.floor(timediff / hour);
|
|
123
159
|
break;
|
|
124
|
-
|
|
160
|
+
}
|
|
161
|
+
case 'minutes': {
|
|
125
162
|
result = Math.floor(timediff / minute);
|
|
126
163
|
break;
|
|
127
|
-
|
|
164
|
+
}
|
|
165
|
+
case 'seconds': {
|
|
128
166
|
result = Math.floor(timediff / second);
|
|
129
167
|
break;
|
|
130
|
-
|
|
131
|
-
|
|
168
|
+
}
|
|
169
|
+
default: {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
132
172
|
}
|
|
133
173
|
return result + ' ' + interval;
|
|
134
174
|
}
|
|
135
175
|
/**
|
|
136
176
|
* helper to print bu names
|
|
137
|
-
*
|
|
177
|
+
*
|
|
178
|
+
* @param {TYPE.BuObject} buObject needed for eid
|
|
138
179
|
* @param {string} buObject.eid needed to check for parent bu
|
|
139
|
-
* @param {
|
|
180
|
+
* @param {number} id bu id
|
|
140
181
|
* @returns {string} "bu name (bu id)""
|
|
141
182
|
*/
|
|
142
183
|
static getBuName(buObject, id) {
|
|
143
|
-
|
|
144
|
-
if (buObject.eid == id) {
|
|
145
|
-
name = '_ParentBU_';
|
|
146
|
-
} else {
|
|
147
|
-
name = this.buIdName[id];
|
|
148
|
-
}
|
|
184
|
+
const name = buObject.eid == id ? '_ParentBU_' : this.buIdName[id];
|
|
149
185
|
return `<nobr>${name} (${id})</nobr>`;
|
|
150
186
|
}
|
|
151
187
|
/**
|
|
152
188
|
* Creates markdown documentation of all roles
|
|
153
|
-
*
|
|
154
|
-
* @param {
|
|
155
|
-
* @
|
|
189
|
+
*
|
|
190
|
+
* @param {TYPE.BuObject} buObject properties for auth
|
|
191
|
+
* @param {TYPE.MetadataTypeMap} [metadata] user list
|
|
192
|
+
* @returns {Promise.<void>} -
|
|
156
193
|
*/
|
|
157
194
|
static async document(buObject, metadata) {
|
|
158
195
|
if (buObject.eid !== buObject.mid) {
|
|
@@ -182,6 +219,9 @@ class AccountUser extends MetadataType {
|
|
|
182
219
|
|
|
183
220
|
// initialize permission object
|
|
184
221
|
this.allPermissions = {};
|
|
222
|
+
/**
|
|
223
|
+
* @type {TYPE.AccountUserDocument[]}
|
|
224
|
+
*/
|
|
185
225
|
const users = [];
|
|
186
226
|
// traverse all permissions recursively and write them into allPermissions object once it has reached the end
|
|
187
227
|
for (const id in metadata) {
|
|
@@ -194,9 +234,7 @@ class AccountUser extends MetadataType {
|
|
|
194
234
|
user.UserPermissions = [user.UserPermissions];
|
|
195
235
|
}
|
|
196
236
|
userPermissions = user.UserPermissions.map((item) => item.ID * 1)
|
|
197
|
-
.sort(
|
|
198
|
-
return a < b ? -1 : a > b ? 1 : 0;
|
|
199
|
-
})
|
|
237
|
+
.sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))
|
|
200
238
|
.join(', ');
|
|
201
239
|
}
|
|
202
240
|
// user roles
|
|
@@ -206,9 +244,7 @@ class AccountUser extends MetadataType {
|
|
|
206
244
|
roles =
|
|
207
245
|
'<nobr>' +
|
|
208
246
|
user.Roles.map((item) => item.Name)
|
|
209
|
-
.sort(
|
|
210
|
-
return a < b ? -1 : a > b ? 1 : 0;
|
|
211
|
-
})
|
|
247
|
+
.sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))
|
|
212
248
|
.join(',</nobr><br> <nobr>') +
|
|
213
249
|
'</nobr>';
|
|
214
250
|
}
|
|
@@ -218,9 +254,7 @@ class AccountUser extends MetadataType {
|
|
|
218
254
|
this.buIdName[item.ID] = item.Name;
|
|
219
255
|
return this.getBuName(buObject, item.ID);
|
|
220
256
|
})
|
|
221
|
-
.sort(
|
|
222
|
-
return a < b ? -1 : a > b ? 1 : 0;
|
|
223
|
-
})
|
|
257
|
+
.sort((a, b) => (a < b ? -1 : a > b ? 1 : 0))
|
|
224
258
|
.join(',<br> ');
|
|
225
259
|
}
|
|
226
260
|
const defaultBUName = this.getBuName(buObject, user.DefaultBusinessUnit);
|
|
@@ -232,9 +266,9 @@ class AccountUser extends MetadataType {
|
|
|
232
266
|
Name: user.Name,
|
|
233
267
|
Email: user.Email,
|
|
234
268
|
NotificationEmailAddress: user.NotificationEmailAddress,
|
|
235
|
-
ActiveFlag: user.ActiveFlag ===
|
|
236
|
-
IsAPIUser: user.IsAPIUser ===
|
|
237
|
-
MustChangePassword: user.MustChangePassword ===
|
|
269
|
+
ActiveFlag: user.ActiveFlag === true ? '✓' : '-',
|
|
270
|
+
IsAPIUser: user.IsAPIUser === true ? '✓' : '-',
|
|
271
|
+
MustChangePassword: user.MustChangePassword === true ? '✓' : '-',
|
|
238
272
|
DefaultBusinessUnit: defaultBUName,
|
|
239
273
|
AssociatedBusinessUnits__c: associatedBus,
|
|
240
274
|
Roles: roles,
|
|
@@ -244,9 +278,7 @@ class AccountUser extends MetadataType {
|
|
|
244
278
|
ModifiedDate: user.ModifiedDate.split('T').join(' '),
|
|
245
279
|
});
|
|
246
280
|
}
|
|
247
|
-
users.sort(
|
|
248
|
-
return a.Name < b.Name ? -1 : a.Name > b.Name ? 1 : 0;
|
|
249
|
-
});
|
|
281
|
+
users.sort((a, b) => (a.Name < b.Name ? -1 : a.Name > b.Name ? 1 : 0));
|
|
250
282
|
const columnsToPrint = [
|
|
251
283
|
['Name', 'Name'],
|
|
252
284
|
['Last successful Login', 'LastSuccessfulLogin'],
|
|
@@ -281,72 +313,60 @@ class AccountUser extends MetadataType {
|
|
|
281
313
|
'Installed Package',
|
|
282
314
|
columnsToPrint
|
|
283
315
|
);
|
|
284
|
-
const docPath = File.normalizePath([this.properties.directories.
|
|
316
|
+
const docPath = File.normalizePath([this.properties.directories.docs, 'user']);
|
|
285
317
|
|
|
286
318
|
try {
|
|
287
319
|
const filename = buObject.credential;
|
|
288
|
-
// ensure docs/roles folder is existing (depends on setup in .mcdevrc.json)
|
|
289
|
-
if (!File.existsSync(docPath)) {
|
|
290
|
-
File.mkdirpSync(docPath);
|
|
291
|
-
}
|
|
292
320
|
// write to disk
|
|
293
|
-
await File.writeToFile(docPath, filename + '.
|
|
294
|
-
Util.logger.info(`Created ${docPath
|
|
321
|
+
await File.writeToFile(docPath, filename + '.accountUsers', 'md', output);
|
|
322
|
+
Util.logger.info(`Created ${File.normalizePath([docPath, filename])}.accountUsers.md`);
|
|
295
323
|
if (['html', 'both'].includes(this.properties.options.documentType)) {
|
|
296
324
|
Util.logger.warn(
|
|
297
|
-
'HTML-based documentation of accountUser currently not supported.'
|
|
325
|
+
' - HTML-based documentation of accountUser currently not supported.'
|
|
298
326
|
);
|
|
299
327
|
}
|
|
300
328
|
} catch (ex) {
|
|
301
329
|
Util.logger.error(`AccountUser.document():: error | `, ex.message);
|
|
302
330
|
}
|
|
303
331
|
}
|
|
304
|
-
/**
|
|
305
|
-
* Experimental: Only working for DataExtensions:
|
|
306
|
-
* Saves json content to a html table in the local file system. Will create the parent directory if it does not exist.
|
|
307
|
-
* The json's first level of keys must represent the rows and the secend level the columns
|
|
308
|
-
* @private
|
|
309
|
-
* @param {DataExtensionItem} json dataextension
|
|
310
|
-
* @param {Array} tabled prepped array for output in tabular format
|
|
311
|
-
* @returns {string} file content
|
|
312
|
-
*/
|
|
313
332
|
/**
|
|
314
333
|
*
|
|
315
|
-
* @param {
|
|
334
|
+
* @param {object[]} users list of users and installed package
|
|
316
335
|
* @param {'Installed Package'|'User'} type choose what sub type to print
|
|
317
336
|
* @param {Array[]} columnsToPrint helper array
|
|
318
|
-
* @param {Object} buObject properties for auth
|
|
319
337
|
* @returns {string} markdown
|
|
320
338
|
*/
|
|
321
339
|
static _generateDocMd(users, type, columnsToPrint) {
|
|
322
340
|
let output = `\n\n## ${type}s (${users.length})\n\n`;
|
|
323
341
|
let tableSeparator = '';
|
|
324
|
-
|
|
342
|
+
for (const column of columnsToPrint) {
|
|
325
343
|
output += `| ${column[0]} `;
|
|
326
344
|
tableSeparator += '| --- ';
|
|
327
|
-
}
|
|
345
|
+
}
|
|
328
346
|
output += `|\n${tableSeparator}|\n`;
|
|
329
|
-
|
|
330
|
-
|
|
347
|
+
for (const user of users) {
|
|
348
|
+
for (const column of columnsToPrint) {
|
|
331
349
|
output += `| ${user[column[1]]} `;
|
|
332
|
-
}
|
|
350
|
+
}
|
|
333
351
|
output += `|\n`;
|
|
334
|
-
}
|
|
352
|
+
}
|
|
335
353
|
return output;
|
|
336
354
|
}
|
|
337
355
|
|
|
338
356
|
/**
|
|
339
357
|
* manages post retrieve steps
|
|
340
|
-
*
|
|
341
|
-
* @
|
|
358
|
+
*
|
|
359
|
+
* @param {TYPE.MetadataTypeItem} metadata a single query
|
|
360
|
+
* @returns {TYPE.MetadataTypeItem} Array with one metadata object and one query string
|
|
342
361
|
*/
|
|
343
362
|
static postRetrieveTasks(metadata) {
|
|
344
363
|
return this.parseMetadata(metadata);
|
|
345
364
|
}
|
|
346
365
|
/**
|
|
347
366
|
* parses retrieved Metadata before saving
|
|
348
|
-
*
|
|
349
|
-
* @
|
|
367
|
+
*
|
|
368
|
+
* @param {TYPE.MetadataTypeItem} metadata a single query activity definition
|
|
369
|
+
* @returns {TYPE.MetadataTypeItem} Array with one metadata object and one sql string
|
|
350
370
|
*/
|
|
351
371
|
static parseMetadata(metadata) {
|
|
352
372
|
metadata.type__c = 'Installed Package';
|
|
@@ -354,11 +374,7 @@ class AccountUser extends MetadataType {
|
|
|
354
374
|
metadata.type__c = 'User';
|
|
355
375
|
}
|
|
356
376
|
|
|
357
|
-
|
|
358
|
-
metadata.AssociatedBusinessUnits__c = this.userIdBuMap[metadata.ID];
|
|
359
|
-
} else {
|
|
360
|
-
metadata.AssociatedBusinessUnits__c = [];
|
|
361
|
-
}
|
|
377
|
+
metadata.AssociatedBusinessUnits__c = this.userIdBuMap[metadata.ID] || [];
|
|
362
378
|
|
|
363
379
|
let roles;
|
|
364
380
|
if (metadata.Roles.Role) {
|
|
@@ -370,9 +386,7 @@ class AccountUser extends MetadataType {
|
|
|
370
386
|
roles = metadata.Roles.Role.map((item) => ({
|
|
371
387
|
Name: item.Name,
|
|
372
388
|
CustomerKey: item.CustomerKey,
|
|
373
|
-
})).sort(
|
|
374
|
-
return a.Name < b.Name ? -1 : a.Name > b.Name ? 1 : 0;
|
|
375
|
-
});
|
|
389
|
+
})).sort((a, b) => (a.Name < b.Name ? -1 : a.Name > b.Name ? 1 : 0));
|
|
376
390
|
} else {
|
|
377
391
|
// set to empty array
|
|
378
392
|
roles = [];
|