Path: blob/main/src/vs/workbench/services/extensionManagement/common/extensionManagement.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 { Event } from '../../../../base/common/event.js';6import { createDecorator, refineServiceDecorator } from '../../../../platform/instantiation/common/instantiation.js';7import { IExtension, ExtensionType, IExtensionManifest, IExtensionIdentifier } from '../../../../platform/extensions/common/extensions.js';8import { IExtensionManagementService, IGalleryExtension, ILocalExtension, InstallOptions, InstallExtensionEvent, DidUninstallExtensionEvent, InstallExtensionResult, Metadata, UninstallExtensionEvent, DidUpdateExtensionMetadata, InstallExtensionInfo } from '../../../../platform/extensionManagement/common/extensionManagement.js';9import { URI } from '../../../../base/common/uri.js';10import { IMarkdownString } from '../../../../base/common/htmlContent.js';1112export type DidChangeProfileEvent = { readonly added: ILocalExtension[]; readonly removed: ILocalExtension[] };1314export const IProfileAwareExtensionManagementService = refineServiceDecorator<IExtensionManagementService, IProfileAwareExtensionManagementService>(IExtensionManagementService);15export interface IProfileAwareExtensionManagementService extends IExtensionManagementService {16readonly onProfileAwareDidInstallExtensions: Event<readonly InstallExtensionResult[]>;17readonly onProfileAwareDidUninstallExtension: Event<DidUninstallExtensionEvent>;18readonly onProfileAwareDidUpdateExtensionMetadata: Event<DidUpdateExtensionMetadata>;19readonly onDidChangeProfile: Event<DidChangeProfileEvent>;20}2122export interface IExtensionManagementServer {23readonly id: string;24readonly label: string;25readonly extensionManagementService: IProfileAwareExtensionManagementService;26}2728export const enum ExtensionInstallLocation {29Local = 1,30Remote,31Web32}3334export const IExtensionManagementServerService = createDecorator<IExtensionManagementServerService>('extensionManagementServerService');35export interface IExtensionManagementServerService {36readonly _serviceBrand: undefined;37readonly localExtensionManagementServer: IExtensionManagementServer | null;38readonly remoteExtensionManagementServer: IExtensionManagementServer | null;39readonly webExtensionManagementServer: IExtensionManagementServer | null;40getExtensionManagementServer(extension: IExtension): IExtensionManagementServer | null;41getExtensionInstallLocation(extension: IExtension): ExtensionInstallLocation | null;42}4344export interface IResourceExtension {45readonly type: 'resource';46readonly identifier: IExtensionIdentifier;47readonly location: URI;48readonly manifest: IExtensionManifest;49readonly readmeUri?: URI;50readonly changelogUri?: URI;51}5253export type InstallExtensionOnServerEvent = InstallExtensionEvent & { server: IExtensionManagementServer };54export type UninstallExtensionOnServerEvent = UninstallExtensionEvent & { server: IExtensionManagementServer };55export type DidUninstallExtensionOnServerEvent = DidUninstallExtensionEvent & { server: IExtensionManagementServer };56export type DidChangeProfileForServerEvent = DidChangeProfileEvent & { server: IExtensionManagementServer };5758export interface IPublisherInfo {59readonly publisher: string;60readonly publisherDisplayName: string;61}6263export const IWorkbenchExtensionManagementService = refineServiceDecorator<IProfileAwareExtensionManagementService, IWorkbenchExtensionManagementService>(IProfileAwareExtensionManagementService);64export interface IWorkbenchExtensionManagementService extends IProfileAwareExtensionManagementService {65readonly _serviceBrand: undefined;6667readonly onInstallExtension: Event<InstallExtensionOnServerEvent>;68readonly onDidInstallExtensions: Event<readonly InstallExtensionResult[]>;69readonly onUninstallExtension: Event<UninstallExtensionOnServerEvent>;70readonly onDidUninstallExtension: Event<DidUninstallExtensionOnServerEvent>;71readonly onDidChangeProfile: Event<DidChangeProfileForServerEvent>;72readonly onDidEnableExtensions: Event<IExtension[]>;7374readonly onProfileAwareDidInstallExtensions: Event<readonly InstallExtensionResult[]>;75readonly onProfileAwareDidUninstallExtension: Event<DidUninstallExtensionOnServerEvent>;76readonly onProfileAwareDidUpdateExtensionMetadata: Event<DidUpdateExtensionMetadata>;7778getExtensions(locations: URI[]): Promise<IResourceExtension[]>;79getInstalledWorkspaceExtensionLocations(): URI[];80getInstalledWorkspaceExtensions(includeInvalid: boolean): Promise<ILocalExtension[]>;8182canInstall(extension: IGalleryExtension | IResourceExtension): Promise<true | IMarkdownString>;8384getInstallableServers(extension: IGalleryExtension): Promise<IExtensionManagementServer[]>;85installVSIX(location: URI, manifest: IExtensionManifest, installOptions?: InstallOptions): Promise<ILocalExtension>;86installFromGallery(gallery: IGalleryExtension, installOptions?: InstallOptions, servers?: IExtensionManagementServer[]): Promise<ILocalExtension>;87installFromLocation(location: URI): Promise<ILocalExtension>;88installResourceExtension(extension: IResourceExtension, installOptions: InstallOptions): Promise<ILocalExtension>;8990updateFromGallery(gallery: IGalleryExtension, extension: ILocalExtension, installOptions?: InstallOptions): Promise<ILocalExtension>;91updateMetadata(local: ILocalExtension, metadata: Partial<Metadata>): Promise<ILocalExtension>;9293requestPublisherTrust(extensions: InstallExtensionInfo[]): Promise<void>;94isPublisherTrusted(extension: IGalleryExtension): boolean;95getTrustedPublishers(): IPublisherInfo[];96trustPublishers(...publishers: IPublisherInfo[]): void;97untrustPublishers(...publishers: string[]): void;98}99100export const enum EnablementState {101DisabledByTrustRequirement,102DisabledByExtensionKind,103DisabledByEnvironment,104EnabledByEnvironment,105DisabledByMalicious,106DisabledByVirtualWorkspace,107DisabledByInvalidExtension,108DisabledByAllowlist,109DisabledByExtensionDependency,110DisabledGlobally,111DisabledWorkspace,112EnabledGlobally,113EnabledWorkspace114}115116export const IWorkbenchExtensionEnablementService = createDecorator<IWorkbenchExtensionEnablementService>('extensionEnablementService');117118export interface IWorkbenchExtensionEnablementService {119readonly _serviceBrand: undefined;120121/**122* Event to listen on for extension enablement changes123*/124readonly onEnablementChanged: Event<readonly IExtension[]>;125126/**127* Returns the enablement state for the given extension128*/129getEnablementState(extension: IExtension): EnablementState;130131/**132* Returns the enablement states for the given extensions133* @param extensions list of extensions134* @param workspaceTypeOverrides Workspace type overrides135*/136getEnablementStates(extensions: IExtension[], workspaceTypeOverrides?: { trusted?: boolean }): EnablementState[];137138/**139* Returns the enablement states for the dependencies of the given extension140*/141getDependenciesEnablementStates(extension: IExtension): [IExtension, EnablementState][];142143/**144* Returns `true` if the enablement can be changed.145*/146canChangeEnablement(extension: IExtension): boolean;147148/**149* Returns `true` if the enablement can be changed.150*/151canChangeWorkspaceEnablement(extension: IExtension): boolean;152153/**154* Returns `true` if the given extension is enabled.155*/156isEnabled(extension: IExtension): boolean;157158/**159* Returns `true` if the given enablement state is enabled enablement state.160*/161isEnabledEnablementState(enablementState: EnablementState): boolean;162163/**164* Returns `true` if the given extension identifier is disabled globally.165* Extensions can be disabled globally or in workspace or both.166* If an extension is disabled in both then enablement state shows only workspace.167* This will168*/169isDisabledGlobally(extension: IExtension): boolean;170171/**172* Enable or disable the given extension.173* if `workspace` is `true` then enablement is done for workspace, otherwise globally.174*175* Returns a promise that resolves to boolean value.176* if resolves to `true` then requires restart for the change to take effect.177*178* Throws error if enablement is requested for workspace and there is no workspace179*/180setEnablement(extensions: IExtension[], state: EnablementState): Promise<boolean[]>;181182/**183* Updates the enablement state of the extensions when workspace trust changes.184*/185updateExtensionsEnablementsWhenWorkspaceTrustChanges(): Promise<void>;186}187188export interface IScannedExtension extends IExtension {189readonly metadata?: Metadata;190}191192export type ScanOptions = { readonly skipInvalidExtensions?: boolean };193194export const IWebExtensionsScannerService = createDecorator<IWebExtensionsScannerService>('IWebExtensionsScannerService');195export interface IWebExtensionsScannerService {196readonly _serviceBrand: undefined;197198scanSystemExtensions(): Promise<IExtension[]>;199scanUserExtensions(profileLocation: URI, options?: ScanOptions): Promise<IScannedExtension[]>;200scanExtensionsUnderDevelopment(): Promise<IExtension[]>;201scanExistingExtension(extensionLocation: URI, extensionType: ExtensionType, profileLocation: URI): Promise<IScannedExtension | null>;202203addExtension(location: URI, metadata: Metadata, profileLocation: URI): Promise<IScannedExtension>;204addExtensionFromGallery(galleryExtension: IGalleryExtension, metadata: Metadata, profileLocation: URI): Promise<IScannedExtension>;205removeExtension(extension: IScannedExtension, profileLocation: URI): Promise<void>;206copyExtensions(fromProfileLocation: URI, toProfileLocation: URI, filter: (extension: IScannedExtension) => boolean): Promise<void>;207208updateMetadata(extension: IScannedExtension, metaData: Partial<Metadata>, profileLocation: URI): Promise<IScannedExtension>;209210scanExtensionManifest(extensionLocation: URI): Promise<IExtensionManifest | null>;211}212213214