{"version":3,"sources":["../../../packages/core/shared/tool-inventory/tool-inventory-cache.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,mBAAmB,EAAyB,MAAM,kBAAkB,CAAC;AAEhH;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,WAAW,CAAC,aAAa,EAAE,iBAAiB,EAAE,mBAAmB,CAAC;IAU1F,OAAO,CAAC,UAAU;IAT9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAmC;IAC1D,OAAO,CAAC,MAAM,CAAC,aAAa,CAAK;IAEjC;;;;;OAKG;gBACiB,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,kBAAkB;IAWxE;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAuCjB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;IAItB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAKvB;;;;OAIG;IACH,OAAO,CAAC,aAAa;CAIxB","file":"tool-inventory-cache.d.ts","sourcesContent":["import { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { AppContext } from '../../data/app-context';\r\nimport { PowerShellCommand } from '../../data/powershell';\r\nimport { EnvironmentModuleToolState } from '../../manifest/environment-modules';\r\nimport { SharedCache, SharedCacheOptions } from '../shared-cache';\r\nimport { ToolInventory, ToolInventoryData, ToolInventoryParams, ToolInventoryProperty } from './tool-inventory';\r\n\r\n/**\r\n * Tool Inventory cache class.\r\n */\r\nexport class ToolInventoryCache extends SharedCache<ToolInventory, ToolInventoryData, ToolInventoryParams> {\r\n    private static uniqueId = '@msft-sme/shell:toolInventory';\r\n    private static uniqueVersion = 0;\r\n\r\n    /**\r\n     * Initializes a new instance of the ToolInventoryCache class.\r\n     *\r\n     * @param appContext the app context.\r\n     * @param options the option of shared cache.\r\n     */\r\n    constructor(private appContext: AppContext, options?: SharedCacheOptions) {\r\n        super(\r\n            ToolInventoryCache.uniqueId,\r\n            ToolInventoryCache.uniqueVersion,\r\n            (params) => this.dataInstanceId(params),\r\n            (instance) => this.dataSerialize(instance),\r\n            (serialized) => this.dataDeserialize(serialized),\r\n            (params) => this.dataQuery(params),\r\n            options);\r\n    }\r\n\r\n    /**\r\n     * Defines how to collect the tool inventory data.\r\n     *\r\n     * @param params the server inventory query params.\r\n     * @return the Observable of ServerInventory data.\r\n     */\r\n    private dataQuery(params: ToolInventoryParams): Observable<ToolInventory> {\r\n        const psSession = this.appContext.powerShell.createSession(params.name, null, params.requestOptions);\r\n        return this.appContext.powerShell.run(\r\n            psSession,\r\n            params.command ? <PowerShellCommand>{ command: params.command, script: params.script, module: params.module } : params.script)\r\n            .pipe(\r\n                map((data: any) => {\r\n                    const inventory = new ToolInventory(params.name);\r\n                    if (data && data.results && data.results.length > 0) {\r\n                        const result = data.results[0];\r\n                        inventory.name = params.name;\r\n                        inventory.id = params.id;\r\n                        switch (result.state) {\r\n                            case EnvironmentModuleToolState[EnvironmentModuleToolState.Available]:\r\n                                inventory.state = EnvironmentModuleToolState.Available;\r\n                                break;\r\n                            case EnvironmentModuleToolState[EnvironmentModuleToolState.NotConfigured]:\r\n                                inventory.state = EnvironmentModuleToolState.NotConfigured;\r\n                                break;\r\n                            case EnvironmentModuleToolState[EnvironmentModuleToolState.NotSupported]:\r\n                            default:\r\n                                inventory.state = EnvironmentModuleToolState.NotSupported;\r\n                                break;\r\n                        }\r\n\r\n                        inventory.message = result.message;\r\n                        inventory.properties = [];\r\n                        const properties: ToolInventoryProperty[] = result.properties;\r\n                        if (properties) {\r\n                            for (const pair of properties) {\r\n                                inventory.properties.push(pair);\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    return inventory;\r\n                }));\r\n    }\r\n\r\n    /**\r\n     * Defines how to identify the cache entry by params.\r\n     *\r\n     * @param params the tool inventory query params.\r\n     * @return the id string.\r\n     */\r\n    private dataInstanceId(params: ToolInventoryParams): string {\r\n        return `${params.name}:${params.id}`;\r\n    }\r\n\r\n    /**\r\n     * Defines how to deserialize the class object from seralized data.\r\n     *\r\n     * @param serialized the serialized string;\r\n     */\r\n    private dataDeserialize(serialized: string): ToolInventory {\r\n        const inventory: ToolInventoryData = JSON.parse(serialized);\r\n        return new ToolInventory(inventory.name, inventory);\r\n    }\r\n\r\n    /**\r\n     * Defines how to serialize the class object to seralized data.\r\n     *\r\n     * @param instance the class instance.\r\n     */\r\n    private dataSerialize(instance: ToolInventory): string {\r\n        // automatically stripped out class related data.\r\n        return JSON.stringify(instance);\r\n    }\r\n}\r\n"]}