{"version":3,"sources":["../../../packages/core/data/core-environment.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAIpG;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACnC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,oBAAY,yBAAyB;IACjC;;OAEG;IACH,YAAY,IAAI;IAEhB;;OAEG;IACH,OAAO,IAAI;IAEX;;OAEG;IACH,GAAG,IAAI;CACV;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,kBAAkB,CAAC,EAAE,yBAAyB,GAAG,MAAM,CAAC;IAExD;;OAEG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;GAIG;AACH,qBAAa,eAAe;IACxB;;OAEG;IACH,OAAc,mBAAmB,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC7D,OAAc,oBAAoB,EAAE,oBAAoB,CAAC;IACzD,OAAc,YAAY,EAAE,YAAY,CAAC;IAEzC;;;;;;OAMG;WACW,UAAU,CACpB,eAAe,EAAE,sBAAsB,EACvC,mBAAmB,EAAE,0BAA0B,EAC/C,cAAc,CAAC,EAAE,cAAc,GAChC,OAAO,CAAC,IAAI,CAAC;IAgGhB;;;OAGG;WACW,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IASnE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;CAS9B","file":"core-environment.d.ts","sourcesContent":["import { LogLevel } from '../diagnostics/log-level';\r\nimport { EnvironmentModule } from '../manifest/environment-modules';\r\nimport { ManifestLoader } from '../manifest/manifest-loader';\r\nimport { PerformanceTracker } from '../performance/performance-tracker';\r\nimport { AccessibilityManager } from './accessibility-manager';\r\nimport { AssetManager } from './asset-manager';\r\nimport { LocaleSet, LocalizationManager, LocalizationManagerOptions } from './localization-manager';\r\nimport { NativeQ } from './native-q';\r\nimport { PowerShell } from './powershell';\r\n\r\n/**\r\n * Interface for manifest loading.\r\n */\r\nexport interface ManifestLoadingOptions {\r\n    /**\r\n     * Specify shell or module name.\r\n     */\r\n    name: string;\r\n\r\n    /**\r\n     * Specify the version of shell or module.\r\n     */\r\n    version: string;\r\n\r\n    /**\r\n     * Specify the name of PowerShell module.\r\n     */\r\n    powerShellModuleName?: string;\r\n\r\n    /**\r\n     * Specify the name of PowerShell prefix.\r\n     */\r\n    powerShellPrefix?: string;\r\n\r\n    /**\r\n     * Specify angular-cli production state used by the module loading only.\r\n     */\r\n    isProduction?: boolean;\r\n\r\n    /**\r\n     * Specify shell origin URL for sideloading debugging.\r\n     */\r\n    shellOrigin?: string;\r\n}\r\n\r\n/**\r\n * The enum switch to use predefined endpoints.\r\n */\r\nexport enum RuntimePowerShellEndpoint {\r\n    /**\r\n     * Not specify.\r\n     */\r\n    InlineScript = 0,\r\n\r\n    /**\r\n     * The default endpoint. Microsoft.PowerShell\r\n     */\r\n    Default = 1,\r\n\r\n    /**\r\n     * The SME endpoint. Microsoft.SME.PowerShell\r\n     */\r\n    Sme = 2\r\n}\r\n\r\n/**\r\n * Interface for runtime options.\r\n */\r\nexport interface RuntimeOptions {\r\n    /**\r\n     * Enable websocket if true.\r\n     */\r\n    websocket?: boolean;\r\n\r\n    /**\r\n     * Enable SSH websocket if true.\r\n     */\r\n    sshWebsocket?: boolean;\r\n\r\n    /**\r\n     * Force to use module functions instead of embedded script on PowerShell calls.\r\n     */\r\n    powerShellEndpoint?: RuntimePowerShellEndpoint | string;\r\n\r\n    /**\r\n     * Disable style injection if true.\r\n     */\r\n    disableStyleInjection?: boolean;\r\n\r\n    /**\r\n     * Disable accessibility if true.\r\n     */\r\n    disableAccessibility?: boolean;\r\n\r\n    /**\r\n     * Configure CSS version for supporting v2 that is 400% zoom\r\n     */\r\n    cssV2?: boolean;\r\n\r\n    /**\r\n     * Determines if it is react extension or not. If React extension, will not load any css from shell.\r\n     */\r\n    reactExtension?: boolean;\r\n}\r\n\r\n/**\r\n * Class to initialize and the SME environment\r\n *  (Localized string cannot be used in this class due to initialization phase when the strings are not ready yet.)\r\n * @dynamic\r\n */\r\nexport class CoreEnvironment {\r\n    /**\r\n     * The localization manager once the environment has been initialized\r\n     */\r\n    public static localizationManager: LocalizationManager<void>;\r\n    public static accessibilityManager: AccessibilityManager;\r\n    public static assetManager: AssetManager;\r\n\r\n    /**\r\n     * Initializes the environment with manifest loading mode.\r\n     *\r\n     * @param manifestOptions the name of manifest loading options.\r\n     * @param localizationOptions the options to initialize the Localization Manager\r\n     * @param runtimeOptions the optional runtime options.\r\n     */\r\n    public static initialize(\r\n        manifestOptions: ManifestLoadingOptions,\r\n        localizationOptions: LocalizationManagerOptions,\r\n        runtimeOptions?: RuntimeOptions\r\n    ): Promise<void> {\r\n        if (!manifestOptions || !manifestOptions.name) {\r\n            // no localization.\r\n            throw new Error('CoreEnvironment.initialize() - Argument error: manifestOptions.');\r\n        }\r\n        PerformanceTracker.coreEnvironmentInitStarted();\r\n        PerformanceTracker.initializeLighthouseMetricsTrackers();\r\n\r\n        const InitOptions: MsftSme.MsftSmeInit = {\r\n            mode: MsftSme.EnvironmentMode.LoadEmbedded,\r\n            moduleName: manifestOptions.name,\r\n            moduleVersion: manifestOptions.version,\r\n            powerShellModuleName: manifestOptions.powerShellModuleName,\r\n            powerShellPrefix: manifestOptions.powerShellPrefix,\r\n            isProduction: manifestOptions.isProduction,\r\n            sessionId: 'N/A',\r\n            logLevel: MsftSme.consoleDebug() === null ? LogLevel.Warning : MsftSme.consoleDebug(),\r\n            sessionExpiration: 0,\r\n            performanceProfile: false,\r\n            developerGuide: false,\r\n            experiments: MsftSme.experiments(),\r\n            connectivityLevel: '',\r\n            isShell: false,\r\n            shellVersion: null,\r\n            gatewayApiVersion: null,\r\n            gatewayPlatform: null\r\n        };\r\n        if (manifestOptions.name === EnvironmentModule.nameOfShell) {\r\n            // shell manifest loading\r\n            InitOptions.isShell = true;\r\n            InitOptions.mode = MsftSme.EnvironmentMode.Load;\r\n            InitOptions.sessionId = MsftSme.newGuid();\r\n        } else if (manifestOptions.isProduction) {\r\n            // module on the production using the same site origin from location information\r\n            // if not specified by manifestOptions.shellOrigin.\r\n            InitOptions.shellOrigin = manifestOptions && manifestOptions.shellOrigin ? manifestOptions.shellOrigin : window.location.origin;\r\n        } else {\r\n            // module side-loading manifest. non production environment accept any shell origin.\r\n            InitOptions.shellOrigin = '*';\r\n        }\r\n\r\n        const self = MsftSme.self();\r\n        self.Init = InitOptions;\r\n\r\n        // enable websocket stream query only if requested.\r\n        if (runtimeOptions && runtimeOptions.websocket) {\r\n            self.Init.websocket = true;\r\n        }\r\n\r\n        // enable SSH websocket stream query only if requested.\r\n        if (runtimeOptions && runtimeOptions.sshWebsocket) {\r\n            self.Init.sshWebsocket = true;\r\n        }\r\n\r\n        // enable websocket stream query only if requested.\r\n        if (runtimeOptions && runtimeOptions.powerShellEndpoint) {\r\n            if (typeof runtimeOptions.powerShellEndpoint === 'string') {\r\n                self.Init.powerShellEndpoint = <string>runtimeOptions.powerShellEndpoint;\r\n            } else {\r\n                const type = <RuntimePowerShellEndpoint>runtimeOptions.powerShellEndpoint;\r\n                switch (type) {\r\n                    case RuntimePowerShellEndpoint.Default:\r\n                        self.Init.powerShellEndpoint = PowerShell.defaultPowerShellEndpoint;\r\n                        break;\r\n                    case RuntimePowerShellEndpoint.Sme:\r\n                        self.Init.powerShellEndpoint = PowerShell.smePowerShellEndpoint;\r\n                        break;\r\n                }\r\n            }\r\n        }\r\n\r\n        CoreEnvironment.localizationManager = new LocalizationManager<any>(localizationOptions);\r\n\r\n        if (!runtimeOptions || !runtimeOptions.disableStyleInjection) {\r\n            CoreEnvironment.assetManager = new AssetManager(CoreEnvironment.localizationManager, runtimeOptions?.cssV2, runtimeOptions?.reactExtension);\r\n        }\r\n\r\n        const deferred = NativeQ.defer<void>();\r\n        PerformanceTracker.manifestLoadStarted();\r\n        ManifestLoader.loadManifest()\r\n            .then(() => {\r\n                PerformanceTracker.localizationStarted();\r\n                return CoreEnvironment.localization();\r\n            })\r\n            .then(() => {\r\n                if (!runtimeOptions || !runtimeOptions.disableAccessibility) {\r\n                    PerformanceTracker.accessibilityManagerStarted();\r\n                    CoreEnvironment.accessibilityManager = new AccessibilityManager();\r\n                }\r\n                deferred.resolve();\r\n            })\r\n            .catch(deferred.reject)\r\n            .finally(() => PerformanceTracker.coreEnvironmentInitCompleted());\r\n        return deferred.promise;\r\n    }\r\n\r\n    /**\r\n     * Validate and load localized strings if the localeId doesn't match with current locale Id.\r\n     * @param localeSet the local information set.\r\n     */\r\n    public static moduleLoadLocale(localeSet: LocaleSet): Promise<void> {\r\n        if (CoreEnvironment.localizationManager.localeId.id !== localeSet.id) {\r\n            CoreEnvironment.localizationManager.saveLocale(localeSet);\r\n            return CoreEnvironment.localization();\r\n        }\r\n\r\n        return NativeQ.resolved<void>();\r\n    }\r\n\r\n    /**\r\n     * Initialize and load localization data by option settings.\r\n     */\r\n    private static localization(): Promise<void> {\r\n        const self = MsftSme.self();\r\n        CoreEnvironment.localizationManager.updateDocumentLanguage();\r\n        return CoreEnvironment.localizationManager.fetchLocalizedStrings()\r\n            .toPromise()\r\n            .then(strings => {\r\n                self.Resources.strings = strings;\r\n            });\r\n    }\r\n}\r\n"]}