@salesforce/plugin-data 2.1.20 → 2.1.22
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 +947 -320
- package/lib/api/data/tree/exportApi.js +66 -73
- package/lib/api/data/tree/exportApi.js.map +1 -1
- package/lib/api/data/tree/importApi.js +62 -62
- package/lib/api/data/tree/importApi.js.map +1 -1
- package/lib/batcher.js +80 -101
- package/lib/batcher.js.map +1 -1
- package/lib/commands/data/create/record.js +64 -0
- package/lib/commands/data/create/record.js.map +1 -0
- package/lib/commands/data/delete/bulk.js +78 -0
- package/lib/commands/data/delete/bulk.js.map +1 -0
- package/lib/commands/data/delete/record.js +83 -0
- package/lib/commands/data/delete/record.js.map +1 -0
- package/lib/commands/data/export/tree.js +57 -0
- package/lib/commands/data/export/tree.js.map +1 -0
- package/lib/commands/data/get/record.js +73 -0
- package/lib/commands/data/get/record.js.map +1 -0
- package/lib/commands/data/import/tree.js +85 -0
- package/lib/commands/data/import/tree.js.map +1 -0
- package/lib/commands/data/query/resume.js +55 -0
- package/lib/commands/data/query/resume.js.map +1 -0
- package/lib/commands/data/query.js +283 -0
- package/lib/commands/data/query.js.map +1 -0
- package/lib/commands/data/resume.js +64 -0
- package/lib/commands/data/resume.js.map +1 -0
- package/lib/commands/data/update/record.js +101 -0
- package/lib/commands/data/update/record.js.map +1 -0
- package/lib/commands/data/upsert/bulk.js +88 -0
- package/lib/commands/data/upsert/bulk.js.map +1 -0
- package/lib/dataCommand.js +103 -202
- package/lib/dataCommand.js.map +1 -1
- package/lib/dataSoqlQueryTypes.js +2 -6
- package/lib/dataSoqlQueryTypes.js.map +1 -1
- package/lib/flags.js +27 -0
- package/lib/flags.js.map +1 -0
- package/lib/reporters.js +58 -66
- package/lib/reporters.js.map +1 -1
- package/messages/batcher.md +39 -0
- package/messages/bulk.delete.md +31 -0
- package/messages/bulk.report.md +17 -0
- package/messages/bulk.status.md +29 -0
- package/messages/bulk.upsert.md +43 -0
- package/messages/exportApi.md +25 -0
- package/messages/importApi.md +52 -0
- package/messages/messages.md +20 -0
- package/messages/record.create.md +45 -0
- package/messages/record.delete.md +53 -0
- package/messages/record.get.md +47 -0
- package/messages/record.update.md +61 -0
- package/messages/soql.query.md +72 -0
- package/messages/tree.export.md +41 -0
- package/messages/tree.import.md +37 -0
- package/oclif.manifest.json +1 -1
- package/package.json +50 -51
- package/lib/api/data/tree/exportApi.d.ts +0 -77
- package/lib/api/data/tree/importApi.d.ts +0 -60
- package/lib/batcher.d.ts +0 -79
- package/lib/commands/force/data/bulk/delete.d.ts +0 -11
- package/lib/commands/force/data/bulk/delete.js +0 -58
- package/lib/commands/force/data/bulk/delete.js.map +0 -1
- package/lib/commands/force/data/bulk/status.d.ts +0 -11
- package/lib/commands/force/data/bulk/status.js +0 -61
- package/lib/commands/force/data/bulk/status.js.map +0 -1
- package/lib/commands/force/data/bulk/upsert.d.ts +0 -11
- package/lib/commands/force/data/bulk/upsert.js +0 -76
- package/lib/commands/force/data/bulk/upsert.js.map +0 -1
- package/lib/commands/force/data/record/create.d.ts +0 -10
- package/lib/commands/force/data/record/create.js +0 -58
- package/lib/commands/force/data/record/create.js.map +0 -1
- package/lib/commands/force/data/record/delete.d.ts +0 -10
- package/lib/commands/force/data/record/delete.js +0 -72
- package/lib/commands/force/data/record/delete.js.map +0 -1
- package/lib/commands/force/data/record/get.d.ts +0 -10
- package/lib/commands/force/data/record/get.js +0 -65
- package/lib/commands/force/data/record/get.js.map +0 -1
- package/lib/commands/force/data/record/update.d.ts +0 -10
- package/lib/commands/force/data/record/update.js +0 -90
- package/lib/commands/force/data/record/update.js.map +0 -1
- package/lib/commands/force/data/soql/bulk/report.d.ts +0 -9
- package/lib/commands/force/data/soql/bulk/report.js +0 -45
- package/lib/commands/force/data/soql/bulk/report.js.map +0 -1
- package/lib/commands/force/data/soql/query.d.ts +0 -64
- package/lib/commands/force/data/soql/query.js +0 -300
- package/lib/commands/force/data/soql/query.js.map +0 -1
- package/lib/commands/force/data/tree/export.d.ts +0 -10
- package/lib/commands/force/data/tree/export.js +0 -52
- package/lib/commands/force/data/tree/export.js.map +0 -1
- package/lib/commands/force/data/tree/import.d.ts +0 -19
- package/lib/commands/force/data/tree/import.js +0 -81
- package/lib/commands/force/data/tree/import.js.map +0 -1
- package/lib/dataCommand.d.ts +0 -57
- package/lib/dataSoqlQueryTypes.d.ts +0 -63
- package/lib/index.d.ts +0 -2
- package/lib/reporters.d.ts +0 -57
- package/messages/batcher.json +0 -12
- package/messages/bulk.delete.json +0 -12
- package/messages/bulk.report.json +0 -7
- package/messages/bulk.status.json +0 -12
- package/messages/bulk.upsert.json +0 -14
- package/messages/exportApi.json +0 -8
- package/messages/importApi.json +0 -16
- package/messages/messages.json +0 -11
- package/messages/record.create.json +0 -15
- package/messages/record.delete.json +0 -16
- package/messages/record.get.json +0 -14
- package/messages/record.update.json +0 -18
- package/messages/soql.query.json +0 -26
- package/messages/tree.export.json +0 -11
- package/messages/tree.import.json +0 -13
package/lib/batcher.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Batcher = void 0;
|
|
3
|
+
exports.splitIntoBatches = exports.Batcher = void 0;
|
|
4
4
|
const core_1 = require("@salesforce/core");
|
|
5
5
|
const sync_1 = require("csv-stringify/sync");
|
|
6
6
|
const parse = require("csv-parse");
|
|
@@ -31,46 +31,28 @@ class Batcher {
|
|
|
31
31
|
}
|
|
32
32
|
return jobInfo;
|
|
33
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
*
|
|
36
|
+
* Handles ux output and massaging the data by filtering out the $ from the response
|
|
37
|
+
*/
|
|
34
38
|
bulkStatus(summary, results, batchNum, isJob) {
|
|
35
39
|
this.ux.log('');
|
|
36
40
|
if (batchNum) {
|
|
37
41
|
this.ux.styledHeader(messages.getMessage('BulkBatch', [batchNum]));
|
|
38
42
|
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
errorMessages.push(errMsg);
|
|
45
|
-
});
|
|
46
|
-
}
|
|
43
|
+
const errorMessages = (results ?? []).flatMap((result) => result.errors);
|
|
44
|
+
if (errorMessages.length > 0) {
|
|
45
|
+
this.ux.styledHeader(messages.getMessage('BulkError'));
|
|
46
|
+
errorMessages.forEach((errorMessage) => {
|
|
47
|
+
this.ux.log(errorMessage);
|
|
47
48
|
});
|
|
48
|
-
if (errorMessages.length > 0) {
|
|
49
|
-
this.ux.styledHeader(messages.getMessage('BulkError'));
|
|
50
|
-
errorMessages.forEach((errorMessage) => {
|
|
51
|
-
this.ux.log(errorMessage);
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
const formatOutput = [];
|
|
56
|
-
for (const field in summary) {
|
|
57
|
-
if (Object.prototype.hasOwnProperty.call(summary, field)) {
|
|
58
|
-
formatOutput.push(field);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
formatOutput.splice(0, 1);
|
|
62
|
-
if (isJob) {
|
|
63
|
-
// remove url field
|
|
64
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
65
|
-
// @ts-ignore
|
|
66
|
-
delete summary['$'];
|
|
67
|
-
this.ux.styledHeader(messages.getMessage('BulkJobStatus'));
|
|
68
49
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
50
|
+
this.ux.styledHeader(isJob ? messages.getMessage('BulkJobStatus') : messages.getMessage('BatchStatus'));
|
|
51
|
+
// remove url field (present if isJob)
|
|
52
|
+
// Object.entries loses type info, but will match the original type
|
|
53
|
+
const output = Object.fromEntries(Object.entries(summary).filter(([key]) => key !== '$'));
|
|
54
|
+
this.ux.styledObject(output);
|
|
55
|
+
return output;
|
|
74
56
|
}
|
|
75
57
|
/**
|
|
76
58
|
* create and execute batches based on the record arrays; wait for completion response if -w flag is set with > 0 minutes
|
|
@@ -85,13 +67,14 @@ class Batcher {
|
|
|
85
67
|
const batchesCompleted = 0;
|
|
86
68
|
let batchesQueued = 0;
|
|
87
69
|
const overallInfo = false;
|
|
88
|
-
const batches = await
|
|
70
|
+
const batches = await (0, exports.splitIntoBatches)(records);
|
|
89
71
|
// The error handling for this gets quite tricky when there are multiple batches
|
|
90
72
|
// Currently, we bail out early by calling an Error.exit
|
|
91
73
|
// But, we might want to actually continue to the next batch.
|
|
92
74
|
return (await Promise.all(batches.map(async (batch, i) => {
|
|
93
75
|
const newBatch = job.createBatch();
|
|
94
76
|
return new Promise((resolve, reject) => {
|
|
77
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
95
78
|
newBatch.on('error', (err) => {
|
|
96
79
|
// reword no external id error message to direct it to org user rather than api user
|
|
97
80
|
if (err.message.startsWith('External ID was blank')) {
|
|
@@ -104,9 +87,9 @@ class Batcher {
|
|
|
104
87
|
// so emit a 'error' on the job.
|
|
105
88
|
job.emit('error', new core_1.SfError(err.message, 'Time Out', [], 69));
|
|
106
89
|
}
|
|
107
|
-
this.ux.
|
|
90
|
+
this.ux.spinner.stop('Error');
|
|
108
91
|
});
|
|
109
|
-
newBatch.on('queue',
|
|
92
|
+
void newBatch.on('queue',
|
|
110
93
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
111
94
|
async () => {
|
|
112
95
|
batchesQueued++;
|
|
@@ -119,6 +102,7 @@ class Batcher {
|
|
|
119
102
|
}
|
|
120
103
|
});
|
|
121
104
|
if (!wait) {
|
|
105
|
+
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
122
106
|
newBatch.on('queue',
|
|
123
107
|
// we're using an async method on an event listener which doesn't fit the .on method parameter types
|
|
124
108
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
@@ -136,11 +120,7 @@ class Batcher {
|
|
|
136
120
|
else {
|
|
137
121
|
resolve(this.waitForCompletion(newBatch, batchesCompleted, overallInfo, i + 1, batches.length, wait));
|
|
138
122
|
}
|
|
139
|
-
newBatch.execute(batch
|
|
140
|
-
if (err) {
|
|
141
|
-
reject(err);
|
|
142
|
-
}
|
|
143
|
-
});
|
|
123
|
+
void newBatch.execute(batch);
|
|
144
124
|
});
|
|
145
125
|
})));
|
|
146
126
|
}
|
|
@@ -176,7 +156,7 @@ class Batcher {
|
|
|
176
156
|
*/
|
|
177
157
|
async waitForCompletion(newBatch, batchesCompleted, overallInfo, batchNum, totalNumBatches, waitMins) {
|
|
178
158
|
return new Promise((resolve, reject) => {
|
|
179
|
-
newBatch.on('queue',
|
|
159
|
+
void newBatch.on('queue',
|
|
180
160
|
// we're using an async method on an event listener which doesn't fit the .on method parameter types
|
|
181
161
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
182
162
|
async (batchInfo) => {
|
|
@@ -184,18 +164,16 @@ class Batcher {
|
|
|
184
164
|
if (result.state === 'Failed') {
|
|
185
165
|
reject(result.stateMessage);
|
|
186
166
|
}
|
|
187
|
-
else {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
overallInfo = true;
|
|
191
|
-
}
|
|
167
|
+
else if (!overallInfo) {
|
|
168
|
+
this.ux.log(messages.getMessage('PollingInfo', [POLL_FREQUENCY_MS / 1000, batchInfo.jobId]));
|
|
169
|
+
overallInfo = true;
|
|
192
170
|
}
|
|
193
171
|
this.ux.log(messages.getMessage('BatchQueued', [batchNum, batchInfo.id]));
|
|
194
172
|
newBatch.poll(POLL_FREQUENCY_MS, waitMins * 60000);
|
|
195
173
|
});
|
|
196
174
|
// we're using an async method on an event listener which doesn't fit the .on method parameter types
|
|
197
175
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
198
|
-
newBatch.on('response', async (results) => {
|
|
176
|
+
void newBatch.on('response', async (results) => {
|
|
199
177
|
const summary = await newBatch.check();
|
|
200
178
|
this.bulkStatus(summary, results, batchNum);
|
|
201
179
|
batchesCompleted++;
|
|
@@ -205,58 +183,59 @@ class Batcher {
|
|
|
205
183
|
});
|
|
206
184
|
});
|
|
207
185
|
}
|
|
208
|
-
/**
|
|
209
|
-
* registers the listener in charge of distributing all csv records into batches
|
|
210
|
-
*
|
|
211
|
-
* @param readStream - the read stream
|
|
212
|
-
* @returns {Promise<Batches>}
|
|
213
|
-
*/
|
|
214
|
-
async splitIntoBatches(readStream) {
|
|
215
|
-
// split all records into batches
|
|
216
|
-
const batches = [];
|
|
217
|
-
let batchIndex = 0;
|
|
218
|
-
let batchBytes = 0;
|
|
219
|
-
let batchHeaderBytes = 0;
|
|
220
|
-
batches[batchIndex] = [];
|
|
221
|
-
return await new Promise((resolve, reject) => {
|
|
222
|
-
const parser = parse({
|
|
223
|
-
columns: true,
|
|
224
|
-
// library option is snakecase
|
|
225
|
-
// eslint-disable-next-line camelcase
|
|
226
|
-
skip_empty_lines: true,
|
|
227
|
-
bom: true,
|
|
228
|
-
});
|
|
229
|
-
readStream.pipe(parser);
|
|
230
|
-
parser.on('data', (element) => {
|
|
231
|
-
if (!batchHeaderBytes) {
|
|
232
|
-
// capture header byte length
|
|
233
|
-
batchHeaderBytes = Buffer.byteLength((0, sync_1.stringify)([Object.keys(element)]) + '\n', 'utf8');
|
|
234
|
-
batchBytes = batchHeaderBytes;
|
|
235
|
-
}
|
|
236
|
-
// capture row byte length
|
|
237
|
-
const rowBytes = Buffer.byteLength((0, sync_1.stringify)([Object.values(element)]) + '\n', 'utf8');
|
|
238
|
-
if (batches[batchIndex].length === BATCH_RECORDS_LIMIT || rowBytes + batchBytes > BATCH_BYTES_LIMIT) {
|
|
239
|
-
// TODO: we can start processing this batch here
|
|
240
|
-
// we need event listeners to remove all of the `await new Promise`
|
|
241
|
-
// next batch
|
|
242
|
-
batchIndex++;
|
|
243
|
-
batches[batchIndex] = [];
|
|
244
|
-
// reset file size to just the headers
|
|
245
|
-
batchBytes = batchHeaderBytes;
|
|
246
|
-
}
|
|
247
|
-
batchBytes += rowBytes;
|
|
248
|
-
batches[batchIndex].push(element);
|
|
249
|
-
});
|
|
250
|
-
parser.on('error', (err) => {
|
|
251
|
-
readStream.destroy();
|
|
252
|
-
reject(core_1.SfError.wrap(err));
|
|
253
|
-
});
|
|
254
|
-
parser.on('end', () => {
|
|
255
|
-
readStream.destroy();
|
|
256
|
-
resolve(batches);
|
|
257
|
-
});
|
|
258
|
-
});
|
|
259
|
-
}
|
|
260
186
|
}
|
|
261
187
|
exports.Batcher = Batcher;
|
|
188
|
+
/**
|
|
189
|
+
* registers the listener in charge of distributing all csv records into batches
|
|
190
|
+
*
|
|
191
|
+
* @param readStream - the read stream
|
|
192
|
+
* @returns {Promise<Batches>}
|
|
193
|
+
*/
|
|
194
|
+
const splitIntoBatches = async (readStream) => {
|
|
195
|
+
// split all records into batches
|
|
196
|
+
const batches = [];
|
|
197
|
+
let batchIndex = 0;
|
|
198
|
+
let batchBytes = 0;
|
|
199
|
+
let batchHeaderBytes = 0;
|
|
200
|
+
batches[batchIndex] = [];
|
|
201
|
+
return new Promise((resolve, reject) => {
|
|
202
|
+
const parser = parse({
|
|
203
|
+
columns: true,
|
|
204
|
+
// library option is snakecase
|
|
205
|
+
// eslint-disable-next-line camelcase
|
|
206
|
+
skip_empty_lines: true,
|
|
207
|
+
bom: true,
|
|
208
|
+
});
|
|
209
|
+
readStream.pipe(parser);
|
|
210
|
+
parser.on('data', (element) => {
|
|
211
|
+
if (!batchHeaderBytes) {
|
|
212
|
+
// capture header byte length
|
|
213
|
+
batchHeaderBytes = Buffer.byteLength((0, sync_1.stringify)([Object.keys(element)]) + '\n', 'utf8');
|
|
214
|
+
batchBytes = batchHeaderBytes;
|
|
215
|
+
}
|
|
216
|
+
// capture row byte length
|
|
217
|
+
const rowBytes = Buffer.byteLength((0, sync_1.stringify)([Object.values(element)]) + '\n', 'utf8');
|
|
218
|
+
if (batches[batchIndex].length === BATCH_RECORDS_LIMIT || rowBytes + batchBytes > BATCH_BYTES_LIMIT) {
|
|
219
|
+
// TODO: we can start processing this batch here
|
|
220
|
+
// we need event listeners to remove all of the `await new Promise`
|
|
221
|
+
// next batch
|
|
222
|
+
batchIndex++;
|
|
223
|
+
batches[batchIndex] = [];
|
|
224
|
+
// reset file size to just the headers
|
|
225
|
+
batchBytes = batchHeaderBytes;
|
|
226
|
+
}
|
|
227
|
+
batchBytes += rowBytes;
|
|
228
|
+
batches[batchIndex].push(element);
|
|
229
|
+
});
|
|
230
|
+
parser.on('error', (err) => {
|
|
231
|
+
readStream.destroy();
|
|
232
|
+
reject(core_1.SfError.wrap(err));
|
|
233
|
+
});
|
|
234
|
+
parser.on('end', () => {
|
|
235
|
+
readStream.destroy();
|
|
236
|
+
resolve(batches);
|
|
237
|
+
});
|
|
238
|
+
});
|
|
239
|
+
};
|
|
240
|
+
exports.splitIntoBatches = splitIntoBatches;
|
|
262
241
|
//# sourceMappingURL=batcher.js.map
|
package/lib/batcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batcher.js","sourceRoot":"","sources":["../src/batcher.ts"],"names":[],"mappings":";;;AAOA,2CAAiE;
|
|
1
|
+
{"version":3,"file":"batcher.js","sourceRoot":"","sources":["../src/batcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2020, salesforce.com, inc.
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
* Licensed under the BSD 3-Clause license.
|
|
6
|
+
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const core_1 = require("@salesforce/core");
|
|
10
|
+
const sf_plugins_core_1 = require("@salesforce/sf-plugins-core");
|
|
11
|
+
const flags_1 = require("../../../flags");
|
|
12
|
+
const dataCommand_1 = require("../../../dataCommand");
|
|
13
|
+
core_1.Messages.importMessagesDirectory(__dirname);
|
|
14
|
+
const messages = core_1.Messages.loadMessages('@salesforce/plugin-data', 'record.create');
|
|
15
|
+
class Create extends sf_plugins_core_1.SfCommand {
|
|
16
|
+
async run() {
|
|
17
|
+
const { flags } = await this.parse(Create);
|
|
18
|
+
this.spinner.start(`Creating record for ${flags.sobject}`);
|
|
19
|
+
const sobject = (flags['use-tooling-api']
|
|
20
|
+
? flags['target-org'].getConnection(flags['api-version']).tooling
|
|
21
|
+
: flags['target-org'].getConnection(flags['api-version'])).sobject(flags.sobject);
|
|
22
|
+
const values = (0, dataCommand_1.stringToDictionary)(flags.values);
|
|
23
|
+
const result = await sobject.insert(values);
|
|
24
|
+
if (result.success) {
|
|
25
|
+
this.log(messages.getMessage('createSuccess', [result.id || 'unknown id']));
|
|
26
|
+
this.spinner.stop();
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
const errors = (0, dataCommand_1.collectErrorMessages)(result);
|
|
30
|
+
this.spinner.stop('failed');
|
|
31
|
+
this.error(messages.getMessage('createFailure', [errors]));
|
|
32
|
+
}
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.default = Create;
|
|
37
|
+
Create.summary = messages.getMessage('summary');
|
|
38
|
+
Create.description = messages.getMessage('description');
|
|
39
|
+
Create.examples = messages.getMessages('examples');
|
|
40
|
+
Create.aliases = ['force:data:record:create'];
|
|
41
|
+
Create.deprecateAliases = true;
|
|
42
|
+
Create.flags = {
|
|
43
|
+
...flags_1.orgFlags,
|
|
44
|
+
sobject: sf_plugins_core_1.Flags.string({
|
|
45
|
+
char: 's',
|
|
46
|
+
required: true,
|
|
47
|
+
summary: messages.getMessage('flags.sobject'),
|
|
48
|
+
aliases: ['sobjecttype'],
|
|
49
|
+
deprecateAliases: true,
|
|
50
|
+
}),
|
|
51
|
+
values: sf_plugins_core_1.Flags.string({
|
|
52
|
+
char: 'v',
|
|
53
|
+
required: true,
|
|
54
|
+
summary: messages.getMessage('flags.values'),
|
|
55
|
+
}),
|
|
56
|
+
'use-tooling-api': sf_plugins_core_1.Flags.boolean({
|
|
57
|
+
char: 't',
|
|
58
|
+
summary: messages.getMessage('flags.useToolingApi'),
|
|
59
|
+
aliases: ['usetoolingapi'],
|
|
60
|
+
deprecateAliases: true,
|
|
61
|
+
}),
|
|
62
|
+
perflog: flags_1.perflogFlag,
|
|
63
|
+
};
|
|
64
|
+
//# sourceMappingURL=record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../../../src/commands/data/create/record.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAEH,2CAA4C;AAE5C,iEAA+D;AAC/D,0CAAuD;AACvD,sDAAgF;AAEhF,eAAQ,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAC5C,MAAM,QAAQ,GAAG,eAAQ,CAAC,YAAY,CAAC,yBAAyB,EAAE,eAAe,CAAC,CAAC;AAEnF,MAAqB,MAAO,SAAQ,2BAAqB;IA6BhD,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,uBAAuB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAE3D,MAAM,OAAO,GAAG,CACd,KAAK,CAAC,iBAAiB,CAAC;YACtB,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO;YACjE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAC5D,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACzB,MAAM,MAAM,GAAG,IAAA,gCAAkB,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,MAAM,CAAC,OAAO,EAAE;YAClB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;YAC5E,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;SACrB;aAAM;YACL,MAAM,MAAM,GAAG,IAAA,kCAAoB,EAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,eAAe,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAC5D;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;;AAjDH,yBAkDC;AAjDwB,cAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACzC,kBAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACjD,eAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AACrD,cAAO,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAC9B,uBAAgB,GAAG,IAAI,CAAC;AACxB,YAAK,GAAG;IAC7B,GAAG,gBAAQ;IACX,OAAO,EAAE,uBAAK,CAAC,MAAM,CAAC;QACpB,IAAI,EAAE,GAAG;QACT,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC;QAC7C,OAAO,EAAE,CAAC,aAAa,CAAC;QACxB,gBAAgB,EAAE,IAAI;KACvB,CAAC;IACF,MAAM,EAAE,uBAAK,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,GAAG;QACT,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC;KAC7C,CAAC;IACF,iBAAiB,EAAE,uBAAK,CAAC,OAAO,CAAC;QAC/B,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC;QACnD,OAAO,EAAE,CAAC,eAAe,CAAC;QAC1B,gBAAgB,EAAE,IAAI;KACvB,CAAC;IACF,OAAO,EAAE,mBAAW;CACrB,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/*
|
|
4
|
+
* Copyright (c) 2020, salesforce.com, inc.
|
|
5
|
+
* All rights reserved.
|
|
6
|
+
* Licensed under the BSD 3-Clause license.
|
|
7
|
+
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
8
|
+
*/
|
|
9
|
+
const fs = require("fs");
|
|
10
|
+
const core_1 = require("@salesforce/core");
|
|
11
|
+
const sf_plugins_core_1 = require("@salesforce/sf-plugins-core");
|
|
12
|
+
const kit_1 = require("@salesforce/kit");
|
|
13
|
+
const flags_1 = require("../../../flags");
|
|
14
|
+
const batcher_1 = require("../../../batcher");
|
|
15
|
+
core_1.Messages.importMessagesDirectory(__dirname);
|
|
16
|
+
const messages = core_1.Messages.load('@salesforce/plugin-data', 'bulk.delete', [
|
|
17
|
+
'examples',
|
|
18
|
+
'summary',
|
|
19
|
+
'description',
|
|
20
|
+
'flags.csvfile',
|
|
21
|
+
'flags.sobjecttype',
|
|
22
|
+
'flags.wait',
|
|
23
|
+
]);
|
|
24
|
+
class Delete extends sf_plugins_core_1.SfCommand {
|
|
25
|
+
async run() {
|
|
26
|
+
const { flags } = await this.parse(Delete);
|
|
27
|
+
let result;
|
|
28
|
+
try {
|
|
29
|
+
const conn = flags['target-org'].getConnection(flags['api-version']);
|
|
30
|
+
this.spinner.start('Bulk Delete');
|
|
31
|
+
const csvRecords = fs.createReadStream(flags.file, { encoding: 'utf-8' });
|
|
32
|
+
const job = conn.bulk.createJob(flags.sobject, 'delete');
|
|
33
|
+
const batcher = new batcher_1.Batcher(conn, new sf_plugins_core_1.Ux({ jsonEnabled: this.jsonEnabled() }));
|
|
34
|
+
result = await batcher.createAndExecuteBatches(job, csvRecords, flags.sobject, flags.wait?.minutes);
|
|
35
|
+
this.spinner.stop();
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
this.spinner.stop('error');
|
|
40
|
+
if (!(e instanceof Error)) {
|
|
41
|
+
throw e;
|
|
42
|
+
}
|
|
43
|
+
throw core_1.SfError.wrap(e);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.default = Delete;
|
|
48
|
+
Delete.examples = messages.getMessages('examples');
|
|
49
|
+
Delete.summary = messages.getMessage('summary');
|
|
50
|
+
Delete.description = messages.getMessage('description');
|
|
51
|
+
Delete.aliases = ['force:data:bulk:delete'];
|
|
52
|
+
Delete.deprecateAliases = true;
|
|
53
|
+
Delete.flags = {
|
|
54
|
+
...flags_1.orgFlags,
|
|
55
|
+
file: sf_plugins_core_1.Flags.file({
|
|
56
|
+
char: 'f',
|
|
57
|
+
summary: messages.getMessage('flags.csvfile'),
|
|
58
|
+
required: true,
|
|
59
|
+
exists: true,
|
|
60
|
+
aliases: ['csvfile'],
|
|
61
|
+
deprecateAliases: true,
|
|
62
|
+
}),
|
|
63
|
+
sobject: sf_plugins_core_1.Flags.string({
|
|
64
|
+
char: 's',
|
|
65
|
+
summary: messages.getMessage('flags.sobjecttype'),
|
|
66
|
+
required: true,
|
|
67
|
+
aliases: ['sobjecttype'],
|
|
68
|
+
deprecateAliases: true,
|
|
69
|
+
}),
|
|
70
|
+
wait: sf_plugins_core_1.Flags.duration({
|
|
71
|
+
char: 'w',
|
|
72
|
+
unit: 'minutes',
|
|
73
|
+
summary: messages.getMessage('flags.wait'),
|
|
74
|
+
min: 0,
|
|
75
|
+
default: kit_1.Duration.minutes(0),
|
|
76
|
+
}),
|
|
77
|
+
};
|
|
78
|
+
//# sourceMappingURL=bulk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk.js","sourceRoot":"","sources":["../../../../src/commands/data/delete/bulk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2020, salesforce.com, inc.
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
* Licensed under the BSD 3-Clause license.
|
|
6
|
+
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const core_1 = require("@salesforce/core");
|
|
10
|
+
const sf_plugins_core_1 = require("@salesforce/sf-plugins-core");
|
|
11
|
+
const flags_1 = require("../../../flags");
|
|
12
|
+
const dataCommand_1 = require("../../../dataCommand");
|
|
13
|
+
core_1.Messages.importMessagesDirectory(__dirname);
|
|
14
|
+
const messages = core_1.Messages.loadMessages('@salesforce/plugin-data', 'record.delete');
|
|
15
|
+
class Delete extends sf_plugins_core_1.SfCommand {
|
|
16
|
+
async run() {
|
|
17
|
+
const { flags } = await this.parse(Delete);
|
|
18
|
+
this.spinner.start('Deleting Record');
|
|
19
|
+
let status = 'Success';
|
|
20
|
+
try {
|
|
21
|
+
const conn = flags['use-tooling-api']
|
|
22
|
+
? flags['target-org'].getConnection(flags['api-version']).tooling
|
|
23
|
+
: flags['target-org'].getConnection(flags['api-version']);
|
|
24
|
+
// "where flag" will be defined if sobjectId is not
|
|
25
|
+
const sObjectId = flags['record-id'] ?? (await (0, dataCommand_1.query)(conn, flags.sobject, flags.where)).Id;
|
|
26
|
+
const result = await conn.sobject(flags.sobject).destroy(sObjectId);
|
|
27
|
+
if (result.success) {
|
|
28
|
+
this.log(messages.getMessage('deleteSuccess', [sObjectId]));
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
status = 'Failed';
|
|
32
|
+
const errors = (0, dataCommand_1.collectErrorMessages)(result);
|
|
33
|
+
this.error(messages.getMessage('deleteFailure', [errors]));
|
|
34
|
+
}
|
|
35
|
+
this.spinner.stop(status);
|
|
36
|
+
return result;
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
status = 'Failed';
|
|
40
|
+
this.spinner.stop(status);
|
|
41
|
+
if (!(err instanceof Error)) {
|
|
42
|
+
throw err;
|
|
43
|
+
}
|
|
44
|
+
throw new core_1.SfError(err.message, err.name);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.default = Delete;
|
|
49
|
+
Delete.summary = messages.getMessage('summary');
|
|
50
|
+
Delete.description = messages.getMessage('description');
|
|
51
|
+
Delete.examples = messages.getMessages('examples');
|
|
52
|
+
Delete.aliases = ['force:data:record:delete'];
|
|
53
|
+
Delete.deprecateAliases = true;
|
|
54
|
+
Delete.flags = {
|
|
55
|
+
...flags_1.orgFlags,
|
|
56
|
+
sobject: sf_plugins_core_1.Flags.string({
|
|
57
|
+
char: 's',
|
|
58
|
+
required: true,
|
|
59
|
+
summary: messages.getMessage('flags.sobject'),
|
|
60
|
+
aliases: ['sobjecttype'],
|
|
61
|
+
deprecateAliases: true,
|
|
62
|
+
}),
|
|
63
|
+
'record-id': sf_plugins_core_1.Flags.salesforceId({
|
|
64
|
+
char: 'i',
|
|
65
|
+
summary: messages.getMessage('flags.recordId'),
|
|
66
|
+
exactlyOne: ['where', 'record-id'],
|
|
67
|
+
aliases: ['sobjectid'],
|
|
68
|
+
deprecateAliases: true,
|
|
69
|
+
}),
|
|
70
|
+
where: sf_plugins_core_1.Flags.string({
|
|
71
|
+
char: 'w',
|
|
72
|
+
summary: messages.getMessage('flags.where'),
|
|
73
|
+
exactlyOne: ['where', 'record-id'],
|
|
74
|
+
}),
|
|
75
|
+
'use-tooling-api': sf_plugins_core_1.Flags.boolean({
|
|
76
|
+
char: 't',
|
|
77
|
+
summary: messages.getMessage('flags.useToolingApi'),
|
|
78
|
+
aliases: ['usetoolingapi'],
|
|
79
|
+
deprecateAliases: true,
|
|
80
|
+
}),
|
|
81
|
+
perflog: flags_1.perflogFlag,
|
|
82
|
+
};
|
|
83
|
+
//# sourceMappingURL=record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../../../src/commands/data/delete/record.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2020, salesforce.com, inc.
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
* Licensed under the BSD 3-Clause license.
|
|
6
|
+
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const core_1 = require("@salesforce/core");
|
|
10
|
+
const sf_plugins_core_1 = require("@salesforce/sf-plugins-core");
|
|
11
|
+
const flags_1 = require("../../../flags");
|
|
12
|
+
const exportApi_1 = require("../../../api/data/tree/exportApi");
|
|
13
|
+
core_1.Messages.importMessagesDirectory(__dirname);
|
|
14
|
+
const messages = core_1.Messages.loadMessages('@salesforce/plugin-data', 'tree.export');
|
|
15
|
+
class Export extends sf_plugins_core_1.SfCommand {
|
|
16
|
+
async run() {
|
|
17
|
+
const { flags } = await this.parse(Export);
|
|
18
|
+
const ux = new sf_plugins_core_1.Ux({ jsonEnabled: this.jsonEnabled() });
|
|
19
|
+
const exportApi = new exportApi_1.ExportApi(flags['target-org'], ux);
|
|
20
|
+
const exportConfig = {
|
|
21
|
+
outputDir: flags['output-dir'],
|
|
22
|
+
plan: flags.plan,
|
|
23
|
+
prefix: flags.prefix,
|
|
24
|
+
query: flags.query,
|
|
25
|
+
};
|
|
26
|
+
return exportApi.export(exportConfig);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.default = Export;
|
|
30
|
+
Export.summary = messages.getMessage('summary');
|
|
31
|
+
Export.description = messages.getMessage('description');
|
|
32
|
+
Export.examples = messages.getMessages('examples');
|
|
33
|
+
Export.aliases = ['force:data:tree:export'];
|
|
34
|
+
Export.deprecateAliases = true;
|
|
35
|
+
Export.flags = {
|
|
36
|
+
...flags_1.orgFlags,
|
|
37
|
+
query: sf_plugins_core_1.Flags.string({
|
|
38
|
+
char: 'q',
|
|
39
|
+
summary: messages.getMessage('flags.query'),
|
|
40
|
+
required: true,
|
|
41
|
+
}),
|
|
42
|
+
plan: sf_plugins_core_1.Flags.boolean({
|
|
43
|
+
char: 'p',
|
|
44
|
+
summary: messages.getMessage('flags.plan'),
|
|
45
|
+
}),
|
|
46
|
+
prefix: sf_plugins_core_1.Flags.string({
|
|
47
|
+
char: 'x',
|
|
48
|
+
summary: messages.getMessage('flags.prefix'),
|
|
49
|
+
}),
|
|
50
|
+
'output-dir': sf_plugins_core_1.Flags.directory({
|
|
51
|
+
char: 'd',
|
|
52
|
+
summary: messages.getMessage('flags.outputdir'),
|
|
53
|
+
aliases: ['outputdir'],
|
|
54
|
+
deprecateAliases: true,
|
|
55
|
+
}),
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../../../src/commands/data/export/tree.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAEH,2CAA4C;AAC5C,iEAAmE;AACnE,0CAA0C;AAC1C,gEAA2E;AAG3E,eAAQ,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAC5C,MAAM,QAAQ,GAAG,eAAQ,CAAC,YAAY,CAAC,yBAAyB,EAAE,aAAa,CAAC,CAAC;AAEjF,MAAqB,MAAO,SAAQ,2BAAmD;IA8B9E,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,EAAE,GAAG,IAAI,oBAAE,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,IAAI,qBAAS,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC;QACzD,MAAM,YAAY,GAAiB;YACjC,SAAS,EAAE,KAAK,CAAC,YAAY,CAAC;YAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;SACnB,CAAC;QACF,OAAO,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;;AAzCH,yBA0CC;AAzCwB,cAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACzC,kBAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACjD,eAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AACrD,cAAO,GAAG,CAAC,wBAAwB,CAAC,CAAC;AAC5B,uBAAgB,GAAG,IAAI,CAAC;AAExB,YAAK,GAAG;IAC7B,GAAG,gBAAQ;IACX,KAAK,EAAE,uBAAK,CAAC,MAAM,CAAC;QAClB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC;QAC3C,QAAQ,EAAE,IAAI;KACf,CAAC;IACF,IAAI,EAAE,uBAAK,CAAC,OAAO,CAAC;QAClB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC;KAC3C,CAAC;IACF,MAAM,EAAE,uBAAK,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC;KAC7C,CAAC;IACF,YAAY,EAAE,uBAAK,CAAC,SAAS,CAAC;QAC5B,IAAI,EAAE,GAAG;QACT,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAC/C,OAAO,EAAE,CAAC,WAAW,CAAC;QACtB,gBAAgB,EAAE,IAAI;KACvB,CAAC;CACH,CAAC"}
|