Skip to content

Commit d46ab94

Browse files
committed
fix: fix no-unsafe errors and other issues
1 parent 0fbc2c0 commit d46ab94

File tree

9 files changed

+242
-243
lines changed

9 files changed

+242
-243
lines changed

src/commands/package/pushupgrade/abort.ts

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
66
*/
77
import { Flags, SfCommand } from '@salesforce/sf-plugins-core';
8-
import { Messages } from '@salesforce/core';
8+
import { Messages, Org } from '@salesforce/core';
99
import { PackagePushUpgrade } from '@salesforce/packaging';
1010

1111
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
@@ -32,15 +32,14 @@ export class PackagePushUpgradeAbortCommand extends SfCommand<boolean> {
3232

3333
public async run(): Promise<boolean> {
3434
const { flags } = await this.parse(PackagePushUpgradeAbortCommand);
35-
const connection = flags['target-dev-hub'].getConnection(flags['api-version']);
35+
const connection = (flags['target-dev-hub'] as Org).getConnection(flags['api-version']);
3636

37-
const packagePushRequestOptions = { packagePushRequestId: flags['push-request-id'] };
37+
const packagePushRequestOptions = { packagePushRequestId: flags['push-request-id'] as string };
3838

39-
// Schedule the push upgrade
40-
const result = await PackagePushUpgrade.abort(connection, packagePushRequestOptions);
39+
const result: boolean = await PackagePushUpgrade.abort(connection, packagePushRequestOptions);
4140

4241
if (result) {
43-
this.log(messages.getMessage('output', [flags['push-request-id']]));
42+
this.log(messages.getMessage('output', [flags['push-request-id'] as string]));
4443
}
4544

4645
return result;

src/commands/package/pushupgrade/list.ts

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,17 @@
66
*/
77

88
import { Flags, SfCommand, orgApiVersionFlagWithDeprecations } from '@salesforce/sf-plugins-core';
9-
import { Messages } from '@salesforce/core';
10-
import { PackagePushRequestListResult, PackagePushUpgrade } from '@salesforce/packaging';
11-
import chalk from 'chalk';
9+
import { Messages, Org, Logger } from '@salesforce/core';
10+
import {
11+
PackagePushRequestListResult,
12+
PackagePushUpgrade,
13+
} from '@salesforce/packaging';
1214
import { requiredHubFlag } from '../../../utils/hubFlag.js';
1315

1416
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
1517
const messages = Messages.loadMessages('@salesforce/plugin-packaging', 'package_pushupgrade_list');
1618

17-
type Status = 'Created' | 'Cancelled' | 'Pending' | 'In Progress' | 'Failed' | 'Succeeded';
18-
19+
type PackagePushStatus = 'Created' | 'Cancelled' | 'Pending' | 'In Progress' | 'Failed' | 'Succeeded';
1920
export type PackagePushRequestListResultArr = PackagePushRequestListResult[];
2021

2122
export class PackagePushRequestListCommand extends SfCommand<PackagePushRequestListResultArr> {
@@ -39,7 +40,7 @@ export class PackagePushRequestListCommand extends SfCommand<PackagePushRequestL
3940
aliases: ['scheduledlastdays'],
4041
summary: messages.getMessage('flags.scheduled-last-days.summary'),
4142
}),
42-
status: Flags.custom<Status>({
43+
status: Flags.custom<string>({
4344
options: ['Created', 'Cancelled', 'Pending', 'In Progress', 'Failed', 'Succeeded'],
4445
})({
4546
char: 's',
@@ -49,22 +50,21 @@ export class PackagePushRequestListCommand extends SfCommand<PackagePushRequestL
4950

5051
public async run(): Promise<PackagePushRequestListResultArr> {
5152
const { flags } = await this.parse(PackagePushRequestListCommand);
52-
const connection = flags['target-dev-hub'].getConnection(flags['api-version']);
53+
const logger = await Logger.child(this.constructor.name);
54+
const hubOrg = flags['target-dev-hub'] as Org;
55+
const connection = hubOrg.getConnection(flags['api-version']);
5356
const scheduledLastDays = flags['scheduled-last-days'];
5457

55-
// Check if scheduledLastDays is valid
56-
if (flags['scheduled-last-days'] !== undefined) {
57-
if (isNaN(scheduledLastDays!) || scheduledLastDays! <= 0) {
58+
if (scheduledLastDays !== undefined) {
59+
if (isNaN(scheduledLastDays) || scheduledLastDays <= 0) {
5860
throw new Error('Invalid value for --scheduled-last-days. It must be a positive integer.');
5961
}
6062
}
6163

62-
// Get results of query here
63-
// Use const since we will add verbose later
64-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment
65-
const results: PackagePushRequestListResult[] = await PackagePushUpgrade.list(connection, {
66-
packageId: flags.package,
67-
status: flags.status,
64+
logger.debug(`Querying PackagePushRequest records from org ${hubOrg.getOrgId()}`);
65+
const results: PackagePushRequestListResultArr = await PackagePushUpgrade.list(connection, {
66+
packageId: flags.package as string,
67+
status: flags.status as PackagePushStatus | undefined,
6868
scheduledLastDays,
6969
});
7070

@@ -73,23 +73,24 @@ export class PackagePushRequestListCommand extends SfCommand<PackagePushRequestL
7373
} else {
7474
const data = await Promise.all(
7575
results.map(async (record: PackagePushRequestListResult) => {
76-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
77-
const packagePushRequestOptions = { packagePushRequestId: record?.Id };
78-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
79-
const totalNumOrgs = await PackagePushUpgrade.getTotalJobs(connection, packagePushRequestOptions);
80-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
81-
const numOrgsUpgradedFail = await PackagePushUpgrade.getFailedJobs(connection, packagePushRequestOptions);
82-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call
76+
const packagePushRequestId = record?.Id;
77+
const packagePushRequestOptions = { packagePushRequestId };
78+
79+
const totalNumOrgs = await PackagePushUpgrade.getTotalJobs(connection, packagePushRequestOptions) as number;
80+
const numOrgsUpgradedFail = await PackagePushUpgrade.getFailedJobs(connection, packagePushRequestOptions) as number;
8381
const numOrgsUpgradedSuccess = await PackagePushUpgrade.getSucceededJobs(
8482
connection,
8583
packagePushRequestOptions
86-
);
84+
) as number;
85+
86+
const pv = record?.PackageVersion;
87+
const packageVersionNumber = pv?.MajorVersion != null && pv?.MinorVersion != null ? `${pv.MajorVersion}.${pv.MinorVersion}` : undefined;
8788

8889
return {
8990
Id: record?.Id,
9091
PackageVersionId: record?.PackageVersionId,
91-
PackageVersionName: record?.PackageVersion?.Name,
92-
PackageVersionNumber: record?.PackageVersion?.MajorVersion + '.' + record?.PackageVersion?.MinorVersion,
92+
PackageVersionName: pv?.Name,
93+
PackageVersionNumber: packageVersionNumber,
9394
Status: record?.Status,
9495
ScheduledStartTime: record?.ScheduledStartTime,
9596
StartTime: record?.StartTime,
@@ -101,9 +102,8 @@ export class PackagePushRequestListCommand extends SfCommand<PackagePushRequestL
101102
})
102103
);
103104

104-
this.table({ data, overflow: 'wrap', title: chalk.blue(`Push Upgrade Request List: [${results.length}]`) });
105+
this.table({ data });
105106
}
106-
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
107107
return results;
108108
}
109109
}

src/commands/package/pushupgrade/report.ts

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,21 @@
66
*/
77

88
import { Flags, loglevel, orgApiVersionFlagWithDeprecations, SfCommand } from '@salesforce/sf-plugins-core';
9-
import { Messages } from '@salesforce/core';
9+
import { Messages, Org, Logger } from '@salesforce/core';
10+
import chalk from 'chalk';
1011

1112
import {
1213
PackagePushUpgrade,
1314
PackagePushRequestReportResult,
1415
PackagePushRequestReportJobFailuresResult,
1516
} from '@salesforce/packaging';
16-
import chalk from 'chalk';
1717
import { requiredHubFlag } from '../../../utils/hubFlag.js';
1818

1919
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
2020
const messages = Messages.loadMessages('@salesforce/plugin-packaging', 'package_pushupgrade_report');
2121
const ERROR_LIMIT = 12;
2222

23-
export type ReportCommandResult = null | PackagePushRequestReportResult;
23+
export type ReportCommandResult = PackagePushRequestReportResult | null;
2424

2525
export class PackagePushUpgradeReportCommand extends SfCommand<ReportCommandResult> {
2626
public static readonly summary = messages.getMessage('summary');
@@ -29,12 +29,11 @@ export class PackagePushUpgradeReportCommand extends SfCommand<ReportCommandResu
2929
public static readonly deprecateAliases = true;
3030
public static readonly aliases = ['force:package:pushupgrade:report'];
3131
public static readonly hidden = true;
32-
public static state = 'beta';
32+
public static readonly state = 'beta';
3333
public static readonly flags = {
3434
loglevel,
3535
'target-dev-hub': requiredHubFlag,
3636
'api-version': orgApiVersionFlagWithDeprecations,
37-
// eslint-disable-next-line sf-plugin/id-flag-suggestions
3837
'push-request-id': Flags.salesforceId({
3938
length: 'both',
4039
deprecateAliases: true,
@@ -47,34 +46,41 @@ export class PackagePushUpgradeReportCommand extends SfCommand<ReportCommandResu
4746

4847
public async run(): Promise<ReportCommandResult> {
4948
const { flags } = await this.parse(PackagePushUpgradeReportCommand);
50-
const connection = flags['target-dev-hub'].getConnection(flags['api-version']);
49+
const logger = await Logger.child(this.constructor.name);
50+
const hubOrg = flags['target-dev-hub'] as Org;
51+
const connection = hubOrg.getConnection(flags['api-version']);
52+
53+
const packagePushRequestOptions = { packagePushRequestId: flags['push-request-id'] as string };
5154

52-
const packagePushRequestOptions = { packagePushRequestId: flags['push-request-id'] };
55+
logger.debug(
56+
`Querying PackagePushRequestReport records from org ${hubOrg?.getOrgId()} using PackagePushRequest ID: ${packagePushRequestOptions.packagePushRequestId}`
57+
);
58+
const records: PackagePushRequestReportResult[] = await PackagePushUpgrade.report(connection, packagePushRequestOptions);
5359

54-
const records = await PackagePushUpgrade.report(connection, packagePushRequestOptions);
5560
if (records?.length === 1) {
56-
const record = records[0];
61+
const record: PackagePushRequestReportResult = records[0];
62+
63+
logger.debug(`Found PackagePushRequestReport record: ${record?.Id}`);
5764

58-
const totalJobs = await PackagePushUpgrade.getTotalJobs(connection, packagePushRequestOptions);
65+
const totalJobs: number = await PackagePushUpgrade.getTotalJobs(connection, packagePushRequestOptions);
5966

6067
let failedJobs = 0;
6168
let succeededJobs = 0;
62-
let jobFailureReasons;
69+
let jobFailureReasons: PackagePushRequestReportJobFailuresResult[] | undefined;
6370

6471
if (record?.Status === 'Succeeded' || record?.Status === 'Failed' || record?.Status === 'In Progress') {
65-
failedJobs = await PackagePushUpgrade.getFailedJobs(connection, packagePushRequestOptions);
66-
succeededJobs = await PackagePushUpgrade.getSucceededJobs(connection, packagePushRequestOptions);
67-
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access
72+
logger.debug(`PushRequest Status is ${record.Status}, getting job details.`);
73+
failedJobs = await PackagePushUpgrade.getFailedJobs(connection, packagePushRequestOptions) as number;
74+
succeededJobs = await PackagePushUpgrade.getSucceededJobs(connection, packagePushRequestOptions) as number;
6875
jobFailureReasons = await PackagePushUpgrade.getJobFailureReasons(connection, packagePushRequestOptions);
6976
}
70-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument
71-
this.display(records[0], totalJobs, succeededJobs, failedJobs, jobFailureReasons);
77+
this.display(record, totalJobs, succeededJobs, failedJobs, jobFailureReasons);
7278
return record;
7379
}
80+
this.warn('No results found');
7481
return null;
7582
}
7683

77-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment
7884
private display(
7985
record: PackagePushRequestReportResult,
8086
totalJobs: number,
@@ -85,17 +91,14 @@ export class PackagePushUpgradeReportCommand extends SfCommand<ReportCommandResu
8591
const data = [
8692
{
8793
name: 'Package Name',
88-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment
8994
value: record.PackageVersion.MetadataPackage.Name,
9095
},
9196
{
9297
name: 'Package Version Name',
93-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment
9498
value: record.PackageVersion.Name,
9599
},
96100
{
97101
name: 'Package Version',
98-
// eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment
99102
value: record.PackageVersion.MajorVersion + '.' + record.PackageVersion.MinorVersion,
100103
},
101104
{
@@ -148,20 +151,17 @@ export class PackagePushUpgradeReportCommand extends SfCommand<ReportCommandResu
148151
},
149152
];
150153

151-
this.table({ data, title: chalk.blue('Push Upgrade Request') });
154+
this.table({ data });
152155

153156
if (jobFailureReasons?.length) {
154157
this.log('');
155158
const errors: string[] = [];
156159
jobFailureReasons.slice(0, ERROR_LIMIT).forEach((error: PackagePushRequestReportJobFailuresResult) => {
157-
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
158160
errors.push(`(${errors.length + 1}) ${error.ErrorMessage}`);
159161
});
160162
this.styledHeader(chalk.red('Errors'));
161163
this.warn(errors.join('\n'));
162164

163-
// Check if errors were truncated. If so, inform the user with
164-
// instructions on how to retrieve the remaining errors.
165165
if (jobFailureReasons?.length > ERROR_LIMIT) {
166166
this.warn(messages.getMessage('truncatedErrors', [this.config.bin, record.Id]));
167167
}

src/commands/package/pushupgrade/schedule.ts

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
* Licensed under the BSD 3-Clause license.
55
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
66
*/
7-
import fs from 'node:fs/promises';
8-
import { Flags, SfCommand } from '@salesforce/sf-plugins-core';
9-
import { Messages, SfError } from '@salesforce/core';
7+
import * as fs from 'node:fs/promises';
8+
import { Flags, SfCommand, orgApiVersionFlagWithDeprecations } from '@salesforce/sf-plugins-core';
9+
import { Messages, SfError, Org, Logger } from '@salesforce/core';
1010
import { PackagePushScheduleResult, PackagePushUpgrade } from '@salesforce/packaging';
1111

1212
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
@@ -25,49 +25,63 @@ export class PackagePushScheduleCommand extends SfCommand<PackagePushScheduleRes
2525
description: messages.getMessage('flags.target-dev-hub.description'),
2626
required: true,
2727
}),
28-
'api-version': Flags.orgApiVersion(),
28+
'api-version': orgApiVersionFlagWithDeprecations,
2929
package: Flags.salesforceId({
30-
length: 'both',
3130
char: 'p',
31+
length: 'both',
32+
startsWith: '04t',
3233
summary: messages.getMessage('flags.package.summary'),
3334
required: true,
34-
startsWith: '04t',
3535
}),
3636
'start-time': Flags.string({
3737
char: 't',
3838
summary: messages.getMessage('flags.start-time.summary'),
3939
}),
40-
'org-file': Flags.file({
41-
char: 'f',
42-
summary: messages.getMessage('flags.org-file.summary'),
43-
exactlyOne: ['org-list', 'org-file'],
44-
exists: true,
45-
}),
4640
'org-list': Flags.string({
4741
char: 'l',
4842
summary: messages.getMessage('flags.org-list.summary'),
49-
allowStdin: true,
50-
exactlyOne: ['org-list', 'org-file'],
43+
exclusive: ['org-list-file'],
44+
}),
45+
'org-list-file': Flags.file({
46+
char: 'f',
47+
summary: messages.getMessage('flags.org-list-file.summary'),
48+
exists: true,
49+
exclusive: ['org-list'],
5150
}),
5251
};
5352

5453
public async run(): Promise<PackagePushScheduleResult> {
5554
const { flags } = await this.parse(PackagePushScheduleCommand);
55+
const logger = await Logger.child(this.constructor.name);
5656
let orgList: string[] = [];
5757

58-
if (flags['org-file']) {
59-
orgList = await readOrgListFile(flags['org-file']);
58+
if (flags['org-list-file']) {
59+
logger.debug(`Reading org list from file: ${flags['org-list-file']}`);
60+
orgList = await readOrgListFile(flags['org-list-file']);
6061
} else if (flags['org-list']) {
62+
logger.debug('Using org list from input flag.');
6163
orgList = getOrgListFromInput(flags['org-list']);
6264
} else {
6365
throw new SfError(messages.getMessage('error.no-org-list-file-or-org-list-input'));
6466
}
6567

66-
// Connect to the Dev Hub
67-
const conn = flags['target-dev-hub'].getConnection(flags['api-version']);
68+
const conn = (flags['target-dev-hub'] as Org).getConnection(flags['api-version']);
69+
70+
const startTime = flags['start-time'];
71+
if (!startTime) {
72+
throw new SfError('Missing required flag: --start-time');
73+
}
74+
75+
logger.debug(
76+
`Scheduling push upgrade for package ${flags.package} with ${orgList.length} orgs, starting at ${startTime}.`
77+
);
6878

69-
// Schedule the push upgrade
70-
const result = await PackagePushUpgrade.schedule(conn, flags['package'], flags['start-time']!, orgList);
79+
const result: PackagePushScheduleResult = await PackagePushUpgrade.schedule(
80+
conn,
81+
flags.package as string,
82+
startTime,
83+
orgList
84+
);
7185

7286
this.log(messages.getMessage('output', [result?.PushRequestId]));
7387

src/commands/package/version/list.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -140,14 +140,15 @@ export class PackageVersionListCommand extends SfCommand<PackageVersionListComma
140140
const aliases = ids.map((id) => (project ? project.getAliasesFromPackageId(id) : id)).flat();
141141
const AliasStr = project ? (aliases.length > 0 ? aliases.join() : '') : '';
142142

143-
// set Ancestor display values
144-
let ancestorVersion: string | undefined;
143+
// Calculate AncestorId value without modifying record
144+
let computedAncestorId = record.AncestorId;
145+
let computedAncestorVersion: string | undefined;
145146
if (record.AncestorId) {
146-
ancestorVersion = ancestorVersionsMap?.get(record.AncestorId);
147+
computedAncestorVersion = ancestorVersionsMap?.get(record.AncestorId);
147148
} else if (containerOptionsMap.get(record.Package2Id) !== 'Managed') {
148149
// display N/A if package is unlocked
149-
ancestorVersion = 'N/A';
150-
record.AncestorId = 'N/A';
150+
computedAncestorVersion = 'N/A';
151+
computedAncestorId = 'N/A'; // Use computed variable
151152
}
152153

153154
function getCodeCoverage(): string {
@@ -203,8 +204,8 @@ export class PackageVersionListCommand extends SfCommand<PackageVersionListComma
203204
HasPassedCodeCoverageCheck: hasPassedCodeCoverageCheck as string | boolean,
204205
ValidationSkipped: record.ValidationSkipped,
205206
ValidatedAsync: record.ValidatedAsync,
206-
AncestorId: record.AncestorId,
207-
AncestorVersion: ancestorVersion as string,
207+
AncestorId: computedAncestorId,
208+
AncestorVersion: computedAncestorVersion as string,
208209
Alias: AliasStr,
209210
IsOrgDependent: isOrgDependent,
210211
ReleaseVersion: record.ReleaseVersion == null ? '' : Number.parseFloat(record.ReleaseVersion).toFixed(1),

0 commit comments

Comments
 (0)