From 18dd4544d71b93cd09d9a5852a9e702285e80023 Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Mon, 31 Jan 2022 12:11:20 +0300 Subject: [PATCH] Install updated extension if found in ./extension-updates Signed-off-by: Alex Andreev --- .../extension-discovery.ts | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/extensions/extension-discovery/extension-discovery.ts b/src/extensions/extension-discovery/extension-discovery.ts index eb957a4f0c..5049797199 100644 --- a/src/extensions/extension-discovery/extension-discovery.ts +++ b/src/extensions/extension-discovery/extension-discovery.ts @@ -119,6 +119,10 @@ export class ExtensionDiscovery { return path.join(this.dependencies.extensionPackageRootDirectory, "node_modules"); } + get bundledUpdatesFolderPath(): string { + return path.resolve(__static, "../extension-updates"); + } + /** * Initializes the class and setups the file watcher for added/removed local extensions. */ @@ -380,9 +384,19 @@ export class ExtensionDiscovery { } } - async ensureExtensions(): Promise> { + async getBundledExtensions(): Promise { const bundledExtensions = await this.loadBundledExtensions(); + const bundedUpdates = await this.loadExtensionUpdates(); + return bundledExtensions.map(extension => { + const updated = bundedUpdates.find(update => update.manifest.name === extension.manifest.name); + + return updated || extension; + }); + } + + async ensureExtensions(): Promise> { + const bundledExtensions = await this.getBundledExtensions(); await this.installBundledPackages(this.packageJsonPath, bundledExtensions); const userExtensions = await this.loadFromFolder(this.localFolderPath, bundledExtensions.map((extension) => extension.manifest.name)); @@ -416,9 +430,15 @@ export class ExtensionDiscovery { return this.dependencies.installExtensions(packageJsonPath, { dependencies }); } - async loadBundledExtensions(): Promise { + /** + * Checks ./extension-updates folder and loads founded extensions + */ + loadExtensionUpdates(): Promise { + return this.loadBundledExtensions(this.bundledUpdatesFolderPath); + } + + async loadBundledExtensions(folderPath = this.bundledFolderPath): Promise { const extensions: InstalledExtension[] = []; - const folderPath = this.bundledFolderPath; const paths = await fse.readdir(folderPath); for (const fileName of paths) {