npm package diff

Package: @forge/cli

Versions: 10.13.6 - 11.0.0-next.18

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

Index: package/out/command-line/controller/version-controller.js
===================================================================
--- package/out/command-line/controller/version-controller.js
+++ package/out/command-line/controller/version-controller.js
@@ -0,0 +1,114 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.VersionController = void 0;
+const tslib_1 = require("tslib");
+const fs_1 = require("fs");
+const diff = tslib_1.__importStar(require("diff"));
+const defaultProperties = ['appVersion', 'deploymentDateTime', 'environmentType'];
+function filterObjectProperties(source, filteredProperties, defaultProperties) {
+    const result = {};
+    for (const prop of [...filteredProperties, ...defaultProperties]) {
+        result[prop] = source[prop];
+    }
+    return result;
+}
+class VersionController {
+    versionService;
+    view;
+    constructor(versionService, view) {
+        this.versionService = versionService;
+        this.view = view;
+    }
+    async getAppVersionDiff({ environment, version1, version2, outFile }) {
+        const [version1Details, version2Details] = await this.view.displayDiffProgress(() => Promise.all([
+            this.versionService.getAppVersionDetails(environment, version1),
+            this.versionService.getAppVersionDetails(environment, version2)
+        ]));
+        if (outFile) {
+            this.writeDiffToFile(version1Details, version2Details, outFile);
+        }
+        else {
+            this.displayDiffInText(version1Details, version2Details, environment);
+        }
+    }
+    async getAppVersionDetails({ environment, majorVersion, json = false, outFile, nonInteractive }) {
+        let filteredProperties = [];
+        if (!nonInteractive) {
+            filteredProperties = await this.view.promptVersionDetailsProperties();
+        }
+        const request = this.versionService.getAppVersionDetails(environment, majorVersion);
+        const versionDetails = nonInteractive ? await request : await this.view.displayDetailsProgress(() => request);
+        if (filteredProperties.length === 0) {
+            filteredProperties = Object.keys(versionDetails);
+        }
+        const filteredVersionDetails = filterObjectProperties(versionDetails, filteredProperties, defaultProperties);
+        if (outFile) {
+            this.writeToFile(filteredVersionDetails, outFile);
+        }
+        else if (json) {
+            this.displayInJson(filteredVersionDetails);
+        }
+        else {
+            this.displayDetailsInTable(filteredVersionDetails, environment);
+        }
+    }
+    writeToFile(data, outFile) {
+        this.view.displayWriteToFile(outFile);
+        (0, fs_1.writeFileSync)(outFile, JSON.stringify(data, null, 2));
+    }
+    displayInJson(data) {
+        this.view.displayDataInJson(data);
+    }
+    displayDetailsInTable(details, environment) {
+        this.view.displayVersionDetailsBanner(details.appVersion, environment, details.environmentType);
+        this.view.displayDetailsAsTable(details);
+    }
+    displayDiffInText(version1, version2, environment) {
+        this.view.displayDiffBanner(version1.appVersion, version2.appVersion, environment, version1.environmentType);
+        this.view.displayDiffAsTable({ v1: version1.appVersion, v2: version2.appVersion }, [
+            {
+                key: 'scopes',
+                diff: diff.diffJson(version1.scopes, version2.scopes)
+            },
+            {
+                key: 'deployment date',
+                diff: diff.diffJson(version1.deploymentDateTime, version2.deploymentDateTime)
+            },
+            {
+                key: 'egress',
+                diff: diff.diffJson(version1.egresses, version2.egresses)
+            },
+            { key: 'policies', diff: diff.diffJson(version1.policies, version2.policies) },
+            { key: 'connect keys', diff: diff.diffJson(version1.connectKeys, version2.connectKeys) },
+            {
+                key: 'functions',
+                diff: diff.diffJson(version1.functions, version2.functions)
+            },
+            { key: 'modules', diff: diff.diffJson(version1.modules, version2.modules) },
+            { key: 'remotes', diff: diff.diffJson(version1.remotes, version2.remotes) },
+            { key: 'license', diff: diff.diffJson('' + version1.requiresLicense, '' + version2.requiresLicense) }
+        ]);
+    }
+    writeDiffToFile(version1, version2, outFile) {
+        this.view.displayWriteToFile(outFile);
+        const patch = diff.createTwoFilesPatch(`${version1.appVersion}`, `${version2.appVersion}`, JSON.stringify(version1, null, 2), JSON.stringify(version2, null, 2));
+        (0, fs_1.writeFileSync)(outFile, patch);
+    }
+    async getVersionList({ environment, json, outFile, nonInteractive }) {
+        const request = this.versionService.getAppVersionOverviewList(environment);
+        const versionList = nonInteractive || json ? await request : await this.view.displayListProgress(() => request);
+        if (!nonInteractive && !json) {
+            this.view.displayListBanner(versionList.length, environment, versionList[0].environmentType);
+        }
+        if (outFile) {
+            this.writeToFile(versionList, outFile);
+        }
+        else if (json) {
+            this.displayInJson(versionList);
+        }
+        else {
+            this.view.displayVersionList(versionList);
+        }
+    }
+}
+exports.VersionController = VersionController;