From 79de645f6d8ec4fd01c8f5508c55b99c4a6d44a6 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Wed, 2 Sep 2020 22:39:59 +0200 Subject: [PATCH] filter invalid extensions --- .../common/webExtensionsScannerService.ts | 48 ++++++++++++------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/src/vs/workbench/services/extensionManagement/common/webExtensionsScannerService.ts b/src/vs/workbench/services/extensionManagement/common/webExtensionsScannerService.ts index c3bbb0f4df0..2a071bc7223 100644 --- a/src/vs/workbench/services/extensionManagement/common/webExtensionsScannerService.ts +++ b/src/vs/workbench/services/extensionManagement/common/webExtensionsScannerService.ts @@ -83,29 +83,45 @@ export class WebExtensionsScannerService extends Disposable implements IWebExten */ private getStaticExtensions(builtin: boolean): IScannedExtension[] { const staticExtensions = this.environmentService.options && Array.isArray(this.environmentService.options.staticExtensions) ? this.environmentService.options.staticExtensions : []; - return ( - staticExtensions - .filter(e => Boolean(e.isBuiltin) === builtin) - .map(e => ({ - identifier: { id: getGalleryExtensionId(e.packageJSON.publisher, e.packageJSON.name) }, - location: e.extensionLocation, - type: e.isBuiltin ? ExtensionType.System : ExtensionType.User, - packageJSON: e.packageJSON, - })) - ); + const result: IScannedExtension[] = []; + for (const e of staticExtensions) { + if (Boolean(e.isBuiltin) === builtin) { + const scannedExtension = this.parseStaticExtension(e, builtin); + if (scannedExtension) { + result.push(scannedExtension); + } + } + } + return result; } private async readDefaultExtensions(): Promise { const defaultUserWebExtensions = await this.readDefaultUserWebExtensions(); - const extensions = defaultUserWebExtensions.map(e => ({ - identifier: { id: getGalleryExtensionId(e.packageJSON.publisher, e.packageJSON.name) }, - location: e.extensionLocation, - type: ExtensionType.User, - packageJSON: e.packageJSON, - })); + const extensions: IScannedExtension[] = []; + for (const e of defaultUserWebExtensions) { + const scannedExtension = this.parseStaticExtension(e, false); + if (scannedExtension) { + extensions.push(scannedExtension); + } + } return extensions.concat(this.getStaticExtensions(false)); } + private parseStaticExtension(e: IStaticExtension, builtin: boolean): IScannedExtension | null { + try { + return { + identifier: { id: getGalleryExtensionId(e.packageJSON.publisher, e.packageJSON.name) }, + location: e.extensionLocation, + type: builtin ? ExtensionType.System : ExtensionType.User, + packageJSON: e.packageJSON, + }; + } catch (error) { + this.logService.error(`Error while parsing extension ${e.extensionLocation.toString()}`); + this.logService.error(error); + } + return null; + } + private async readDefaultUserWebExtensions(): Promise { const result: IStaticExtension[] = []; const defaultUserWebExtensions = this.configurationService.getValue<{ location: string }[]>('_extensions.defaultUserWebExtensions') || []; -- GitLab