@sussudio/platform
Version:
Internal APIs for VS Code's service injection the base services.
111 lines (109 loc) • 4.72 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 { Disposable } from '@sussudio/base/common/lifecycle.mjs';
import { Event } from '@sussudio/base/common/event.mjs';
import { URI } from '@sussudio/base/common/uri.mjs';
import { Metadata } from './extensionManagement.mjs';
import { IExtension, IExtensionIdentifier } from '../../extensions/common/extensions.mjs';
import { IFileService } from '../../files/common/files.mjs';
import { ILogService } from '../../log/common/log.mjs';
import { IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.mjs';
import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.mjs';
import { ITelemetryService } from '../../telemetry/common/telemetry.mjs';
export declare const enum ExtensionsProfileScanningErrorCode {
/**
* Error when trying to scan extensions from a profile that does not exist.
*/
ERROR_PROFILE_NOT_FOUND = 'ERROR_PROFILE_NOT_FOUND',
/**
* Error when profile file is invalid.
*/
ERROR_INVALID_CONTENT = 'ERROR_INVALID_CONTENT',
}
export declare class ExtensionsProfileScanningError extends Error {
code: ExtensionsProfileScanningErrorCode;
constructor(message: string, code: ExtensionsProfileScanningErrorCode);
}
export interface IScannedProfileExtension {
readonly identifier: IExtensionIdentifier;
readonly version: string;
readonly location: URI;
readonly metadata?: Metadata;
}
export interface ProfileExtensionsEvent {
readonly extensions: readonly IScannedProfileExtension[];
readonly profileLocation: URI;
}
export interface DidAddProfileExtensionsEvent extends ProfileExtensionsEvent {
readonly error?: Error;
}
export interface DidRemoveProfileExtensionsEvent extends ProfileExtensionsEvent {
readonly error?: Error;
}
export interface IProfileExtensionsScanOptions {
readonly bailOutWhenFileNotFound?: boolean;
}
export declare const IExtensionsProfileScannerService: import('../../instantiation/common/instantiation.mjs').ServiceIdentifier<IExtensionsProfileScannerService>;
export interface IExtensionsProfileScannerService {
readonly _serviceBrand: undefined;
readonly onAddExtensions: Event<ProfileExtensionsEvent>;
readonly onDidAddExtensions: Event<DidAddProfileExtensionsEvent>;
readonly onRemoveExtensions: Event<ProfileExtensionsEvent>;
readonly onDidRemoveExtensions: Event<DidRemoveProfileExtensionsEvent>;
scanProfileExtensions(
profileLocation: URI,
options?: IProfileExtensionsScanOptions,
): Promise<IScannedProfileExtension[]>;
addExtensionsToProfile(
extensions: [IExtension, Metadata | undefined][],
profileLocation: URI,
): Promise<IScannedProfileExtension[]>;
removeExtensionFromProfile(extension: IExtension, profileLocation: URI): Promise<void>;
}
export declare abstract class AbstractExtensionsProfileScannerService
extends Disposable
implements IExtensionsProfileScannerService
{
private readonly extensionsLocation;
private readonly fileService;
private readonly userDataProfilesService;
private readonly uriIdentityService;
private readonly telemetryService;
private readonly logService;
readonly _serviceBrand: undefined;
private readonly _onAddExtensions;
readonly onAddExtensions: Event<ProfileExtensionsEvent>;
private readonly _onDidAddExtensions;
readonly onDidAddExtensions: Event<DidAddProfileExtensionsEvent>;
private readonly _onRemoveExtensions;
readonly onRemoveExtensions: Event<ProfileExtensionsEvent>;
private readonly _onDidRemoveExtensions;
readonly onDidRemoveExtensions: Event<DidRemoveProfileExtensionsEvent>;
private readonly resourcesAccessQueueMap;
constructor(
extensionsLocation: URI,
fileService: IFileService,
userDataProfilesService: IUserDataProfilesService,
uriIdentityService: IUriIdentityService,
telemetryService: ITelemetryService,
logService: ILogService,
);
scanProfileExtensions(
profileLocation: URI,
options?: IProfileExtensionsScanOptions,
): Promise<IScannedProfileExtension[]>;
addExtensionsToProfile(
extensions: [IExtension, Metadata | undefined][],
profileLocation: URI,
): Promise<IScannedProfileExtension[]>;
removeExtensionFromProfile(extension: IExtension, profileLocation: URI): Promise<void>;
private withProfileExtensions;
private reportAndThrowInvalidConentError;
private toRelativePath;
private resolveExtensionLocation;
private _migrationPromise;
private migrateFromOldDefaultProfileExtensionsLocation;
private getResourceAccessQueue;
}