@salesforce/plugin-packaging
Version:
SF plugin that support Salesforce Packaging Platform
128 lines • 5.71 kB
JavaScript
/*
* Copyright 2026, Salesforce, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Flags, loglevel, orgApiVersionFlagWithDeprecations, SfCommand } from '@salesforce/sf-plugins-core';
import { Messages } from '@salesforce/core';
import { PackageVersion, getPackageVersionNumber, BundleSObjects, PackageBundleVersionCreate, } from '@salesforce/packaging';
import chalk from 'chalk';
import { requiredHubFlag } from '../../../../../utils/hubFlag.js';
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
const messages = Messages.loadMessages('@salesforce/plugin-packaging', 'bundle_version_create_list');
export class PackageBundleVersionCreateListCommand extends SfCommand {
static hidden = true;
static state = 'beta';
static summary = messages.getMessage('summary');
static description = messages.getMessage('description');
static examples = messages.getMessages('examples');
static flags = {
loglevel,
'target-dev-hub': requiredHubFlag,
'api-version': orgApiVersionFlagWithDeprecations,
'created-last-days': Flags.integer({
char: 'c',
summary: messages.getMessage('flags.created-last-days.summary'),
}),
status: Flags.custom({
options: [
BundleSObjects.PkgBundleVersionCreateReqStatus.queued,
BundleSObjects.PkgBundleVersionCreateReqStatus.inProgress,
BundleSObjects.PkgBundleVersionCreateReqStatus.success,
BundleSObjects.PkgBundleVersionCreateReqStatus.error,
],
})({
char: 's',
summary: messages.getMessage('flags.status.summary'),
}),
verbose: Flags.boolean({
summary: messages.getMessage('flags.verbose.summary'),
}),
};
connection;
async run() {
const { flags } = await this.parse(PackageBundleVersionCreateListCommand);
this.connection = flags['target-dev-hub'].getConnection(flags['api-version']);
let results = await PackageBundleVersionCreate.getCreateStatuses(this.connection, flags.status, flags['created-last-days']);
if (results.length === 0) {
this.warn('No results found');
}
else {
if (flags.verbose) {
try {
results = await this.fetchVerboseData(results);
}
catch (err) {
const errMsg = typeof err === 'string' ? err : err instanceof Error ? err.message : 'unknown error';
this.warn(`error when retrieving verbose data (package name and version) due to: ${errMsg}`);
}
}
const data = results.map((r) => ({
Id: r.Id ?? 'N/A',
Status: r.RequestStatus ?? 'Unknown',
'Package Bundle Id': r.PackageBundleId ?? 'N/A',
'Package Bundle Version Id': r.PackageBundleVersionId ?? 'N/A',
'Created Date': r.CreatedDate ?? 'N/A',
'Created By': r.CreatedById ?? 'N/A',
...(flags.verbose
? {
'Version Name': r.VersionName ?? 'N/A',
'Major Version': r.MajorVersion ?? 'N/A',
'Minor Version': r.MinorVersion ?? 'N/A',
}
: {}),
}));
this.table({
data,
overflow: 'wrap',
title: chalk.blue(`Package Bundle Version Create Requests [${results.length}]`),
});
}
return results;
}
// Queries Package2Version for the name and version number of the packages and adds that data
// to the results.
async fetchVerboseData(results) {
// Filter out any results without a valid PackageBundleVersionId
const validResults = results.filter((r) => r?.PackageBundleVersionId);
if (validResults.length === 0) {
return results;
}
// Query for the version name and number data
const versionData = await PackageVersion.queryPackage2Version(this.connection, {
fields: ['Id', 'Name', 'MajorVersion', 'MinorVersion', 'PatchVersion', 'BuildNumber'],
whereClause: "WHERE Id IN ('%IDS%')",
whereClauseItems: validResults.map((pvcrr) => pvcrr.PackageBundleVersionId),
});
const vDataMap = {};
versionData.forEach((vData) => {
if (vData?.Id) {
const version = getPackageVersionNumber(vData, true);
vDataMap[vData.Id] = { name: vData.Name, version };
}
});
return results.map((pvcrr) => {
if (pvcrr?.PackageBundleVersionId && vDataMap[pvcrr.PackageBundleVersionId]) {
return {
...pvcrr,
...{
VersionName: vDataMap[pvcrr.PackageBundleVersionId].name,
VersionNumber: vDataMap[pvcrr.PackageBundleVersionId].version,
},
};
}
return pvcrr;
});
}
}
//# sourceMappingURL=list.js.map