@sussudio/platform
Version:
Internal APIs for VS Code's service injection the base services.
171 lines (169 loc) • 6.91 kB
text/typescript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { CancellationToken } from '@sussudio/base/common/cancellation.mjs';
import { Emitter, Event } from '@sussudio/base/common/event.mjs';
import { Disposable } from '@sussudio/base/common/lifecycle.mjs';
import { URI } from '@sussudio/base/common/uri.mjs';
import {
IExtensionGalleryService,
IExtensionIdentifier,
IExtensionManagementParticipant,
IGalleryExtension,
IGalleryMetadata,
ILocalExtension,
InstallOperation,
IExtensionsControlManifest,
InstallOptions,
InstallVSIXOptions,
UninstallOptions,
Metadata,
InstallExtensionEvent,
DidUninstallExtensionEvent,
InstallExtensionResult,
UninstallExtensionEvent,
IExtensionManagementService,
} from './extensionManagement.mjs';
import { ExtensionType, IExtensionManifest, TargetPlatform } from '../../extensions/common/extensions.mjs';
import { ILogService } from '../../log/common/log.mjs';
import { IProductService } from '../../product/common/productService.mjs';
import { ITelemetryService } from '../../telemetry/common/telemetry.mjs';
import { IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.mjs';
export declare const enum ExtensionVerificationStatus {
'Verified' = 'Verified',
'Unverified' = 'Unverified',
'UnknownError' = 'UnknownError',
}
export type InstallExtensionTaskOptions = InstallOptions &
InstallVSIXOptions & {
readonly profileLocation: URI;
};
export interface IInstallExtensionTask {
readonly identifier: IExtensionIdentifier;
readonly source: IGalleryExtension | URI;
readonly operation: InstallOperation;
readonly verificationStatus?: ExtensionVerificationStatus;
run(): Promise<{
local: ILocalExtension;
metadata: Metadata;
}>;
waitUntilTaskIsFinished(): Promise<{
local: ILocalExtension;
metadata: Metadata;
}>;
cancel(): void;
}
export type UninstallExtensionTaskOptions = UninstallOptions & {
readonly profileLocation: URI;
};
export interface IUninstallExtensionTask {
readonly extension: ILocalExtension;
run(): Promise<void>;
waitUntilTaskIsFinished(): Promise<void>;
cancel(): void;
}
export declare abstract class AbstractExtensionManagementService
extends Disposable
implements IExtensionManagementService
{
protected readonly galleryService: IExtensionGalleryService;
protected readonly telemetryService: ITelemetryService;
protected readonly logService: ILogService;
protected readonly productService: IProductService;
protected readonly userDataProfilesService: IUserDataProfilesService;
readonly _serviceBrand: undefined;
private extensionsControlManifest;
private lastReportTimestamp;
private readonly installingExtensions;
private readonly uninstallingExtensions;
private readonly _onInstallExtension;
get onInstallExtension(): Event<InstallExtensionEvent>;
protected readonly _onDidInstallExtensions: Emitter<InstallExtensionResult[]>;
get onDidInstallExtensions(): Event<InstallExtensionResult[]>;
protected readonly _onUninstallExtension: Emitter<UninstallExtensionEvent>;
get onUninstallExtension(): Event<UninstallExtensionEvent>;
protected _onDidUninstallExtension: Emitter<DidUninstallExtensionEvent>;
get onDidUninstallExtension(): Event<DidUninstallExtensionEvent>;
private readonly participants;
constructor(
galleryService: IExtensionGalleryService,
telemetryService: ITelemetryService,
logService: ILogService,
productService: IProductService,
userDataProfilesService: IUserDataProfilesService,
);
canInstall(extension: IGalleryExtension): Promise<boolean>;
installFromGallery(extension: IGalleryExtension, options?: InstallOptions): Promise<ILocalExtension>;
uninstall(extension: ILocalExtension, options?: UninstallOptions): Promise<void>;
getExtensionsControlManifest(): Promise<IExtensionsControlManifest>;
registerParticipant(participant: IExtensionManagementParticipant): void;
protected installExtension(
manifest: IExtensionManifest,
extension: URI | IGalleryExtension,
options: InstallOptions & InstallVSIXOptions,
): Promise<ILocalExtension>;
private canWaitForTask;
private joinAllSettled;
private getAllDepsAndPackExtensions;
private checkAndGetCompatibleVersion;
protected getCompatibleVersion(
extension: IGalleryExtension,
sameVersion: boolean,
includePreRelease: boolean,
): Promise<IGalleryExtension | null>;
private uninstallExtension;
private checkForDependents;
private getDependentsErrorMessage;
private getAllPackExtensionsToUninstall;
private getDependents;
private updateControlCache;
abstract getTargetPlatform(): Promise<TargetPlatform>;
abstract zip(extension: ILocalExtension): Promise<URI>;
abstract unzip(zipLocation: URI): Promise<IExtensionIdentifier>;
abstract getManifest(vsix: URI): Promise<IExtensionManifest>;
abstract install(vsix: URI, options?: InstallVSIXOptions): Promise<ILocalExtension>;
abstract installFromLocation(location: URI, profileLocation: URI): Promise<ILocalExtension>;
abstract getInstalled(type?: ExtensionType, profileLocation?: URI): Promise<ILocalExtension[]>;
abstract download(extension: IGalleryExtension, operation: InstallOperation): Promise<URI>;
abstract reinstallFromGallery(extension: ILocalExtension): Promise<ILocalExtension>;
abstract getMetadata(extension: ILocalExtension): Promise<Metadata | undefined>;
abstract updateMetadata(local: ILocalExtension, metadata: IGalleryMetadata): Promise<ILocalExtension>;
abstract updateExtensionScope(local: ILocalExtension, isMachineScoped: boolean): Promise<ILocalExtension>;
protected abstract getCurrentExtensionsManifestLocation(): URI;
protected abstract createInstallExtensionTask(
manifest: IExtensionManifest,
extension: URI | IGalleryExtension,
options: InstallExtensionTaskOptions,
): IInstallExtensionTask;
protected abstract createUninstallExtensionTask(
extension: ILocalExtension,
options: UninstallExtensionTaskOptions,
): IUninstallExtensionTask;
}
export declare function joinErrors(errorOrErrors: (Error | string) | Array<Error | string>): Error;
export declare function reportTelemetry(
telemetryService: ITelemetryService,
eventName: string,
{
extensionData,
verificationStatus,
duration,
error,
durationSinceUpdate,
}: {
extensionData: any;
verificationStatus?: ExtensionVerificationStatus;
duration?: number;
durationSinceUpdate?: number;
error?: Error;
},
): void;
export declare abstract class AbstractExtensionTask<T> {
private readonly barrier;
private cancellablePromise;
waitUntilTaskIsFinished(): Promise<T>;
run(): Promise<T>;
cancel(): void;
protected abstract doRun(token: CancellationToken): Promise<T>;
}