mirror of
https://github.com/microsoft/vscode.git
synced 2026-02-25 20:24:04 +00:00
Reduce type duplication
This commit is contained in:
@@ -257,31 +257,33 @@ export const EXTENSION_CATEGORIES = [
|
||||
'Other',
|
||||
];
|
||||
|
||||
export interface IExtensionManifest {
|
||||
readonly name: string;
|
||||
readonly displayName?: string;
|
||||
readonly publisher: string;
|
||||
readonly version: string;
|
||||
readonly engines: { readonly vscode: string };
|
||||
readonly description?: string;
|
||||
readonly main?: string;
|
||||
readonly browser?: string;
|
||||
readonly icon?: string;
|
||||
readonly categories?: string[];
|
||||
readonly keywords?: string[];
|
||||
readonly activationEvents?: string[];
|
||||
readonly extensionDependencies?: string[];
|
||||
readonly extensionPack?: string[];
|
||||
readonly extensionKind?: ExtensionKind | ExtensionKind[];
|
||||
readonly contributes?: IExtensionContributions;
|
||||
readonly repository?: { url: string };
|
||||
readonly bugs?: { url: string };
|
||||
readonly enabledApiProposals?: readonly string[];
|
||||
readonly api?: string;
|
||||
readonly scripts?: { [key: string]: string };
|
||||
readonly capabilities?: IExtensionCapabilities;
|
||||
export interface IRelaxedExtensionManifest {
|
||||
name: string;
|
||||
displayName?: string;
|
||||
publisher: string;
|
||||
version: string;
|
||||
engines: { readonly vscode: string };
|
||||
description?: string;
|
||||
main?: string;
|
||||
browser?: string;
|
||||
icon?: string;
|
||||
categories?: string[];
|
||||
keywords?: string[];
|
||||
activationEvents?: string[];
|
||||
extensionDependencies?: string[];
|
||||
extensionPack?: string[];
|
||||
extensionKind?: ExtensionKind | ExtensionKind[];
|
||||
contributes?: IExtensionContributions;
|
||||
repository?: { url: string };
|
||||
bugs?: { url: string };
|
||||
enabledApiProposals?: readonly string[];
|
||||
api?: string;
|
||||
scripts?: { [key: string]: string };
|
||||
capabilities?: IExtensionCapabilities;
|
||||
}
|
||||
|
||||
export type IExtensionManifest = Readonly<IRelaxedExtensionManifest>;
|
||||
|
||||
export const enum ExtensionType {
|
||||
System,
|
||||
User
|
||||
@@ -375,16 +377,19 @@ export class ExtensionIdentifier {
|
||||
}
|
||||
}
|
||||
|
||||
export interface IExtensionDescription extends IExtensionManifest {
|
||||
readonly identifier: ExtensionIdentifier;
|
||||
readonly uuid?: string;
|
||||
readonly targetPlatform: TargetPlatform;
|
||||
readonly isBuiltin: boolean;
|
||||
readonly isUserBuiltin: boolean;
|
||||
readonly isUnderDevelopment: boolean;
|
||||
readonly extensionLocation: URI;
|
||||
export interface IRelaxedExtensionDescription extends IRelaxedExtensionManifest {
|
||||
id?: string;
|
||||
identifier: ExtensionIdentifier;
|
||||
uuid?: string;
|
||||
targetPlatform: TargetPlatform;
|
||||
isBuiltin: boolean;
|
||||
isUserBuiltin: boolean;
|
||||
isUnderDevelopment: boolean;
|
||||
extensionLocation: URI;
|
||||
}
|
||||
|
||||
export type IExtensionDescription = Readonly<IRelaxedExtensionDescription>;
|
||||
|
||||
export function isLanguagePackExtension(manifest: IExtensionManifest): boolean {
|
||||
return manifest.contributes && manifest.contributes.localizations ? manifest.contributes.localizations.length > 0 : false;
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ import * as types from 'vs/base/common/types';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { getGalleryExtensionId, groupByExtension, getExtensionId, ExtensionKey } from 'vs/platform/extensionManagement/common/extensionManagementUtil';
|
||||
import { isValidExtensionVersion } from 'vs/platform/extensions/common/extensionValidator';
|
||||
import { ExtensionIdentifier, IExtensionDescription, TargetPlatform, UNDEFINED_PUBLISHER } from 'vs/platform/extensions/common/extensions';
|
||||
import { ExtensionIdentifier, IExtensionDescription, IRelaxedExtensionDescription, TargetPlatform, UNDEFINED_PUBLISHER } from 'vs/platform/extensions/common/extensions';
|
||||
|
||||
const MANIFEST_FILE = 'package.json';
|
||||
|
||||
@@ -115,9 +115,15 @@ abstract class ExtensionManifestHandler {
|
||||
}
|
||||
}
|
||||
|
||||
interface ILocalExtensionMetadata {
|
||||
id?: string;
|
||||
targetPlatform?: TargetPlatform;
|
||||
isBuiltin?: boolean;
|
||||
}
|
||||
|
||||
class ExtensionManifestParser extends ExtensionManifestHandler {
|
||||
|
||||
private static _fastParseJSON(text: string, errors: json.ParseError[]): any {
|
||||
private static _fastParseJSON<T>(text: string, errors: json.ParseError[]): T {
|
||||
try {
|
||||
return JSON.parse(text);
|
||||
} catch (err) {
|
||||
@@ -126,10 +132,10 @@ class ExtensionManifestParser extends ExtensionManifestHandler {
|
||||
}
|
||||
}
|
||||
|
||||
public parse(): Promise<IExtensionDescription> {
|
||||
public parse(): Promise<IExtensionDescription | null> {
|
||||
return this._host.readFile(this._absoluteManifestPath).then((manifestContents) => {
|
||||
const errors: json.ParseError[] = [];
|
||||
const manifest = ExtensionManifestParser._fastParseJSON(manifestContents, errors);
|
||||
const manifest = ExtensionManifestParser._fastParseJSON<IRelaxedExtensionDescription & { __metadata?: ILocalExtensionMetadata }>(manifestContents, errors);
|
||||
if (json.getNodeType(manifest) !== 'object') {
|
||||
this._error(this._absoluteFolderPath, nls.localize('jsonParseInvalidType', "Invalid manifest file {0}: Not an JSON object.", this._absoluteManifestPath));
|
||||
} else if (errors.length === 0) {
|
||||
@@ -360,25 +366,6 @@ class ExtensionManifestNLSReplacer extends ExtensionManifestHandler {
|
||||
}
|
||||
}
|
||||
|
||||
// Relax the readonly properties here, it is the one place where we check and normalize values
|
||||
export interface IRelaxedExtensionDescription {
|
||||
id: string;
|
||||
uuid?: string;
|
||||
targetPlatform: TargetPlatform;
|
||||
identifier: ExtensionIdentifier;
|
||||
name: string;
|
||||
version: string;
|
||||
publisher: string;
|
||||
isBuiltin: boolean;
|
||||
isUserBuiltin: boolean;
|
||||
isUnderDevelopment: boolean;
|
||||
extensionLocation: URI;
|
||||
engines: {
|
||||
vscode: string;
|
||||
};
|
||||
main?: string;
|
||||
}
|
||||
|
||||
class ExtensionManifestValidator extends ExtensionManifestHandler {
|
||||
validate(_extensionDescription: IExtensionDescription): IExtensionDescription | null {
|
||||
let extensionDescription = <IRelaxedExtensionDescription>_extensionDescription;
|
||||
|
||||
@@ -12,11 +12,11 @@ import * as platform from 'vs/base/common/platform';
|
||||
import { joinPath, originalFSPath } from 'vs/base/common/resources';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { INativeWorkbenchEnvironmentService } from 'vs/workbench/services/environment/electron-sandbox/environmentService';
|
||||
import { BUILTIN_MANIFEST_CACHE_FILE, MANIFEST_CACHE_FOLDER, USER_MANIFEST_CACHE_FILE, IExtensionDescription } from 'vs/platform/extensions/common/extensions';
|
||||
import { BUILTIN_MANIFEST_CACHE_FILE, MANIFEST_CACHE_FOLDER, USER_MANIFEST_CACHE_FILE, IExtensionDescription, IRelaxedExtensionDescription } from 'vs/platform/extensions/common/extensions';
|
||||
import { IProductService } from 'vs/platform/product/common/productService';
|
||||
import { INotificationService, Severity } from 'vs/platform/notification/common/notification';
|
||||
import { IHostService } from 'vs/workbench/services/host/browser/host';
|
||||
import { Translations, ILog, ExtensionScanner, ExtensionScannerInput, IExtensionReference, IExtensionResolver, IExtensionScannerHost, IRelaxedExtensionDescription } from 'vs/workbench/services/extensions/common/extensionPoints';
|
||||
import { Translations, ILog, ExtensionScanner, ExtensionScannerInput, IExtensionReference, IExtensionResolver, IExtensionScannerHost } from 'vs/workbench/services/extensions/common/extensionPoints';
|
||||
import { dedupExtensions } from 'vs/workbench/services/extensions/common/extensionsUtil';
|
||||
import { FileOperationResult, IFileService, toFileOperationResult } from 'vs/platform/files/common/files';
|
||||
import { VSBuffer } from 'vs/base/common/buffer';
|
||||
|
||||
Reference in New Issue
Block a user