/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { Event } from 'vs/base/common/event'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { IExtension, IScannedExtension, ExtensionType, ITranslatedScannedExtension } from 'vs/platform/extensions/common/extensions'; import { IExtensionManagementService, IGalleryExtension, IExtensionIdentifier } from 'vs/platform/extensionManagement/common/extensionManagement'; export const IExtensionManagementServerService = createDecorator('extensionManagementServerService'); export interface IExtensionManagementServer { id: string; label: string; extensionManagementService: IExtensionManagementService; } export interface IExtensionManagementServerService { readonly _serviceBrand: undefined; readonly localExtensionManagementServer: IExtensionManagementServer | null; readonly remoteExtensionManagementServer: IExtensionManagementServer | null; readonly webExtensionManagementServer: IExtensionManagementServer | null; getExtensionManagementServer(extension: IExtension): IExtensionManagementServer | null; } export const enum EnablementState { DisabledByExtensionKind, DisabledByEnvironemt, DisabledGlobally, DisabledWorkspace, EnabledGlobally, EnabledWorkspace } export const IWorkbenchExtensionEnablementService = createDecorator('extensionEnablementService'); export interface IWorkbenchExtensionEnablementService { readonly _serviceBrand: undefined; readonly allUserExtensionsDisabled: boolean; /** * Event to listen on for extension enablement changes */ readonly onEnablementChanged: Event; /** * Returns the enablement state for the given extension */ getEnablementState(extension: IExtension): EnablementState; /** * Returns `true` if the enablement can be changed. */ canChangeEnablement(extension: IExtension): boolean; /** * Returns `true` if the enablement can be changed. */ canChangeWorkspaceEnablement(extension: IExtension): boolean; /** * Returns `true` if the given extension identifier is enabled. */ isEnabled(extension: IExtension): boolean; /** * Returns `true` if the given extension identifier is disabled globally. * Extensions can be disabled globally or in workspace or both. * If an extension is disabled in both then enablement state shows only workspace. * This will */ isDisabledGlobally(extension: IExtension): boolean; /** * Enable or disable the given extension. * if `workspace` is `true` then enablement is done for workspace, otherwise globally. * * Returns a promise that resolves to boolean value. * if resolves to `true` then requires restart for the change to take effect. * * Throws error if enablement is requested for workspace and there is no workspace */ setEnablement(extensions: IExtension[], state: EnablementState): Promise; } export const IWebExtensionsScannerService = createDecorator('IWebExtensionsScannerService'); export interface IWebExtensionsScannerService { readonly _serviceBrand: undefined; scanExtensions(type?: ExtensionType): Promise; scanAndTranslateExtensions(type?: ExtensionType): Promise; canAddExtension(galleryExtension: IGalleryExtension): Promise; addExtension(galleryExtension: IGalleryExtension): Promise; removeExtension(identifier: IExtensionIdentifier, version?: string): Promise; }