1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Minor cleanup of ExtensionDiscovery

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2021-05-27 08:38:21 -04:00
parent 57c87a2e71
commit 3687ac8d5f

View File

@ -30,7 +30,7 @@ import { broadcastMessage, handleRequest, requestMain, subscribeToBroadcast } fr
import { Singleton, toJS } from "../common/utils"; import { Singleton, toJS } from "../common/utils";
import logger from "../main/logger"; import logger from "../main/logger";
import { ExtensionInstallationStateStore } from "../renderer/components/+extensions/extension-install.store"; import { ExtensionInstallationStateStore } from "../renderer/components/+extensions/extension-install.store";
import { extensionInstaller, PackageJson } from "./extension-installer"; import { extensionInstaller } from "./extension-installer";
import { ExtensionsStore } from "./extensions-store"; import { ExtensionsStore } from "./extensions-store";
import { ExtensionLoader } from "./extension-loader"; import { ExtensionLoader } from "./extension-loader";
import type { LensExtensionId, LensExtensionManifest } from "./lens-extension"; import type { LensExtensionId, LensExtensionManifest } from "./lens-extension";
@ -234,10 +234,9 @@ export class ExtensionDiscovery extends Singleton {
return; return;
} }
const extension = Array.from(this.extensions.values()).find((extension) => extension.absolutePath === filePath); for (const extension of this.extensions.values()) {
if (extension.absolutePath !== filePath) {
if (!extension) { continue;
return void logger.warn(`${logModule} extension ${extensionFolderName} not found, can't remove`);
} }
const extensionName = extension.manifest.name; const extensionName = extension.manifest.name;
@ -252,6 +251,11 @@ export class ExtensionDiscovery extends Singleton {
this.extensions.delete(extension.id); this.extensions.delete(extension.id);
logger.info(`${logModule} removed extension ${extensionName}`); logger.info(`${logModule} removed extension ${extensionName}`);
this.events.emit("remove", lensExtensionId); this.events.emit("remove", lensExtensionId);
return;
}
logger.warn(`${logModule} extension ${extensionFolderName} not found, can't remove`);
}; };
/** /**
@ -350,7 +354,7 @@ export class ExtensionDiscovery extends Singleton {
try { try {
const manifest = await fse.readJson(manifestPath); const manifest = await fse.readJson(manifestPath);
const installedManifestPath = this.getInstalledManifestPath(manifest.name); const installedManifestPath = this.getInstalledManifestPath(manifest.name);
const isEnabled = isBundled || ExtensionsStore.getInstance().isEnabled(installedManifestPath); const isEnabled = isBundled || ExtensionsStore.getInstance().isEnabled(installedManifestPath);
const extensionDir = path.dirname(manifestPath); const extensionDir = path.dirname(manifestPath);
const npmPackage = path.join(extensionDir, `${manifest.name}-${manifest.version}.tgz`); const npmPackage = path.join(extensionDir, `${manifest.name}-${manifest.version}.tgz`);
const absolutePath = (await fse.pathExists(npmPackage)) ? npmPackage : extensionDir; const absolutePath = (await fse.pathExists(npmPackage)) ? npmPackage : extensionDir;
@ -387,24 +391,19 @@ export class ExtensionDiscovery extends Singleton {
await this.installPackage(extension.absolutePath); await this.installPackage(extension.absolutePath);
} }
} }
const extensions = bundledExtensions.concat(userExtensions);
return this.extensions = new Map(extensions.map(extension => [extension.id, extension])); return this.extensions = new Map(bundledExtensions.concat(userExtensions).map(extension => [extension.id, extension]));
} }
/** /**
* Write package.json to file system and install dependencies. * Write package.json to file system and install dependencies.
*/ */
async installBundledPackages(packageJsonPath: string, extensions: InstalledExtension[]) { installBundledPackages(packageJsonPath: string, extensions: InstalledExtension[]) {
const packagesJson: PackageJson = { const dependencies = Object.fromEntries(
dependencies: {} extensions.map(extension => [extension.manifest.name, extension.absolutePath])
}; );
extensions.forEach((extension) => { return extensionInstaller.installPackages(packageJsonPath, { dependencies });
packagesJson.dependencies[extension.manifest.name] = extension.absolutePath;
});
return await extensionInstaller.installPackages(packageJsonPath, packagesJson);
} }
async installPackage(name: string) { async installPackage(name: string) {