From 7bfb55ece51e10460a57b3ff83400ee434f59594 Mon Sep 17 00:00:00 2001 From: Sandeep Somavarapu Date: Mon, 22 Jun 2020 15:38:07 +0200 Subject: [PATCH] scan builtin extensions --- build/lib/extensions.js | 26 +++++++++++++++++++++++++- build/lib/extensions.ts | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/build/lib/extensions.js b/build/lib/extensions.js index 170ea99bdd7..c40e751d6a6 100644 --- a/build/lib/extensions.js +++ b/build/lib/extensions.js @@ -4,7 +4,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ Object.defineProperty(exports, "__esModule", { value: true }); -exports.packageMarketplaceWebExtensionsStream = exports.packageMarketplaceExtensionsStream = exports.packageLocalWebExtensionsStream = exports.packageLocalExtensionsStream = exports.fromMarketplace = void 0; +exports.scanBuiltinExtensions = exports.packageMarketplaceWebExtensionsStream = exports.packageMarketplaceExtensionsStream = exports.packageLocalWebExtensionsStream = exports.packageLocalExtensionsStream = exports.fromMarketplace = void 0; const es = require("event-stream"); const fs = require("fs"); const glob = require("glob"); @@ -261,3 +261,27 @@ function packageMarketplaceWebExtensionsStream(builtInExtensions) { return es.merge(extensions); } exports.packageMarketplaceWebExtensionsStream = packageMarketplaceWebExtensionsStream; +function scanBuiltinExtensions(extensionsRoot, forWeb) { + const scannedExtensions = []; + const extensionsFolders = fs.readdirSync(extensionsRoot); + for (const extensionFolder of extensionsFolders) { + const packageJSON = JSON.parse(fs.readFileSync(path.join(extensionsRoot, extensionFolder, 'package.json')).toString('utf8')); + const extensionKind = packageJSON['extensionKind'] || []; + if (forWeb && extensionKind.indexOf('web') === -1) { + continue; + } + const children = fs.readdirSync(path.join(extensionsRoot, extensionFolder)); + const packageNLS = children.filter(child => child === 'package.nls.json')[0]; + const readme = children.filter(child => /^readme(\.txt|\.md|)$/i.test(child))[0]; + const changelog = children.filter(child => /^changelog(\.txt|\.md|)$/i.test(child))[0]; + scannedExtensions.push({ + extensionPath: extensionFolder, + packageJSON: packageJSON, + packagsNLSPath: packageNLS ? path.join(extensionFolder, packageNLS) : undefined, + readmePath: readme ? path.join(extensionFolder, readme) : undefined, + changelogPath: changelog ? path.join(extensionFolder, changelog) : undefined, + }); + } + return scannedExtensions; +} +exports.scanBuiltinExtensions = scanBuiltinExtensions; diff --git a/build/lib/extensions.ts b/build/lib/extensions.ts index d0dfec9ff2a..22d87cf6fcd 100644 --- a/build/lib/extensions.ts +++ b/build/lib/extensions.ts @@ -78,7 +78,7 @@ function fromLocal(extensionPath: string, forWeb: boolean): Stream { }); } - return minimizeLanguageJSON(input) + return minimizeLanguageJSON(input); } @@ -307,3 +307,35 @@ export function packageMarketplaceWebExtensionsStream(builtInExtensions: IBuiltI }); return es.merge(extensions); } + +export interface IScannedBuiltinExtension { + extensionPath: string, + packageJSON: any, + packagsNLSPath?: string, + readmePath?: string, + changelogPath?: string, +} + +export function scanBuiltinExtensions(extensionsRoot: string, forWeb: boolean): IScannedBuiltinExtension[] { + const scannedExtensions: IScannedBuiltinExtension[] = []; + const extensionsFolders = fs.readdirSync(extensionsRoot); + for (const extensionFolder of extensionsFolders) { + const packageJSON = JSON.parse(fs.readFileSync(path.join(extensionsRoot, extensionFolder, 'package.json')).toString('utf8')); + const extensionKind: string[] = packageJSON['extensionKind'] || []; + if (forWeb && extensionKind.indexOf('web') === -1) { + continue; + } + const children = fs.readdirSync(path.join(extensionsRoot, extensionFolder)); + const packageNLS = children.filter(child => child === 'package.nls.json')[0]; + const readme = children.filter(child => /^readme(\.txt|\.md|)$/i.test(child))[0]; + const changelog = children.filter(child => /^changelog(\.txt|\.md|)$/i.test(child))[0]; + scannedExtensions.push({ + extensionPath: extensionFolder, + packageJSON: packageJSON, + packagsNLSPath: packageNLS ? path.join(extensionFolder, packageNLS) : undefined, + readmePath: readme ? path.join(extensionFolder, readme) : undefined, + changelogPath: changelog ? path.join(extensionFolder, changelog) : undefined, + }); + } + return scannedExtensions; +}