From 9e757455254327a97b90052d09aeffeb02f1551b Mon Sep 17 00:00:00 2001 From: Lauri Nevala Date: Tue, 27 Oct 2020 14:23:20 +0200 Subject: [PATCH] Separate bundled extension loading from loading extensions from local folder Signed-off-by: Lauri Nevala --- src/extensions/extension-manager.ts | 63 +++++++++++++++++++---------- 1 file changed, 42 insertions(+), 21 deletions(-) diff --git a/src/extensions/extension-manager.ts b/src/extensions/extension-manager.ts index 0dad6e4e78..1e0ebf9387 100644 --- a/src/extensions/extension-manager.ts +++ b/src/extensions/extension-manager.ts @@ -79,36 +79,57 @@ export class ExtensionManager { } async loadExtensions() { - const extensions = await this.loadFromFolder([this.inTreeFolderPath, this.localFolderPath]) + const bundledExtensions = await this.loadBundledExtensions() + const localExtendions = await this.loadFromFolder(this.localFolderPath) + const extensions = bundledExtensions.concat(localExtendions) return new Map(extensions.map(ext => [ext.id, ext])); } - async loadFromFolder(folderPaths: string[]): Promise { - let allExtensions: InstalledExtension[] = [] + async loadBundledExtensions() { + const extensions: InstalledExtension[] = [] + const folderPath = this.inTreeFolderPath const bundledExtensions = getBundledExtensions() - for (const folderPath of folderPaths) { - const extensions: InstalledExtension[] = [] - const paths = await fs.readdir(folderPath); - for (const fileName of paths) { - if (!bundledExtensions.includes(fileName)) { - continue - } - const absPath = path.resolve(folderPath, fileName); - const manifestPath = path.resolve(absPath, "package.json"); - await fs.access(manifestPath, fs.constants.F_OK) - const ext = await this.getExtensionByManifest(manifestPath).catch(() => null) - if (ext) { - extensions.push(ext) - } + const paths = await fs.readdir(folderPath); + for (const fileName of paths) { + if (!bundledExtensions.includes(fileName)) { + continue + } + const absPath = path.resolve(folderPath, fileName); + const manifestPath = path.resolve(absPath, "package.json"); + await fs.access(manifestPath, fs.constants.F_OK) + const ext = await this.getExtensionByManifest(manifestPath).catch(() => null) + if (ext) { + extensions.push(ext) } - - logger.debug(`[EXTENSION-MANAGER]: ${extensions.length} extensions loaded`, { folderPath, extensions }); - allExtensions = allExtensions.concat(extensions) } + logger.debug(`[EXTENSION-MANAGER]: ${extensions.length} extensions loaded`, { folderPath, extensions }); + await fs.writeFile(path.join(this.extensionPackagesRoot, "package.json"), JSON.stringify(this.packagesJson), {mode: 0o600}) + await this.installPackages() + return extensions + } + + async loadFromFolder(folderPath: string): Promise { + const bundledExtensions = getBundledExtensions() + const extensions: InstalledExtension[] = [] + const paths = await fs.readdir(folderPath); + for (const fileName of paths) { + if (bundledExtensions.includes(fileName)) { // do no allow to override bundled extensions + continue + } + const absPath = path.resolve(folderPath, fileName); + const manifestPath = path.resolve(absPath, "package.json"); + await fs.access(manifestPath, fs.constants.F_OK) + const ext = await this.getExtensionByManifest(manifestPath).catch(() => null) + if (ext) { + extensions.push(ext) + } + } + + logger.debug(`[EXTENSION-MANAGER]: ${extensions.length} extensions loaded`, { folderPath, extensions }); await fs.writeFile(path.join(this.extensionPackagesRoot, "package.json"), JSON.stringify(this.packagesJson), {mode: 0o600}) await this.installPackages() - return allExtensions; + return extensions; } }