@forge/cli
10.13.611.0.0-next.18
out/command-line/register-installation-commands.jsout/command-line/register-installation-commands.js+29−32
Index: package/out/command-line/register-installation-commands.js
===================================================================
--- package/out/command-line/register-installation-commands.js
+++ package/out/command-line/register-installation-commands.js
@@ -1,41 +1,29 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
-exports.registerCommands = exports.performMultipleUninstalls = exports.performSingleUninstall = exports.validateContext = void 0;
+exports.registerCommands = exports.performMultipleUninstalls = exports.performSingleUninstall = exports.registerListInstallationsCommand = void 0;
const cli_shared_1 = require("@forge/cli-shared");
const shared_1 = require("../installations/shared");
const errors_1 = require("./errors");
const semver_1 = require("semver");
const COMMAND_NAME = 'install';
-async function validateContext({ site, product }) {
- if (product) {
- product = (0, cli_shared_1.productDisplayName)(product);
- if (!(0, cli_shared_1.isSupportedProduct)(product)) {
- throw new cli_shared_1.ValidationError(cli_shared_1.Text.error.invalidProduct);
- }
- }
- const siteURL = site ? (0, cli_shared_1.validateSite)(site, product) : undefined;
- return { siteURL, product };
-}
-exports.validateContext = validateContext;
-const registerInstallAppCommand = ({ cmd, controllers: { installController } }) => {
+const registerInstallAppCommand = async ({ cmd, controllers: { installController }, services: { supportedProductsService } }) => {
+ const supportedProducts = await supportedProductsService.getSupportedProducts();
cmd
.requireAppId()
.environmentOption()
- .option('-s, --site [site]', cli_shared_1.Text.optionSite)
- .option('-p, --product [product]', cli_shared_1.Text.optionProduct((0, cli_shared_1.getSupportedProducts)()))
- .precondition(validateContext)
+ .contextOption(supportedProducts)
.option('--upgrade', cli_shared_1.Text.install.optionUpgrade, false)
.option('--confirm-scopes', cli_shared_1.Text.install.optionConfirmScopes, false)
.option('-l, --license [license]', cli_shared_1.Text.install.optionLicense)
.option('--license-modes [licenseModes...]', cli_shared_1.Text.install.optionLicenseModes)
.option('--users-with-access [user...]', cli_shared_1.Text.install.optionUsersWithAccess)
.nonInteractiveOption('--site', '--product', '--environment')
.description(cli_shared_1.Text.install.cmd.description)
- .action(async ({ environment, siteURL, product, upgrade, confirmScopes, license, licenseModes, usersWithAccess, nonInteractive }) => {
+ .action(async ({ environment, site, product, upgrade, confirmScopes, license, licenseModes, usersWithAccess, nonInteractive }) => {
await installController.run({
environment,
- site: siteURL,
+ site,
product,
upgrade,
confirmScopes,
license,
@@ -53,20 +41,21 @@
.jsonOption()
.description(cli_shared_1.Text.installList.cmd)
.action(async ({ json }) => {
const { installations } = await installationsService.listAppInstallations();
+ const hasSecondaryInstallations = installations.some(({ secondaryProducts }) => secondaryProducts?.length);
ui.table([
['id', 'Installation ID'],
['environment', 'Environment'],
['site', 'Site'],
- ['product', 'Product'],
+ ['product', hasSecondaryInstallations ? 'Product(s)' : 'Product'],
['version', 'Version'],
['majorVersion', 'Major Version']
- ], installations.map(({ id, environmentKey, product, site, version: { isLatest, version } }) => ({
+ ], installations.map(({ id, environmentKey, product, secondaryProducts, site, version: { isLatest, version } }) => ({
id,
environment: (0, cli_shared_1.environmentToOption)(environmentKey),
site,
- product: (0, cli_shared_1.productDisplayName)(product),
+ product: (0, cli_shared_1.productsDisplayName)(product, secondaryProducts),
version: cli_shared_1.Text.install.booleanToScope(isLatest),
majorVersion: (0, semver_1.major)(version).toString()
})), {
json,
@@ -74,8 +63,9 @@
preMessage: cli_shared_1.Text.installList.banner
});
});
};
+exports.registerListInstallationsCommand = registerListInstallationsCommand;
const performSingleUninstall = async (installId, { ui, commands: { uninstallAppCommand } }) => {
const installation = await ui.displayProgress(() => uninstallAppCommand.execute(installId), cli_shared_1.Text.uninstall.cmd.start, (result) => ({
successful: !!result.successful,
message: cli_shared_1.Text.uninstall.cmd.success(false)
@@ -120,26 +110,33 @@
ui.info(cli_shared_1.Text.uninstall.interactive.done);
}
};
exports.performMultipleUninstalls = performMultipleUninstalls;
-const registerUninstallCommand = (deps) => {
- const { cmd, ui, services: { installationsService } } = deps;
+const registerUninstallCommand = async (deps) => {
+ const { cmd, ui, services: { installationsService, supportedProductsService } } = deps;
+ const supportedProducts = await supportedProductsService.getSupportedProducts();
cmd
- .command('uninstall [installationId]')
+ .command('uninstall')
+ .contextOption(supportedProducts)
+ .environmentOption()
.requireAppId()
.description(cli_shared_1.Text.uninstall.cmd.desc)
- .action(async (installationId) => {
+ .action(async ({ site, environment, product }) => {
const { installations } = await installationsService.listAppInstallations();
if (!installations.length) {
ui.info(cli_shared_1.Text.installList.noInstallations);
return;
}
- const installId = installationId?.trim();
- if (installId && installId.length > 0) {
+ if (site && product) {
+ const installation = await installationsService.findOnlyMatchingInstallation({
+ site,
+ product,
+ environment
+ });
ui.info(cli_shared_1.Text.uninstall.info);
ui.info(cli_shared_1.Text.ctrlC);
ui.emptyLine();
- await (0, exports.performSingleUninstall)(installId, deps);
+ await (0, exports.performSingleUninstall)(installation.id, deps);
}
else {
const filteredInstallations = installations.filter((install) => install.product !== 'identity' && install.product !== 'jira-servicedesk');
const selectedSitesIndexes = await ui.promptForTable(cli_shared_1.Text.uninstall.interactive.desc, cli_shared_1.Text.uninstall.interactive.progressInfo, ['Environment', 'Site', 'Product'], filteredInstallations.map(({ id, environmentKey, product, site }) => ({
@@ -159,12 +156,12 @@
}
});
};
const DEPRECATED_LIST_COMMAND = 'install:list';
-const registerCommands = ({ cmd, ...deps }) => {
+const registerCommands = async ({ cmd, ...deps }) => {
const install = cmd.command(COMMAND_NAME).description(cli_shared_1.Text.variables.description);
- registerUninstallCommand({ cmd, ...deps });
+ await registerUninstallCommand({ cmd, ...deps });
cmd.deprecatedCommand(DEPRECATED_LIST_COMMAND, `${COMMAND_NAME} ${LIST_COMMAND_NAME}`, deps.controllers.stubController);
- registerInstallAppCommand({ cmd: install, ...deps });
- registerListInstallationsCommand({ cmd: install, ...deps });
+ await registerInstallAppCommand({ cmd: install, ...deps });
+ (0, exports.registerListInstallationsCommand)({ cmd: install, ...deps });
};
exports.registerCommands = registerCommands;