From abd5af7be9026971c1aff005929ebd86b2ccc838 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Wed, 15 Feb 2023 16:06:31 -0500 Subject: [PATCH] Fix external extensions not loading initially Signed-off-by: Sebastian Malton --- packages/core/src/renderer/bootstrap.tsx | 14 +---------- .../extension-discovery/init.injectable.ts | 24 +++++++++++++++++++ .../extension-loader/init.injectable.ts | 22 +++++++++++++++++ 3 files changed, 47 insertions(+), 13 deletions(-) create mode 100644 packages/core/src/renderer/extension-discovery/init.injectable.ts create mode 100644 packages/core/src/renderer/extension-loader/init.injectable.ts diff --git a/packages/core/src/renderer/bootstrap.tsx b/packages/core/src/renderer/bootstrap.tsx index f74c74986f..f2880f504e 100644 --- a/packages/core/src/renderer/bootstrap.tsx +++ b/packages/core/src/renderer/bootstrap.tsx @@ -10,8 +10,6 @@ import { render, unmountComponentAtNode } from "react-dom"; import { DefaultProps } from "./mui-base-theme"; import { DiContextProvider } from "@ogre-tools/injectable-react"; import type { DiContainer } from "@ogre-tools/injectable"; -import extensionLoaderInjectable from "../extensions/extension-loader/extension-loader.injectable"; -import extensionDiscoveryInjectable from "../extensions/extension-discovery/extension-discovery.injectable"; import extensionInstallationStateStoreInjectable from "../extensions/extension-installation-state-store/extension-installation-state-store.injectable"; import initRootFrameInjectable from "./frames/root-frame/init-root-frame.injectable"; import initClusterFrameInjectable from "./frames/cluster-frame/init-cluster-frame/init-cluster-frame.injectable"; @@ -29,14 +27,6 @@ export async function bootstrap(di: DiContainer) { assert(rootElem, "#app MUST exist"); - const extensionLoader = di.inject(extensionLoaderInjectable); - - extensionLoader.init(); - - const extensionDiscovery = di.inject(extensionDiscoveryInjectable); - - extensionDiscovery.init(); - const extensionInstallationStateStore = di.inject(extensionInstallationStateStoreInjectable); extensionInstallationStateStore.bindIpcListeners(); @@ -54,9 +44,7 @@ export async function bootstrap(di: DiContainer) { } try { - await initializeApp(() => { - unmountComponentAtNode(rootElem); - }); + await initializeApp(() => unmountComponentAtNode(rootElem)); } catch (error) { console.error(`[BOOTSTRAP]: view initialization error: ${error}`, { origin: location.href, diff --git a/packages/core/src/renderer/extension-discovery/init.injectable.ts b/packages/core/src/renderer/extension-discovery/init.injectable.ts new file mode 100644 index 0000000000..fad1a70a79 --- /dev/null +++ b/packages/core/src/renderer/extension-discovery/init.injectable.ts @@ -0,0 +1,24 @@ +/** + * 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 extensionDiscoveryInjectable from "../../extensions/extension-discovery/extension-discovery.injectable"; +import { beforeFrameStartsSecondInjectionToken } from "../before-frame-starts/tokens"; +import initializeExtensionLoaderInjectable from "../extension-loader/init.injectable"; + +const initializeExtensionDiscoveryInjectable = getInjectable({ + id: "initialize-extension-discovery", + instantiate: (di) => ({ + id: "initialize-extension-discovery", + run: async () => { + const extensionDiscovery = di.inject(extensionDiscoveryInjectable); + + await extensionDiscovery.init(); + }, + runAfter: di.inject(initializeExtensionLoaderInjectable), + }), + injectionToken: beforeFrameStartsSecondInjectionToken, +}); + +export default initializeExtensionDiscoveryInjectable; diff --git a/packages/core/src/renderer/extension-loader/init.injectable.ts b/packages/core/src/renderer/extension-loader/init.injectable.ts new file mode 100644 index 0000000000..e00e8a090f --- /dev/null +++ b/packages/core/src/renderer/extension-loader/init.injectable.ts @@ -0,0 +1,22 @@ +/** + * 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 extensionLoaderInjectable from "../../extensions/extension-loader/extension-loader.injectable"; +import { beforeFrameStartsSecondInjectionToken } from "../before-frame-starts/tokens"; + +const initializeExtensionLoaderInjectable = getInjectable({ + id: "initialize-extension-loader", + instantiate: (di) => ({ + id: "initialize-extension-loader", + run: async () => { + const extensionLoader = di.inject(extensionLoaderInjectable); + + await extensionLoader.init(); + }, + }), + injectionToken: beforeFrameStartsSecondInjectionToken, +}); + +export default initializeExtensionLoaderInjectable;