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

Move main frame init extensions to runnable

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2023-02-17 14:25:29 -05:00
parent fcb214001f
commit 09c5f3777e
3 changed files with 42 additions and 24 deletions

View File

@ -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) => {

View File

@ -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();

View File

@ -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;