@kitalive/sfdx-plugin 1.0.2 → 1.0.4
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 +48 -27
- package/lib/bulk.js +220 -0
- package/lib/bulk.js.map +1 -0
- package/lib/commands/kit/data/bulk/delete.js +113 -0
- package/lib/commands/kit/data/bulk/delete.js.map +1 -0
- package/lib/commands/kit/data/bulk/insert.js +7 -0
- package/lib/commands/kit/data/bulk/insert.js.map +1 -0
- package/lib/commands/kit/data/bulk/query.js +166 -0
- package/lib/commands/kit/data/bulk/query.js.map +1 -0
- package/lib/commands/kit/data/bulk/update.js +7 -0
- package/lib/commands/kit/data/bulk/update.js.map +1 -0
- package/lib/commands/kit/data/bulk/upsert.js +22 -0
- package/lib/commands/kit/data/bulk/upsert.js.map +1 -0
- package/lib/commands/kit/data/csv/convert.js +160 -0
- package/lib/commands/kit/data/csv/convert.js.map +1 -0
- package/lib/commands/kit/graphql/editor.js +37 -0
- package/lib/commands/kit/graphql/editor.js.map +1 -0
- package/lib/commands/kit/layout/assignments/deploy.js +35 -0
- package/lib/commands/kit/layout/assignments/deploy.js.map +1 -0
- package/lib/commands/kit/layout/assignments/retrieve.js +124 -0
- package/lib/commands/kit/layout/assignments/retrieve.js.map +1 -0
- package/lib/commands/kit/metadata/dependencies.js +182 -0
- package/lib/commands/kit/metadata/dependencies.js.map +1 -0
- package/lib/commands/kit/object/fields/describe.js +84 -0
- package/lib/commands/kit/object/fields/describe.js.map +1 -0
- package/lib/commands/kit/object/fields/setup.js +261 -0
- package/lib/commands/kit/object/fields/setup.js.map +1 -0
- package/lib/commands/kit/script/execute.js +72 -0
- package/lib/commands/kit/script/execute.js.map +1 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -0
- package/lib/metadata.js +82 -0
- package/lib/metadata.js.map +1 -0
- package/lib/server.js +43 -0
- package/lib/server.js.map +1 -0
- package/lib/types.js +2 -0
- package/lib/types.js.map +1 -0
- package/lib/utils.js +94 -0
- package/lib/utils.js.map +1 -0
- package/messages/data.bulk.delete.md +8 -0
- package/messages/data.bulk.query.md +32 -0
- package/oclif.lock +1 -11
- package/oclif.manifest.json +1875 -2
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ $ npm install -g @kitalive/sfdx-plugin
|
|
|
17
17
|
$ sf COMMAND
|
|
18
18
|
running command...
|
|
19
19
|
$ sf (--version)
|
|
20
|
-
@kitalive/sfdx-plugin/1.0.
|
|
20
|
+
@kitalive/sfdx-plugin/1.0.4 darwin-arm64 node-v22.17.1
|
|
21
21
|
$ sf --help [COMMAND]
|
|
22
22
|
USAGE
|
|
23
23
|
$ sf COMMAND
|
|
@@ -49,13 +49,13 @@ Bulk delete records by SOQL select query.
|
|
|
49
49
|
|
|
50
50
|
```
|
|
51
51
|
USAGE
|
|
52
|
-
$ sf kit data bulk delete -
|
|
53
|
-
Serial|Parallel] [-s <value>] [-w <value>] [--api-version <value>]
|
|
52
|
+
$ sf kit data bulk delete -o <value> [--json] [--flags-dir <value>] [-q <value>] [--query-file <value>] [--hard]
|
|
53
|
+
[--concurrency-mode Serial|Parallel] [-s <value>] [-w <value>] [--api-version <value>]
|
|
54
54
|
|
|
55
55
|
FLAGS
|
|
56
56
|
-o, --target-org=<value> (required) Username or alias of the target org. Not required if the `target-org`
|
|
57
57
|
configuration variable is already set.
|
|
58
|
-
-q, --query=<value>
|
|
58
|
+
-q, --query=<value> SOQL query to delete
|
|
59
59
|
-s, --batch-size=<value> [default: 10000] The batch size of the job
|
|
60
60
|
-w, --wait=<value> The number of minutes to wait for the command to complete before displaying the
|
|
61
61
|
results
|
|
@@ -63,6 +63,7 @@ FLAGS
|
|
|
63
63
|
--concurrency-mode=<option> [default: Parallel] The concurrency mode (Parallel or Serial) for the job
|
|
64
64
|
<options: Serial|Parallel>
|
|
65
65
|
--hard Perform a hard delete
|
|
66
|
+
--query-file=<value> SOQL query file to delete
|
|
66
67
|
|
|
67
68
|
GLOBAL FLAGS
|
|
68
69
|
--flags-dir=<value> Import flag values from a directory.
|
|
@@ -72,9 +73,13 @@ EXAMPLES
|
|
|
72
73
|
Delete Opportunity records with CloseDate older than 2 years:
|
|
73
74
|
|
|
74
75
|
$ sf kit data bulk delete -q "SELECT Id FROM Opportunity WHERE CloseDate < LAST_N_YEARS:2"
|
|
76
|
+
|
|
77
|
+
Delete Opportunity records by SOQL file:
|
|
78
|
+
|
|
79
|
+
$ sf kit data bulk delete --query-file ./path/to/Opportunity.soql
|
|
75
80
|
```
|
|
76
81
|
|
|
77
|
-
_See code: [src/commands/kit/data/bulk/delete.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
82
|
+
_See code: [src/commands/kit/data/bulk/delete.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/data/bulk/delete.ts)_
|
|
78
83
|
|
|
79
84
|
## `sf kit data bulk insert`
|
|
80
85
|
|
|
@@ -125,7 +130,7 @@ EXAMPLES
|
|
|
125
130
|
$ sf kit data bulk insert -o MyObject__c -f ./path/to/MyObject__c.csv -c ./path/to/convert.js -w 10
|
|
126
131
|
```
|
|
127
132
|
|
|
128
|
-
_See code: [src/commands/kit/data/bulk/insert.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
133
|
+
_See code: [src/commands/kit/data/bulk/insert.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/data/bulk/insert.ts)_
|
|
129
134
|
|
|
130
135
|
## `sf kit data bulk query`
|
|
131
136
|
|
|
@@ -133,18 +138,21 @@ Bulk query records.
|
|
|
133
138
|
|
|
134
139
|
```
|
|
135
140
|
USAGE
|
|
136
|
-
$ sf kit data bulk query -
|
|
137
|
-
[--api-version <value>]
|
|
141
|
+
$ sf kit data bulk query -o <value> [--json] [--flags-dir <value>] [-q <value>] [--query-file <value>] [-f <value>]
|
|
142
|
+
[--object-field-label] [--field-label-mapping <value>] [--all] [-w <value>] [--api-version <value>]
|
|
138
143
|
|
|
139
144
|
FLAGS
|
|
140
|
-
-f, --csv-file=<value>
|
|
141
|
-
-o, --target-org=<value>
|
|
142
|
-
|
|
143
|
-
-q, --query=<value>
|
|
144
|
-
-w, --wait=<value>
|
|
145
|
-
|
|
146
|
-
--all
|
|
147
|
-
--api-version=<value>
|
|
145
|
+
-f, --csv-file=<value> [default: standard output] Output csv file
|
|
146
|
+
-o, --target-org=<value> (required) Username or alias of the target org. Not required if the `target-org`
|
|
147
|
+
configuration variable is already set.
|
|
148
|
+
-q, --query=<value> SOQL query to export
|
|
149
|
+
-w, --wait=<value> [default: 5] The number of minutes to wait for the command to complete before
|
|
150
|
+
displaying the results
|
|
151
|
+
--all include deleted or archived records
|
|
152
|
+
--api-version=<value> Override the api version used for api requests made by this command
|
|
153
|
+
--field-label-mapping=<value> JSON file that maps field API names to output field names
|
|
154
|
+
--object-field-label Output field names with object field labels
|
|
155
|
+
--query-file=<value> SOQL query file to export
|
|
148
156
|
|
|
149
157
|
GLOBAL FLAGS
|
|
150
158
|
--flags-dir=<value> Import flag values from a directory.
|
|
@@ -154,9 +162,22 @@ EXAMPLES
|
|
|
154
162
|
Query Account records and save to specified path:
|
|
155
163
|
|
|
156
164
|
$ sf kit data bulk query -q "SELECT Id, Name FROM Account" -f ./path/to/Account.csv
|
|
165
|
+
|
|
166
|
+
Query Account records from SOQL file:
|
|
167
|
+
|
|
168
|
+
$ sf kit data bulk query --query-file ./path/to/Account.soql -f ./path/to/Account.csv
|
|
169
|
+
|
|
170
|
+
Query Account records with object field labels:
|
|
171
|
+
|
|
172
|
+
$ sf kit data bulk query -q "SELECT Id, Name FROM Account" --object-field-label
|
|
173
|
+
|
|
174
|
+
Query Account records with custom field label mapping:
|
|
175
|
+
|
|
176
|
+
$ sf kit data bulk query -q "SELECT Id, Name FROM Account" --field-label-mapping \
|
|
177
|
+
./path/to/field-label-mapping.json
|
|
157
178
|
```
|
|
158
179
|
|
|
159
|
-
_See code: [src/commands/kit/data/bulk/query.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
180
|
+
_See code: [src/commands/kit/data/bulk/query.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/data/bulk/query.ts)_
|
|
160
181
|
|
|
161
182
|
## `sf kit data bulk update`
|
|
162
183
|
|
|
@@ -207,7 +228,7 @@ EXAMPLES
|
|
|
207
228
|
$ sf kit data bulk update -o MyObject__c -f ./path/to/MyObject__c.csv -c ./path/to/convert.js -w 10
|
|
208
229
|
```
|
|
209
230
|
|
|
210
|
-
_See code: [src/commands/kit/data/bulk/update.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
231
|
+
_See code: [src/commands/kit/data/bulk/update.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/data/bulk/update.ts)_
|
|
211
232
|
|
|
212
233
|
## `sf kit data bulk upsert`
|
|
213
234
|
|
|
@@ -260,7 +281,7 @@ EXAMPLES
|
|
|
260
281
|
-w 10
|
|
261
282
|
```
|
|
262
283
|
|
|
263
|
-
_See code: [src/commands/kit/data/bulk/upsert.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
284
|
+
_See code: [src/commands/kit/data/bulk/upsert.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/data/bulk/upsert.ts)_
|
|
264
285
|
|
|
265
286
|
## `sf kit data csv convert`
|
|
266
287
|
|
|
@@ -298,7 +319,7 @@ EXAMPLES
|
|
|
298
319
|
$ sf kit data csv convert -i ./path/to/input.csv -f ./path/to/output.csv -c ./path/to/convert.js
|
|
299
320
|
```
|
|
300
321
|
|
|
301
|
-
_See code: [src/commands/kit/data/csv/convert.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
322
|
+
_See code: [src/commands/kit/data/csv/convert.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/data/csv/convert.ts)_
|
|
302
323
|
|
|
303
324
|
## `sf kit graphql editor`
|
|
304
325
|
|
|
@@ -332,7 +353,7 @@ EXAMPLES
|
|
|
332
353
|
$ sf kit graphql editor --port 8080
|
|
333
354
|
```
|
|
334
355
|
|
|
335
|
-
_See code: [src/commands/kit/graphql/editor.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
356
|
+
_See code: [src/commands/kit/graphql/editor.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/graphql/editor.ts)_
|
|
336
357
|
|
|
337
358
|
## `sf kit layout assignments deploy`
|
|
338
359
|
|
|
@@ -367,7 +388,7 @@ EXAMPLES
|
|
|
367
388
|
$ sf kit layout assignments deploy -o me@my.org -f config/layout-assignments.sandbox.json
|
|
368
389
|
```
|
|
369
390
|
|
|
370
|
-
_See code: [src/commands/kit/layout/assignments/deploy.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
391
|
+
_See code: [src/commands/kit/layout/assignments/deploy.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/layout/assignments/deploy.ts)_
|
|
371
392
|
|
|
372
393
|
## `sf kit layout assignments retrieve`
|
|
373
394
|
|
|
@@ -406,7 +427,7 @@ EXAMPLES
|
|
|
406
427
|
$ sf kit layout assignments retrieve -o me@my.org -f config/layout-assignments.sandbox.json
|
|
407
428
|
```
|
|
408
429
|
|
|
409
|
-
_See code: [src/commands/kit/layout/assignments/retrieve.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
430
|
+
_See code: [src/commands/kit/layout/assignments/retrieve.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/layout/assignments/retrieve.ts)_
|
|
410
431
|
|
|
411
432
|
## `sf kit metadata dependencies`
|
|
412
433
|
|
|
@@ -433,7 +454,7 @@ EXAMPLES
|
|
|
433
454
|
$ sf kit metadata dependencies
|
|
434
455
|
```
|
|
435
456
|
|
|
436
|
-
_See code: [src/commands/kit/metadata/dependencies.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
457
|
+
_See code: [src/commands/kit/metadata/dependencies.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/metadata/dependencies.ts)_
|
|
437
458
|
|
|
438
459
|
## `sf kit object fields describe`
|
|
439
460
|
|
|
@@ -465,7 +486,7 @@ EXAMPLES
|
|
|
465
486
|
$ sf kit object fields describe -o me@my.org -s CustomObject__c --json
|
|
466
487
|
```
|
|
467
488
|
|
|
468
|
-
_See code: [src/commands/kit/object/fields/describe.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
489
|
+
_See code: [src/commands/kit/object/fields/describe.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/object/fields/describe.ts)_
|
|
469
490
|
|
|
470
491
|
## `sf kit object fields setup`
|
|
471
492
|
|
|
@@ -499,7 +520,7 @@ EXAMPLES
|
|
|
499
520
|
$ sf kit object fields setup -o me@my.org -s CustomObject__c -f path/to/custom_object_fields.csv --delete
|
|
500
521
|
```
|
|
501
522
|
|
|
502
|
-
_See code: [src/commands/kit/object/fields/setup.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
523
|
+
_See code: [src/commands/kit/object/fields/setup.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/object/fields/setup.ts)_
|
|
503
524
|
|
|
504
525
|
## `sf kit script`
|
|
505
526
|
|
|
@@ -593,5 +614,5 @@ EXAMPLES
|
|
|
593
614
|
> await conn.query('SELECT Id, Name FROM Account LIMIT 1')
|
|
594
615
|
```
|
|
595
616
|
|
|
596
|
-
_See code: [src/commands/kit/script/execute.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.
|
|
617
|
+
_See code: [src/commands/kit/script/execute.ts](https://github.com/Kitalive-Inc/sfdx-plugin/blob/v1.0.4/src/commands/kit/script/execute.ts)_
|
|
597
618
|
<!-- commandsstop -->
|
package/lib/bulk.js
ADDED
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { Messages } from '@salesforce/core';
|
|
4
|
+
import { Duration } from '@salesforce/kit';
|
|
5
|
+
import { Flags } from '@salesforce/sf-plugins-core';
|
|
6
|
+
import CsvConvertCommand, { CsvCommand, convertCsv, } from './commands/kit/data/csv/convert.js';
|
|
7
|
+
import * as utils from './utils.js';
|
|
8
|
+
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
9
|
+
export const messages = Messages.loadMessages('@kitalive/sfdx-plugin', 'data.bulk');
|
|
10
|
+
export async function bulkQuery(conn, query, options) {
|
|
11
|
+
const wait = options?.wait ?? 5;
|
|
12
|
+
conn.bulk2.pollTimeout = Duration.minutes(wait).milliseconds;
|
|
13
|
+
const result = await conn.bulk2.query(query, options?.all ? { scanAll: true } : {});
|
|
14
|
+
return result.toArray();
|
|
15
|
+
}
|
|
16
|
+
export function bulkLoad(conn, sobject, operation, rows, options) {
|
|
17
|
+
const { batchSize = 10000, wait, ...jobOptions } = options || {};
|
|
18
|
+
const job = conn.bulk.createJob(sobject, operation, jobOptions);
|
|
19
|
+
const fetchResults = async (records) => ({
|
|
20
|
+
job: await job.check(),
|
|
21
|
+
batches: await job.list(),
|
|
22
|
+
records,
|
|
23
|
+
});
|
|
24
|
+
const executeBatch = (batchRows) => new Promise((resolve, reject) => {
|
|
25
|
+
const batch = job.createBatch();
|
|
26
|
+
batch.on('error', (e) => {
|
|
27
|
+
if (e.message.startsWith('Polling time out'))
|
|
28
|
+
job.emit('error', e);
|
|
29
|
+
reject(e);
|
|
30
|
+
});
|
|
31
|
+
batch.on('queue', () => {
|
|
32
|
+
batch
|
|
33
|
+
.check()
|
|
34
|
+
.then((result) => {
|
|
35
|
+
if (result.state === 'Failed') {
|
|
36
|
+
reject(result.stateMessage);
|
|
37
|
+
}
|
|
38
|
+
else if (wait) {
|
|
39
|
+
batch.poll(5000, wait * 60000);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
fetchResults([]).then(resolve).catch(reject);
|
|
43
|
+
}
|
|
44
|
+
})
|
|
45
|
+
.catch(reject);
|
|
46
|
+
});
|
|
47
|
+
batch.on('response', resolve);
|
|
48
|
+
batch.execute(batchRows);
|
|
49
|
+
});
|
|
50
|
+
// eslint-disable-next-line no-async-promise-executor
|
|
51
|
+
return new Promise(async (resolve, reject) => {
|
|
52
|
+
job.on('error', reject);
|
|
53
|
+
try {
|
|
54
|
+
const results = await Promise.all(utils.chunk(rows, batchSize).map(executeBatch));
|
|
55
|
+
resolve(await fetchResults(results.flat()));
|
|
56
|
+
}
|
|
57
|
+
catch (e) {
|
|
58
|
+
reject(e);
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
await job.close();
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
const csvFlags = CsvConvertCommand.flags;
|
|
66
|
+
export function commonFlags(operation) {
|
|
67
|
+
return {
|
|
68
|
+
sobject: Flags.string({
|
|
69
|
+
char: 's',
|
|
70
|
+
required: true,
|
|
71
|
+
summary: messages.getMessage('flags.sobject.summary', [operation]),
|
|
72
|
+
}),
|
|
73
|
+
// csv settings
|
|
74
|
+
'csv-file': Flags.string({
|
|
75
|
+
char: 'f',
|
|
76
|
+
required: true,
|
|
77
|
+
summary: messages.getMessage('flags.csv-file.summary', [operation]),
|
|
78
|
+
aliases: ['csvfile'],
|
|
79
|
+
deprecateAliases: true,
|
|
80
|
+
}),
|
|
81
|
+
'result-file': Flags.string({
|
|
82
|
+
char: 'r',
|
|
83
|
+
summary: messages.getMessage('flags.result-file.summary', [operation]),
|
|
84
|
+
aliases: ['resultfile'],
|
|
85
|
+
deprecateAliases: true,
|
|
86
|
+
}),
|
|
87
|
+
encoding: csvFlags.encoding,
|
|
88
|
+
delimiter: csvFlags.delimiter,
|
|
89
|
+
quote: csvFlags.quote,
|
|
90
|
+
'skip-lines': csvFlags['skip-lines'],
|
|
91
|
+
trim: csvFlags.trim,
|
|
92
|
+
mapping: csvFlags.mapping,
|
|
93
|
+
converter: csvFlags.converter,
|
|
94
|
+
'set-null': Flags.boolean({
|
|
95
|
+
summary: messages.getMessage('flags.set-null.summary', [operation]),
|
|
96
|
+
aliases: ['setnull'],
|
|
97
|
+
deprecateAliases: true,
|
|
98
|
+
}),
|
|
99
|
+
'convert-only': Flags.boolean({
|
|
100
|
+
summary: messages.getMessage('flags.convert-only.summary', [operation]),
|
|
101
|
+
aliases: ['convertonly'],
|
|
102
|
+
deprecateAliases: true,
|
|
103
|
+
}),
|
|
104
|
+
// job settings
|
|
105
|
+
'concurrency-mode': Flags.string({
|
|
106
|
+
default: 'Parallel',
|
|
107
|
+
summary: messages.getMessage('flags.concurrency-mode.summary'),
|
|
108
|
+
options: ['Serial', 'Parallel'],
|
|
109
|
+
aliases: ['concurrencymode'],
|
|
110
|
+
deprecateAliases: true,
|
|
111
|
+
}),
|
|
112
|
+
'assignment-rule-id': Flags.string({
|
|
113
|
+
summary: messages.getMessage('flags.assignment-rule-id.summary'),
|
|
114
|
+
aliases: ['assignmentruleid'],
|
|
115
|
+
deprecateAliases: true,
|
|
116
|
+
}),
|
|
117
|
+
'batch-size': Flags.integer({
|
|
118
|
+
min: 1,
|
|
119
|
+
max: 10000,
|
|
120
|
+
default: 10000,
|
|
121
|
+
summary: messages.getMessage('flags.batch-size.summary'),
|
|
122
|
+
aliases: ['batchsize'],
|
|
123
|
+
deprecateAliases: true,
|
|
124
|
+
}),
|
|
125
|
+
wait: Flags.integer({
|
|
126
|
+
char: 'w',
|
|
127
|
+
min: 0,
|
|
128
|
+
summary: messages.getMessage('flags.wait.summary'),
|
|
129
|
+
}),
|
|
130
|
+
'target-org': Flags.requiredOrg(),
|
|
131
|
+
'api-version': Flags.orgApiVersion(),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
export class BulkCommand extends CsvCommand {
|
|
135
|
+
static description = messages.getMessage('description');
|
|
136
|
+
static requiresProject = false;
|
|
137
|
+
async run() {
|
|
138
|
+
const { flags } = await this.parse();
|
|
139
|
+
this.org = flags['target-org'];
|
|
140
|
+
const conn = this.org.getConnection(flags['api-version']);
|
|
141
|
+
this.conn = conn;
|
|
142
|
+
const { sobject, 'csv-file': csvfile } = flags;
|
|
143
|
+
const fieldTypes = await this.getFieldTypes(conn, sobject);
|
|
144
|
+
this.spinner.start('Processing csv');
|
|
145
|
+
try {
|
|
146
|
+
let rows = await convertCsv(this, {
|
|
147
|
+
input: csvfile,
|
|
148
|
+
encoding: flags.encoding,
|
|
149
|
+
delimiter: flags.delimiter,
|
|
150
|
+
quote: flags.quote,
|
|
151
|
+
skiplines: flags['skip-lines'],
|
|
152
|
+
trim: flags.trim,
|
|
153
|
+
setnull: flags['set-null'],
|
|
154
|
+
mapping: flags.mapping,
|
|
155
|
+
converter: flags.converter,
|
|
156
|
+
fieldTypes,
|
|
157
|
+
});
|
|
158
|
+
this.spinner.stop();
|
|
159
|
+
if (flags['convert-only']) {
|
|
160
|
+
const base = path.basename(csvfile, path.extname(csvfile));
|
|
161
|
+
await this.saveCsv(path.join(path.dirname(csvfile), base + '.converted.csv'), rows);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
this.spinner.start(`Bulk ${this.operation}`);
|
|
165
|
+
const result = await this.bulkLoad(conn, sobject, this.operation, rows, {
|
|
166
|
+
extIdField: flags['external-id'],
|
|
167
|
+
concurrencyMode: flags['concurrency-mode'],
|
|
168
|
+
assignmentRuleId: flags['assignment-rule-id'],
|
|
169
|
+
batchSize: flags['batch-size'],
|
|
170
|
+
wait: flags.wait,
|
|
171
|
+
});
|
|
172
|
+
if (!result)
|
|
173
|
+
return;
|
|
174
|
+
const batchErrors = [];
|
|
175
|
+
if (flags.wait) {
|
|
176
|
+
const { numberRecordsProcessed, numberRecordsFailed } = result.job;
|
|
177
|
+
this.spinner.stop(`${numberRecordsProcessed} processed, ${numberRecordsFailed} failed.`);
|
|
178
|
+
rows = rows.map((data, i) => {
|
|
179
|
+
const { id, errors } = result.records[i] || {};
|
|
180
|
+
const message = errors?.join(', ');
|
|
181
|
+
if (message) {
|
|
182
|
+
batchErrors.push({ line: i + 2, message, data });
|
|
183
|
+
}
|
|
184
|
+
return { ...data, Id: id, Errors: message };
|
|
185
|
+
});
|
|
186
|
+
if (batchErrors.length) {
|
|
187
|
+
result.errors = batchErrors;
|
|
188
|
+
this.styledHeader('Error details');
|
|
189
|
+
this.table({
|
|
190
|
+
data: batchErrors,
|
|
191
|
+
columns: ['line', 'message'],
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
this.spinner.stop();
|
|
197
|
+
this.log(messages.getMessage('asyncJob', [
|
|
198
|
+
this.config.bin,
|
|
199
|
+
conn.getUsername(),
|
|
200
|
+
result.job?.id,
|
|
201
|
+
]));
|
|
202
|
+
}
|
|
203
|
+
if (flags['result-file'])
|
|
204
|
+
await this.saveCsv(flags['result-file'], rows);
|
|
205
|
+
return result;
|
|
206
|
+
}
|
|
207
|
+
catch (e) {
|
|
208
|
+
this.spinner.stop('error');
|
|
209
|
+
throw e;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
bulkLoad(conn, sobject, op, rows, options) {
|
|
213
|
+
return bulkLoad(conn, sobject, op, rows, options);
|
|
214
|
+
}
|
|
215
|
+
async getFieldTypes(conn, sobject) {
|
|
216
|
+
const objectInfo = await conn.describe(sobject);
|
|
217
|
+
return objectInfo.fields.reduce((info, { name, type }) => Object.assign(info, { [name]: type }), {});
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=bulk.js.map
|
package/lib/bulk.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk.js","sourceRoot":"","sources":["../src/bulk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import { Messages } from '@salesforce/core';
|
|
3
|
+
import { Flags, SfCommand } from '@salesforce/sf-plugins-core';
|
|
4
|
+
import { composeQuery, getField, parseQuery, } from '@jetstreamapp/soql-parser-js';
|
|
5
|
+
import { bulkLoad, bulkQuery, } from '../../../../bulk.js';
|
|
6
|
+
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
7
|
+
const bulkMessages = Messages.loadMessages('@kitalive/sfdx-plugin', 'data.bulk');
|
|
8
|
+
const messages = Messages.loadMessages('@kitalive/sfdx-plugin', 'data.bulk.delete');
|
|
9
|
+
export default class DeleteCommand extends SfCommand {
|
|
10
|
+
static summary = messages.getMessage('summary');
|
|
11
|
+
static examples = messages.getMessages('examples');
|
|
12
|
+
static flags = {
|
|
13
|
+
query: Flags.string({
|
|
14
|
+
char: 'q',
|
|
15
|
+
exactlyOne: ['query', 'query-file'],
|
|
16
|
+
summary: messages.getMessage('flags.query.summary'),
|
|
17
|
+
}),
|
|
18
|
+
'query-file': Flags.string({
|
|
19
|
+
exactlyOne: ['query', 'query-file'],
|
|
20
|
+
summary: messages.getMessage('flags.query-file.summary'),
|
|
21
|
+
}),
|
|
22
|
+
hard: Flags.boolean({
|
|
23
|
+
default: false,
|
|
24
|
+
summary: messages.getMessage('flags.hard.summary'),
|
|
25
|
+
}),
|
|
26
|
+
'concurrency-mode': Flags.string({
|
|
27
|
+
default: 'Parallel',
|
|
28
|
+
options: ['Serial', 'Parallel'],
|
|
29
|
+
summary: bulkMessages.getMessage('flags.concurrency-mode.summary'),
|
|
30
|
+
aliases: ['concurrencymode'],
|
|
31
|
+
deprecateAliases: true,
|
|
32
|
+
}),
|
|
33
|
+
'batch-size': Flags.integer({
|
|
34
|
+
char: 's',
|
|
35
|
+
min: 1,
|
|
36
|
+
max: 10_000,
|
|
37
|
+
default: 10_000,
|
|
38
|
+
summary: bulkMessages.getMessage('flags.batch-size.summary'),
|
|
39
|
+
aliases: ['batchsize'],
|
|
40
|
+
deprecateAliases: true,
|
|
41
|
+
}),
|
|
42
|
+
wait: Flags.integer({
|
|
43
|
+
char: 'w',
|
|
44
|
+
default: 0,
|
|
45
|
+
min: 0,
|
|
46
|
+
summary: bulkMessages.getMessage('flags.wait.summary'),
|
|
47
|
+
}),
|
|
48
|
+
'target-org': Flags.requiredOrg(),
|
|
49
|
+
'api-version': Flags.orgApiVersion(),
|
|
50
|
+
};
|
|
51
|
+
async run() {
|
|
52
|
+
const { flags } = await this.parse();
|
|
53
|
+
const org = flags['target-org'];
|
|
54
|
+
const conn = org.getConnection(flags['api-version']);
|
|
55
|
+
const query = parseQuery(this.getQuery(flags.query, flags['query-file']));
|
|
56
|
+
query.fields = [getField('Id')];
|
|
57
|
+
const soql = composeQuery(query);
|
|
58
|
+
this.spinner.start(flags.hard ? 'Bulk hard delete' : 'Bulk delete');
|
|
59
|
+
try {
|
|
60
|
+
const rows = await this.bulkQuery(conn, soql);
|
|
61
|
+
if (!rows.length) {
|
|
62
|
+
this.spinner.stop('no records');
|
|
63
|
+
return { records: [] };
|
|
64
|
+
}
|
|
65
|
+
const operation = flags.hard ? 'hardDelete' : 'delete';
|
|
66
|
+
const result = await this.bulkLoad(conn, query.sObject, operation, rows, {
|
|
67
|
+
concurrencyMode: flags['concurrency-mode'],
|
|
68
|
+
batchSize: flags['batch-size'],
|
|
69
|
+
wait: flags.wait,
|
|
70
|
+
});
|
|
71
|
+
if (!result)
|
|
72
|
+
return;
|
|
73
|
+
if (flags.wait) {
|
|
74
|
+
const numberRecordsProcessed = Number(result.job?.numberRecordsProcessed);
|
|
75
|
+
const numberRecordsFailed = Number(result.job?.numberRecordsFailed);
|
|
76
|
+
const errors = result.records
|
|
77
|
+
.filter((r) => !r.success)
|
|
78
|
+
.map((r) => ({ id: r.id, errors: r.errors.join(', ') }));
|
|
79
|
+
this.spinner.stop(`${numberRecordsProcessed} processed, ${numberRecordsFailed} failed.`);
|
|
80
|
+
if (errors.length) {
|
|
81
|
+
this.styledHeader('Error details');
|
|
82
|
+
this.table({
|
|
83
|
+
data: errors,
|
|
84
|
+
columns: ['id', 'errors'],
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
this.spinner.stop();
|
|
90
|
+
this.log(bulkMessages.getMessage('asyncJob', [
|
|
91
|
+
this.config.bin,
|
|
92
|
+
org.getUsername(),
|
|
93
|
+
result.job?.id,
|
|
94
|
+
]));
|
|
95
|
+
}
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
catch (e) {
|
|
99
|
+
this.spinner.stop('error');
|
|
100
|
+
throw e;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
bulkQuery(conn, query) {
|
|
104
|
+
return bulkQuery(conn, query);
|
|
105
|
+
}
|
|
106
|
+
getQuery(query, queryFile) {
|
|
107
|
+
return query ?? fs.readFileSync(queryFile).toString('utf8');
|
|
108
|
+
}
|
|
109
|
+
bulkLoad(conn, sobject, operation, rows, options) {
|
|
110
|
+
return bulkLoad(conn, sobject, operation, rows, options);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../../../src/commands/kit/data/bulk/delete.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BulkCommand, messages, commonFlags } from '../../../../bulk.js';
|
|
2
|
+
export default class InsertCommand extends BulkCommand {
|
|
3
|
+
static examples = messages.getMessages('examples', ['Insert']);
|
|
4
|
+
static flags = commonFlags('insert');
|
|
5
|
+
operation = 'insert';
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=insert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"insert.js","sourceRoot":"","sources":["../../../../../src/commands/kit/data/bulk/insert.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW;IAC7C,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE/D,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAElC,SAAS,GAAoB,QAAQ,CAAC"}
|