@salesforce/plugin-data 3.1.11 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +3 -903
  2. package/lib/BulkBaseCommand.js +68 -94
  3. package/lib/BulkBaseCommand.js.map +1 -1
  4. package/lib/api/data/tree/exportApi.js +0 -1
  5. package/lib/api/data/tree/exportApi.js.map +1 -1
  6. package/lib/api/data/tree/importApi.js +2 -13
  7. package/lib/api/data/tree/importApi.js.map +1 -1
  8. package/lib/api/data/tree/importPlan.js.map +1 -1
  9. package/lib/batcher.js +3 -26
  10. package/lib/batcher.js.map +1 -1
  11. package/lib/bulkOperationCommand.js +125 -118
  12. package/lib/bulkOperationCommand.js.map +1 -1
  13. package/lib/bulkUtils.js +13 -24
  14. package/lib/bulkUtils.js.map +1 -1
  15. package/lib/commands/data/create/record.js.map +1 -1
  16. package/lib/commands/data/delete/bulk.js +14 -11
  17. package/lib/commands/data/delete/bulk.js.map +1 -1
  18. package/lib/commands/data/delete/record.js.map +1 -1
  19. package/lib/commands/data/delete/resume.js +1 -4
  20. package/lib/commands/data/delete/resume.js.map +1 -1
  21. package/lib/commands/data/get/record.js.map +1 -1
  22. package/lib/commands/data/import/tree.js +1 -1
  23. package/lib/commands/data/import/tree.js.map +1 -1
  24. package/lib/commands/data/query/resume.js +21 -10
  25. package/lib/commands/data/query/resume.js.map +1 -1
  26. package/lib/commands/data/query.js +38 -12
  27. package/lib/commands/data/query.js.map +1 -1
  28. package/lib/commands/data/resume.js +9 -15
  29. package/lib/commands/data/resume.js.map +1 -1
  30. package/lib/commands/data/update/record.js.map +1 -1
  31. package/lib/commands/data/upsert/bulk.js +16 -13
  32. package/lib/commands/data/upsert/bulk.js.map +1 -1
  33. package/lib/commands/data/upsert/resume.js +1 -4
  34. package/lib/commands/data/upsert/resume.js.map +1 -1
  35. package/lib/commands/force/data/bulk/delete.js +5 -4
  36. package/lib/commands/force/data/bulk/delete.js.map +1 -1
  37. package/lib/commands/force/data/bulk/status.js +1 -1
  38. package/lib/commands/force/data/bulk/status.js.map +1 -1
  39. package/lib/commands/force/data/bulk/upsert.js +6 -6
  40. package/lib/commands/force/data/bulk/upsert.js.map +1 -1
  41. package/lib/dataCommand.js.map +1 -1
  42. package/lib/dataSoqlQueryTypes.js.map +1 -1
  43. package/lib/export.js +1 -1
  44. package/lib/export.js.map +1 -1
  45. package/lib/flags.js +4 -3
  46. package/lib/flags.js.map +1 -1
  47. package/lib/queryUtils.js +3 -1
  48. package/lib/queryUtils.js.map +1 -1
  49. package/lib/reporters/csvReporter.js +78 -0
  50. package/lib/reporters/csvReporter.js.map +1 -0
  51. package/lib/reporters/humanReporter.js +120 -0
  52. package/lib/reporters/humanReporter.js.map +1 -0
  53. package/lib/reporters/reporters.js +69 -0
  54. package/lib/reporters/reporters.js.map +1 -0
  55. package/lib/resumeBulkCommand.js +28 -14
  56. package/lib/resumeBulkCommand.js.map +1 -1
  57. package/messages/batcher.md +3 -3
  58. package/messages/bulk.base.command.md +4 -4
  59. package/messages/bulk.resume.command.md +0 -4
  60. package/messages/importApi.md +2 -2
  61. package/messages/reporter.md +1 -1
  62. package/messages/soql.query.md +0 -4
  63. package/npm-shrinkwrap.json +497 -961
  64. package/oclif.lock +1178 -1545
  65. package/oclif.manifest.json +165 -42
  66. package/package.json +8 -10
  67. package/lib/reporters.js +0 -335
  68. package/lib/reporters.js.map +0 -1
