diff --git a/src/extensions/extension-loader/extension-loader.ts b/src/extensions/extension-loader/extension-loader.ts index ddfaac8b91..c00414e88d 100644 --- a/src/extensions/extension-loader/extension-loader.ts +++ b/src/extensions/extension-loader/extension-loader.ts @@ -8,7 +8,6 @@ import { isEqual } from "lodash"; import type { ObservableMap } from "mobx"; import { action, computed, makeObservable, observable, observe, reaction, when } from "mobx"; import { broadcastMessage, ipcMainOn, ipcRendererOn, ipcMainHandle } from "../../common/ipc"; -import type { Disposer } from "../../common/utils"; import { isDefined, toJS } from "../../common/utils"; import type { InstalledExtension } from "../extension-discovery/extension-discovery"; import type { LensExtension, LensExtensionConstructor, LensExtensionId } from "../lens-extension"; @@ -201,7 +200,7 @@ export class ExtensionLoader { protected async initMain() { this.isLoaded = true; - this.loadOnMain(); + await this.autoInitExtensions(); ipcMainHandle(extensionLoaderFromMainChannel, () => { return Array.from(this.toJSON()); @@ -249,23 +248,7 @@ export class ExtensionLoader { }); } - loadOnMain() { - this.autoInitExtensions(async () => []); - } - - loadOnClusterManagerRenderer = () => { - this.dependencies.logger.debug(`${logModule}: load on main renderer (cluster manager)`); - - return this.autoInitExtensions(async () => []); - }; - - loadOnClusterRenderer = () => { - this.dependencies.logger.debug(`${logModule}: load on cluster renderer (dashboard)`); - - this.autoInitExtensions(async () => []); - }; - - protected async loadExtensions(installedExtensions: Map, register: (ext: LensExtension) => Promise) { + protected async loadExtensions(installedExtensions: Map) { // Steps of the function: // 1. require and call .activate for each Extension // 2. Wait until every extension's onActivate has been resolved @@ -329,7 +312,7 @@ export class ExtensionLoader { // Return ExtensionLoading[] return extensions.map(extension => { - const loaded = extension.instance.enable(register).catch((err) => { + const loaded = extension.instance.enable().catch((err) => { this.dependencies.logger.error(`${logModule}: failed to enable`, { ext: extension, err }); }); @@ -340,12 +323,14 @@ export class ExtensionLoader { }); } - protected autoInitExtensions(register: (ext: LensExtension) => Promise) { + autoInitExtensions() { + this.dependencies.logger.info(`${logModule}: auto initializing extensions`); + // Setup reaction to load extensions on JSON changes - reaction(() => this.toJSON(), installedExtensions => this.loadExtensions(installedExtensions, register)); + reaction(() => this.toJSON(), installedExtensions => this.loadExtensions(installedExtensions)); // Load initial extensions - return this.loadExtensions(this.toJSON(), register); + return this.loadExtensions(this.toJSON()); } protected requireExtension(extension: InstalledExtension): LensExtensionConstructor | null { diff --git a/src/extensions/lens-extension.ts b/src/extensions/lens-extension.ts index ab1f1b0add..56c71a87bf 100644 --- a/src/extensions/lens-extension.ts +++ b/src/extensions/lens-extension.ts @@ -8,7 +8,6 @@ import { action, computed, makeObservable, observable } from "mobx"; import logger from "../main/logger"; import type { ProtocolHandlerRegistration } from "./registries"; import type { PackageJson } from "type-fest"; -import type { Disposer } from "../common/utils"; import { disposer } from "../common/utils"; import type { LensExtensionDependencies } from "./lens-extension-set-dependencies"; @@ -88,15 +87,13 @@ export class LensExtension Promise) { + async enable() { if (this._isEnabled) { return; } try { this._isEnabled = true; - - this[Disposers].push(...await register(this)); logger.info(`[EXTENSION]: enabled ${this.name}@${this.version}`); } catch (error) { diff --git a/src/renderer/frames/cluster-frame/init-cluster-frame/init-cluster-frame.injectable.ts b/src/renderer/frames/cluster-frame/init-cluster-frame/init-cluster-frame.injectable.ts index 93f3f4c7dc..8744c87b51 100644 --- a/src/renderer/frames/cluster-frame/init-cluster-frame/init-cluster-frame.injectable.ts +++ b/src/renderer/frames/cluster-frame/init-cluster-frame/init-cluster-frame.injectable.ts @@ -22,7 +22,7 @@ const initClusterFrameInjectable = getInjectable({ return initClusterFrame({ hostedCluster, - loadExtensions: di.inject(extensionLoaderInjectable).loadOnClusterRenderer, + loadExtensions: di.inject(extensionLoaderInjectable).autoInitExtensions, catalogEntityRegistry: di.inject(catalogEntityRegistryInjectable), frameRoutingId: di.inject(frameRoutingIdInjectable), emitAppEvent: di.inject(emitAppEventInjectable), diff --git a/src/renderer/frames/cluster-frame/init-cluster-frame/init-cluster-frame.ts b/src/renderer/frames/cluster-frame/init-cluster-frame/init-cluster-frame.ts index 6c7dec4b40..9476393366 100644 --- a/src/renderer/frames/cluster-frame/init-cluster-frame/init-cluster-frame.ts +++ b/src/renderer/frames/cluster-frame/init-cluster-frame/init-cluster-frame.ts @@ -5,9 +5,7 @@ import type { Cluster } from "../../../../common/cluster/cluster"; import type { CatalogEntityRegistry } from "../../../api/catalog/entity/registry"; import logger from "../../../../main/logger"; -import type { KubernetesCluster } from "../../../../common/catalog-entities"; import { Notifications } from "../../../components/notifications"; -import type { CatalogEntity } from "../../../../common/catalog"; import { when } from "mobx"; import type { ClusterFrameContext } from "../../../cluster-frame-context/cluster-frame-context"; import { KubeObjectStore } from "../../../../common/k8s-api/kube-object.store"; @@ -16,7 +14,7 @@ import type { EmitAppEvent } from "../../../../common/app-event-bus/emit-event.i interface Dependencies { hostedCluster: Cluster; - loadExtensions: (getCluster: () => CatalogEntity) => void; + loadExtensions: () => void; catalogEntityRegistry: CatalogEntityRegistry; frameRoutingId: number; emitAppEvent: EmitAppEvent; @@ -53,7 +51,7 @@ export const initClusterFrame = ({ when( () => catalogEntityRegistry.items.get().length > 0, () => - loadExtensions(() => catalogEntityRegistry.activeEntity as KubernetesCluster), + loadExtensions(), { timeout: 15_000, onError: (error) => { diff --git a/src/renderer/frames/root-frame/init-root-frame/init-root-frame.injectable.ts b/src/renderer/frames/root-frame/init-root-frame/init-root-frame.injectable.ts index b77ed399fc..6f6a63f6b8 100644 --- a/src/renderer/frames/root-frame/init-root-frame/init-root-frame.injectable.ts +++ b/src/renderer/frames/root-frame/init-root-frame/init-root-frame.injectable.ts @@ -14,7 +14,7 @@ import registerIpcListenersInjectable from "../../../ipc/register-ipc-listeners. const initRootFrameInjectable = getInjectable({ id: "init-root-frame", instantiate: (di) => initRootFrame({ - loadExtensions: di.inject(extensionLoaderInjectable).loadOnClusterManagerRenderer, + loadExtensions: di.inject(extensionLoaderInjectable).autoInitExtensions, registerIpcListeners: di.inject(registerIpcListenersInjectable), ipcRenderer: di.inject(ipcRendererInjectable), bindProtocolAddRouteHandlers: di.inject(bindProtocolAddRouteHandlersInjectable),