Path: blob/main/src/vs/workbench/services/extensionManagement/common/extensionManagementServerService.ts
3296 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/45import { localize } from '../../../../nls.js';6import { ExtensionInstallLocation, IExtensionManagementServer, IExtensionManagementServerService } from './extensionManagement.js';7import { IRemoteAgentService } from '../../remote/common/remoteAgentService.js';8import { Schemas } from '../../../../base/common/network.js';9import { IChannel } from '../../../../base/parts/ipc/common/ipc.js';10import { InstantiationType, registerSingleton } from '../../../../platform/instantiation/common/extensions.js';11import { ILabelService } from '../../../../platform/label/common/label.js';12import { isWeb } from '../../../../base/common/platform.js';13import { IInstantiationService } from '../../../../platform/instantiation/common/instantiation.js';14import { WebExtensionManagementService } from './webExtensionManagementService.js';15import { IExtension } from '../../../../platform/extensions/common/extensions.js';16import { RemoteExtensionManagementService } from './remoteExtensionManagementService.js';1718export class ExtensionManagementServerService implements IExtensionManagementServerService {1920declare readonly _serviceBrand: undefined;2122readonly localExtensionManagementServer: IExtensionManagementServer | null = null;23readonly remoteExtensionManagementServer: IExtensionManagementServer | null = null;24readonly webExtensionManagementServer: IExtensionManagementServer | null = null;2526constructor(27@IRemoteAgentService remoteAgentService: IRemoteAgentService,28@ILabelService labelService: ILabelService,29@IInstantiationService instantiationService: IInstantiationService,30) {31const remoteAgentConnection = remoteAgentService.getConnection();32if (remoteAgentConnection) {33const extensionManagementService = instantiationService.createInstance(RemoteExtensionManagementService, remoteAgentConnection.getChannel<IChannel>('extensions'));34this.remoteExtensionManagementServer = {35id: 'remote',36extensionManagementService,37get label() { return labelService.getHostLabel(Schemas.vscodeRemote, remoteAgentConnection.remoteAuthority) || localize('remote', "Remote"); },38};39}40if (isWeb) {41const extensionManagementService = instantiationService.createInstance(WebExtensionManagementService);42this.webExtensionManagementServer = {43id: 'web',44extensionManagementService,45label: localize('browser', "Browser"),46};47}48}4950getExtensionManagementServer(extension: IExtension): IExtensionManagementServer {51if (extension.location.scheme === Schemas.vscodeRemote) {52return this.remoteExtensionManagementServer!;53}54if (this.webExtensionManagementServer) {55return this.webExtensionManagementServer;56}57throw new Error(`Invalid Extension ${extension.location}`);58}5960getExtensionInstallLocation(extension: IExtension): ExtensionInstallLocation | null {61const server = this.getExtensionManagementServer(extension);62return server === this.remoteExtensionManagementServer ? ExtensionInstallLocation.Remote : ExtensionInstallLocation.Web;63}64}6566registerSingleton(IExtensionManagementServerService, ExtensionManagementServerService, InstantiationType.Delayed);676869