package/lib/reporters.js DELETED
@@ -1,335 +0,0 @@
1
- /*
2
- * Copyright (c) 2020, salesforce.com, inc.
3
- * All rights reserved.
4
- * Licensed under the BSD 3-Clause license.
5
- * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
6
- */
7
- import { EOL } from 'node:os';
8
- import { Logger, Messages } from '@salesforce/core';
9
- import { ux } from '@oclif/core';
10
- import chalk from 'chalk';
11
- import { get, getArray, getNumber, isString } from '@salesforce/ts-types';
12
- import { capitalCase } from 'change-case';
13
- import { FieldType } from './dataSoqlQueryTypes.js';
14
- Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
15
- const messages = Messages.loadMessages('@salesforce/plugin-data', 'soql.query');
16
- const reporterMessages = Messages.loadMessages('@salesforce/plugin-data', 'reporter');
17
- class Reporter {
18
- logger;
19
- constructor() {
20
- this.logger = Logger.childFromRoot('reporter');
21
- }
22
- }
23
- class QueryReporter extends Reporter {
24
- columns = [];
25
- data;
26
- constructor(data, columns) {
27
- super();
28
- this.columns = columns;
29
- this.data = data;
30
- }
31
- }
32
- export class HumanReporter extends QueryReporter {
33
- constructor(data, columns) {
34
- super(data, columns);
35
- }
36
- display() {
37
- const { attributeNames, children, aggregates } = this.parseFields();
38
- // in case of count() there are no records, but there is a totalSize
39
- const totalCount = this.data.result.records.length ? this.data.result.records.length : this.data.result.totalSize;
40
- this.soqlQuery(attributeNames, this.massageRows(this.data.result.records, children, aggregates), totalCount);
41
- }
42
- parseFields() {
43
- const fields = this.columns;
44
- // Field names
45
- const attributeNames = [];
46
- // For subqueries. Display the children under the parents
47
- const children = [];
48
- // For function fields, like avg(total).
49
- const aggregates = [];
50
- if (fields) {
51
- this.logger.info(`Found fields ${JSON.stringify(fields.map((field) => `${typeof field}.${field.name}`))}`);
52
- fields.forEach((field) => {
53
- if (field.fieldType === FieldType.subqueryField) {
54
- children.push(field.name);
55
- (field.fields ?? []).forEach((subfield) => attributeNames.push(`${field.name}.${subfield.name}`));
56
- }
57
- else if (field.fieldType === FieldType.functionField) {
58
- if (field.alias) {
59
- attributeNames.push(field.alias);
60
- }
61
- else {
62
- attributeNames.push(field.name);
63
- }
64
- aggregates.push(field);
65
- }
66
- else {
67
- attributeNames.push(field.name);
68
- }
69
- });
70
- }
71
- else {
72
- this.logger.info(`No fields found for query "${this.data.query}"`);
73
- }
74
- return { attributeNames, children, aggregates };
75
- }
76
- soqlQuery(columns, records, totalCount) {
77
- this.prepNullValues(records);
78
- ux.table(records, prepColumns(columns));
79
- ux.log(chalk.bold(messages.getMessage('displayQueryRecordsRetrieved', [totalCount])));
80
- }
81
- prepNullValues(records) {
82
- records
83
- .filter((record) => record)
84
- .forEach((record) => {
85
- if (record) {
86
- const recordAsObject = record;
87
- Reflect.ownKeys(recordAsObject).forEach((propertyKey) => {
88
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
89
- const value = Reflect.get(recordAsObject, propertyKey);
90
- if (value === null) {
91
- Reflect.set(recordAsObject, propertyKey, chalk.bold('null'));
92
- }
93
- else if (typeof value === 'object') {
94
- this.prepNullValues([value]);
95
- }
96
- });
97
- }
98
- });
99
- }
100
- // public massageRows(queryResults: BasicRecord[], children: string[], aggregates: Field[]): BasicRecord[] {
101
- massageRows(queryResults, children, aggregates) {
102
- // some fields will return a JSON object that isn't accessible via the query (SELECT Metadata FROM RemoteProxy)
103
- // some will return a JSON that IS accessible via the query (SELECT owner.Profile.Name FROM Lead)
104
- // querying (SELECT Metadata.isActive FROM RemoteProxy) throws a SOQL validation error, so we have to display the entire Metadata object
105
- queryResults.forEach((qr) => {
106
- const result = qr;
107
- this.data.columns.forEach((col) => {
108
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
109
- const entry = Reflect.get(result, col.name);
110
- if (typeof entry === 'object' && col.fieldType === FieldType.field) {
111
- Reflect.set(result, col.name, JSON.stringify(entry, null, 2));
112
- }
113
- else if (typeof entry === 'object' && col.fields?.length && entry) {
114
- col.fields.forEach((field) => {
115
- Reflect.set(result, `${col.name}.${field.name}`, get(result, `${col.name}.records[0].${field.name}`));
116
- });
117
- }
118
- });
119
- });
120
- // There are subqueries or aggregates. Massage the data.
121
- if (children.length > 0 || aggregates.length > 0) {
122
- const qr = queryResults.reduce((newResults, result) => {
123
- // Aggregates are soql functions that aggregate data, like "SELECT avg(total)" and
124
- // are returned in the data as exprX. Aggregates can have aliases, like "avg(total) totalAverage"
125
- // and are returned in the data as the alias.
126
- if (aggregates.length > 0) {
127
- for (let i = 0; i < aggregates.length; i++) {
128
- const aggregate = aggregates[i];
129
- if (!aggregate.alias) {
130
- Reflect.set(result, aggregate.name, Reflect.get(result, `expr${i}`));
131
- }
132
- }
133
- }
134
- const subResults = [];
135
- if (children.length > 0) {
136
- const childrenRows = {};
137
- children.forEach((child) => {
138
- const aChild = get(result, child);
139
- Reflect.set(childrenRows, child, aChild);
140
- Reflect.deleteProperty(result, child);
141
- });
142
- Reflect.ownKeys(childrenRows).forEach((child) => {
143
- const childO = get(childrenRows, child);
144
- if (childO) {
145
- const childRecords = getArray(childO, 'records', []);
146
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
147
- childRecords.forEach((record, index) => {
148
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
149
- const newResult = {};
150
- Object.entries(record).forEach(([key, value]) => {
151
- if (!index) {
152
- Reflect.defineProperty(result, `${child.toString()}.${key}`, {
153
- value: value ?? chalk.bold('null'),
154
- });
155
- }
156
- else {
157
- Reflect.defineProperty(newResult, `${child.toString()}.${key}`, {
158
- value: value ?? chalk.bold('null'),
159
- });
160
- }
161
- });
162
- if (index) {
163
- subResults.push(newResult);
164
- }
165
- });
166
- }
167
- });
168
- }
169
- newResults.push(result, ...subResults);
170
- return newResults;
171
- }, []);
172
- return qr;
173
- }
174
- return queryResults;
175
- }
176
- }
177
- const SEPARATOR = ',';
178
- const DOUBLE_QUOTE = '"';
179
- const SHOULD_QUOTE_REGEXP = new RegExp(`[${SEPARATOR}${DOUBLE_QUOTE}${EOL}]`);
180
- export class CsvReporter extends QueryReporter {
181
- constructor(data, columns) {
182
- super(data, columns);
183
- }
184
- display() {
185
- const attributeNames = this.massageRows();
186
- // begin output
187
- ux.log(attributeNames.map((name) => escape(name)).join(SEPARATOR));
188
- // explained why we need this below - foreach does not allow types
189
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
190
- // @ts-ignore
191
- this.data.result.records.forEach((row) => {
192
- const values = attributeNames.map((name) => {
193
- // try get(row, name) first, then if it fails, default to row[name]. The default will happen in bulk cases.
194
- // the standard case returns {field:{nested: 'value'}}, while the bulk will return {field.nested: 'value'}
195
- const value = get(row, name, row[name]);
196
- if (isString(value)) {
197
- return escape(value);
198
- // if value is null, then typeof value === 'object' so check before typeof to avoid illegal csv
199
- }
200
- else if (value === null) {
201
- return;
202
- }
203
- else if (typeof value === 'object') {
204
- return escape(JSON.stringify(value));
205
- }
206
- return value;
207
- });
208
- ux.log(values.join(SEPARATOR));
209
- });
210
- }
211
- massageRows() {
212
- const fields = this.columns;
213
- const hasSubqueries = fields.some((field) => field.fieldType === FieldType.subqueryField);
214
- const hasFunctions = fields.some((field) => field.fieldType === FieldType.functionField);
215
- const attributeNames = [];
216
- if (fields) {
217
- this.logger.info(`Found fields ${JSON.stringify(fields.map((field) => `${typeof field}.${field.name}`))}`);
218
- }
219
- else {
220
- this.logger.info(`No fields found for query "${this.data.query}"`);
221
- }
222
- if (hasSubqueries || hasFunctions) {
223
- // If there are subqueries, we need to get the max child length for each subquery.
224
- const typeLengths = new Map();
225
- // For function fields, like avg(total).
226
- const aggregates = [];
227
- fields.forEach((field) => {
228
- if (field.fieldType === FieldType.subqueryField) {
229
- typeLengths.set(field.name, 0);
230
- }
231
- if (field.fieldType === FieldType.functionField) {
232
- aggregates.push(field);
233
- }
234
- });
235
- // Get max lengths by iterating over the records once
236
- this.data.result.records.forEach((result) => {
237
- [...typeLengths.keys()].forEach((key) => {
238
- const record = get(result, key);
239
- const totalSize = getNumber(record, 'totalSize');
240
- if (!!totalSize && totalSize > (typeLengths.get(key) ?? 0)) {
241
- typeLengths.set(key, totalSize);
242
- }
243
- });
244
- // Aggregates are soql functions that aggregate data, like "SELECT avg(total)" and
245
- // are returned in the data as exprX. Aggregates can have aliases, like "avg(total) totalAverage"
246
- // and are returned in the data as the alias.
247
- if (aggregates.length > 0) {
248
- for (let i = 0; i < aggregates.length; i++) {
249
- const aggregate = aggregates[i];
250
- if (!aggregate.alias) {
251
- Reflect.set(result, aggregate.name, Reflect.get(result, `expr${i}`));
252
- }
253
- }
254
- }
255
- });
256
- fields.forEach((field) => {
257
- if (typeLengths.get(field.name)) {
258
- for (let i = 0; i < (typeLengths.get(field.name) ?? 0); i++) {
259
- attributeNames.push(`${field.name}.totalSize`);
260
- (field.fields ?? []).forEach((subfield) => {
261
- attributeNames.push(`${field.name}.records.${i}.${subfield.name}`);
262
- });
263
- }
264
- }
265
- else if (field.fieldType === FieldType.functionField) {
266
- if (field.alias) {
267
- attributeNames.push(field.alias);
268
- }
269
- else {
270
- attributeNames.push(field.name);
271
- }
272
- }
273
- else {
274
- attributeNames.push(field.name);
275
- }
276
- });
277
- }
278
- else {
279
- attributeNames.push(...fields.map((field) => field.name));
280
- }
281
- return attributeNames;
282
- }
283
- }
284
- export class JsonReporter extends QueryReporter {
285
- constructor(data, columns) {
286
- super(data, columns);
287
- }
288
- // eslint-disable-next-line class-methods-use-this
289
- log() {
290
- return;
291
- }
292
- display() {
293
- ux.styledJSON({ status: 0, result: this.data.result });
294
- }
295
- }
296
- const prepColumns = (columns) => {
297
- const formattedColumns = {};
298
- columns
299
- .map((field) => field)
300
- .filter(isString)
301
- .map((field) => (formattedColumns[field] = {
302
- header: field.toUpperCase(),
303
- get: (row) => {
304
- // first test if key exists, if so, return value
305
- if (Reflect.has(row, field)) {
306
- return Reflect.get(row, field) ?? '';
307
- }
308
- else {
309
- // if not, try to find it query
310
- return get(row, field) ?? '';
311
- }
312
- },
313
- }));
314
- return formattedColumns;
315
- };
316
- /**
317
- * Escape a value to be placed in a CSV row. We follow rfc 4180
318
- * https://tools.ietf.org/html/rfc4180#section-2 and will not surround the
319
- * value in quotes if it doesn't contain the separator, double quote, or EOL.
320
- *
321
- * @param value The escaped value
322
- */
323
- export const escape = (value) => {
324
- if (value && SHOULD_QUOTE_REGEXP.test(value)) {
325
- return `"${value.replace(/"/gi, '""')}"`;
326
- }
327
- return value;
328
- };
329
- export const getResultMessage = (jobInfo) => reporterMessages.getMessage('bulkV2Result', [
330
- jobInfo.id,
331
- capitalCase(jobInfo.state),
332
- jobInfo.numberRecordsProcessed,
333
- jobInfo.numberRecordsFailed,
334
- ]);
335
- //# sourceMappingURL=reporters.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reporters.js","sourceRoot":"","sources":["../src/reporters.ts"],"names":[],"mappings":"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"}