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";
@ -183,7 +183,7 @@ export class ExtensionDiscovery extends Singleton {
.on("unlink", this.handleWatchUnlinkEvent); .on("unlink", this.handleWatchUnlinkEvent);
} }
handleWatchFileAdd = async (manifestPath: string) => { handleWatchFileAdd = async (manifestPath: string) => {
// e.g. "foo/package.json" // e.g. "foo/package.json"
const relativePath = path.relative(this.localFolderPath, manifestPath); const relativePath = path.relative(this.localFolderPath, manifestPath);
@ -234,24 +234,28 @@ 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) {
continue;
}
if (!extension) { const extensionName = extension.manifest.name;
return void logger.warn(`${logModule} extension ${extensionFolderName} not found, can't remove`);
// If the extension is deleted manually while the application is running, also remove the symlink
await this.removeSymlinkByPackageName(extensionName);
// The path to the manifest file is the lens extension id
// Note: that we need to use the symlinked path
const lensExtensionId = extension.manifestPath;
this.extensions.delete(extension.id);
logger.info(`${logModule} removed extension ${extensionName}`);
this.events.emit("remove", lensExtensionId);
return;
} }
const extensionName = extension.manifest.name; logger.warn(`${logModule} extension ${extensionFolderName} not found, can't remove`);
// If the extension is deleted manually while the application is running, also remove the symlink
await this.removeSymlinkByPackageName(extensionName);
// The path to the manifest file is the lens extension id
// Note: that we need to use the symlinked path
const lensExtensionId = extension.manifestPath;
this.extensions.delete(extension.id);
logger.info(`${logModule} removed extension ${extensionName}`);
this.events.emit("remove", lensExtensionId);
}; };
/** /**
@ -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) {