diff --git a/packages/core/src/renderer/frames/cluster-frame/init-cluster-frame.injectable.ts b/packages/core/src/renderer/frames/cluster-frame/init-cluster-frame.injectable.ts index 8342c2528b..a08117046f 100644 --- a/packages/core/src/renderer/frames/cluster-frame/init-cluster-frame.injectable.ts +++ b/packages/core/src/renderer/frames/cluster-frame/init-cluster-frame.injectable.ts @@ -23,7 +23,7 @@ const initClusterFrameInjectable = getInjectable({ assert(hostedCluster, "This can only be injected within a cluster frame"); - const loadExtensions = di.inject(autoInitExtensionsInjectable); + const autoInitExtensions = di.inject(autoInitExtensionsInjectable); const catalogEntityRegistry = di.inject(catalogEntityRegistryInjectable); const frameRoutingId = di.inject(frameRoutingIdInjectable); const emitAppEvent = di.inject(emitAppEventInjectable); @@ -45,7 +45,7 @@ const initClusterFrameInjectable = getInjectable({ when( () => catalogEntityRegistry.items.get().length > 0, () => - loadExtensions(), + autoInitExtensions(), { timeout: 15_000, onError: (error) => { diff --git a/packages/core/src/renderer/frames/root-frame/init-root-frame.injectable.ts b/packages/core/src/renderer/frames/root-frame/init-root-frame.injectable.ts index 6cadcb3f7c..b4f3d183d4 100644 --- a/packages/core/src/renderer/frames/root-frame/init-root-frame.injectable.ts +++ b/packages/core/src/renderer/frames/root-frame/init-root-frame.injectable.ts @@ -7,41 +7,19 @@ import bindProtocolAddRouteHandlersInjectable from "../../protocol-handler/bind- import lensProtocolRouterRendererInjectable from "../../protocol-handler/lens-protocol-router-renderer/lens-protocol-router-renderer.injectable"; import registerIpcListenersInjectable from "../../ipc/register-ipc-listeners.injectable"; import loggerInjectable from "../../../common/logger.injectable"; -import { delay } from "../../../common/utils"; import { broadcastMessage } from "../../../common/ipc"; -import sendBundledExtensionsLoadedInjectable from "../../../features/extensions/loader/renderer/send-bundled-extensions-loaded.injectable"; -import autoInitExtensionsInjectable from "../../../features/extensions/loader/common/auto-init-extensions.injectable"; import unmountRootComponentInjectable from "../../window/unmount-root-component.injectable"; const initRootFrameInjectable = getInjectable({ id: "init-root-frame", instantiate: (di) => { - const autoInitExtensions = di.inject(autoInitExtensionsInjectable); const registerIpcListeners = di.inject(registerIpcListenersInjectable); const bindProtocolAddRouteHandlers = di.inject(bindProtocolAddRouteHandlersInjectable); const lensProtocolRouterRenderer = di.inject(lensProtocolRouterRendererInjectable); const logger = di.inject(loggerInjectable); - const sendBundledExtensionsLoaded = di.inject(sendBundledExtensionsLoadedInjectable); const unmountRootComponent = di.inject(unmountRootComponentInjectable); return async () => { - try { - // maximum time to let bundled extensions finish loading - const timeout = delay(10000); - - const loadingExtensions = await autoInitExtensions(); - - const loadingBundledExtensions = loadingExtensions - .filter((e) => e.isBundled) - .map((e) => e.loaded); - - const bundledExtensionsFinished = Promise.all(loadingBundledExtensions); - - await Promise.race([bundledExtensionsFinished, timeout]); - } finally { - sendBundledExtensionsLoaded(); - } - lensProtocolRouterRenderer.init(); bindProtocolAddRouteHandlers(); diff --git a/packages/core/src/renderer/frames/root-frame/wait-for-bundled-extensions.injectable.ts b/packages/core/src/renderer/frames/root-frame/wait-for-bundled-extensions.injectable.ts new file mode 100644 index 0000000000..36b66a73c6 --- /dev/null +++ b/packages/core/src/renderer/frames/root-frame/wait-for-bundled-extensions.injectable.ts @@ -0,0 +1,40 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import { delay } from "../../../common/utils"; +import autoInitExtensionsInjectable from "../../../features/extensions/loader/common/auto-init-extensions.injectable"; +import sendBundledExtensionsLoadedInjectable from "../../../features/extensions/loader/renderer/send-bundled-extensions-loaded.injectable"; +import { beforeMainFrameStartsSecondInjectionToken } from "../../before-frame-starts/tokens"; + +const waitForBundledExtensionsInjectable = getInjectable({ + id: "wait-for-bundled-extensions", + instantiate: (di) => ({ + id: "wait-for-bundled-extensions", + run: async () => { + const autoInitExtensions = di.inject(autoInitExtensionsInjectable); + const sendBundledExtensionsLoaded = di.inject(sendBundledExtensionsLoadedInjectable); + + try { + // maximum time to let bundled extensions finish loading + const timeout = delay(10000); + + const loadingExtensions = await autoInitExtensions(); + + const loadingBundledExtensions = loadingExtensions + .filter((e) => e.isBundled) + .map((e) => e.loaded); + + const bundledExtensionsFinished = Promise.all(loadingBundledExtensions); + + await Promise.race([bundledExtensionsFinished, timeout]); + } finally { + sendBundledExtensionsLoaded(); + } + }, + }), + injectionToken: beforeMainFrameStartsSecondInjectionToken, +}); + +export default waitForBundledExtensionsInjectable;