@terafina/tffa-sfdx-plugin 15.0.1-rc.0 → 16.0.0-rc.10
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/README.md +298 -18
- package/assets/homepage.html +1 -1
- package/bin/pmd/apex_ruleset.xml +25 -0
- package/lib/commands/tffa/apexdoc.js +1 -1
- package/lib/commands/tffa/apexdoc.js.map +1 -1
- package/lib/commands/tffa/data/export.d.ts +71 -0
- package/lib/commands/tffa/data/export.js +396 -0
- package/lib/commands/tffa/data/export.js.map +1 -0
- package/lib/commands/tffa/data/import.d.ts +69 -0
- package/lib/commands/tffa/data/import.js +291 -0
- package/lib/commands/tffa/data/import.js.map +1 -0
- package/lib/commands/tffa/meta.js +2 -2
- package/lib/commands/tffa/meta.js.map +1 -1
- package/lib/commands/tffa/source/createfield.d.ts +41 -0
- package/lib/commands/tffa/source/createfield.js +210 -0
- package/lib/commands/tffa/source/createfield.js.map +1 -0
- package/lib/services/apexdoc/common/line-reader.js +1 -1
- package/lib/services/apexdoc/common/line-reader.js.map +1 -1
- package/lib/services/apexdoc/engine/generators/models/source-markup-generator.js +12 -1
- package/lib/services/apexdoc/engine/generators/models/source-markup-generator.js.map +1 -1
- package/lib/services/lint/rules.js +2 -2
- package/lib/services/lint/rules.js.map +1 -1
- package/lib/utils/ignored-files.js +2 -0
- package/lib/utils/ignored-files.js.map +1 -1
- package/messages/apexdoc.json +1 -1
- package/messages/createField.js +37 -0
- package/messages/dataExport.js +32 -0
- package/messages/dataImport.js +50 -0
- package/messages/lint.js +31 -0
- package/messages/ping.json +1 -1
- package/oclif.manifest.json +1 -1
- package/package.json +34 -34
- package/yarn.lock +1731 -1786
- package/messages/lint.json +0 -5
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/**
|
|
4
|
+
* Copyright (c) NCR Terafina
|
|
5
|
+
**/
|
|
6
|
+
const command_1 = require("@salesforce/command");
|
|
7
|
+
const core_1 = require("@salesforce/core");
|
|
8
|
+
const fs_extra_1 = require("fs-extra");
|
|
9
|
+
// Initialize Messages with the current plugin directory
|
|
10
|
+
core_1.Messages.importMessagesDirectory(__dirname);
|
|
11
|
+
// Load the specific messages for this file. Messages from @salesforce/command, @salesforce/core,
|
|
12
|
+
// or any library that is using the messages framework can also be loaded this way.
|
|
13
|
+
const messages = core_1.Messages.loadMessages('@terafina/tffa-sfdx-plugin', 'dataExport');
|
|
14
|
+
/**
|
|
15
|
+
* Represents a plan to export records of a specific SObject type.
|
|
16
|
+
*/
|
|
17
|
+
class ExportPlan {
|
|
18
|
+
constructor(plan) {
|
|
19
|
+
Object.assign(this, plan);
|
|
20
|
+
if (!this.name) {
|
|
21
|
+
this.name = this.sObjectType;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Common regex used
|
|
27
|
+
*/
|
|
28
|
+
const NON_ALPHANUM_RE = /[^a-zA-Z0-9]+/g;
|
|
29
|
+
const UPPER_LOWER_RE = /[A-Z][a-z]+/g;
|
|
30
|
+
const REFERENCE_ID_RE = /referenceId/g;
|
|
31
|
+
const MAX_OBJECTS_IN_FILE = 200;
|
|
32
|
+
/**
|
|
33
|
+
* Some internal configurations
|
|
34
|
+
*/
|
|
35
|
+
const EXCLUDED_FIELDS = new Set([
|
|
36
|
+
'OwnerId',
|
|
37
|
+
'RecordTypeId',
|
|
38
|
+
'IsDeleted__c',
|
|
39
|
+
'CreatedDate',
|
|
40
|
+
'CreatedById',
|
|
41
|
+
'LastModifiedDate',
|
|
42
|
+
'LastModifiedById',
|
|
43
|
+
'tffa__IsDeleted__c'
|
|
44
|
+
]);
|
|
45
|
+
const EXTERNAL_ID_FIELDS = new Set(['ExternalId__c', 'tffa__ExternalId__c']);
|
|
46
|
+
const SORT_ORDER_FIELDS = new Set(['SortOrder__c', 'tffa__SortOrder__c']);
|
|
47
|
+
const CONTENT_URL_FIELDS = new Set(['ImageUrl__c', 'tffa__ImageUrl__c', 'tffa__Url__c']);
|
|
48
|
+
/**
|
|
49
|
+
* Export plans of SObject types that require fetching of child relationships, custom grouping, sorting etc.
|
|
50
|
+
* Export plans of SObject types that are simple and limited to itself need not be included here.
|
|
51
|
+
*/
|
|
52
|
+
const EXPORT_PLANS = Object.fromEntries([
|
|
53
|
+
new ExportPlan({
|
|
54
|
+
sObjectType: 'tffa__Product__c',
|
|
55
|
+
children: ['tffa__Features__r', 'tffa__Terms__r'],
|
|
56
|
+
where: "tffa__Type__c='PRODUCT'"
|
|
57
|
+
}),
|
|
58
|
+
new ExportPlan({
|
|
59
|
+
sObjectType: 'tffa__Questionnaire__c',
|
|
60
|
+
groupBy: 'tffa__Type__c',
|
|
61
|
+
children: ['tffa__Outcomes__r', 'tffa__QuestionGroups__r'],
|
|
62
|
+
prefix: 'qn'
|
|
63
|
+
}),
|
|
64
|
+
new ExportPlan({ sObjectType: 'tffa__QuestionGroupTemplate__c', children: ['tffa__Questions__r'] }),
|
|
65
|
+
new ExportPlan({ sObjectType: 'tffa__AddOnService__c', orderBy: ['tffa__Type__c', 'Name'] }),
|
|
66
|
+
new ExportPlan({
|
|
67
|
+
sObjectType: 'tffa__ApplicationDecisionMatrix__c',
|
|
68
|
+
children: ['tffa__CounterOffers__r'],
|
|
69
|
+
orderBy: ['tffa__Type__c', 'tffa__SortOrder__c']
|
|
70
|
+
}),
|
|
71
|
+
new ExportPlan({ sObjectType: 'tffa__Brand__c', children: ['tffa__Locations__r'], prefix: 'brand', orderBy: ['tffa__SortOrder__c'] }),
|
|
72
|
+
new ExportPlan({ sObjectType: 'tffa__DecisionStrategyConfiguration__c', children: ['tffa__Strategies__r'] }),
|
|
73
|
+
new ExportPlan({ sObjectType: 'tffa__Offer__c', children: ['tffa__Terms__r'], orderBy: ['tffa__ProductCategory__c', 'Name'] }),
|
|
74
|
+
new ExportPlan({ sObjectType: 'tffa__Promotion__c', children: ['tffa__Plans__r'], prefix: 'pr' }),
|
|
75
|
+
new ExportPlan({ sObjectType: 'tffa__ListOfValues__c', groupBy: 'tffa__Locale__c' }),
|
|
76
|
+
new ExportPlan({
|
|
77
|
+
name: 'tffa__ProductBundle__c',
|
|
78
|
+
sObjectType: 'tffa__Product__c',
|
|
79
|
+
children: ['tffa__Features__r', 'tffa__Terms__r', 'tffa__ProductXrefs__r'],
|
|
80
|
+
where: "tffa__Type__c='BUNDLE'"
|
|
81
|
+
}),
|
|
82
|
+
new ExportPlan({ sObjectType: 'tffa__Address__c', prefix: 'addr', where: 'tffa__IsBusinessConfiguration__c=true' }),
|
|
83
|
+
new ExportPlan({ sObjectType: 'tffa__AddOnServiceChecklist__c', children: ['tffa__Items__r'], prefix: 'aoscl' }),
|
|
84
|
+
new ExportPlan({ sObjectType: 'tffa__DisclosureChecklist__c', children: ['tffa__Items__r'], prefix: 'dcl' }),
|
|
85
|
+
new ExportPlan({ sObjectType: 'tffa__StipulationChecklist__c', children: ['tffa__Items__r'], prefix: 'scl' }),
|
|
86
|
+
new ExportPlan({ sObjectType: 'tffa__DepositBoxConfiguration__c', children: ['tffa__Items__r'] }),
|
|
87
|
+
new ExportPlan({ sObjectType: 'tffa__RecommendationConfiguration__c', children: ['tffa__Items__r'] }),
|
|
88
|
+
new ExportPlan({ sObjectType: 'tffa__UXStrategy__c', prefix: 'uxs', orderBy: ['tffa__AppPage__c', 'tffa__SortOrder__c'] }),
|
|
89
|
+
new ExportPlan({ sObjectType: 'tffa__AllowedAddress__c', orderBy: ['tffa__SortOrder__c'] }),
|
|
90
|
+
new ExportPlan({ sObjectType: 'tffa__QuestionnaireMatrix__c', orderBy: ['tffa__Type__c', 'tffa__SortOrder__c'] })
|
|
91
|
+
].map(p => [p.name, p]));
|
|
92
|
+
class DataExport extends command_1.SfdxCommand {
|
|
93
|
+
constructor() {
|
|
94
|
+
super(...arguments);
|
|
95
|
+
/**
|
|
96
|
+
* Custom prefixes
|
|
97
|
+
*/
|
|
98
|
+
this.sObjectTypePrefixMap = new Map();
|
|
99
|
+
}
|
|
100
|
+
async run() {
|
|
101
|
+
for (const sObjectType of this.flags.sobjecttypes) {
|
|
102
|
+
const plan = this.getExportPlan(sObjectType);
|
|
103
|
+
this.ux.startSpinner(`Fetching record(s) of ${sObjectType}`);
|
|
104
|
+
const records = await this.execute(plan);
|
|
105
|
+
this.ux.stopSpinner(`completed`);
|
|
106
|
+
this.log(`Fetched ${records.length} records of ${sObjectType}`);
|
|
107
|
+
this.transform(records);
|
|
108
|
+
if (records.length) {
|
|
109
|
+
this.writeRecords(records, plan);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async execute(plan, parent) {
|
|
114
|
+
let qb = this.org
|
|
115
|
+
.getConnection()
|
|
116
|
+
.sobject(plan.sObjectType)
|
|
117
|
+
.select(await this.getFields(plan, !!parent))
|
|
118
|
+
.orderby((await this.getOrderBy(plan, !parent && !plan.sObjectType.endsWith('Matrix__c'))).map(e => [e, 'asc']))
|
|
119
|
+
.where(plan.where);
|
|
120
|
+
for (const child of plan.children || []) {
|
|
121
|
+
const childPlan = await this.getChildExportPlan(plan.sObjectType, child);
|
|
122
|
+
qb = qb
|
|
123
|
+
.include(child)
|
|
124
|
+
.select(await this.getFields(childPlan, true))
|
|
125
|
+
.orderby((await this.getOrderBy(childPlan)).map(e => [e, 'asc']))
|
|
126
|
+
.end();
|
|
127
|
+
}
|
|
128
|
+
let records = await qb.execute();
|
|
129
|
+
if (plan.map) {
|
|
130
|
+
records = records.map(plan.map);
|
|
131
|
+
}
|
|
132
|
+
for (const child of plan.children || []) {
|
|
133
|
+
const childPlan = await this.getChildExportPlan(plan.sObjectType, child);
|
|
134
|
+
if (childPlan.children?.length) {
|
|
135
|
+
const childRecordMap = this.toMap(await this.execute(childPlan, plan));
|
|
136
|
+
for (const record of records) {
|
|
137
|
+
const relationshipNode = record[child];
|
|
138
|
+
if (relationshipNode) {
|
|
139
|
+
for (const [i, childRecord] of relationshipNode.records.entries()) {
|
|
140
|
+
relationshipNode.records[i] = childRecordMap.get(childRecord.Id) || childRecord;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return records;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Gets fields to be included when exporting records.
|
|
150
|
+
*/
|
|
151
|
+
async getFields(plan, skipMasterDetail = false, skipLookup = false) {
|
|
152
|
+
const sObjectType = plan.sObjectType;
|
|
153
|
+
const fields = ['Id'];
|
|
154
|
+
const conn = this.org.getConnection();
|
|
155
|
+
const describeResult = await conn.describe$(sObjectType);
|
|
156
|
+
for (const f of describeResult.fields) {
|
|
157
|
+
if (EXCLUDED_FIELDS.has(f.name) || !f.createable) {
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
if (f.referenceTo?.length) {
|
|
161
|
+
if (!skipLookup && (f.relationshipOrder !== 0 || !skipMasterDetail)) {
|
|
162
|
+
fields.push(f.name);
|
|
163
|
+
fields.push(`${f.relationshipName}.Id`);
|
|
164
|
+
const refFields = await this.getFields(new ExportPlan({ sObjectType: f.referenceTo[0] }), true, true);
|
|
165
|
+
for (const lf of refFields) {
|
|
166
|
+
if (EXTERNAL_ID_FIELDS.has(lf)) {
|
|
167
|
+
fields.push(`${f.relationshipName}.${lf}`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
fields.push(f.name);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return fields;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Gets the field to be used for ordering when exporting the records.
|
|
180
|
+
*/
|
|
181
|
+
async getOrderBy(plan, skipSortOrder = false) {
|
|
182
|
+
const sObjectType = plan.sObjectType;
|
|
183
|
+
if (plan.orderBy) {
|
|
184
|
+
return plan.orderBy;
|
|
185
|
+
}
|
|
186
|
+
let sortOrderField = ['Name'];
|
|
187
|
+
if (!skipSortOrder) {
|
|
188
|
+
const describeResult = await this.org.getConnection().describe$(sObjectType);
|
|
189
|
+
for (const f of describeResult.fields) {
|
|
190
|
+
if (SORT_ORDER_FIELDS.has(f.name)) {
|
|
191
|
+
sortOrderField = [f.name];
|
|
192
|
+
break;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
return sortOrderField;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Transforms the exported records, making it ready for writing to config files
|
|
200
|
+
* @param records
|
|
201
|
+
*/
|
|
202
|
+
transform(records) {
|
|
203
|
+
for (const record of records) {
|
|
204
|
+
record.attributes.referenceId = this.getReferenceId(record);
|
|
205
|
+
record.attributes.url = undefined;
|
|
206
|
+
record.Id = undefined;
|
|
207
|
+
for (const [k, v] of Object.entries(record)) {
|
|
208
|
+
if (v === null || v === undefined) {
|
|
209
|
+
record[k] = undefined;
|
|
210
|
+
}
|
|
211
|
+
else if (typeof v === 'object' && k.endsWith('__r')) {
|
|
212
|
+
if (v.records) {
|
|
213
|
+
this.transform(v.records);
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
record[k.replace('__r', '__c')] = `@${this.getReferenceId(v)}`;
|
|
217
|
+
record[k] = undefined;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
if (CONTENT_URL_FIELDS.has(k) && v.startsWith('/file-asset')) {
|
|
222
|
+
const url = new URL(v, 'http://localhost');
|
|
223
|
+
url.searchParams.delete('oid');
|
|
224
|
+
record[k] = url.pathname + url.search;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Gets the external id of the record
|
|
232
|
+
* @param record
|
|
233
|
+
* @returns
|
|
234
|
+
* @throws Error if external id or equivalent is not found
|
|
235
|
+
*/
|
|
236
|
+
getExternalId(record) {
|
|
237
|
+
let externalId;
|
|
238
|
+
for (const externalIdField of EXTERNAL_ID_FIELDS) {
|
|
239
|
+
externalId = record[externalIdField];
|
|
240
|
+
if (externalId) {
|
|
241
|
+
break;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
if (!externalId) {
|
|
245
|
+
throw new Error(`No external id found for sobject ${record.attributes.type} id=${record.Id}`);
|
|
246
|
+
}
|
|
247
|
+
return externalId;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Gets the reference id for the record
|
|
251
|
+
* @param record
|
|
252
|
+
*/
|
|
253
|
+
getReferenceId(record) {
|
|
254
|
+
const sObjectType = record.attributes.type;
|
|
255
|
+
return `${this.getPrefix(sObjectType)}_${this.getExternalId(record)}`.replace(NON_ALPHANUM_RE, '_');
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Gets the object prefix to be used when building the reference id
|
|
259
|
+
* @param sObjectType
|
|
260
|
+
* @returns
|
|
261
|
+
*/
|
|
262
|
+
getPrefix(sObjectType) {
|
|
263
|
+
let prefix = this.sObjectTypePrefixMap.get(sObjectType) || this.getExportPlan(sObjectType).prefix;
|
|
264
|
+
if (!prefix) {
|
|
265
|
+
prefix = sObjectType
|
|
266
|
+
.match(UPPER_LOWER_RE)
|
|
267
|
+
.map(e => e[0])
|
|
268
|
+
.join('')
|
|
269
|
+
.toLowerCase();
|
|
270
|
+
this.sObjectTypePrefixMap.set(sObjectType, prefix);
|
|
271
|
+
}
|
|
272
|
+
return prefix;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Writes records to JSON files
|
|
276
|
+
* @param records
|
|
277
|
+
*/
|
|
278
|
+
writeRecords(records, plan) {
|
|
279
|
+
const objectName = plan.name.replace('tffa__', '');
|
|
280
|
+
const outputDir = this.flags.outputdir;
|
|
281
|
+
const groupBy = plan.groupBy || '_';
|
|
282
|
+
(0, fs_extra_1.mkdirpSync)(outputDir);
|
|
283
|
+
const groupMap = new Map();
|
|
284
|
+
if (groupBy === '_') {
|
|
285
|
+
groupMap.set(groupBy, records);
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
for (const record of records) {
|
|
289
|
+
const k = record[groupBy] || '_';
|
|
290
|
+
const group = groupMap.get(k) || groupMap.set(k, []).get(k);
|
|
291
|
+
group.push(record);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
const filenames = [];
|
|
295
|
+
for (const [k, group] of groupMap.entries()) {
|
|
296
|
+
let batch = [];
|
|
297
|
+
let batchObjectCount = 0;
|
|
298
|
+
const batches = [batch];
|
|
299
|
+
for (const record of group) {
|
|
300
|
+
const count = this.getSObjectCount(record);
|
|
301
|
+
if (count + batchObjectCount > MAX_OBJECTS_IN_FILE) {
|
|
302
|
+
batch = [];
|
|
303
|
+
batches.push(batch);
|
|
304
|
+
batchObjectCount = 0;
|
|
305
|
+
}
|
|
306
|
+
batch.push(record);
|
|
307
|
+
batchObjectCount += count;
|
|
308
|
+
}
|
|
309
|
+
for (const [i, batch] of batches.entries()) {
|
|
310
|
+
const filename = `${objectName}${k === '_' ? '' : '-' + k}${i || ''}.json`;
|
|
311
|
+
const filepath = `${outputDir}/${filename}`;
|
|
312
|
+
this.log(`Writing ${batch.length} records to ${filepath}`);
|
|
313
|
+
(0, fs_extra_1.writeFileSync)(filepath, JSON.stringify({ records: batch }, null, 2));
|
|
314
|
+
filenames.push(filename);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
if (!this.flags.skipconfigplan && plan.name === plan.sObjectType) {
|
|
318
|
+
const configPlanFilepath = `${outputDir}/config-data-plan.json`;
|
|
319
|
+
if ((0, fs_extra_1.existsSync)(configPlanFilepath)) {
|
|
320
|
+
const configPlans = JSON.parse((0, fs_extra_1.readFileSync)(configPlanFilepath, 'utf-8'));
|
|
321
|
+
let configPlan = configPlans.find(cp => cp.sobject === plan.sObjectType);
|
|
322
|
+
if (!configPlan) {
|
|
323
|
+
configPlan = { sobject: plan.sObjectType, files: [] };
|
|
324
|
+
configPlans.push(configPlan);
|
|
325
|
+
}
|
|
326
|
+
// update only if something changed
|
|
327
|
+
if (configPlan.files?.toString() !== filenames.toString()) {
|
|
328
|
+
configPlan.files = filenames;
|
|
329
|
+
(0, fs_extra_1.writeFileSync)(configPlanFilepath, JSON.stringify(configPlans, null, 2));
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Counts the number of SObjects within the record. e.g. a record containing child relationships may contain more than one SObject.
|
|
336
|
+
* @param record
|
|
337
|
+
* @returns
|
|
338
|
+
*/
|
|
339
|
+
getSObjectCount(record) {
|
|
340
|
+
return (JSON.stringify(record).match(REFERENCE_ID_RE) || []).length;
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Gets the export plan for the specified object type.
|
|
344
|
+
* @param sObjectType
|
|
345
|
+
* @returns
|
|
346
|
+
*/
|
|
347
|
+
getExportPlan(sObjectType) {
|
|
348
|
+
const plan = new ExportPlan({ sObjectType, ...(EXPORT_PLANS[sObjectType] || {}) });
|
|
349
|
+
const { sobjecttypes, children, groupby, orderby } = this.flags;
|
|
350
|
+
if (sobjecttypes.length === 1 && sobjecttypes[0] === sObjectType) {
|
|
351
|
+
if (children) {
|
|
352
|
+
plan.children = children;
|
|
353
|
+
}
|
|
354
|
+
if (groupby) {
|
|
355
|
+
plan.groupBy = groupby;
|
|
356
|
+
}
|
|
357
|
+
if (orderby) {
|
|
358
|
+
plan.orderBy = orderby;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
return plan;
|
|
362
|
+
}
|
|
363
|
+
async getChildExportPlan(sObjectType, relationshipName) {
|
|
364
|
+
const describeResult = await this.org.getConnection().describe$(sObjectType);
|
|
365
|
+
const relationship = describeResult.childRelationships.find(f => f.relationshipName === relationshipName);
|
|
366
|
+
if (!relationship) {
|
|
367
|
+
throw new Error(`Relationship ${relationshipName} not found on SObjectType ${sObjectType}`);
|
|
368
|
+
}
|
|
369
|
+
return this.getExportPlan(relationship.childSObject);
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Returns a map of records where key is record.Id and value is record.
|
|
373
|
+
* @param records
|
|
374
|
+
* @returns
|
|
375
|
+
*/
|
|
376
|
+
toMap(records) {
|
|
377
|
+
const recordMap = new Map();
|
|
378
|
+
for (const record of records) {
|
|
379
|
+
recordMap.set(record.Id, record);
|
|
380
|
+
}
|
|
381
|
+
return recordMap;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
exports.default = DataExport;
|
|
385
|
+
DataExport.requiresUsername = true;
|
|
386
|
+
DataExport.description = messages.getMessage('commandDescription');
|
|
387
|
+
DataExport.examples = messages.getMessages('commandExamples');
|
|
388
|
+
DataExport.flagsConfig = {
|
|
389
|
+
sobjecttypes: command_1.flags.array({ char: 's', required: true, description: messages.getMessage('sobjecttypesFlagDescription') }),
|
|
390
|
+
outputdir: command_1.flags.string({ char: 'd', description: messages.getMessage('outputdirFlagDescription'), default: './data/configuration' }),
|
|
391
|
+
groupby: command_1.flags.string({ char: 'g', required: false, description: messages.getMessage('groupbyFlagDescription') }),
|
|
392
|
+
orderby: command_1.flags.array({ char: 'o', required: false, description: messages.getMessage('orderbyFlagDescription') }),
|
|
393
|
+
children: command_1.flags.array({ char: 'c', required: false, description: messages.getMessage('childrenFlagDescription') }),
|
|
394
|
+
skipconfigplan: command_1.flags.boolean({ char: 's', required: false, description: messages.getMessage('skipconfigplanFlagDescription') })
|
|
395
|
+
};
|
|
396
|
+
//# sourceMappingURL=export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.js","sourceRoot":"","sources":["../../../../src/commands/tffa/data/export.ts"],"names":[],"mappings":";;AAAA;;IAEI;AACJ,iDAAsE;AACtE,2CAA4C;AAC5C,uCAA+E;AAE/E,wDAAwD;AACxD,eAAQ,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAE5C,iGAAiG;AACjG,mFAAmF;AACnF,MAAM,QAAQ,GAAG,eAAQ,CAAC,YAAY,CAAC,4BAA4B,EAAE,YAAY,CAAC,CAAC;AAEnF;;GAEG;AACH,MAAM,UAAU;IAmCd,YAAY,IAAyB;QACnC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YACd,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;SAC9B;IACH,CAAC;CACF;AAgBD;;GAEG;AACH,MAAM,eAAe,GAAG,gBAAgB,CAAC;AACzC,MAAM,cAAc,GAAG,cAAc,CAAC;AACtC,MAAM,eAAe,GAAG,cAAc,CAAC;AACvC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEhC;;GAEG;AACH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,SAAS;IACT,cAAc;IACd,cAAc;IACd,aAAa;IACb,aAAa;IACb,kBAAkB;IAClB,kBAAkB;IAClB,oBAAoB;CACrB,CAAC,CAAC;AACH,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,eAAe,EAAE,qBAAqB,CAAC,CAAC,CAAC;AAC7E,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC,CAAC;AAC1E,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,mBAAmB,EAAE,cAAc,CAAC,CAAC,CAAC;AAEzF;;;GAGG;AACH,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CACrC;IACE,IAAI,UAAU,CAAC;QACb,WAAW,EAAE,kBAAkB;QAC/B,QAAQ,EAAE,CAAC,mBAAmB,EAAE,gBAAgB,CAAC;QACjD,KAAK,EAAE,yBAAyB;KACjC,CAAC;IACF,IAAI,UAAU,CAAC;QACb,WAAW,EAAE,wBAAwB;QACrC,OAAO,EAAE,eAAe;QACxB,QAAQ,EAAE,CAAC,mBAAmB,EAAE,yBAAyB,CAAC;QAC1D,MAAM,EAAE,IAAI;KACb,CAAC;IACF,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,gCAAgC,EAAE,QAAQ,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC;IACnG,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,uBAAuB,EAAE,OAAO,EAAE,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE,CAAC;IAC5F,IAAI,UAAU,CAAC;QACb,WAAW,EAAE,oCAAoC;QACjD,QAAQ,EAAE,CAAC,wBAAwB,CAAC;QACpC,OAAO,EAAE,CAAC,eAAe,EAAE,oBAAoB,CAAC;KACjD,CAAC;IACF,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC;IACrI,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,wCAAwC,EAAE,QAAQ,EAAE,CAAC,qBAAqB,CAAC,EAAE,CAAC;IAC5G,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,CAAC,0BAA0B,EAAE,MAAM,CAAC,EAAE,CAAC;IAC9H,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACjG,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,uBAAuB,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;IACpF,IAAI,UAAU,CAAC;QACb,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,kBAAkB;QAC/B,QAAQ,EAAE,CAAC,mBAAmB,EAAE,gBAAgB,EAAE,uBAAuB,CAAC;QAC1E,KAAK,EAAE,wBAAwB;KAChC,CAAC;IACF,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,uCAAuC,EAAE,CAAC;IACnH,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,gCAAgC,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAChH,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,8BAA8B,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC5G,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC7G,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,kCAAkC,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC;IACjG,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,sCAAsC,EAAE,QAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC;IACrG,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,kBAAkB,EAAE,oBAAoB,CAAC,EAAE,CAAC;IAC1H,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,yBAAyB,EAAE,OAAO,EAAE,CAAC,oBAAoB,CAAC,EAAE,CAAC;IAC3F,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,8BAA8B,EAAE,OAAO,EAAE,CAAC,eAAe,EAAE,oBAAoB,CAAC,EAAE,CAAC;CAClH,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CACxB,CAAC;AAEF,MAAqB,UAAW,SAAQ,qBAAW;IAAnD;;QAaE;;WAEG;QACK,yBAAoB,GAAG,IAAI,GAAG,EAAkB,CAAC;IAuS3D,CAAC;IArSC,KAAK,CAAC,GAAG;QACP,KAAK,MAAM,WAAW,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;YACjD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;YAC7C,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,yBAAyB,WAAW,EAAE,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YACjC,IAAI,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,MAAM,eAAe,WAAW,EAAE,CAAC,CAAC;YAChE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YACxB,IAAI,OAAO,CAAC,MAAM,EAAE;gBAClB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;aAClC;SACF;IACH,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,IAAgB,EAAE,MAAmB;QACzD,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG;aACd,aAAa,EAAE;aACf,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC;aACzB,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;aAC5C,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;aAChI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE;YACvC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACzE,EAAE,GAAG,EAAE;iBACJ,OAAO,CAAC,KAAK,CAAC;iBACd,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;iBAC7C,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;iBACjF,GAAG,EAAE,CAAC;SACV;QACD,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,GAAG,EAAE;YACZ,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACjC;QACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE;YACvC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACzE,IAAI,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE;gBAC9B,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;gBACvE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;oBAC5B,MAAM,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAiC,CAAC;oBACvE,IAAI,gBAAgB,EAAE;wBACpB,KAAK,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,IAAI,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE;4BACjE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC;yBACjF;qBACF;iBACF;aACF;SACF;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS,CAAC,IAAgB,EAAE,gBAAgB,GAAG,KAAK,EAAE,UAAU,GAAG,KAAK;QACpF,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;QACtC,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACzD,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,MAAM,EAAE;YACrC,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE;gBAChD,SAAS;aACV;YACD,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE;gBACzB,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE;oBACnE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACpB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC;oBACxC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBACtG,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE;wBAC1B,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;4BAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,gBAAgB,IAAI,EAAE,EAAE,CAAC,CAAC;yBAC5C;qBACF;iBACF;aACF;iBAAM;gBACL,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACrB;SACF;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU,CAAC,IAAgB,EAAE,aAAa,GAAG,KAAK;QAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAO,IAAI,CAAC,OAAO,CAAC;SACrB;QACD,IAAI,cAAc,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,aAAa,EAAE;YAClB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;YAC7E,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,MAAM,EAAE;gBACrC,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;oBACjC,cAAc,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC1B,MAAM;iBACP;aACF;SACF;QACD,OAAO,cAAc,CAAC;IACxB,CAAC;IAED;;;OAGG;IACK,SAAS,CAAC,OAAwB;QACxC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,MAAM,CAAC,UAAU,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC5D,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,SAAS,CAAC;YAClC,MAAM,CAAC,EAAE,GAAG,SAAS,CAAC;YACtB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBAC3C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,EAAE;oBACjC,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;iBACvB;qBAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;oBACrD,IAAI,CAAC,CAAC,OAAO,EAAE;wBACb,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;qBAC3B;yBAAM;wBACL,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC/D,MAAM,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;qBACvB;iBACF;qBAAM;oBACL,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;wBAC5D,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;wBAC3C,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;wBAC/B,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC;qBACvC;iBACF;aACF;SACF;IACH,CAAC;IAED;;;;;OAKG;IACK,aAAa,CAAC,MAAqB;QACzC,IAAI,UAAkB,CAAC;QACvB,KAAK,MAAM,eAAe,IAAI,kBAAkB,EAAE;YAChD,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;YACrC,IAAI,UAAU,EAAE;gBACd,MAAM;aACP;SACF;QACD,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,CAAC,UAAU,CAAC,IAAI,OAAO,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;SAC/F;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;;OAGG;IACK,cAAc,CAAC,MAAqB;QAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;QAC3C,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IACtG,CAAC;IAED;;;;OAIG;IACK,SAAS,CAAC,WAAmB;QACnC,IAAI,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC;QAClG,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,GAAG,WAAW;iBACjB,KAAK,CAAC,cAAc,CAAC;iBACrB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACd,IAAI,CAAC,EAAE,CAAC;iBACR,WAAW,EAAE,CAAC;YACjB,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;SACpD;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACK,YAAY,CAAC,OAAwB,EAAE,IAAgB;QAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC;QAEpC,IAAA,qBAAU,EAAC,SAAS,CAAC,CAAC;QAEtB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAiB,CAAC;QAC1C,IAAI,OAAO,KAAK,GAAG,EAAE;YACnB,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SAChC;aAAM;YACL,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;gBACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC5D,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACpB;SACF;QACD,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,EAAE,EAAE;YAC3C,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,IAAI,gBAAgB,GAAG,CAAC,CAAC;YACzB,MAAM,OAAO,GAAY,CAAC,KAAK,CAAC,CAAC;YAEjC,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE;gBAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gBAC3C,IAAI,KAAK,GAAG,gBAAgB,GAAG,mBAAmB,EAAE;oBAClD,KAAK,GAAG,EAAE,CAAC;oBACX,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACpB,gBAAgB,GAAG,CAAC,CAAC;iBACtB;gBACD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACnB,gBAAgB,IAAI,KAAK,CAAC;aAC3B;YACD,KAAK,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE;gBAC1C,MAAM,QAAQ,GAAG,GAAG,UAAU,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;gBAC3E,MAAM,QAAQ,GAAG,GAAG,SAAS,IAAI,QAAQ,EAAE,CAAC;gBAC5C,IAAI,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,MAAM,eAAe,QAAQ,EAAE,CAAC,CAAC;gBAC3D,IAAA,wBAAa,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACrE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC1B;SACF;QACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE;YAChE,MAAM,kBAAkB,GAAG,GAAG,SAAS,wBAAwB,CAAC;YAChE,IAAI,IAAA,qBAAU,EAAC,kBAAkB,CAAC,EAAE;gBAClC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,uBAAY,EAAC,kBAAkB,EAAE,OAAO,CAAC,CAA2C,CAAC;gBACpH,IAAI,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,WAAW,CAAC,CAAC;gBACzE,IAAI,CAAC,UAAU,EAAE;oBACf,UAAU,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;oBACtD,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBAC9B;gBACD,mCAAmC;gBACnC,IAAI,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,SAAS,CAAC,QAAQ,EAAE,EAAE;oBACzD,UAAU,CAAC,KAAK,GAAG,SAAS,CAAC;oBAC7B,IAAA,wBAAa,EAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;iBACzE;aACF;SACF;IACH,CAAC;IAED;;;;OAIG;IACK,eAAe,CAAC,MAAqB;QAC3C,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACtE,CAAC;IAED;;;;OAIG;IACK,aAAa,CAAC,WAAmB;QACvC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACnF,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QAChE,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,WAAW,EAAE;YAChE,IAAI,QAAQ,EAAE;gBACZ,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;aAC1B;YACD,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;aACxB;YACD,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;aACxB;SACF;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,WAAmB,EAAE,gBAAwB;QAC5E,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAC7E,MAAM,YAAY,GAAG,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,KAAK,gBAAgB,CAAC,CAAC;QAC1G,IAAI,CAAC,YAAY,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,gBAAgB,gBAAgB,6BAA6B,WAAW,EAAE,CAAC,CAAC;SAC7F;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;IACvD,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,OAAwB;QACpC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAyB,CAAC;QACnD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;SAClC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;;AAtTH,6BAuTC;AAtTe,2BAAgB,GAAG,IAAI,CAAC;AACxB,sBAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;AACxD,mBAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;AAChD,sBAAW,GAAgB;IAC1C,YAAY,EAAE,eAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,6BAA6B,CAAC,EAAE,CAAC;IACzH,SAAS,EAAE,eAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;IACrI,OAAO,EAAE,eAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAAE,CAAC;IACjH,OAAO,EAAE,eAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAAE,CAAC;IAChH,QAAQ,EAAE,eAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,yBAAyB,CAAC,EAAE,CAAC;IAClH,cAAc,EAAE,eAAK,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,UAAU,CAAC,+BAA+B,CAAC,EAAE,CAAC;CACjI,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) NCR Terafina
|
|
3
|
+
**/
|
|
4
|
+
import { FlagsConfig, SfdxCommand } from '@salesforce/command';
|
|
5
|
+
/**
|
|
6
|
+
* Stores external id information of a record.
|
|
7
|
+
* Stores both the external id field name and value.
|
|
8
|
+
*/
|
|
9
|
+
declare type ExternalId = {
|
|
10
|
+
fieldName: string;
|
|
11
|
+
value: string;
|
|
12
|
+
};
|
|
13
|
+
export default class DataImport extends SfdxCommand {
|
|
14
|
+
static requiresUsername: boolean;
|
|
15
|
+
static requiresProject: boolean;
|
|
16
|
+
static description: string;
|
|
17
|
+
static examples: string[];
|
|
18
|
+
protected static flagsConfig: FlagsConfig;
|
|
19
|
+
protected referenceIdExternalIdMap: Map<string, ExternalId>;
|
|
20
|
+
private isScratch;
|
|
21
|
+
private namespacePrefix;
|
|
22
|
+
run(): Promise<any>;
|
|
23
|
+
/**
|
|
24
|
+
* Gathers external ids from the specified records. The external id of each record along with the external id field name
|
|
25
|
+
* is stored as a lookup reference mapped to the reference id of the record.
|
|
26
|
+
* @see referenceIdExternalIdMap
|
|
27
|
+
* @param records
|
|
28
|
+
*/
|
|
29
|
+
private collectExternalIds;
|
|
30
|
+
/**
|
|
31
|
+
* Upserts the records using sfdx bulk2 API.
|
|
32
|
+
* @param records SObject records
|
|
33
|
+
*/
|
|
34
|
+
private upsert;
|
|
35
|
+
/**
|
|
36
|
+
* Creates an upsert request for the records
|
|
37
|
+
* @param records
|
|
38
|
+
*/
|
|
39
|
+
private createUpsertRequest;
|
|
40
|
+
/**
|
|
41
|
+
* Executes the upsert request. May include execution of child upsert requests if the records have child relationships.
|
|
42
|
+
* @param request
|
|
43
|
+
*/
|
|
44
|
+
private execute;
|
|
45
|
+
/**
|
|
46
|
+
* Logs the success/error metrics
|
|
47
|
+
* @param result
|
|
48
|
+
* @param request
|
|
49
|
+
*/
|
|
50
|
+
private logResult;
|
|
51
|
+
/**
|
|
52
|
+
* Checks if file has changed since the last time it was seen by comparing it's last modified date to last known one.
|
|
53
|
+
* @param sobjectfile
|
|
54
|
+
* @returns
|
|
55
|
+
*/
|
|
56
|
+
private determineIfFileChanged;
|
|
57
|
+
/**
|
|
58
|
+
* Tracks the files for any changes in future. Uses last modified date to track changes.
|
|
59
|
+
* @param sobjectfiles
|
|
60
|
+
*/
|
|
61
|
+
private trackFileChange;
|
|
62
|
+
/**
|
|
63
|
+
* Returns the external id field names to be used for:
|
|
64
|
+
* 1. resolving external ids of lookup references on records
|
|
65
|
+
* 2. resolving the external id of records for upsert
|
|
66
|
+
*/
|
|
67
|
+
private getExternalIdFieldNames;
|
|
68
|
+
}
|
|
69
|
+
export {};
|