@forge/cli
12.13.2-next.0-experimental-5b1825712.14.0-next.2
out/command-line/register-installation-commands.jsout/command-line/register-installation-commands.js+28−9
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,8 +1,10 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.registerCommands = exports.registerListInstallationsCommand = void 0;
+const tslib_1 = require("tslib");
const cli_shared_1 = require("@forge/cli-shared");
+const chalk_1 = tslib_1.__importDefault(require("chalk"));
const shared_1 = require("../installations/shared");
const uninstall_command_helpers_1 = require("./uninstall-command-helpers");
const semver_1 = require("semver");
const COMMAND_NAME = 'install';
@@ -42,21 +44,38 @@
.jsonOption()
.description(cli_shared_1.Text.installList.cmd)
.action(async ({ json }) => {
const { installations } = await installationsService.listAppInstallations();
- ui.table([
+ const getStatus = (permissionVersionIsLatest, appVersion, computeVersion) => {
+ if (permissionVersionIsLatest) {
+ return 'Up-to-date';
+ }
+ return (0, semver_1.lt)(appVersion, computeVersion) ? 'Permissions outdated' : 'App update available';
+ };
+ const formatByStatus = (isUpToDate, value) => isUpToDate ? chalk_1.default.green(value) : chalk_1.default.yellow(value);
+ const columns = [
['id', 'Installation ID'],
['environment', 'Environment'],
['site', 'Site'],
['product', 'Atlassian apps'],
- ['majorVersion', 'Major 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.productsDisplayName)(product, secondaryProducts),
- majorVersion: `${(0, semver_1.major)(version).toString()} ${cli_shared_1.Text.install.booleanToScope(isLatest)}`
- })), {
+ ...(json ? [['majorVersion', 'Major Version']] : []),
+ ['appVersion', 'App version'],
+ ['status', 'Status']
+ ];
+ ui.table(columns, installations.map(({ id, environmentKey, product, secondaryProducts, site, version: { isLatest: permissionVersionIsLatest, version: appVersion }, computeVersion }) => {
+ const status = getStatus(permissionVersionIsLatest, appVersion, computeVersion.version);
+ const isUpToDate = permissionVersionIsLatest;
+ const appVersionValue = (0, semver_1.major)(computeVersion.version).toString();
+ return {
+ id,
+ environment: (0, cli_shared_1.environmentToOption)(environmentKey),
+ site,
+ product: (0, cli_shared_1.productsDisplayName)(product, secondaryProducts),
+ majorVersion: `${(0, semver_1.major)(appVersion).toString()} ${cli_shared_1.Text.install.booleanToScope(permissionVersionIsLatest)}`,
+ appVersion: json ? appVersionValue : formatByStatus(isUpToDate, appVersionValue),
+ status: json ? status : formatByStatus(isUpToDate, status)
+ };
+ }), {
json,
emptyMessage: cli_shared_1.Text.installList.noInstallations,
preMessage: cli_shared_1.Text.installList.banner
});