@sussudio/platform
Version:
Internal APIs for VS Code's service injection the base services.
188 lines (186 loc) • 7.48 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 Severity from '@sussudio/base/common/severity.mjs';
import { URI } from '@sussudio/base/common/uri.mjs';
import { IEnvironmentService } from '../../environment/common/environment.mjs';
import { Metadata } from './extensionManagement.mjs';
import {
ExtensionType,
IExtensionManifest,
TargetPlatform,
IExtensionIdentifier,
IRelaxedExtensionManifest,
IExtensionDescription,
} from '../../extensions/common/extensions.mjs';
import { IFileService } from '../../files/common/files.mjs';
import { IInstantiationService } from '../../instantiation/common/instantiation.mjs';
import { ILogService } from '../../log/common/log.mjs';
import { IProductService } from '../../product/common/productService.mjs';
import { Event } from '@sussudio/base/common/event.mjs';
import { IExtensionsProfileScannerService } from './extensionsProfileScannerService.mjs';
import { IUserDataProfilesService } from '../../userDataProfile/common/userDataProfile.mjs';
import { IUriIdentityService } from '../../uriIdentity/common/uriIdentity.mjs';
export type IScannedExtensionManifest = IRelaxedExtensionManifest & {
__metadata?: Metadata;
};
interface IRelaxedScannedExtension {
type: ExtensionType;
isBuiltin: boolean;
identifier: IExtensionIdentifier;
manifest: IRelaxedExtensionManifest;
location: URI;
targetPlatform: TargetPlatform;
metadata: Metadata | undefined;
isValid: boolean;
validations: readonly [Severity, string][];
}
export type IScannedExtension = Readonly<IRelaxedScannedExtension> & {
manifest: IExtensionManifest;
};
export interface Translations {
[id: string]: string;
}
export declare namespace Translations {
function equals(a: Translations, b: Translations): boolean;
}
export type ScanOptions = {
readonly profileLocation?: URI;
readonly includeInvalid?: boolean;
readonly includeAllVersions?: boolean;
readonly includeUninstalled?: boolean;
readonly checkControlFile?: boolean;
readonly language?: string;
readonly useCache?: boolean;
};
export declare const IExtensionsScannerService: import('../../instantiation/common/instantiation.mjs').ServiceIdentifier<IExtensionsScannerService>;
export interface IExtensionsScannerService {
readonly _serviceBrand: undefined;
readonly systemExtensionsLocation: URI;
readonly userExtensionsLocation: URI;
readonly onDidChangeCache: Event<ExtensionType>;
getTargetPlatform(): Promise<TargetPlatform>;
scanAllExtensions(
systemScanOptions: ScanOptions,
userScanOptions: ScanOptions,
includeExtensionsUnderDev: boolean,
): Promise<IScannedExtension[]>;
scanSystemExtensions(scanOptions: ScanOptions): Promise<IScannedExtension[]>;
scanUserExtensions(scanOptions: ScanOptions): Promise<IScannedExtension[]>;
scanExtensionsUnderDevelopment(
scanOptions: ScanOptions,
existingExtensions: IScannedExtension[],
): Promise<IScannedExtension[]>;
scanExistingExtension(
extensionLocation: URI,
extensionType: ExtensionType,
scanOptions: ScanOptions,
): Promise<IScannedExtension | null>;
scanOneOrMultipleExtensions(
extensionLocation: URI,
extensionType: ExtensionType,
scanOptions: ScanOptions,
): Promise<IScannedExtension[]>;
scanMetadata(extensionLocation: URI): Promise<Metadata | undefined>;
updateMetadata(extensionLocation: URI, metadata: Partial<Metadata>): Promise<void>;
initializeDefaultProfileExtensions(): Promise<void>;
}
export declare abstract class AbstractExtensionsScannerService extends Disposable implements IExtensionsScannerService {
readonly systemExtensionsLocation: URI;
readonly userExtensionsLocation: URI;
private readonly extensionsControlLocation;
private readonly cacheLocation;
private readonly userDataProfilesService;
protected readonly extensionsProfileScannerService: IExtensionsProfileScannerService;
protected readonly fileService: IFileService;
protected readonly logService: ILogService;
private readonly environmentService;
private readonly productService;
private readonly uriIdentityService;
private readonly instantiationService;
readonly _serviceBrand: undefined;
protected abstract getTranslations(language: string): Promise<Translations>;
private readonly _onDidChangeCache;
readonly onDidChangeCache: Event<ExtensionType>;
private readonly obsoleteFile;
private readonly systemExtensionsCachedScanner;
private readonly userExtensionsCachedScanner;
private readonly extensionsScanner;
constructor(
systemExtensionsLocation: URI,
userExtensionsLocation: URI,
extensionsControlLocation: URI,
cacheLocation: URI,
userDataProfilesService: IUserDataProfilesService,
extensionsProfileScannerService: IExtensionsProfileScannerService,
fileService: IFileService,
logService: ILogService,
environmentService: IEnvironmentService,
productService: IProductService,
uriIdentityService: IUriIdentityService,
instantiationService: IInstantiationService,
);
private _targetPlatformPromise;
getTargetPlatform(): Promise<TargetPlatform>;
scanAllExtensions(
systemScanOptions: ScanOptions,
userScanOptions: ScanOptions,
includeExtensionsUnderDev: boolean,
): Promise<IScannedExtension[]>;
scanSystemExtensions(scanOptions: ScanOptions): Promise<IScannedExtension[]>;
scanUserExtensions(scanOptions: ScanOptions): Promise<IScannedExtension[]>;
scanExtensionsUnderDevelopment(
scanOptions: ScanOptions,
existingExtensions: IScannedExtension[],
): Promise<IScannedExtension[]>;
scanExistingExtension(
extensionLocation: URI,
extensionType: ExtensionType,
scanOptions: ScanOptions,
): Promise<IScannedExtension | null>;
scanOneOrMultipleExtensions(
extensionLocation: URI,
extensionType: ExtensionType,
scanOptions: ScanOptions,
): Promise<IScannedExtension[]>;
scanMetadata(extensionLocation: URI): Promise<Metadata | undefined>;
updateMetadata(extensionLocation: URI, metaData: Partial<Metadata>): Promise<void>;
initializeDefaultProfileExtensions(): Promise<void>;
private initializeDefaultProfileExtensionsPromise;
private doInitializeDefaultProfileExtensions;
private applyScanOptions;
private dedupExtensions;
private scanDefaultSystemExtensions;
private scanDevSystemExtensions;
private getBuiltInExtensionControl;
private createExtensionScannerInput;
private getMtime;
}
export declare function toExtensionDescription(
extension: IScannedExtension,
isUnderDevelopment: boolean,
): IExtensionDescription;
export declare class NativeExtensionsScannerService
extends AbstractExtensionsScannerService
implements IExtensionsScannerService
{
private readonly translationsPromise;
constructor(
systemExtensionsLocation: URI,
userExtensionsLocation: URI,
userHome: URI,
userDataPath: URI,
userDataProfilesService: IUserDataProfilesService,
extensionsProfileScannerService: IExtensionsProfileScannerService,
fileService: IFileService,
logService: ILogService,
environmentService: IEnvironmentService,
productService: IProductService,
uriIdentityService: IUriIdentityService,
instantiationService: IInstantiationService,
);
protected getTranslations(language: string): Promise<Translations>;
}
export {};