mcdev 8.0.2 → 8.2.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/.github/ISSUE_TEMPLATE/bug.yml +2 -0
- package/.github/workflows/code-test.yml +2 -2
- package/.github/workflows/coverage-base-update.yml +3 -3
- package/.github/workflows/coverage-develop-branch.yml +3 -3
- package/.github/workflows/coverage-main-branch.yml +3 -3
- package/.github/workflows/coverage.yml +4 -4
- package/.github/workflows/npm-publish.yml +4 -4
- package/@types/lib/MetadataTypeDefinitions.d.ts +2 -0
- package/@types/lib/MetadataTypeDefinitions.d.ts.map +1 -1
- package/@types/lib/MetadataTypeInfo.d.ts +2 -0
- package/@types/lib/MetadataTypeInfo.d.ts.map +1 -1
- package/@types/lib/index.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Asset.d.ts.map +1 -1
- package/@types/lib/metadataTypes/DataExtensionField.d.ts +1 -7
- package/@types/lib/metadataTypes/DataExtensionField.d.ts.map +1 -1
- package/@types/lib/metadataTypes/Journey.d.ts +6 -0
- package/@types/lib/metadataTypes/Journey.d.ts.map +1 -1
- package/@types/lib/metadataTypes/MetadataType.d.ts.map +1 -1
- package/@types/lib/metadataTypes/TriggeredSendSummary.d.ts +257 -0
- package/@types/lib/metadataTypes/TriggeredSendSummary.d.ts.map +1 -0
- package/@types/lib/metadataTypes/definitions/DataExtensionField.definition.d.ts +1 -0
- package/@types/lib/metadataTypes/definitions/Journey.definition.d.ts +6 -0
- package/@types/lib/metadataTypes/definitions/TriggeredSendSummary.definition.d.ts +208 -0
- package/@types/lib/metadataTypes/definitions/TriggeredSendSummary.definition.d.ts.map +1 -0
- package/@types/lib/util/devops.d.ts +2 -1
- package/@types/lib/util/devops.d.ts.map +1 -1
- package/@types/lib/util/util.d.ts +2 -1
- package/@types/lib/util/util.d.ts.map +1 -1
- package/lib/MetadataTypeDefinitions.js +2 -0
- package/lib/MetadataTypeInfo.js +2 -0
- package/lib/cli.js +5 -0
- package/lib/index.js +29 -8
- package/lib/metadataTypes/Asset.js +30 -7
- package/lib/metadataTypes/Automation.js +1 -1
- package/lib/metadataTypes/DataExtensionField.js +102 -49
- package/lib/metadataTypes/Folder.js +2 -2
- package/lib/metadataTypes/Journey.js +5 -2
- package/lib/metadataTypes/MetadataType.js +8 -2
- package/lib/metadataTypes/TriggeredSendSummary.js +102 -0
- package/lib/metadataTypes/definitions/DataExtensionField.definition.js +1 -0
- package/lib/metadataTypes/definitions/Journey.definition.js +6 -0
- package/lib/metadataTypes/definitions/TriggeredSendSummary.definition.js +211 -0
- package/lib/util/devops.js +33 -15
- package/lib/util/util.js +13 -4
- package/package.json +10 -10
- package/test/mockRoot/.mcdevrc.json +1 -1
- package/test/resources/1111111/dataFolder/retrieve-ContentTypeINdataextension,hidden,queryactivity,salesforcedataextension,shared_data,shared_dataextension,shared_salesforcedataextension,synchronizeddataextension-response.xml +26 -0
- package/test/resources/9999999/automation/create-testNew_automation-expected.md +1 -1
- package/test/resources/9999999/automation/retrieve-testExisting_automation-expected.md +1 -1
- package/test/resources/9999999/automation/update-testExisting_automation-expected.md +1 -1
- package/test/resources/9999999/dataExtensionField/retrieve-Name=FirstName-response.xml +78 -0
- package/test/resources/9999999/dataExtensionField/retrieve-Name=LastName-response.xml +78 -0
- package/test/resources/9999999/triggeredSendSummary/get-expected.json +24 -0
- package/test/resources/9999999/triggeredSendSummary/retrieve-response.xml +49 -0
- package/test/type.dataExtension.test.js +41 -14
- package/test/type.dataExtensionField.test.js +81 -0
- package/test/type.journey.test.js +37 -2
- package/test/type.triggeredSendSummary.test.js +45 -0
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
declare namespace _default {
|
|
2
|
+
let bodyIteratorField: string;
|
|
3
|
+
let dependencies: string[];
|
|
4
|
+
namespace dependencyGraph {
|
|
5
|
+
let triggeredSend: string[];
|
|
6
|
+
}
|
|
7
|
+
let filter: {};
|
|
8
|
+
let hasExtended: boolean;
|
|
9
|
+
let idField: string;
|
|
10
|
+
let keepId: boolean;
|
|
11
|
+
let keyIsFixed: boolean;
|
|
12
|
+
let keyField: string;
|
|
13
|
+
let nameField: string;
|
|
14
|
+
let folderIdField: string;
|
|
15
|
+
let createdDateField: any;
|
|
16
|
+
let createdNameField: any;
|
|
17
|
+
let lastmodDateField: any;
|
|
18
|
+
let lastmodNameField: any;
|
|
19
|
+
let restPagination: any;
|
|
20
|
+
let maxKeyLength: number;
|
|
21
|
+
let type: string;
|
|
22
|
+
let soapType: string;
|
|
23
|
+
let typeDescription: string;
|
|
24
|
+
let typeRetrieveByDefault: boolean;
|
|
25
|
+
let typeCdpByDefault: boolean;
|
|
26
|
+
let typeName: string;
|
|
27
|
+
let fields: {
|
|
28
|
+
Bounces: {
|
|
29
|
+
isCreateable: boolean;
|
|
30
|
+
isUpdateable: boolean;
|
|
31
|
+
retrieving: boolean;
|
|
32
|
+
templating: boolean;
|
|
33
|
+
};
|
|
34
|
+
Clicks: {
|
|
35
|
+
isCreateable: boolean;
|
|
36
|
+
isUpdateable: boolean;
|
|
37
|
+
retrieving: boolean;
|
|
38
|
+
templating: boolean;
|
|
39
|
+
};
|
|
40
|
+
'Client.ID': {
|
|
41
|
+
isCreateable: boolean;
|
|
42
|
+
isUpdateable: boolean;
|
|
43
|
+
retrieving: boolean;
|
|
44
|
+
templating: boolean;
|
|
45
|
+
};
|
|
46
|
+
Conversions: {
|
|
47
|
+
isCreateable: boolean;
|
|
48
|
+
isUpdateable: boolean;
|
|
49
|
+
retrieving: boolean;
|
|
50
|
+
templating: boolean;
|
|
51
|
+
};
|
|
52
|
+
CustomerKey: {
|
|
53
|
+
isCreateable: boolean;
|
|
54
|
+
isUpdateable: boolean;
|
|
55
|
+
retrieving: boolean;
|
|
56
|
+
templating: boolean;
|
|
57
|
+
};
|
|
58
|
+
FTAFEmailsSent: {
|
|
59
|
+
isCreateable: boolean;
|
|
60
|
+
isUpdateable: boolean;
|
|
61
|
+
retrieving: boolean;
|
|
62
|
+
templating: boolean;
|
|
63
|
+
};
|
|
64
|
+
FTAFOptIns: {
|
|
65
|
+
isCreateable: boolean;
|
|
66
|
+
isUpdateable: boolean;
|
|
67
|
+
retrieving: boolean;
|
|
68
|
+
templating: boolean;
|
|
69
|
+
};
|
|
70
|
+
FTAFRequests: {
|
|
71
|
+
isCreateable: boolean;
|
|
72
|
+
isUpdateable: boolean;
|
|
73
|
+
retrieving: boolean;
|
|
74
|
+
templating: boolean;
|
|
75
|
+
};
|
|
76
|
+
ID: {
|
|
77
|
+
isCreateable: boolean;
|
|
78
|
+
isUpdateable: boolean;
|
|
79
|
+
retrieving: boolean;
|
|
80
|
+
templating: boolean;
|
|
81
|
+
};
|
|
82
|
+
InProcess: {
|
|
83
|
+
isCreateable: boolean;
|
|
84
|
+
isUpdateable: boolean;
|
|
85
|
+
retrieving: boolean;
|
|
86
|
+
templating: boolean;
|
|
87
|
+
};
|
|
88
|
+
NotSentDueToError: {
|
|
89
|
+
isCreateable: boolean;
|
|
90
|
+
isUpdateable: boolean;
|
|
91
|
+
retrieving: boolean;
|
|
92
|
+
templating: boolean;
|
|
93
|
+
};
|
|
94
|
+
NotSentDueToOptOut: {
|
|
95
|
+
isCreateable: boolean;
|
|
96
|
+
isUpdateable: boolean;
|
|
97
|
+
retrieving: boolean;
|
|
98
|
+
templating: boolean;
|
|
99
|
+
};
|
|
100
|
+
NotSentDueToUndeliverable: {
|
|
101
|
+
isCreateable: boolean;
|
|
102
|
+
isUpdateable: boolean;
|
|
103
|
+
retrieving: boolean;
|
|
104
|
+
templating: boolean;
|
|
105
|
+
};
|
|
106
|
+
ObjectID: {
|
|
107
|
+
isCreateable: boolean;
|
|
108
|
+
isUpdateable: boolean;
|
|
109
|
+
retrieving: boolean;
|
|
110
|
+
templating: boolean;
|
|
111
|
+
};
|
|
112
|
+
Opens: {
|
|
113
|
+
isCreateable: boolean;
|
|
114
|
+
isUpdateable: boolean;
|
|
115
|
+
retrieving: boolean;
|
|
116
|
+
templating: boolean;
|
|
117
|
+
};
|
|
118
|
+
OptOuts: {
|
|
119
|
+
isCreateable: boolean;
|
|
120
|
+
isUpdateable: boolean;
|
|
121
|
+
retrieving: boolean;
|
|
122
|
+
templating: boolean;
|
|
123
|
+
};
|
|
124
|
+
Owner: {
|
|
125
|
+
isCreateable: boolean;
|
|
126
|
+
isUpdateable: boolean;
|
|
127
|
+
retrieving: boolean;
|
|
128
|
+
templating: boolean;
|
|
129
|
+
};
|
|
130
|
+
PartnerKey: {
|
|
131
|
+
isCreateable: boolean;
|
|
132
|
+
isUpdateable: boolean;
|
|
133
|
+
retrieving: boolean;
|
|
134
|
+
templating: boolean;
|
|
135
|
+
};
|
|
136
|
+
PartnerProperties: {
|
|
137
|
+
isCreateable: boolean;
|
|
138
|
+
isUpdateable: boolean;
|
|
139
|
+
retrieving: boolean;
|
|
140
|
+
templating: boolean;
|
|
141
|
+
};
|
|
142
|
+
Queued: {
|
|
143
|
+
isCreateable: boolean;
|
|
144
|
+
isUpdateable: boolean;
|
|
145
|
+
retrieving: boolean;
|
|
146
|
+
templating: boolean;
|
|
147
|
+
};
|
|
148
|
+
Sent: {
|
|
149
|
+
isCreateable: boolean;
|
|
150
|
+
isUpdateable: boolean;
|
|
151
|
+
retrieving: boolean;
|
|
152
|
+
templating: boolean;
|
|
153
|
+
};
|
|
154
|
+
SurveyResponses: {
|
|
155
|
+
isCreateable: boolean;
|
|
156
|
+
isUpdateable: boolean;
|
|
157
|
+
retrieving: boolean;
|
|
158
|
+
templating: boolean;
|
|
159
|
+
};
|
|
160
|
+
UniqueClicks: {
|
|
161
|
+
isCreateable: boolean;
|
|
162
|
+
isUpdateable: boolean;
|
|
163
|
+
retrieving: boolean;
|
|
164
|
+
templating: boolean;
|
|
165
|
+
};
|
|
166
|
+
UniqueConversions: {
|
|
167
|
+
isCreateable: boolean;
|
|
168
|
+
isUpdateable: boolean;
|
|
169
|
+
retrieving: boolean;
|
|
170
|
+
templating: boolean;
|
|
171
|
+
};
|
|
172
|
+
UniqueOpens: {
|
|
173
|
+
isCreateable: boolean;
|
|
174
|
+
isUpdateable: boolean;
|
|
175
|
+
retrieving: boolean;
|
|
176
|
+
templating: boolean;
|
|
177
|
+
};
|
|
178
|
+
CorrelationID: {
|
|
179
|
+
isCreateable: boolean;
|
|
180
|
+
isUpdateable: boolean;
|
|
181
|
+
retrieving: boolean;
|
|
182
|
+
templating: boolean;
|
|
183
|
+
};
|
|
184
|
+
CreatedDate: {
|
|
185
|
+
isCreateable: boolean;
|
|
186
|
+
isUpdateable: boolean;
|
|
187
|
+
retrieving: boolean; /** Listed in the type documentation but not retrievable */
|
|
188
|
+
templating: boolean;
|
|
189
|
+
};
|
|
190
|
+
ModifiedDate: {
|
|
191
|
+
isCreateable: boolean;
|
|
192
|
+
isUpdateable: boolean;
|
|
193
|
+
retrieving: boolean; /** Listed in the type documentation but not retrievable */
|
|
194
|
+
templating: boolean;
|
|
195
|
+
};
|
|
196
|
+
r__triggeredSend_name: {
|
|
197
|
+
skipValidation: boolean;
|
|
198
|
+
};
|
|
199
|
+
r__triggeredSend_key: {
|
|
200
|
+
skipValidation: boolean;
|
|
201
|
+
};
|
|
202
|
+
r__folder_Path: {
|
|
203
|
+
skipValidation: boolean;
|
|
204
|
+
};
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
export default _default;
|
|
208
|
+
//# sourceMappingURL=TriggeredSendSummary.definition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TriggeredSendSummary.definition.d.ts","sourceRoot":"","sources":["../../../../lib/metadataTypes/definitions/TriggeredSendSummary.definition.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iCAqM8B,2DAA2D;;;;;;iCAM3D,2DAA2D"}
|
|
@@ -43,10 +43,11 @@ declare namespace DevOps {
|
|
|
43
43
|
* create markdown file for deployment listing
|
|
44
44
|
*
|
|
45
45
|
* @param {string} directory -
|
|
46
|
+
* @param {string} filterPathsCSV -
|
|
46
47
|
* @param {object} jsonReport -
|
|
47
48
|
* @returns {void}
|
|
48
49
|
*/
|
|
49
|
-
function document(directory: string, jsonReport: object): void;
|
|
50
|
+
function document(directory: string, filterPathsCSV: string, jsonReport: object): void;
|
|
50
51
|
/**
|
|
51
52
|
* should return only the json for all but asset, query and script that are saved as multiple files
|
|
52
53
|
* additionally, the documentation for dataExtension and automation should be returned
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"devops.d.ts","sourceRoot":"","sources":["../../../lib/util/devops.js"],"names":[],"mappings":";yBAea,OAAO,wBAAwB,EAAE,UAAU;uBAC3C,OAAO,wBAAwB,EAAE,QAAQ;oBACzC,OAAO,wBAAwB,EAAE,KAAK;0BACtC,OAAO,wBAAwB,EAAE,WAAW;8BAC5C,OAAO,wBAAwB,EAAE,eAAe;2BAChD,OAAO,wBAAwB,EAAE,YAAY;sBAC7C,OAAO,wBAAwB,EAAE,OAAO;+BACxC,OAAO,wBAAwB,EAAE,gBAAgB;mCACjD,OAAO,wBAAwB,EAAE,oBAAoB;kCACrD,OAAO,wBAAwB,EAAE,mBAAmB;8BACpD,OAAO,wBAAwB,EAAE,eAAe;iCAChD,OAAO,wBAAwB,EAAE,kBAAkB;oCACnD,OAAO,wBAAwB,EAAE,qBAAqB;mCACtD,OAAO,wBAAwB,EAAE,oBAAoB;gCACrD,OAAO,wBAAwB,EAAE,iBAAiB;0BAClD,OAAO,wBAAwB,EAAE,WAAW;2BAC5C,OAAO,wBAAwB,EAAE,YAAY;;IAOtD;;;;;;;;;;OAUG;IACH,kCAPW,OAAO,UACP,MAAM,oBACN,OAAO,mBACP,MAAM,kBACN,MAAM,GACJ,OAAO,CAAE,YAAY,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"devops.d.ts","sourceRoot":"","sources":["../../../lib/util/devops.js"],"names":[],"mappings":";yBAea,OAAO,wBAAwB,EAAE,UAAU;uBAC3C,OAAO,wBAAwB,EAAE,QAAQ;oBACzC,OAAO,wBAAwB,EAAE,KAAK;0BACtC,OAAO,wBAAwB,EAAE,WAAW;8BAC5C,OAAO,wBAAwB,EAAE,eAAe;2BAChD,OAAO,wBAAwB,EAAE,YAAY;sBAC7C,OAAO,wBAAwB,EAAE,OAAO;+BACxC,OAAO,wBAAwB,EAAE,gBAAgB;mCACjD,OAAO,wBAAwB,EAAE,oBAAoB;kCACrD,OAAO,wBAAwB,EAAE,mBAAmB;8BACpD,OAAO,wBAAwB,EAAE,eAAe;iCAChD,OAAO,wBAAwB,EAAE,kBAAkB;oCACnD,OAAO,wBAAwB,EAAE,qBAAqB;mCACtD,OAAO,wBAAwB,EAAE,oBAAoB;gCACrD,OAAO,wBAAwB,EAAE,iBAAiB;0BAClD,OAAO,wBAAwB,EAAE,WAAW;2BAC5C,OAAO,wBAAwB,EAAE,YAAY;;IAOtD;;;;;;;;;;OAUG;IACH,kCAPW,OAAO,UACP,MAAM,oBACN,OAAO,mBACP,MAAM,kBACN,MAAM,GACJ,OAAO,CAAE,YAAY,EAAE,CAAC,CAmXpC;IAED;;;;;;;;OAQG;IACH,2CANW,OAAO,SACP,MAAM,YACN,YAAY,EAAE,kBACd,MAAM,GACJ,OAAO,CAAE,YAAY,EAAE,CAAC,CAsJpC;IAED;;;;;;;OAOG;IACH,6BALW,MAAM,kBACN,MAAM,cACN,MAAM,GACJ,IAAI,CAmChB;IAED;;;;;;;;;OASG;IACH,sCANW,OAAO,YACP,QAAQ,gBACR,MAAM,UACN,MAAM,EAAE,GACN,OAAO,CAAE,MAAM,EAAE,CAAC,CAM9B;IACD;;;;;;;OAOG;IACH,4CALW,YAAY,EAAE,gBACd,MAAM,cACN,OAAO,gBACP,MAAM,QAgGhB"}
|
|
@@ -328,10 +328,11 @@ export namespace Util {
|
|
|
328
328
|
* returns true if no LIKE filter is defined or if all filters match
|
|
329
329
|
*
|
|
330
330
|
* @param {MetadataTypeItem} metadata a single metadata item
|
|
331
|
+
* @param {object} definition type definition
|
|
331
332
|
* @param {object} [filters] only used in recursive calls
|
|
332
333
|
* @returns {boolean} true if no LIKE filter is defined or if all filters match
|
|
333
334
|
*/
|
|
334
|
-
function fieldsLike(metadata: MetadataTypeItem, filters?: object): boolean;
|
|
335
|
+
function fieldsLike(metadata: MetadataTypeItem, definition: object, filters?: object): boolean;
|
|
335
336
|
/**
|
|
336
337
|
* helper used by SOAP methods to ensure the type always uses an upper-cased first letter
|
|
337
338
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../lib/util/util.js"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../lib/util/util.js"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,7 @@ import transactionalEmail from './metadataTypes/definitions/TransactionalEmail.d
|
|
|
37
37
|
import transactionalPush from './metadataTypes/definitions/TransactionalPush.definition.js';
|
|
38
38
|
import transactionalSMS from './metadataTypes/definitions/TransactionalSMS.definition.js';
|
|
39
39
|
import triggeredSend from './metadataTypes/definitions/TriggeredSend.definition.js';
|
|
40
|
+
import triggeredSendSummary from './metadataTypes/definitions/TriggeredSendSummary.definition.js';
|
|
40
41
|
import user from './metadataTypes/definitions/User.definition.js';
|
|
41
42
|
import verification from './metadataTypes/definitions/Verification.definition.js';
|
|
42
43
|
|
|
@@ -81,6 +82,7 @@ export default {
|
|
|
81
82
|
transactionalPush,
|
|
82
83
|
transactionalSMS,
|
|
83
84
|
triggeredSend,
|
|
85
|
+
triggeredSendSummary,
|
|
84
86
|
user,
|
|
85
87
|
verification,
|
|
86
88
|
};
|
package/lib/MetadataTypeInfo.js
CHANGED
|
@@ -36,6 +36,7 @@ import transactionalEmail from './metadataTypes/TransactionalEmail.js';
|
|
|
36
36
|
import transactionalPush from './metadataTypes/TransactionalPush.js';
|
|
37
37
|
import transactionalSMS from './metadataTypes/TransactionalSMS.js';
|
|
38
38
|
import triggeredSend from './metadataTypes/TriggeredSend.js';
|
|
39
|
+
import triggeredSendSummary from './metadataTypes/TriggeredSendSummary.js';
|
|
39
40
|
import user from './metadataTypes/User.js';
|
|
40
41
|
import verification from './metadataTypes/Verification.js';
|
|
41
42
|
|
|
@@ -79,6 +80,7 @@ export default {
|
|
|
79
80
|
transactionalPush,
|
|
80
81
|
transactionalSMS,
|
|
81
82
|
triggeredSend,
|
|
83
|
+
triggeredSendSummary,
|
|
82
84
|
user,
|
|
83
85
|
verification,
|
|
84
86
|
};
|
package/lib/cli.js
CHANGED
|
@@ -68,6 +68,11 @@ yargs(hideBin(process.argv))
|
|
|
68
68
|
group: 'Options for retrieve:',
|
|
69
69
|
describe:
|
|
70
70
|
'allows overwriting options.formatOnSave from the config file. Disable formatting via --no-format',
|
|
71
|
+
})
|
|
72
|
+
.option('purge', {
|
|
73
|
+
type: 'boolean',
|
|
74
|
+
group: 'Options for retrieve:',
|
|
75
|
+
describe: 'deletes the relevant retrieve folder before retrieving',
|
|
71
76
|
}),
|
|
72
77
|
(argv) => {
|
|
73
78
|
Mcdev.setOptions(argv);
|
package/lib/index.js
CHANGED
|
@@ -436,9 +436,30 @@ class Mcdev {
|
|
|
436
436
|
const areKeySet = Array.isArray(selectedTypesArr)
|
|
437
437
|
? !!keys
|
|
438
438
|
: selectedTypesArr[selectedType] !== null;
|
|
439
|
-
if (!areKeySet) {
|
|
440
|
-
|
|
441
|
-
|
|
439
|
+
if ((!areKeySet && !Util.OPTIONS.like) || Util.OPTIONS.purge) {
|
|
440
|
+
Util.logger.debug(`:: Cleaning output folder for ${selectedType}`);
|
|
441
|
+
// dont delete directories if we are just re-retrieving a single file or if we are re-retrieving only files matching the --like criteria
|
|
442
|
+
let isCleaned = false;
|
|
443
|
+
const MAX_RETRIES = 10;
|
|
444
|
+
let retryCount = 0;
|
|
445
|
+
do {
|
|
446
|
+
try {
|
|
447
|
+
await File.remove(File.normalizePath(removePathArr));
|
|
448
|
+
isCleaned = true;
|
|
449
|
+
} catch (ex) {
|
|
450
|
+
// to avoid EBUSY: resource busy or locked errors on Windows, we retry after a short wait
|
|
451
|
+
retryCount++;
|
|
452
|
+
if (retryCount >= MAX_RETRIES) {
|
|
453
|
+
Util.logger.error(
|
|
454
|
+
`Failed to clean output folder for ${selectedType} after ${MAX_RETRIES} attempts: ${ex && ex.message ? ex.message : ex}`
|
|
455
|
+
);
|
|
456
|
+
break;
|
|
457
|
+
}
|
|
458
|
+
await Util.sleep(100);
|
|
459
|
+
}
|
|
460
|
+
} while (!isCleaned);
|
|
461
|
+
} else {
|
|
462
|
+
Util.logger.debug(`:: NOT cleaning output folder for ${selectedType}`);
|
|
442
463
|
}
|
|
443
464
|
}
|
|
444
465
|
}
|
|
@@ -647,14 +668,13 @@ class Mcdev {
|
|
|
647
668
|
|
|
648
669
|
await MetadataTypeInfo[type].preDeleteTasks(keyArr);
|
|
649
670
|
|
|
650
|
-
const deleteLimit = pLimit(
|
|
671
|
+
const deleteLimit = pLimit(
|
|
672
|
+
MetadataTypeInfo[type].definition.deleteSynchronously ? 1 : 20
|
|
673
|
+
);
|
|
651
674
|
|
|
652
675
|
await Promise.allSettled(
|
|
653
676
|
keyArr.map((key) =>
|
|
654
677
|
deleteLimit(async () => {
|
|
655
|
-
// Util.logger.info(
|
|
656
|
-
// Util.getGrayMsg(` - Deleting ${type} ${key} on BU ${businessUnit}`)
|
|
657
|
-
// );
|
|
658
678
|
try {
|
|
659
679
|
const result = await MetadataTypeInfo[type].deleteByKey(key);
|
|
660
680
|
status &&= result;
|
|
@@ -2098,7 +2118,8 @@ class Mcdev {
|
|
|
2098
2118
|
);
|
|
2099
2119
|
// reactivate logging
|
|
2100
2120
|
Util.setLoggingLevel({});
|
|
2101
|
-
|
|
2121
|
+
|
|
2122
|
+
if (Util.fieldsLike(metadataMap[originalKey], MetadataTypeDefinitions[selectedType])) {
|
|
2102
2123
|
keyArr.push(originalKey);
|
|
2103
2124
|
}
|
|
2104
2125
|
}
|
|
@@ -493,6 +493,7 @@ class Asset extends MetadataType {
|
|
|
493
493
|
|
|
494
494
|
// only when we save results do we need the complete metadata or files. caching can skip these
|
|
495
495
|
if (retrieveDir && !Array.isArray(subType)) {
|
|
496
|
+
let downloadedItemsMap = {};
|
|
496
497
|
if (items.length > 0) {
|
|
497
498
|
for (const item of items) {
|
|
498
499
|
if (item.customerKey.trim() !== item.customerKey) {
|
|
@@ -504,13 +505,21 @@ class Asset extends MetadataType {
|
|
|
504
505
|
}
|
|
505
506
|
}
|
|
506
507
|
// we have to wait on execution or it potentially causes memory reference issues when changing between BUs
|
|
507
|
-
await this.requestAndSaveExtended(
|
|
508
|
+
downloadedItemsMap = await this.requestAndSaveExtended(
|
|
509
|
+
items,
|
|
510
|
+
subType,
|
|
511
|
+
retrieveDir,
|
|
512
|
+
templateVariables
|
|
513
|
+
);
|
|
508
514
|
}
|
|
509
515
|
// always show the summary even if we already had the progress bar in the console
|
|
510
|
-
Util.logger.info(
|
|
516
|
+
Util.logger.info(
|
|
517
|
+
` Downloaded asset${subType ? '-' + subType : ''}: ${Object.keys(downloadedItemsMap).length}`
|
|
518
|
+
);
|
|
519
|
+
return Object.values(downloadedItemsMap);
|
|
520
|
+
} else {
|
|
521
|
+
return items;
|
|
511
522
|
}
|
|
512
|
-
|
|
513
|
-
return items;
|
|
514
523
|
}
|
|
515
524
|
|
|
516
525
|
/**
|
|
@@ -541,6 +550,7 @@ class Asset extends MetadataType {
|
|
|
541
550
|
const completed = [];
|
|
542
551
|
const failed = [];
|
|
543
552
|
const metadataMap = {};
|
|
553
|
+
let filterCounter = 0;
|
|
544
554
|
|
|
545
555
|
// put in do loop to manage issues with connection timeout
|
|
546
556
|
do {
|
|
@@ -550,7 +560,7 @@ class Asset extends MetadataType {
|
|
|
550
560
|
try {
|
|
551
561
|
const rateLimit = pLimit(5);
|
|
552
562
|
|
|
553
|
-
|
|
563
|
+
await Promise.all(
|
|
554
564
|
items.map((item, index) =>
|
|
555
565
|
rateLimit(async () => {
|
|
556
566
|
const metadataMapSaveSingle = {};
|
|
@@ -586,15 +596,23 @@ class Asset extends MetadataType {
|
|
|
586
596
|
}
|
|
587
597
|
completed.push(item.id);
|
|
588
598
|
if (metadataMapSaveSingle[item.customerKey]) {
|
|
589
|
-
await this.saveResults(
|
|
599
|
+
const savedItem = await this.saveResults(
|
|
590
600
|
metadataMapSaveSingle,
|
|
591
601
|
retrieveDir,
|
|
592
602
|
'asset-' + subType,
|
|
593
603
|
templateVariables
|
|
594
604
|
);
|
|
605
|
+
if (!savedItem[item.customerKey]) {
|
|
606
|
+
// filtered by like-option
|
|
607
|
+
delete metadataMap[item.customerKey];
|
|
608
|
+
filterCounter++;
|
|
609
|
+
}
|
|
595
610
|
}
|
|
596
611
|
// update the current value in your application..
|
|
597
612
|
extendedBar.increment();
|
|
613
|
+
if (metadataMap[item.customerKey]) {
|
|
614
|
+
return metadataMap[item.customerKey];
|
|
615
|
+
}
|
|
598
616
|
})
|
|
599
617
|
)
|
|
600
618
|
);
|
|
@@ -602,7 +620,12 @@ class Asset extends MetadataType {
|
|
|
602
620
|
// stop the progress bar
|
|
603
621
|
extendedBar.stop();
|
|
604
622
|
Asset._resetLogLevel(loggerLevelBak, failed);
|
|
605
|
-
|
|
623
|
+
if (filterCounter) {
|
|
624
|
+
Util.logger.info(
|
|
625
|
+
` - Filtered ${this.definition.type}-${subType}: ${filterCounter} (downloaded but not saved to disk)`
|
|
626
|
+
);
|
|
627
|
+
}
|
|
628
|
+
return metadataMap;
|
|
606
629
|
} catch (ex) {
|
|
607
630
|
extendedBar.stop();
|
|
608
631
|
Asset._resetLogLevel(loggerLevelBak, failed);
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import MetadataType from './MetadataType.js';
|
|
4
4
|
import { Util } from '../util/util.js';
|
|
5
5
|
import DataExtension from './DataExtension.js';
|
|
6
|
+
import { confirm } from '@inquirer/prompts';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* @typedef {import('../../types/mcdev.d.js').BuObject} BuObject
|
|
@@ -303,70 +304,122 @@ class DataExtensionField extends MetadataType {
|
|
|
303
304
|
* @returns {Promise.<boolean>} deletion success flag
|
|
304
305
|
*/
|
|
305
306
|
static async deleteByKeySOAP(customerKey, fieldId) {
|
|
306
|
-
const [deKey,
|
|
307
|
-
customerKey = `[${deKey}].[${
|
|
307
|
+
const [deKey, fieldName] = customerKey.split('.');
|
|
308
|
+
customerKey = `[${deKey}].[${fieldName}]`;
|
|
308
309
|
|
|
309
310
|
let fieldObjectID = fieldId;
|
|
311
|
+
let deletionQueue;
|
|
312
|
+
|
|
310
313
|
// get the object id
|
|
311
314
|
if (!fieldObjectID) {
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
315
|
+
if (deKey === '*') {
|
|
316
|
+
const response = await this.retrieveForCacheDE(
|
|
317
|
+
{
|
|
318
|
+
filter: {
|
|
319
|
+
leftOperand: 'Name',
|
|
320
|
+
operator: 'equals',
|
|
321
|
+
rightOperand: fieldName,
|
|
322
|
+
},
|
|
318
323
|
},
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
324
|
+
['Name', 'ObjectID', 'DataExtension.CustomerKey']
|
|
325
|
+
);
|
|
326
|
+
deletionQueue = Object.values(response.metadata).map((item) => ({
|
|
327
|
+
fieldObjectID: item.ObjectID,
|
|
328
|
+
fieldName: fieldName,
|
|
329
|
+
deKey: item.DataExtension.CustomerKey,
|
|
330
|
+
}));
|
|
331
|
+
Util.logger.info(
|
|
332
|
+
` - Found ${deletionQueue.length} Data Extensions with field ${fieldName} in your BU:\n - ${deletionQueue
|
|
333
|
+
.map((item) => item.deKey)
|
|
334
|
+
.sort()
|
|
335
|
+
.join('\n - ')}`
|
|
336
|
+
);
|
|
337
|
+
if (deletionQueue.length > 0 && !Util.skipInteraction) {
|
|
338
|
+
const massDelete = await confirm({
|
|
339
|
+
message: `Do you really want to delete that field from all of the above Data Extensions?`,
|
|
340
|
+
default: false,
|
|
341
|
+
});
|
|
342
|
+
if (!massDelete) {
|
|
343
|
+
Util.logger.info(
|
|
344
|
+
` ☇ skipping deletion of ${fieldName} based on user-choice.`
|
|
345
|
+
);
|
|
346
|
+
return false;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
} else {
|
|
350
|
+
const response = await this.retrieveForCacheDE(
|
|
351
|
+
{
|
|
352
|
+
filter: {
|
|
353
|
+
leftOperand: 'CustomerKey',
|
|
354
|
+
operator: 'equals',
|
|
355
|
+
rightOperand: customerKey,
|
|
356
|
+
},
|
|
357
|
+
},
|
|
358
|
+
['Name', 'ObjectID']
|
|
359
|
+
);
|
|
360
|
+
fieldObjectID = response.metadata[customerKey]?.ObjectID;
|
|
361
|
+
}
|
|
323
362
|
}
|
|
324
|
-
if (!fieldObjectID) {
|
|
363
|
+
if (!fieldObjectID && !deletionQueue) {
|
|
325
364
|
Util.logger.error(`Could not find ${customerKey} on your BU`);
|
|
326
365
|
return false;
|
|
366
|
+
} else if (!deletionQueue) {
|
|
367
|
+
deletionQueue = [
|
|
368
|
+
{
|
|
369
|
+
fieldObjectID: fieldObjectID,
|
|
370
|
+
fieldName: fieldName,
|
|
371
|
+
deKey: deKey,
|
|
372
|
+
},
|
|
373
|
+
];
|
|
327
374
|
}
|
|
328
375
|
|
|
329
|
-
|
|
330
|
-
const
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
376
|
+
let success = true;
|
|
377
|
+
const fieldDeletedFromDEKeys = [];
|
|
378
|
+
for (const item of deletionQueue) {
|
|
379
|
+
// normal code
|
|
380
|
+
const keyObj = {
|
|
381
|
+
CustomerKey: item.deKey,
|
|
382
|
+
Fields: {
|
|
383
|
+
Field: {
|
|
384
|
+
ObjectID: item.fieldObjectID,
|
|
385
|
+
},
|
|
335
386
|
},
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
this.client.soap.delete('DataExtension', keyObj, null);
|
|
387
|
+
};
|
|
388
|
+
try {
|
|
389
|
+
// ! we really do need to delete from DataExtension not DataExtensionField here!
|
|
390
|
+
await this.client.soap.delete('DataExtension', keyObj, null);
|
|
341
391
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
392
|
+
if (!fieldId) {
|
|
393
|
+
Util.logger.info(
|
|
394
|
+
` - deleted ${this.definition.type}: ${item.deKey}.${item.fieldName}`
|
|
395
|
+
);
|
|
396
|
+
}
|
|
397
|
+
fieldDeletedFromDEKeys.push(item.deKey);
|
|
398
|
+
// return true;
|
|
399
|
+
} catch (ex) {
|
|
400
|
+
const errorMsg = ex.results?.length
|
|
401
|
+
? `${ex.results[0].StatusMessage} (Code ${ex.results[0].ErrorCode})`
|
|
402
|
+
: ex.message;
|
|
403
|
+
Util.logger.error(
|
|
404
|
+
`- error deleting ${this.definition.type} ${item.deKey}.${item.fieldName}: ${errorMsg}`
|
|
405
|
+
);
|
|
354
406
|
|
|
355
|
-
|
|
407
|
+
success = false;
|
|
408
|
+
}
|
|
356
409
|
}
|
|
357
|
-
}
|
|
358
410
|
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
411
|
+
const uniqueDEKeys = [...new Set(fieldDeletedFromDEKeys)];
|
|
412
|
+
if (uniqueDEKeys.length > 0) {
|
|
413
|
+
Util.logger.info(
|
|
414
|
+
Util.getGrayMsg(
|
|
415
|
+
`To refresh your local files, run mcdev r ${this.buObject.credential}/${this.buObject.businessUnit} -m ${uniqueDEKeys
|
|
416
|
+
.map((key) => 'dataExtension:"' + key + '"')
|
|
417
|
+
.sort()
|
|
418
|
+
.join(' ')}`
|
|
419
|
+
)
|
|
420
|
+
);
|
|
421
|
+
}
|
|
422
|
+
return success;
|
|
370
423
|
}
|
|
371
424
|
}
|
|
372
425
|
|