sf-raven 1.1.0 â 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -0
- package/lib/commands/raven/deploy/cancel.d.ts +15 -0
- package/lib/commands/raven/deploy/cancel.js +185 -0
- package/lib/commands/raven/deploy/cancel.js.map +1 -0
- package/lib/commands/raven/query/ids.d.ts +28 -0
- package/lib/commands/raven/query/ids.js +246 -0
- package/lib/commands/raven/query/ids.js.map +1 -0
- package/messages/raven.deploy.cancel.md +73 -0
- package/messages/raven.query.ids.md +85 -0
- package/oclif.lock +217 -233
- package/oclif.manifest.json +146 -128
- package/package.json +18 -1
- package/lib/commands/raven/query.d.ts +0 -22
- package/lib/commands/raven/query.js +0 -115
- package/lib/commands/raven/query.js.map +0 -1
- package/messages/raven.query.md +0 -59
package/README.md
CHANGED
|
@@ -43,6 +43,16 @@ Full details, usage, examples etc are further down, or can be accessed via `--he
|
|
|
43
43
|
- [sf raven event subscribe](#sf-raven-event-subscribe)
|
|
44
44
|
- Subscribe to Platform Events.
|
|
45
45
|
|
|
46
|
+
#### sf raven deploy
|
|
47
|
+
|
|
48
|
+
- [sf raven deploy cancel](#sf-raven-deploy-cancel)
|
|
49
|
+
- Cancel a pending or in-progress Salesforce deploy.
|
|
50
|
+
|
|
51
|
+
#### sf raven query
|
|
52
|
+
|
|
53
|
+
- [sf raven query ids](#sf-raven-query-ids)
|
|
54
|
+
- Run a SOQL query against a large list of Salesforce IDs.
|
|
55
|
+
|
|
46
56
|
#### sf raven pull
|
|
47
57
|
|
|
48
58
|
- [sf raven pull](#sf-raven-pull)
|
|
@@ -227,6 +237,61 @@ EXAMPLES
|
|
|
227
237
|
$ sf raven pull remote --target-org dev
|
|
228
238
|
```
|
|
229
239
|
|
|
240
|
+
## sf raven deploy cancel
|
|
241
|
+
|
|
242
|
+
Cancel a pending or in-progress Salesforce deploy.
|
|
243
|
+
|
|
244
|
+
```
|
|
245
|
+
USAGE
|
|
246
|
+
$ sf raven deploy cancel [--json] [-o <value>]
|
|
247
|
+
|
|
248
|
+
FLAGS
|
|
249
|
+
-o, --target-org=<value> Login username or alias for the target org. Uses the default org when omitted.
|
|
250
|
+
|
|
251
|
+
GLOBAL FLAGS
|
|
252
|
+
--json Format output as json.
|
|
253
|
+
|
|
254
|
+
DESCRIPTION
|
|
255
|
+
Query the target org for pending or in-progress deploy requests, select one from an interactive list, confirm the cancellation, and submit an asynchronous deploy cancel request.
|
|
256
|
+
|
|
257
|
+
EXAMPLES
|
|
258
|
+
$ sf raven deploy cancel
|
|
259
|
+
|
|
260
|
+
$ sf raven deploy cancel --target-org dev
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
## sf raven query ids
|
|
264
|
+
|
|
265
|
+
Run a SOQL query against a large list of Salesforce IDs.
|
|
266
|
+
|
|
267
|
+
```
|
|
268
|
+
USAGE
|
|
269
|
+
$ sf raven query ids -f <value> -q <value> [--json] [-o <value>] [-b <value>] [-c <value>] [-l <value>]
|
|
270
|
+
|
|
271
|
+
FLAGS
|
|
272
|
+
-b, --batch-size=<value> Number of IDs to include in each query batch. By default, batches are sized to fit Salesforce URI limits.
|
|
273
|
+
-c, --csv=<value> Path to write query results as CSV. When supplied, table output is suppressed.
|
|
274
|
+
-f, --file=<value> (required) Path to a file containing one Salesforce ID per row.
|
|
275
|
+
-l, --limit=<value> Process only the first N unique valid IDs from the file.
|
|
276
|
+
-o, --target-org=<value> Login username or alias for the target org. Uses the default org when omitted.
|
|
277
|
+
-q, --query=<value> (required) SOQL query to run. Must include the {ids} placeholder where the ID list should be inserted.
|
|
278
|
+
|
|
279
|
+
GLOBAL FLAGS
|
|
280
|
+
--json Format output as json.
|
|
281
|
+
|
|
282
|
+
DESCRIPTION
|
|
283
|
+
Read Salesforce IDs from a file, deduplicate and validate them, split them into safe query batches, and run a SOQL query with the IDs inserted at the {ids} placeholder.
|
|
284
|
+
|
|
285
|
+
EXAMPLES
|
|
286
|
+
$ sf raven query ids --file account-ids.txt --query "SELECT Id, Name FROM Account WHERE Id IN {ids}"
|
|
287
|
+
|
|
288
|
+
$ sf raven query ids --file account-ids.txt --query "SELECT Id, Name FROM Opportunity WHERE AccountId IN {ids}"
|
|
289
|
+
|
|
290
|
+
$ sf raven query ids --file account-ids.txt --query "SELECT Id, Name FROM Account WHERE Id IN {ids}" --limit 25
|
|
291
|
+
|
|
292
|
+
$ sf raven query ids --file account-ids.txt --query "SELECT Id, Name FROM Account WHERE Id IN {ids}" --csv results.csv
|
|
293
|
+
```
|
|
294
|
+
|
|
230
295
|
## sf raven audit display
|
|
231
296
|
|
|
232
297
|
Show recent entries in the Setup Audit Trail.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { SfCommand } from '@salesforce/sf-plugins-core';
|
|
2
|
+
export type DeployCancelResult = {
|
|
3
|
+
cancelled: boolean;
|
|
4
|
+
jobId?: string;
|
|
5
|
+
targetOrg?: string;
|
|
6
|
+
};
|
|
7
|
+
export default class DeployCancel extends SfCommand<DeployCancelResult> {
|
|
8
|
+
static readonly summary: string;
|
|
9
|
+
static readonly description: string;
|
|
10
|
+
static readonly examples: string[];
|
|
11
|
+
static readonly flags: {
|
|
12
|
+
'target-org': import("@oclif/core/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
};
|
|
14
|
+
run(): Promise<DeployCancelResult>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { spawn } from 'node:child_process';
|
|
11
|
+
import select, { Separator } from '@inquirer/select';
|
|
12
|
+
import { Messages } from '@salesforce/core';
|
|
13
|
+
import { Flags, SfCommand, Ux } from '@salesforce/sf-plugins-core';
|
|
14
|
+
import dayjs from 'dayjs';
|
|
15
|
+
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
16
|
+
const messages = Messages.loadMessages('sf-raven', 'raven.deploy.cancel');
|
|
17
|
+
const cancelSelection = 'cancel';
|
|
18
|
+
class DeployCancel extends SfCommand {
|
|
19
|
+
run() {
|
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
const { flags } = yield this.parse(DeployCancel);
|
|
22
|
+
const ux = new Ux({ jsonEnabled: this.jsonEnabled() });
|
|
23
|
+
const org = flags['target-org'];
|
|
24
|
+
if (org == null) {
|
|
25
|
+
throw messages.createError('error.noTargetOrg');
|
|
26
|
+
}
|
|
27
|
+
const targetOrg = org.getUsername();
|
|
28
|
+
if (targetOrg == null) {
|
|
29
|
+
throw messages.createError('error.noTargetOrg');
|
|
30
|
+
}
|
|
31
|
+
ux.spinner.start(messages.getMessage('info.loadingDeploys'));
|
|
32
|
+
let deployRequests;
|
|
33
|
+
try {
|
|
34
|
+
deployRequests = yield getActiveDeployRequests(org.getConnection());
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
ux.spinner.stop();
|
|
38
|
+
}
|
|
39
|
+
if (deployRequests.length === 0) {
|
|
40
|
+
ux.log(messages.getMessage('info.noDeploys'));
|
|
41
|
+
return {
|
|
42
|
+
cancelled: false,
|
|
43
|
+
targetOrg,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
const selectedDeployRequest = yield selectDeployRequest(deployRequests);
|
|
47
|
+
if (selectedDeployRequest === cancelSelection || selectedDeployRequest == null) {
|
|
48
|
+
ux.log(messages.getMessage('info.noSelection'));
|
|
49
|
+
return {
|
|
50
|
+
cancelled: false,
|
|
51
|
+
targetOrg,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const confirmed = yield this.confirm({
|
|
55
|
+
message: messages.getMessage('prompt.confirmCancel', [selectedDeployRequest.Id]),
|
|
56
|
+
defaultAnswer: false,
|
|
57
|
+
});
|
|
58
|
+
if (!confirmed) {
|
|
59
|
+
ux.log(messages.getMessage('info.cancelAborted'));
|
|
60
|
+
return {
|
|
61
|
+
cancelled: false,
|
|
62
|
+
jobId: selectedDeployRequest.Id,
|
|
63
|
+
targetOrg,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
const exitCode = yield cancelDeploy(selectedDeployRequest.Id, targetOrg);
|
|
67
|
+
if (exitCode !== 0) {
|
|
68
|
+
throw messages.createError('error.cancelFailed', [exitCode.toString()]);
|
|
69
|
+
}
|
|
70
|
+
ux.log(messages.getMessage('info.cancelSubmitted', [selectedDeployRequest.Id]));
|
|
71
|
+
return {
|
|
72
|
+
cancelled: true,
|
|
73
|
+
jobId: selectedDeployRequest.Id,
|
|
74
|
+
targetOrg,
|
|
75
|
+
};
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
DeployCancel.summary = messages.getMessage('summary');
|
|
80
|
+
DeployCancel.description = messages.getMessage('description');
|
|
81
|
+
DeployCancel.examples = messages.getMessages('examples');
|
|
82
|
+
DeployCancel.flags = {
|
|
83
|
+
'target-org': Flags.optionalOrg({
|
|
84
|
+
summary: messages.getMessage('flags.target-org.summary'),
|
|
85
|
+
char: 'o',
|
|
86
|
+
}),
|
|
87
|
+
};
|
|
88
|
+
export default DeployCancel;
|
|
89
|
+
const getActiveDeployRequests = (connection) => __awaiter(void 0, void 0, void 0, function* () {
|
|
90
|
+
const result = yield connection.tooling.query(`
|
|
91
|
+
SELECT Id, Status, StartDate,
|
|
92
|
+
NumberComponentsDeployed, NumberComponentsTotal, NumberComponentErrors,
|
|
93
|
+
NumberTestsCompleted, NumberTestsTotal, NumberTestErrors
|
|
94
|
+
FROM DeployRequest
|
|
95
|
+
WHERE Status IN ('InProgress', 'Pending')
|
|
96
|
+
ORDER BY StartDate DESC
|
|
97
|
+
`);
|
|
98
|
+
return result.records;
|
|
99
|
+
});
|
|
100
|
+
const formatDeployRequest = (deployRequest) => {
|
|
101
|
+
if (deployRequest.Status === 'Pending') {
|
|
102
|
+
return [deployRequest.Status, deployRequest.Id].join(' | ');
|
|
103
|
+
}
|
|
104
|
+
const startDate = deployRequest.StartDate == null ? messages.getMessage('label.unknownStartDate') : dayjs(deployRequest.StartDate).format('DD/MM/YYYY HH:mm');
|
|
105
|
+
return [
|
|
106
|
+
startDate,
|
|
107
|
+
deployRequest.Status,
|
|
108
|
+
deployRequest.Id,
|
|
109
|
+
`Metadata: ${formatProgress(deployRequest.NumberComponentsDeployed, deployRequest.NumberComponentsTotal, deployRequest.NumberComponentErrors)}`,
|
|
110
|
+
`Apex Tests: ${formatProgress(deployRequest.NumberTestsCompleted, deployRequest.NumberTestsTotal, deployRequest.NumberTestErrors)}`,
|
|
111
|
+
].join(' | ');
|
|
112
|
+
};
|
|
113
|
+
const selectDeployRequest = (deployRequests) => __awaiter(void 0, void 0, void 0, function* () {
|
|
114
|
+
try {
|
|
115
|
+
return yield select({
|
|
116
|
+
message: messages.getMessage('prompt.selectDeploy'),
|
|
117
|
+
choices: getDeployChoices(deployRequests),
|
|
118
|
+
pageSize: 10,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
if (isPromptForceCloseError(error)) {
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
const getDeployChoices = (deployRequests) => {
|
|
129
|
+
const inProgressDeployRequests = deployRequests.filter((deployRequest) => deployRequest.Status === 'InProgress');
|
|
130
|
+
const pendingDeployRequests = deployRequests.filter((deployRequest) => deployRequest.Status === 'Pending');
|
|
131
|
+
return [
|
|
132
|
+
{ name: messages.getMessage('label.cancel'), value: cancelSelection },
|
|
133
|
+
new Separator(),
|
|
134
|
+
...getGroupedDeployChoices(messages.getMessage('label.inProgress'), inProgressDeployRequests),
|
|
135
|
+
...getGroupedDeployChoices(messages.getMessage('label.pending'), pendingDeployRequests),
|
|
136
|
+
];
|
|
137
|
+
};
|
|
138
|
+
const getGroupedDeployChoices = (label, deployRequests) => deployRequests.length === 0
|
|
139
|
+
? []
|
|
140
|
+
: [
|
|
141
|
+
new Separator(label),
|
|
142
|
+
...deployRequests.map((deployRequest) => ({
|
|
143
|
+
name: formatDeployRequest(deployRequest),
|
|
144
|
+
value: deployRequest,
|
|
145
|
+
})),
|
|
146
|
+
];
|
|
147
|
+
const isPromptForceCloseError = (error) => error instanceof Error && error.message.includes('User force closed the prompt');
|
|
148
|
+
const formatProgress = (completed, total, errors) => {
|
|
149
|
+
const completedValue = completed !== null && completed !== void 0 ? completed : 0;
|
|
150
|
+
const totalValue = total !== null && total !== void 0 ? total : 0;
|
|
151
|
+
const errorValue = errors !== null && errors !== void 0 ? errors : 0;
|
|
152
|
+
const percentage = totalValue > 0 ? Math.floor((completedValue / totalValue) * 100) : 0;
|
|
153
|
+
return `${completedValue}/${totalValue} (${percentage}% - ${errorValue} errors)`;
|
|
154
|
+
};
|
|
155
|
+
const cancelDeploy = (jobId, targetOrg) => __awaiter(void 0, void 0, void 0, function* () {
|
|
156
|
+
var _a;
|
|
157
|
+
const result = yield runChildProcess((_a = process.env.SF_BINPATH) !== null && _a !== void 0 ? _a : 'sf', [
|
|
158
|
+
'project',
|
|
159
|
+
'deploy',
|
|
160
|
+
'cancel',
|
|
161
|
+
'--job-id',
|
|
162
|
+
jobId,
|
|
163
|
+
'--target-org',
|
|
164
|
+
targetOrg,
|
|
165
|
+
'--async',
|
|
166
|
+
]);
|
|
167
|
+
return result.exitCode;
|
|
168
|
+
});
|
|
169
|
+
const runChildProcess = (command, args) => __awaiter(void 0, void 0, void 0, function* () {
|
|
170
|
+
return new Promise((resolve, reject) => {
|
|
171
|
+
const childProcess = spawn(command, args, {
|
|
172
|
+
stdio: 'inherit',
|
|
173
|
+
env: process.env,
|
|
174
|
+
});
|
|
175
|
+
childProcess.on('error', (error) => {
|
|
176
|
+
reject(error);
|
|
177
|
+
});
|
|
178
|
+
childProcess.on('close', (code) => {
|
|
179
|
+
resolve({
|
|
180
|
+
exitCode: code !== null && code !== void 0 ? code : 0,
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
//# sourceMappingURL=cancel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../../../src/commands/raven/deploy/cancel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { SfCommand } from '@salesforce/sf-plugins-core';
|
|
2
|
+
export type QueryIdsResult = {
|
|
3
|
+
totalRows: number;
|
|
4
|
+
validIds: number;
|
|
5
|
+
uniqueIds: number;
|
|
6
|
+
duplicateIds: number;
|
|
7
|
+
limit?: number;
|
|
8
|
+
processedIds: number;
|
|
9
|
+
batches: number;
|
|
10
|
+
recordsReturned: number;
|
|
11
|
+
records: QueryRecord[];
|
|
12
|
+
};
|
|
13
|
+
type QueryRecord = Record<string, unknown>;
|
|
14
|
+
export default class QueryIds extends SfCommand<QueryIdsResult> {
|
|
15
|
+
static readonly summary: string;
|
|
16
|
+
static readonly description: string;
|
|
17
|
+
static readonly examples: string[];
|
|
18
|
+
static readonly flags: {
|
|
19
|
+
'target-org': import("@oclif/core/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/interfaces").CustomOptions>;
|
|
20
|
+
file: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
21
|
+
query: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
22
|
+
'batch-size': import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
23
|
+
csv: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
24
|
+
limit: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
25
|
+
};
|
|
26
|
+
run(): Promise<QueryIdsResult>;
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
11
|
+
import { Messages } from '@salesforce/core';
|
|
12
|
+
import { Flags, SfCommand, Ux } from '@salesforce/sf-plugins-core';
|
|
13
|
+
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
14
|
+
const messages = Messages.loadMessages('sf-raven', 'raven.query.ids');
|
|
15
|
+
const idPattern = /^[a-zA-Z0-9]{15}([a-zA-Z0-9]{3})?$/;
|
|
16
|
+
const idsPlaceholder = '{ids}';
|
|
17
|
+
const maxEncodedQueryLength = 14000;
|
|
18
|
+
class QueryIds extends SfCommand {
|
|
19
|
+
run() {
|
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
const { flags } = yield this.parse(QueryIds);
|
|
22
|
+
const ux = new Ux({ jsonEnabled: this.jsonEnabled() });
|
|
23
|
+
const org = flags['target-org'];
|
|
24
|
+
if (org == null) {
|
|
25
|
+
throw messages.createError('error.noTargetOrg');
|
|
26
|
+
}
|
|
27
|
+
validateQuery(flags.query);
|
|
28
|
+
const parsedIds = parseIdsFromFile(flags.file);
|
|
29
|
+
const processedIds = flags.limit == null ? parsedIds.uniqueIds : parsedIds.uniqueIds.slice(0, flags.limit);
|
|
30
|
+
if (processedIds.length === 0) {
|
|
31
|
+
throw messages.createError('error.noIds');
|
|
32
|
+
}
|
|
33
|
+
const batches = flags['batch-size'] == null ? buildAutomaticBatches(processedIds, flags.query) : buildFixedBatches(processedIds, flags['batch-size']);
|
|
34
|
+
const connection = org.getConnection();
|
|
35
|
+
const records = [];
|
|
36
|
+
yield batches.reduce((previousBatch, batch, index) => __awaiter(this, void 0, void 0, function* () {
|
|
37
|
+
yield previousBatch;
|
|
38
|
+
ux.spinner.start(messages.getMessage('info.queryingBatch', [(index + 1).toString(), batches.length.toString()]));
|
|
39
|
+
try {
|
|
40
|
+
const batchRecords = yield runQuery(connection, buildQuery(flags.query, batch));
|
|
41
|
+
records.push(...batchRecords);
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
ux.spinner.stop();
|
|
45
|
+
}
|
|
46
|
+
}), Promise.resolve());
|
|
47
|
+
const flattenedRecords = records.map((record) => flattenRecord(record));
|
|
48
|
+
if (flags.csv != null) {
|
|
49
|
+
writeCsv(flags.csv, flattenedRecords);
|
|
50
|
+
ux.log(messages.getMessage('info.csvWritten', [records.length.toString(), flags.csv]));
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
renderTable(ux, flattenedRecords);
|
|
54
|
+
}
|
|
55
|
+
ux.log(messages.getMessage('info.summary', [
|
|
56
|
+
processedIds.length.toString(),
|
|
57
|
+
batches.length.toString(),
|
|
58
|
+
records.length.toString(),
|
|
59
|
+
parsedIds.duplicateIds.toString(),
|
|
60
|
+
]));
|
|
61
|
+
return {
|
|
62
|
+
totalRows: parsedIds.totalRows,
|
|
63
|
+
validIds: parsedIds.uniqueIds.length,
|
|
64
|
+
uniqueIds: parsedIds.uniqueIds.length,
|
|
65
|
+
duplicateIds: parsedIds.duplicateIds,
|
|
66
|
+
limit: flags.limit,
|
|
67
|
+
processedIds: processedIds.length,
|
|
68
|
+
batches: batches.length,
|
|
69
|
+
recordsReturned: records.length,
|
|
70
|
+
records,
|
|
71
|
+
};
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
QueryIds.summary = messages.getMessage('summary');
|
|
76
|
+
QueryIds.description = messages.getMessage('description');
|
|
77
|
+
QueryIds.examples = messages.getMessages('examples');
|
|
78
|
+
QueryIds.flags = {
|
|
79
|
+
'target-org': Flags.optionalOrg({
|
|
80
|
+
summary: messages.getMessage('flags.target-org.summary'),
|
|
81
|
+
char: 'o',
|
|
82
|
+
}),
|
|
83
|
+
file: Flags.file({
|
|
84
|
+
summary: messages.getMessage('flags.file.summary'),
|
|
85
|
+
char: 'f',
|
|
86
|
+
required: true,
|
|
87
|
+
exists: true,
|
|
88
|
+
}),
|
|
89
|
+
query: Flags.string({
|
|
90
|
+
summary: messages.getMessage('flags.query.summary'),
|
|
91
|
+
char: 'q',
|
|
92
|
+
required: true,
|
|
93
|
+
}),
|
|
94
|
+
'batch-size': Flags.integer({
|
|
95
|
+
summary: messages.getMessage('flags.batch-size.summary'),
|
|
96
|
+
char: 'b',
|
|
97
|
+
min: 1,
|
|
98
|
+
}),
|
|
99
|
+
csv: Flags.file({
|
|
100
|
+
summary: messages.getMessage('flags.csv.summary'),
|
|
101
|
+
char: 'c',
|
|
102
|
+
required: false,
|
|
103
|
+
}),
|
|
104
|
+
limit: Flags.integer({
|
|
105
|
+
summary: messages.getMessage('flags.limit.summary'),
|
|
106
|
+
char: 'l',
|
|
107
|
+
min: 1,
|
|
108
|
+
}),
|
|
109
|
+
};
|
|
110
|
+
export default QueryIds;
|
|
111
|
+
const parseIdsFromFile = (filePath) => {
|
|
112
|
+
const rows = readFileSync(filePath, 'utf8')
|
|
113
|
+
.split(/\r?\n/)
|
|
114
|
+
.map((row) => row.trim())
|
|
115
|
+
.filter((row) => row.length > 0);
|
|
116
|
+
const uniqueIds = [];
|
|
117
|
+
const seenIds = new Set();
|
|
118
|
+
let duplicateIds = 0;
|
|
119
|
+
for (const row of rows) {
|
|
120
|
+
if (!idPattern.test(row)) {
|
|
121
|
+
throw messages.createError('error.invalidId', [row]);
|
|
122
|
+
}
|
|
123
|
+
if (seenIds.has(row)) {
|
|
124
|
+
duplicateIds += 1;
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
uniqueIds.push(row);
|
|
128
|
+
seenIds.add(row);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return {
|
|
132
|
+
totalRows: rows.length,
|
|
133
|
+
uniqueIds,
|
|
134
|
+
duplicateIds,
|
|
135
|
+
};
|
|
136
|
+
};
|
|
137
|
+
const validateQuery = (query) => {
|
|
138
|
+
const placeholderCount = query.split(idsPlaceholder).length - 1;
|
|
139
|
+
if (placeholderCount !== 1) {
|
|
140
|
+
throw messages.createError('error.invalidPlaceholder', [idsPlaceholder]);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
const buildFixedBatches = (ids, batchSize) => {
|
|
144
|
+
const batches = [];
|
|
145
|
+
for (let index = 0; index < ids.length; index += batchSize) {
|
|
146
|
+
batches.push(ids.slice(index, index + batchSize));
|
|
147
|
+
}
|
|
148
|
+
return batches;
|
|
149
|
+
};
|
|
150
|
+
const buildAutomaticBatches = (ids, query) => {
|
|
151
|
+
const batches = [];
|
|
152
|
+
let currentBatch = [];
|
|
153
|
+
for (const id of ids) {
|
|
154
|
+
const candidateBatch = [...currentBatch, id];
|
|
155
|
+
if (getEncodedQueryLength(buildQuery(query, candidateBatch)) > maxEncodedQueryLength) {
|
|
156
|
+
if (currentBatch.length === 0) {
|
|
157
|
+
throw messages.createError('error.queryTooLongForSingleId', [id]);
|
|
158
|
+
}
|
|
159
|
+
batches.push(currentBatch);
|
|
160
|
+
currentBatch = [id];
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
currentBatch = candidateBatch;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
if (currentBatch.length > 0) {
|
|
167
|
+
batches.push(currentBatch);
|
|
168
|
+
}
|
|
169
|
+
return batches;
|
|
170
|
+
};
|
|
171
|
+
const buildQuery = (query, ids) => query.replace(idsPlaceholder, `(${ids.map((id) => `'${id}'`).join(', ')})`);
|
|
172
|
+
const getEncodedQueryLength = (query) => Buffer.byteLength(encodeURIComponent(query), 'utf8');
|
|
173
|
+
const runQuery = (connection, query) => __awaiter(void 0, void 0, void 0, function* () {
|
|
174
|
+
const records = [];
|
|
175
|
+
const result = yield connection.query(query);
|
|
176
|
+
records.push(...result.records);
|
|
177
|
+
yield queryMoreRecords(connection, result, records);
|
|
178
|
+
return records;
|
|
179
|
+
});
|
|
180
|
+
const queryMoreRecords = (connection, result, records) => __awaiter(void 0, void 0, void 0, function* () {
|
|
181
|
+
if (result.done || result.nextRecordsUrl == null) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const nextResult = yield connection.queryMore(result.nextRecordsUrl);
|
|
185
|
+
records.push(...nextResult.records);
|
|
186
|
+
yield queryMoreRecords(connection, nextResult, records);
|
|
187
|
+
});
|
|
188
|
+
const flattenRecord = (record) => {
|
|
189
|
+
const flattenedRecord = flattenValue(record, '');
|
|
190
|
+
delete flattenedRecord.attributes;
|
|
191
|
+
return flattenedRecord;
|
|
192
|
+
};
|
|
193
|
+
const flattenValue = (value, prefix) => {
|
|
194
|
+
if (isPlainObject(value)) {
|
|
195
|
+
const flattenedRecord = {};
|
|
196
|
+
for (const [key, childValue] of Object.entries(value)) {
|
|
197
|
+
if (key === 'attributes') {
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
Object.assign(flattenedRecord, flattenValue(childValue, prefix.length === 0 ? key : `${prefix}.${key}`));
|
|
201
|
+
}
|
|
202
|
+
return flattenedRecord;
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
return {
|
|
206
|
+
[prefix]: value,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
const isPlainObject = (value) => value != null && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Date);
|
|
211
|
+
const renderTable = (ux, records) => {
|
|
212
|
+
if (records.length === 0) {
|
|
213
|
+
ux.log(messages.getMessage('info.noRecords'));
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
const columns = getColumns(records);
|
|
217
|
+
ux.table(records, Object.fromEntries(columns.map((column) => [column, { header: column, get: (row) => row[column] }])));
|
|
218
|
+
};
|
|
219
|
+
const getColumns = (records) => {
|
|
220
|
+
const columns = new Set();
|
|
221
|
+
for (const record of records) {
|
|
222
|
+
for (const key of Object.keys(record)) {
|
|
223
|
+
columns.add(key);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
return Array.from(columns);
|
|
227
|
+
};
|
|
228
|
+
const writeCsv = (filePath, records) => {
|
|
229
|
+
const columns = getColumns(records);
|
|
230
|
+
const rows = [columns.map(escapeCsvValue).join(',')];
|
|
231
|
+
for (const record of records) {
|
|
232
|
+
rows.push(columns.map((column) => escapeCsvValue(record[column])).join(','));
|
|
233
|
+
}
|
|
234
|
+
writeFileSync(filePath, `${rows.join('\n')}\n`, 'utf8');
|
|
235
|
+
};
|
|
236
|
+
const escapeCsvValue = (value) => {
|
|
237
|
+
if (value == null) {
|
|
238
|
+
return '';
|
|
239
|
+
}
|
|
240
|
+
const stringValue = typeof value === 'string' ? value : JSON.stringify(value);
|
|
241
|
+
if (/[",\n\r]/.test(stringValue)) {
|
|
242
|
+
return `"${stringValue.replace(/"/g, '""')}"`;
|
|
243
|
+
}
|
|
244
|
+
return stringValue;
|
|
245
|
+
};
|
|
246
|
+
//# sourceMappingURL=ids.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids.js","sourceRoot":"","sources":["../../../../src/commands/raven/query/ids.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,6BAA6B,CAAC;AAEnE,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;AAEtE,MAAM,SAAS,GAAG,oCAAoC,CAAC;AACvD,MAAM,cAAc,GAAG,OAAO,CAAC;AAC/B,MAAM,qBAAqB,GAAG,KAAM,CAAC;AA4BrC,MAAqB,QAAS,SAAQ,SAAyB;IAsChD,GAAG;;YACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;YACvD,MAAM,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;YAEhC,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;gBAChB,MAAM,QAAQ,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;YAClD,CAAC;YAED,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAE3B,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;YAE3G,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YAC5C,CAAC;YAED,MAAM,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;YACtJ,MAAM,UAAU,GAAG,GAAG,CAAC,aAAa,EAAgC,CAAC;YACrE,MAAM,OAAO,GAAkB,EAAE,CAAC;YAElC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAO,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACzD,MAAM,aAAa,CAAC;gBACpB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;gBAEjH,IAAI,CAAC;oBACH,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;oBAChF,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;gBAChC,CAAC;wBAAS,CAAC;oBACT,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;gBACpB,CAAC;YACH,CAAC,CAAA,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAEtB,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;YAExE,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;gBACtB,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;gBACtC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACzF,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;YACpC,CAAC;YAED,EAAE,CAAC,GAAG,CACJ,QAAQ,CAAC,UAAU,CAAC,cAAc,EAAE;gBAClC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACzB,SAAS,CAAC,YAAY,CAAC,QAAQ,EAAE;aAClC,CAAC,CACH,CAAC;YAEF,OAAO;gBACL,SAAS,EAAE,SAAS,CAAC,SAAS;gBAC9B,QAAQ,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM;gBACpC,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM;gBACrC,YAAY,EAAE,SAAS,CAAC,YAAY;gBACpC,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,YAAY,EAAE,YAAY,CAAC,MAAM;gBACjC,OAAO,EAAE,OAAO,CAAC,MAAM;gBACvB,eAAe,EAAE,OAAO,CAAC,MAAM;gBAC/B,OAAO;aACR,CAAC;QACJ,CAAC;KAAA;;AApGsB,gBAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AACzC,oBAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACjD,iBAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AAE5C,cAAK,GAAG;IAC7B,YAAY,EAAE,KAAK,CAAC,WAAW,CAAC;QAC9B,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC;QACxD,IAAI,EAAE,GAAG;KACV,CAAC;IACF,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;QACf,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,oBAAoB,CAAC;QAClD,IAAI,EAAE,GAAG;QACT,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,IAAI;KACb,CAAC;IACF,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC;QACnD,IAAI,EAAE,GAAG;QACT,QAAQ,EAAE,IAAI;KACf,CAAC;IACF,YAAY,EAAE,KAAK,CAAC,OAAO,CAAC;QAC1B,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC;QACxD,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,CAAC;KACP,CAAC;IACF,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC;QACd,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,mBAAmB,CAAC;QACjD,IAAI,EAAE,GAAG;QACT,QAAQ,EAAE,KAAK;KAChB,CAAC;IACF,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;QACnB,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,qBAAqB,CAAC;QACnD,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,CAAC;KACP,CAAC;CACH,CAAC;eApCiB,QAAQ;AAwG7B,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAa,EAAE;IACvD,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC;SACxC,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SACxB,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,QAAQ,CAAC,WAAW,CAAC,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACrB,YAAY,IAAI,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,MAAM;QACtB,SAAS;QACT,YAAY;KACb,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,KAAa,EAAQ,EAAE;IAC5C,MAAM,gBAAgB,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAEhE,IAAI,gBAAgB,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,QAAQ,CAAC,WAAW,CAAC,0BAA0B,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,GAAa,EAAE,SAAiB,EAAc,EAAE;IACzE,MAAM,OAAO,GAAe,EAAE,CAAC;IAE/B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,EAAE,KAAK,IAAI,SAAS,EAAE,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,qBAAqB,GAAG,CAAC,GAAa,EAAE,KAAa,EAAc,EAAE;IACzE,MAAM,OAAO,GAAe,EAAE,CAAC;IAC/B,IAAI,YAAY,GAAa,EAAE,CAAC;IAEhC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,cAAc,GAAG,CAAC,GAAG,YAAY,EAAE,EAAE,CAAC,CAAC;QAE7C,IAAI,qBAAqB,CAAC,UAAU,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,GAAG,qBAAqB,EAAE,CAAC;YACrF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC9B,MAAM,QAAQ,CAAC,WAAW,CAAC,+BAA+B,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACpE,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC3B,YAAY,GAAG,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,YAAY,GAAG,cAAc,CAAC;QAChC,CAAC;IACH,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,GAAa,EAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEzI,MAAM,qBAAqB,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;AAE9G,MAAM,QAAQ,GAAG,CACf,UAA2B,EAC3B,KAAa,EACW,EAAE;IAC1B,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAEhC,MAAM,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAEpD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAA,CAAC;AAOF,MAAM,gBAAgB,GAAG,CAAO,UAA2B,EAAE,MAAmB,EAAE,OAAsB,EAAiB,EAAE;IACzH,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;QACjD,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IACrE,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAC1D,CAAC,CAAA,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAAmB,EAAe,EAAE;IACzD,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAEjD,OAAO,eAAe,CAAC,UAAU,CAAC;IAElC,OAAO,eAAe,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,KAAc,EAAE,MAAc,EAAe,EAAE;IACnE,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,eAAe,GAAgB,EAAE,CAAC;QAExC,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;gBACzB,SAAS;YACX,CAAC;YAED,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;QAC3G,CAAC;QAED,OAAO,eAAe,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,OAAO;YACL,CAAC,MAAM,CAAC,EAAE,KAAK;SAChB,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,KAAc,EAAwB,EAAE,CAC7D,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,CAAC;AAElG,MAAM,WAAW,GAAG,CAAC,EAAM,EAAE,OAAsB,EAAQ,EAAE;IAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,GAAgB,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACvI,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,OAAsB,EAAY,EAAE;IACtD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,OAAsB,EAAQ,EAAE;IAClE,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAErD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/E,CAAC;IAED,aAAa,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAc,EAAU,EAAE;IAChD,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAE9E,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;IAChD,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# summary
|
|
2
|
+
|
|
3
|
+
Cancel a pending or in-progress Salesforce deploy.
|
|
4
|
+
|
|
5
|
+
# description
|
|
6
|
+
|
|
7
|
+
Query the target org for pending or in-progress deploy requests, select one from an interactive list, confirm the cancellation, and submit an asynchronous deploy cancel request.
|
|
8
|
+
|
|
9
|
+
# examples
|
|
10
|
+
|
|
11
|
+
Cancel a deploy in the default org:
|
|
12
|
+
|
|
13
|
+
<%= config.bin %> <%= command.id %>
|
|
14
|
+
|
|
15
|
+
Cancel a deploy in a specific org:
|
|
16
|
+
|
|
17
|
+
<%= config.bin %> <%= command.id %> --target-org dev
|
|
18
|
+
|
|
19
|
+
# flags.target-org.summary
|
|
20
|
+
|
|
21
|
+
Login username or alias for the target org. Uses the default org when omitted.
|
|
22
|
+
|
|
23
|
+
# info.loadingDeploys
|
|
24
|
+
|
|
25
|
+
đ Loading pending and in-progress deploys...
|
|
26
|
+
|
|
27
|
+
# info.noDeploys
|
|
28
|
+
|
|
29
|
+
â
No pending or in-progress deploys found.
|
|
30
|
+
|
|
31
|
+
# info.noSelection
|
|
32
|
+
|
|
33
|
+
âŠī¸ No deploy was selected.
|
|
34
|
+
|
|
35
|
+
# info.cancelAborted
|
|
36
|
+
|
|
37
|
+
âŠī¸ Deploy cancel aborted.
|
|
38
|
+
|
|
39
|
+
# info.cancelSubmitted
|
|
40
|
+
|
|
41
|
+
đ Deploy cancel submitted for job %s.
|
|
42
|
+
|
|
43
|
+
# prompt.selectDeploy
|
|
44
|
+
|
|
45
|
+
Select a deploy to cancel
|
|
46
|
+
|
|
47
|
+
# prompt.confirmCancel
|
|
48
|
+
|
|
49
|
+
Are you sure you want to cancel job %s
|
|
50
|
+
|
|
51
|
+
# label.unknownStartDate
|
|
52
|
+
|
|
53
|
+
Unknown start time
|
|
54
|
+
|
|
55
|
+
# label.inProgress
|
|
56
|
+
|
|
57
|
+
đĸ In Progress
|
|
58
|
+
|
|
59
|
+
# label.pending
|
|
60
|
+
|
|
61
|
+
đĄ Pending
|
|
62
|
+
|
|
63
|
+
# label.cancel
|
|
64
|
+
|
|
65
|
+
Cancel
|
|
66
|
+
|
|
67
|
+
# error.cancelFailed
|
|
68
|
+
|
|
69
|
+
sf project deploy cancel failed with exit code %s.
|
|
70
|
+
|
|
71
|
+
# error.noTargetOrg
|
|
72
|
+
|
|
73
|
+
No target org was supplied and no default target org was resolved.
|