npm package diff

Package: @forge/cli

Versions: 12.7.1-next.10-experimental-ab371ba - 12.7.1-next.13

File: package/out/command-line/controller/install-controller.js

Index: package/out/command-line/controller/install-controller.js
===================================================================
--- package/out/command-line/controller/install-controller.js
+++ package/out/command-line/controller/install-controller.js
@@ -44,13 +44,13 @@
                 return;
             }
         }
     }
-    async installOrUpgrade(upgrade, environment, environmentType, site, product, appId, text, license, overrides, majorVersionId) {
+    async installOrUpgrade(isUpgrade, environment, environmentType, site, product, appId, text, isCodeUpgrade, license, overrides, majorVersionId) {
         const isWorkspaceProduct = !!product && this.supportedProductsService.isWorkspaceProduct(product);
         return this.ui.displayProgress(async () => {
-            if (upgrade) {
-                const isAlreadyUpdated = await this.installationService.upgradeInstallation(site, product, environment, appId);
+            if (isUpgrade) {
+                const isAlreadyUpdated = await this.installationService.upgradeInstallation(site, product, environment, appId, majorVersionId, isCodeUpgrade);
                 return isAlreadyUpdated;
             }
             else {
                 await this.installAppSiteCommand.execute({
@@ -110,9 +110,9 @@
             environment: environmentOption
         });
         return installations;
     }
-    async getInstallationToUpgrade(siteOption, productOption, environmentOption) {
+    async getInstallationToUpgrade(siteOption, productOption, environmentOption, isCodeUpgrade, targetVersion, isLatest) {
         const matchingInstallations = await this.getAppInstallations(siteOption, productOption, environmentOption);
         let selectedInstallationToUpgrade;
         if (siteOption && productOption?.length) {
             if (!matchingInstallations.length) {
@@ -120,9 +120,9 @@
             }
             selectedInstallationToUpgrade = matchingInstallations[0];
         }
         else {
-            selectedInstallationToUpgrade = await this.installView.promptForUpgrade(matchingInstallations);
+            selectedInstallationToUpgrade = await this.installView.promptForUpgrade(matchingInstallations, isCodeUpgrade, targetVersion, isLatest);
         }
         const { site, product, environmentKey, environmentType, version } = selectedInstallationToUpgrade;
         const productName = (0, cli_shared_1.productDisplayName)(product);
         return {
@@ -164,8 +164,27 @@
             throw new cli_shared_1.UserError(cli_shared_1.Text.error.licenseOverrideErrors.prodSupport);
         }
         return upperCaseLicense;
     }
+    isValidUpgradeTarget(value) {
+        const validTargets = ['all', 'code'];
+        return validTargets.includes(value);
+    }
+    validateUpgradeTarget(upgradeTarget) {
+        if (!upgradeTarget) {
+            return { isUpgrade: false, isCodeUpgrade: false };
+        }
+        if (upgradeTarget === true) {
+            return { isUpgrade: true, isCodeUpgrade: false };
+        }
+        if (!this.isValidUpgradeTarget(upgradeTarget)) {
+            throw new cli_shared_1.ValidationError(cli_shared_1.Text.error.invalidUpgradeTarget);
+        }
+        return {
+            isUpgrade: true,
+            isCodeUpgrade: upgradeTarget === 'code'
+        };
+    }
     checkForUIKit1Modules = (modules) => {
         if (!modules)
             return;
         const uiKit1Modules = (0, cli_shared_1.findUIKit1Modules)(modules);
@@ -182,19 +201,17 @@
         return result;
     }
     async run({ environment, site, products, upgrade, confirmScopes, license, licenseModes, usersWithAccess, nonInteractive, majorVersion }) {
         const { id } = await this.appConfigProvider();
-        const text = upgrade ? cli_shared_1.Text.upgrade : cli_shared_1.Text.install;
+        const { isUpgrade, isCodeUpgrade } = this.validateUpgradeTarget(upgrade);
+        const text = isUpgrade ? cli_shared_1.Text.upgrade : cli_shared_1.Text.install;
         const validLicense = this.validateLicenseOption(license, environment);
         const overrides = await this.validateEcosystemAppInstallationOverridesInput(licenseModes, usersWithAccess, environment);
         let environmentPermissions;
         let requiredProducts;
         if (majorVersion) {
-            if (upgrade) {
-                throw new cli_shared_1.UserError(cli_shared_1.Text.install.error.majorVersionAndUpgrade);
-            }
             const majorVersionResult = await this.getVersionPermissionsByMajorVersion(id, environment, majorVersion);
-            if (!majorVersionResult.isLatest && majorVersionResult.version) {
+            if (!isUpgrade && !majorVersionResult.isLatest && majorVersionResult.version) {
                 this.ui.warn(cli_shared_1.Text.install.majorVersionIsNotLatest(majorVersionResult.version));
                 if (!nonInteractive && !(await this.ui.confirm(cli_shared_1.Text.install.devAppInstallConfirm)))
                     return;
             }
@@ -205,10 +222,10 @@
             environmentPermissions = await this.installationService.getAppEnvironmentPermissions(id, environment);
             requiredProducts = environmentPermissions?.requiredProducts;
         }
         let scopesFromLastInstallation = new Set();
-        if (upgrade) {
-            const upgradeResult = await this.getInstallationToUpgrade(site, products?.[0], environment);
+        if (isUpgrade) {
+            const upgradeResult = await this.getInstallationToUpgrade(site, products?.[0], environment, isCodeUpgrade, environmentPermissions?.version, environmentPermissions?.isLatest);
             environment = upgradeResult.environment;
             site = upgradeResult.site;
             products = [upgradeResult.product];
             scopesFromLastInstallation = new Set(upgradeResult.scopes);
@@ -240,9 +257,9 @@
         this.checkForUIKit1Modules(modules);
         const { manifestEgressAddresses, manifestScopes } = this.extractManifestData(manifestEgressEntries, permissions);
         const differenceInScopes = environmentScopes.filter((x) => !scopesFromLastInstallation.has(x));
         const listScopes = await this.convertListScope(differenceInScopes);
-        const scopesConfirmationResult = await this.installView.promptForPermissionsConfirmation(environmentPermissions, listScopes, [...manifestScopes], manifestEgressAddresses, environment, confirmScopes, !!nonInteractive, text, !!majorVersion);
+        const scopesConfirmationResult = await this.installView.promptForPermissionsConfirmation(environmentPermissions, listScopes, [...manifestScopes], manifestEgressAddresses, environment, confirmScopes, !!nonInteractive, text, !!majorVersion, isCodeUpgrade);
         if (!scopesConfirmationResult)
             return;
         const successfulProducts = [];
         const failedProducts = [];
@@ -252,9 +269,9 @@
                 return;
         }
         for (const product of products) {
             try {
-                const isAlreadyUpdated = await this.installOrUpgrade(upgrade, environment, environmentType, site, product, id, text, validLicense, overrides, environmentPermissions?.versionId);
+                const isAlreadyUpdated = await this.installOrUpgrade(isUpgrade, environment, environmentType, site, product, id, text, isCodeUpgrade, validLicense, overrides, environmentPermissions?.versionId);
                 if (isAlreadyUpdated) {
                     this.ui.info(cli_shared_1.Text.upgrade.alreadyUpdated.banner(environment, (0, cli_shared_1.productDisplayName)(product), site.host));
                 }
                 else {
@@ -270,11 +287,16 @@
             }
             await this.checkForMultiProductScopes(environmentScopes, site, environment);
         }
         if (successfulProducts.length) {
-            this.ui.info(text.success.banner(environment, environmentType, (0, cli_shared_1.productDisplayName)(successfulProducts.join(', ')), site.host));
+            if (isUpgrade) {
+                this.ui.info(text.success.banner(environment, environmentType, (0, cli_shared_1.productDisplayName)(successfulProducts.join(', ')), site.host, environmentPermissions?.isLatest, environmentPermissions?.version, isCodeUpgrade));
+            }
+            else {
+                this.ui.info(text.success.banner(environment, environmentType, (0, cli_shared_1.productDisplayName)(successfulProducts.join(', ')), site.host));
+            }
         }
-        else if (!upgrade) {
+        else if (!isUpgrade) {
             this.ui.info(cli_shared_1.Text.install.failedAll(site, environment));
         }
         if (failedProducts.length) {
             throw new cli_shared_1.PartialInstallationError(cli_shared_1.Text.error.partialInstallation(failedProducts));