From 559df5e5cbcc11a7514faf338e7a12cefb33c714 Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Wed, 1 Mar 2023 13:15:05 +0200 Subject: [PATCH] Switch to using start application from Feature Signed-off-by: Janne Savolainen --- packages/core/package.json | 2 + packages/core/src/common/create-app.ts | 17 ------- .../common/vars/node-env-injection-token.ts | 2 +- .../main/start-application-menu.injectable.ts | 2 +- .../start-checking-for-updates.injectable.ts | 2 +- ...current-version-to-analytics.injectable.ts | 2 +- ...update-should-happen-on-quit.injectable.ts | 2 +- .../state-sync/main/setup-sync.injectable.ts | 2 +- .../cluster/store/main/init.injectable.ts | 2 +- .../main/init-store.injectable.ts | 2 +- .../hotbar/store/main/init.injectable.ts | 2 +- .../shell-sync/main/setup-shell.injectable.ts | 2 +- .../main/setup-update-emitter.injectable.ts | 2 +- .../app-paths/setup-app-paths.injectable.ts | 4 +- .../cluster/initialize-manager.injectable.ts | 2 +- packages/core/src/main/create-app.ts | 32 ------------ ...ait-for-electron-to-be-ready.injectable.ts | 14 ------ ...-single-application-instance.injectable.ts | 2 +- .../setup-application-name.injectable.ts | 2 +- .../setup-deep-linking.injectable.ts | 2 +- ...s-in-development-environment.injectable.ts | 2 +- .../setup-device-shutdown.injectable.ts | 2 +- .../setup-ipc-main-handlers.injectable.ts | 2 +- ...-visibility-after-activation.injectable.ts | 2 +- ...ables-after-window-is-opened.injectable.ts | 2 +- ...efore-closing-of-application.injectable.ts | 2 +- packages/core/src/main/getDi.ts | 17 ------- packages/core/src/main/getDiForUnitTesting.ts | 12 +++-- packages/core/src/main/library.ts | 12 ++--- .../register-lens-core.ts} | 11 ++-- ...efore-electron-is-ready-injection-token.ts | 10 ---- .../runnable-tokens/phases.ts | 28 ----------- ...t-service-start-to-event-bus.injectable.ts | 2 +- .../initialize-extensions.injectable.ts | 2 +- .../kube-config-sync/add-source.injectable.ts | 2 +- .../start-kube-config-sync.injectable.ts | 2 +- .../runnables/sentry/setup.injectable.ts | 2 +- .../setup-hardware-acceleration.injectable.ts | 2 +- .../runnables/setup-hostnames.injectable.ts | 2 +- .../runnables/setup-immer.injectable.ts | 2 +- ...setup-lens-proxy-certificate.injectable.ts | 2 +- .../runnables/setup-lens-proxy.injectable.ts | 2 +- .../runnables/setup-mobx.injectable.ts | 2 +- .../runnables/setup-proxy-env.injectable.ts | 2 +- ...-of-general-catalog-entities.injectable.ts | 2 +- .../setup-syncing-of-weblinks.injectable.ts | 2 +- .../runnables/setup-system-ca.injectable.ts | 2 +- .../show-initial-window.injectable.ts | 4 +- .../runnables/show-loading.injectable.ts | 4 +- .../start-main-application.injectable.ts | 50 ------------------- .../main/stores/init-user-store.injectable.ts | 2 +- ...-theme-from-operating-system.injectable.ts | 2 +- .../electron-tray/start-tray.injectable.ts | 2 +- .../menu-icon/start-reactivity.injectable.ts | 2 +- ...art-reactive-tray-menu-items.injectable.ts | 2 +- .../sync-open-at-login-with-os.injectable.ts | 2 +- .../start-listening-on-channels.injectable.ts | 2 +- .../vars/build-version/init.injectable.ts | 2 +- .../default-update-channel/init.injectable.ts | 2 +- .../vars/release-channel/init.injectable.ts | 2 +- .../semantic-build-version/init.injectable.ts | 2 +- ...ootstrap.global-override-for-injectable.ts | 6 +++ .../core/src/renderer/bootstrap.injectable.ts | 24 +++++++++ packages/core/src/renderer/bootstrap.tsx | 14 +++--- .../test-utils/get-application-builder.tsx | 41 +++++++++++---- packages/core/src/renderer/create-app.ts | 33 ------------ packages/core/src/renderer/getDi.tsx | 20 -------- .../core/src/renderer/getDiForUnitTesting.tsx | 18 +++++-- packages/core/src/renderer/library.ts | 8 ++- .../register-lens-core.ts} | 13 ++++- .../start-frame/start-frame.injectable.ts | 32 +++++++----- packages/core/webpack/renderer.ts | 2 +- packages/open-lens/package.json | 2 + packages/open-lens/src/main/index.ts | 29 ++++++++--- .../open-lens/src/main/node-env.injectable.ts | 8 +++ packages/open-lens/src/renderer/index.ts | 31 +++++++++--- .../src/renderer/node-env.injectable.ts | 8 +++ packages/open-lens/webpack/renderer.ts | 4 +- 78 files changed, 266 insertions(+), 338 deletions(-) delete mode 100644 packages/core/src/common/create-app.ts delete mode 100644 packages/core/src/main/create-app.ts delete mode 100644 packages/core/src/main/electron-app/features/wait-for-electron-to-be-ready.injectable.ts delete mode 100644 packages/core/src/main/getDi.ts rename packages/core/src/{renderer/register-injectables.ts => main/register-lens-core.ts} (73%) delete mode 100644 packages/core/src/main/start-main-application/runnable-tokens/before-electron-is-ready-injection-token.ts delete mode 100644 packages/core/src/main/start-main-application/runnable-tokens/phases.ts delete mode 100644 packages/core/src/main/start-main-application/start-main-application.injectable.ts create mode 100644 packages/core/src/renderer/bootstrap.global-override-for-injectable.ts create mode 100644 packages/core/src/renderer/bootstrap.injectable.ts delete mode 100644 packages/core/src/renderer/create-app.ts delete mode 100644 packages/core/src/renderer/getDi.tsx rename packages/core/src/{main/register-injectables.ts => renderer/register-lens-core.ts} (66%) create mode 100644 packages/open-lens/src/main/node-env.injectable.ts create mode 100644 packages/open-lens/src/renderer/node-env.injectable.ts diff --git a/packages/core/package.json b/packages/core/package.json index d771b1769e..5e5cc6b06e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -135,6 +135,7 @@ "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.2", "@ogre-tools/injectable-extension-for-mobx": "^15.1.2", "@ogre-tools/injectable-react": "^15.1.2", + "@ogre-tools/injectable-utils": "^15.1.2", "@sentry/electron": "^3.0.8", "@sentry/integrations": "^6.19.3", "@side/jest-runtime": "^1.1.0", @@ -330,6 +331,7 @@ }, "peerDependencies": { "@k8slens/application": "^6.4.0-beta.13", + "@k8slens/application-for-electron-main": "^6.4.0-beta.13", "@types/byline": "^4.2.33", "@types/chart.js": "^2.9.36", "@types/color": "^3.0.3", diff --git a/packages/core/src/common/create-app.ts b/packages/core/src/common/create-app.ts deleted file mode 100644 index 2696950ce7..0000000000 --- a/packages/core/src/common/create-app.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import type { DiContainerForInjection } from "@ogre-tools/injectable"; - -export interface ApplicationConfig { - mode: string; -} - -export interface Application { - start: () => Promise; - readonly di: DiContainerForInjection; -} - -export type CreateApplication = (config: ApplicationConfig) => Application; diff --git a/packages/core/src/common/vars/node-env-injection-token.ts b/packages/core/src/common/vars/node-env-injection-token.ts index 9de463c1cb..5f50ad2e06 100644 --- a/packages/core/src/common/vars/node-env-injection-token.ts +++ b/packages/core/src/common/vars/node-env-injection-token.ts @@ -4,7 +4,7 @@ */ import { getInjectionToken } from "@ogre-tools/injectable"; -const nodeEnvInjectionToken = getInjectionToken({ +export const nodeEnvInjectionToken = getInjectionToken({ id: "node-env-injection-token", }); diff --git a/packages/core/src/features/application-menu/main/start-application-menu.injectable.ts b/packages/core/src/features/application-menu/main/start-application-menu.injectable.ts index a3edd09ca1..59d13760b6 100644 --- a/packages/core/src/features/application-menu/main/start-application-menu.injectable.ts +++ b/packages/core/src/features/application-menu/main/start-application-menu.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import applicationMenuReactivityInjectable from "./application-menu-reactivity.injectable"; -import { onLoadOfApplicationInjectionToken } from "../../../main/start-main-application/runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; const startApplicationMenuInjectable = getInjectable({ id: "start-application-menu", diff --git a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/start-checking-for-updates.injectable.ts b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/start-checking-for-updates.injectable.ts index 20b60af2fa..9ec17029ed 100644 --- a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/start-checking-for-updates.injectable.ts +++ b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/start-checking-for-updates.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import periodicalCheckForUpdatesInjectable from "./periodical-check-for-updates.injectable"; import updatingIsEnabledInjectable from "../../../main/updating-is-enabled/updating-is-enabled.injectable"; -import { afterApplicationIsLoadedInjectionToken } from "../../../../../main/start-main-application/runnable-tokens/after-application-is-loaded-injection-token"; +import { afterApplicationIsLoadedInjectionToken } from "@k8slens/application"; const startCheckingForUpdatesInjectable = getInjectable({ id: "start-checking-for-updates", diff --git a/packages/core/src/features/application-update/main/emit-current-version-to-analytics.injectable.ts b/packages/core/src/features/application-update/main/emit-current-version-to-analytics.injectable.ts index 17fdf89944..1a7abcd7ce 100644 --- a/packages/core/src/features/application-update/main/emit-current-version-to-analytics.injectable.ts +++ b/packages/core/src/features/application-update/main/emit-current-version-to-analytics.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { afterApplicationIsLoadedInjectionToken } from "../../../main/start-main-application/runnable-tokens/after-application-is-loaded-injection-token"; +import { afterApplicationIsLoadedInjectionToken } from "@k8slens/application"; import emitAppEventInjectable from "../../../common/app-event-bus/emit-event.injectable"; import { getCurrentDateTime } from "../../../common/utils/date/get-current-date-time"; import buildVersionInjectable from "../../../main/vars/build-version/build-version.injectable"; diff --git a/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/start-watching-if-update-should-happen-on-quit.injectable.ts b/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/start-watching-if-update-should-happen-on-quit.injectable.ts index 2609f8f46f..73742babaa 100644 --- a/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/start-watching-if-update-should-happen-on-quit.injectable.ts +++ b/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/start-watching-if-update-should-happen-on-quit.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { onLoadOfApplicationInjectionToken } from "../../../../main/start-main-application/runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; import watchIfUpdateShouldHappenOnQuitInjectable from "./watch-if-update-should-happen-on-quit.injectable"; const startWatchingIfUpdateShouldHappenOnQuitInjectable = getInjectable({ diff --git a/packages/core/src/features/cluster/state-sync/main/setup-sync.injectable.ts b/packages/core/src/features/cluster/state-sync/main/setup-sync.injectable.ts index 9b0e13249d..e61a805ee2 100644 --- a/packages/core/src/features/cluster/state-sync/main/setup-sync.injectable.ts +++ b/packages/core/src/features/cluster/state-sync/main/setup-sync.injectable.ts @@ -7,7 +7,7 @@ import { isEqual } from "lodash"; import { autorun } from "mobx"; import clusterStoreInjectable from "../../../../common/cluster-store/cluster-store.injectable"; import type { ClusterId, ClusterState } from "../../../../common/cluster-types"; -import { beforeApplicationIsLoadingInjectionToken } from "../../../../main/start-main-application/runnable-tokens/before-application-is-loading-injection-token"; +import { beforeApplicationIsLoadingInjectionToken } from "@k8slens/application"; import initClusterStoreInjectable from "../../store/main/init.injectable"; import emitClusterStateUpdateInjectable from "./emit-update.injectable"; diff --git a/packages/core/src/features/cluster/store/main/init.injectable.ts b/packages/core/src/features/cluster/store/main/init.injectable.ts index 7849ab6acd..28fdb1aa9f 100644 --- a/packages/core/src/features/cluster/store/main/init.injectable.ts +++ b/packages/core/src/features/cluster/store/main/init.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import clusterStoreInjectable from "../../../../common/cluster-store/cluster-store.injectable"; -import { beforeApplicationIsLoadingInjectionToken } from "../../../../main/start-main-application/runnable-tokens/before-application-is-loading-injection-token"; +import { beforeApplicationIsLoadingInjectionToken } from "@k8slens/application"; import initUserStoreInjectable from "../../../../main/stores/init-user-store.injectable"; const initClusterStoreInjectable = getInjectable({ diff --git a/packages/core/src/features/file-system-provisioner/main/init-store.injectable.ts b/packages/core/src/features/file-system-provisioner/main/init-store.injectable.ts index 0fe3d4f77b..1449a7fa4c 100644 --- a/packages/core/src/features/file-system-provisioner/main/init-store.injectable.ts +++ b/packages/core/src/features/file-system-provisioner/main/init-store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import fileSystemProvisionerStoreInjectable from "../../../extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.injectable"; -import { onLoadOfApplicationInjectionToken } from "../../../main/start-main-application/runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; const initFileSystemProvisionerStoreInjectable = getInjectable({ id: "init-file-system-provisioner-store", diff --git a/packages/core/src/features/hotbar/store/main/init.injectable.ts b/packages/core/src/features/hotbar/store/main/init.injectable.ts index 0717151b53..5d0b5b0cf9 100644 --- a/packages/core/src/features/hotbar/store/main/init.injectable.ts +++ b/packages/core/src/features/hotbar/store/main/init.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import hotbarStoreInjectable from "../../../../common/hotbars/store.injectable"; -import { onLoadOfApplicationInjectionToken } from "../../../../main/start-main-application/runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; import setupSyncingOfGeneralCatalogEntitiesInjectable from "../../../../main/start-main-application/runnables/setup-syncing-of-general-catalog-entities.injectable"; const initHotbarStoreInjectable = getInjectable({ diff --git a/packages/core/src/features/shell-sync/main/setup-shell.injectable.ts b/packages/core/src/features/shell-sync/main/setup-shell.injectable.ts index 82d623ec28..200356bb3d 100644 --- a/packages/core/src/features/shell-sync/main/setup-shell.injectable.ts +++ b/packages/core/src/features/shell-sync/main/setup-shell.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import loggerInjectable from "../../../common/logger.injectable"; -import { onLoadOfApplicationInjectionToken } from "../../../main/start-main-application/runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; import { unionPATHs } from "../../../common/utils/union-env-path"; import isSnapPackageInjectable from "../../../common/vars/is-snap-package.injectable"; import electronAppInjectable from "../../../main/electron-app/electron-app.injectable"; diff --git a/packages/core/src/features/theme/system-type/main/setup-update-emitter.injectable.ts b/packages/core/src/features/theme/system-type/main/setup-update-emitter.injectable.ts index 75129fa128..5416fda208 100644 --- a/packages/core/src/features/theme/system-type/main/setup-update-emitter.injectable.ts +++ b/packages/core/src/features/theme/system-type/main/setup-update-emitter.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { reaction } from "mobx"; -import { onLoadOfApplicationInjectionToken } from "../../../../main/start-main-application/runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; import operatingSystemThemeInjectable from "../../../../main/theme/operating-system-theme.injectable"; import emitSystemThemeTypeUpdateInjectable from "./emit-update.injectable"; diff --git a/packages/core/src/main/app-paths/setup-app-paths.injectable.ts b/packages/core/src/main/app-paths/setup-app-paths.injectable.ts index 0b3c67b60f..c6f1c1e01e 100644 --- a/packages/core/src/main/app-paths/setup-app-paths.injectable.ts +++ b/packages/core/src/main/app-paths/setup-app-paths.injectable.ts @@ -13,7 +13,7 @@ import { fromPairs, map } from "lodash/fp"; import { pipeline } from "@ogre-tools/fp"; import joinPathsInjectable from "../../common/path/join-paths.injectable"; import appNameInjectable from "../../common/vars/app-name.injectable"; -import { appPathsRunnablePhaseInjectionToken } from "../start-main-application/runnable-tokens/phases"; +import { beforeAnythingInjectionToken } from "@k8slens/application-for-electron-main"; const setupAppPathsInjectable = getInjectable({ id: "setup-app-paths", @@ -51,7 +51,7 @@ const setupAppPathsInjectable = getInjectable({ }; }, - injectionToken: appPathsRunnablePhaseInjectionToken, + injectionToken: beforeAnythingInjectionToken, }); export default setupAppPathsInjectable; diff --git a/packages/core/src/main/cluster/initialize-manager.injectable.ts b/packages/core/src/main/cluster/initialize-manager.injectable.ts index adabcf416c..895355e232 100644 --- a/packages/core/src/main/cluster/initialize-manager.injectable.ts +++ b/packages/core/src/main/cluster/initialize-manager.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { onLoadOfApplicationInjectionToken } from "../start-main-application/runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; import clusterManagerInjectable from "./manager.injectable"; const initializeClusterManagerInjectable = getInjectable({ diff --git a/packages/core/src/main/create-app.ts b/packages/core/src/main/create-app.ts deleted file mode 100644 index 57f764706f..0000000000 --- a/packages/core/src/main/create-app.ts +++ /dev/null @@ -1,32 +0,0 @@ -/** - * 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 { runInAction } from "mobx"; -import type { CreateApplication } from "../common/create-app"; -import nodeEnvInjectionToken from "../common/vars/node-env-injection-token"; -import { getDi } from "./getDi"; -import { registerInjectables } from "./register-injectables"; -import startMainApplicationInjectable from "./start-main-application/start-main-application.injectable"; - -export const createApplication: CreateApplication = (config) => { - const { mode } = config; - const di = getDi(); - - runInAction(() => { - di.register(getInjectable({ - id: "node-env", - instantiate: () => mode, - injectionToken: nodeEnvInjectionToken, - })); - - registerInjectables(di); - }); - - return { - start: di.inject(startMainApplicationInjectable), - di, - }; -}; diff --git a/packages/core/src/main/electron-app/features/wait-for-electron-to-be-ready.injectable.ts b/packages/core/src/main/electron-app/features/wait-for-electron-to-be-ready.injectable.ts deleted file mode 100644 index 586e8d7ac2..0000000000 --- a/packages/core/src/main/electron-app/features/wait-for-electron-to-be-ready.injectable.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * 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 electronAppInjectable from "../electron-app.injectable"; - -const waitForElectronToBeReadyInjectable = getInjectable({ - id: "wait-for-electron-to-be-ready", - - instantiate: (di) => () => di.inject(electronAppInjectable).whenReady(), -}); - -export default waitForElectronToBeReadyInjectable; diff --git a/packages/core/src/main/electron-app/runnables/enforce-single-application-instance.injectable.ts b/packages/core/src/main/electron-app/runnables/enforce-single-application-instance.injectable.ts index f69036ffed..1868f61a8a 100644 --- a/packages/core/src/main/electron-app/runnables/enforce-single-application-instance.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/enforce-single-application-instance.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { beforeElectronIsReadyInjectionToken } from "../../start-main-application/runnable-tokens/before-electron-is-ready-injection-token"; +import { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-electron-main"; import requestSingleInstanceLockInjectable from "../features/request-single-instance-lock.injectable"; import exitAppInjectable from "../features/exit-app.injectable"; diff --git a/packages/core/src/main/electron-app/runnables/setup-application-name.injectable.ts b/packages/core/src/main/electron-app/runnables/setup-application-name.injectable.ts index fd47480f09..fe86f6d0e2 100644 --- a/packages/core/src/main/electron-app/runnables/setup-application-name.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/setup-application-name.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import appNameInjectable from "../../../common/vars/app-name.injectable"; -import { beforeElectronIsReadyInjectionToken } from "../../start-main-application/runnable-tokens/before-electron-is-ready-injection-token"; +import { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-electron-main"; import electronAppInjectable from "../electron-app.injectable"; const setupApplicationNameInjectable = getInjectable({ diff --git a/packages/core/src/main/electron-app/runnables/setup-deep-linking.injectable.ts b/packages/core/src/main/electron-app/runnables/setup-deep-linking.injectable.ts index 5f82d60f42..f4a7f8eccd 100644 --- a/packages/core/src/main/electron-app/runnables/setup-deep-linking.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/setup-deep-linking.injectable.ts @@ -9,7 +9,7 @@ import loggerInjectable from "../../../common/logger.injectable"; import commandLineArgumentsInjectable from "../../utils/command-line-arguments.injectable"; import { pipeline } from "@ogre-tools/fp"; import { find, startsWith, toLower, map } from "lodash/fp"; -import { onLoadOfApplicationInjectionToken } from "../../start-main-application/runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; import showApplicationWindowInjectable from "../../start-main-application/lens-window/show-application-window.injectable"; const setupDeepLinkingInjectable = getInjectable({ diff --git a/packages/core/src/main/electron-app/runnables/setup-developer-tools-in-development-environment.injectable.ts b/packages/core/src/main/electron-app/runnables/setup-developer-tools-in-development-environment.injectable.ts index 5572887b06..26ba542456 100644 --- a/packages/core/src/main/electron-app/runnables/setup-developer-tools-in-development-environment.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/setup-developer-tools-in-development-environment.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import nodeEnvInjectionToken from "../../../common/vars/node-env-injection-token"; import loggerInjectable from "../../../common/logger.injectable"; -import { onLoadOfApplicationInjectionToken } from "../../start-main-application/runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; const setupDeveloperToolsInDevelopmentEnvironmentInjectable = getInjectable({ id: "setup-developer-tools-in-development-environment", diff --git a/packages/core/src/main/electron-app/runnables/setup-device-shutdown.injectable.ts b/packages/core/src/main/electron-app/runnables/setup-device-shutdown.injectable.ts index 8c3c21ae30..2c907909af 100644 --- a/packages/core/src/main/electron-app/runnables/setup-device-shutdown.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/setup-device-shutdown.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import powerMonitorInjectable from "../features/power-monitor.injectable"; import exitAppInjectable from "../features/exit-app.injectable"; -import { onLoadOfApplicationInjectionToken } from "../../start-main-application/runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; const setupDeviceShutdownInjectable = getInjectable({ id: "setup-device-shutdown", diff --git a/packages/core/src/main/electron-app/runnables/setup-ipc-main-handlers/setup-ipc-main-handlers.injectable.ts b/packages/core/src/main/electron-app/runnables/setup-ipc-main-handlers/setup-ipc-main-handlers.injectable.ts index b8a869f7fe..69d6f4405b 100644 --- a/packages/core/src/main/electron-app/runnables/setup-ipc-main-handlers/setup-ipc-main-handlers.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/setup-ipc-main-handlers/setup-ipc-main-handlers.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { setupIpcMainHandlers } from "./setup-ipc-main-handlers"; import loggerInjectable from "../../../../common/logger.injectable"; import clusterStoreInjectable from "../../../../common/cluster-store/cluster-store.injectable"; -import { onLoadOfApplicationInjectionToken } from "../../../start-main-application/runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; import applicationMenuItemCompositeInjectable from "../../../../features/application-menu/main/application-menu-item-composite.injectable"; import emitAppEventInjectable from "../../../../common/app-event-bus/emit-event.injectable"; import getClusterByIdInjectable from "../../../../common/cluster-store/get-by-id.injectable"; diff --git a/packages/core/src/main/electron-app/runnables/setup-main-window-visibility-after-activation.injectable.ts b/packages/core/src/main/electron-app/runnables/setup-main-window-visibility-after-activation.injectable.ts index c32cfe0765..49c2293397 100644 --- a/packages/core/src/main/electron-app/runnables/setup-main-window-visibility-after-activation.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/setup-main-window-visibility-after-activation.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import electronAppInjectable from "../electron-app.injectable"; import loggerInjectable from "../../../common/logger.injectable"; -import { onLoadOfApplicationInjectionToken } from "../../start-main-application/runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; import showApplicationWindowInjectable from "../../start-main-application/lens-window/show-application-window.injectable"; const setupMainWindowVisibilityAfterActivationInjectable = getInjectable({ diff --git a/packages/core/src/main/electron-app/runnables/setup-runnables-after-window-is-opened.injectable.ts b/packages/core/src/main/electron-app/runnables/setup-runnables-after-window-is-opened.injectable.ts index dc80998de0..1131efad95 100644 --- a/packages/core/src/main/electron-app/runnables/setup-runnables-after-window-is-opened.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/setup-runnables-after-window-is-opened.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { beforeElectronIsReadyInjectionToken } from "../../start-main-application/runnable-tokens/before-electron-is-ready-injection-token"; +import { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-electron-main"; import electronAppInjectable from "../electron-app.injectable"; import { runManyFor } from "../../../common/runnable/run-many-for"; import { afterWindowIsOpenedInjectionToken } from "../../start-main-application/runnable-tokens/after-window-is-opened-injection-token"; diff --git a/packages/core/src/main/electron-app/runnables/setup-runnables-before-closing-of-application.injectable.ts b/packages/core/src/main/electron-app/runnables/setup-runnables-before-closing-of-application.injectable.ts index c0bc3ae620..4090f3f9c6 100644 --- a/packages/core/src/main/electron-app/runnables/setup-runnables-before-closing-of-application.injectable.ts +++ b/packages/core/src/main/electron-app/runnables/setup-runnables-before-closing-of-application.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { beforeElectronIsReadyInjectionToken } from "../../start-main-application/runnable-tokens/before-electron-is-ready-injection-token"; +import { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-electron-main"; import { beforeQuitOfFrontEndInjectionToken } from "../../start-main-application/runnable-tokens/before-quit-of-front-end-injection-token"; import { beforeQuitOfBackEndInjectionToken } from "../../start-main-application/runnable-tokens/before-quit-of-back-end-injection-token"; import electronAppInjectable from "../electron-app.injectable"; diff --git a/packages/core/src/main/getDi.ts b/packages/core/src/main/getDi.ts deleted file mode 100644 index 8d4b1ff57f..0000000000 --- a/packages/core/src/main/getDi.ts +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import { createContainer } from "@ogre-tools/injectable"; -import { registerMobX } from "@ogre-tools/injectable-extension-for-mobx"; -import { setLegacyGlobalDiForExtensionApi } from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; - -export const getDi = () => { - const environment = "main"; - const di = createContainer(environment); - - registerMobX(di); - setLegacyGlobalDiForExtensionApi(di, environment); - - return di; -}; diff --git a/packages/core/src/main/getDiForUnitTesting.ts b/packages/core/src/main/getDiForUnitTesting.ts index 1e4c3291b9..54b7342646 100644 --- a/packages/core/src/main/getDiForUnitTesting.ts +++ b/packages/core/src/main/getDiForUnitTesting.ts @@ -4,7 +4,7 @@ */ import { chunk } from "lodash/fp"; -import type { DiContainer } from "@ogre-tools/injectable"; +import { createContainer, DiContainer } from "@ogre-tools/injectable"; import { isInjectable } from "@ogre-tools/injectable"; import spawnInjectable from "./child-process/spawn.injectable"; import initializeExtensionsInjectable from "./start-main-application/runnables/initialize-extensions.injectable"; @@ -28,14 +28,20 @@ import electronInjectable from "./utils/resolve-system-proxy/electron.injectable import initializeClusterManagerInjectable from "./cluster/initialize-manager.injectable"; import type { GlobalOverride } from "../common/test-utils/get-global-override"; import { getOverrideFsWithFakes } from "../test-utils/override-fs-with-fakes"; -import { getDi } from "./getDi"; +import { + setLegacyGlobalDiForExtensionApi +} from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; +import { registerMobX } from "@ogre-tools/injectable-extension-for-mobx"; export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {}) { const { doGeneralOverrides = false, } = opts; - const di = getDi(); + const di = createContainer('main'); + + registerMobX(di); + setLegacyGlobalDiForExtensionApi(di, 'main'); di.preventSideEffects(); diff --git a/packages/core/src/main/library.ts b/packages/core/src/main/library.ts index ab1f56528e..b030ec9826 100644 --- a/packages/core/src/main/library.ts +++ b/packages/core/src/main/library.ts @@ -4,12 +4,12 @@ */ // @experimental -export { afterApplicationIsLoadedInjectionToken } from "./start-main-application/runnable-tokens/after-application-is-loaded-injection-token"; -export { beforeApplicationIsLoadingInjectionToken } from "./start-main-application/runnable-tokens/before-application-is-loading-injection-token"; -export { beforeElectronIsReadyInjectionToken } from "./start-main-application/runnable-tokens/before-electron-is-ready-injection-token"; -export { onLoadOfApplicationInjectionToken } from "./start-main-application/runnable-tokens/on-load-of-application-injection-token"; -export { createApplication } from "./create-app"; -export type { CreateApplication, Application, ApplicationConfig } from "../common/create-app"; +export type { + Environments +} from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; + +export { registerLensCore } from "./register-lens-core"; +export { nodeEnvInjectionToken } from "../common/vars/node-env-injection-token"; export * as Mobx from "mobx"; export * as mainExtensionApi from "../extensions/main-api"; export * as commonExtensionApi from "../extensions/common-api"; diff --git a/packages/core/src/renderer/register-injectables.ts b/packages/core/src/main/register-lens-core.ts similarity index 73% rename from packages/core/src/renderer/register-injectables.ts rename to packages/core/src/main/register-lens-core.ts index 0974a1a08b..e2509e6817 100644 --- a/packages/core/src/renderer/register-injectables.ts +++ b/packages/core/src/main/register-lens-core.ts @@ -2,20 +2,25 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ - import type { DiContainer } from "@ogre-tools/injectable"; import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration"; import { runInAction } from "mobx"; +import { + Environments, + setLegacyGlobalDiForExtensionApi +} from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; + +export function registerLensCore(di: DiContainer, environment: Environments) { + setLegacyGlobalDiForExtensionApi(di, environment); -export function registerInjectables(di: DiContainer) { runInAction(() => { autoRegister({ di, targetModule: module, getRequireContexts: () => [ require.context("./", true, CONTEXT_MATCHER_FOR_NON_FEATURES), - require.context("../common", true, CONTEXT_MATCHER_FOR_NON_FEATURES), require.context("../extensions", true, CONTEXT_MATCHER_FOR_NON_FEATURES), + require.context("../common", true, CONTEXT_MATCHER_FOR_NON_FEATURES), require.context("../features", true, CONTEXT_MATCHER_FOR_FEATURES), ], }); diff --git a/packages/core/src/main/start-main-application/runnable-tokens/before-electron-is-ready-injection-token.ts b/packages/core/src/main/start-main-application/runnable-tokens/before-electron-is-ready-injection-token.ts deleted file mode 100644 index 4bdef1ff90..0000000000 --- a/packages/core/src/main/start-main-application/runnable-tokens/before-electron-is-ready-injection-token.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import { getInjectionToken } from "@ogre-tools/injectable"; -import type { RunnableSync } from "../../../common/runnable/run-many-sync-for"; - -export const beforeElectronIsReadyInjectionToken = getInjectionToken({ - id: "before-electron-is-ready", -}); diff --git a/packages/core/src/main/start-main-application/runnable-tokens/phases.ts b/packages/core/src/main/start-main-application/runnable-tokens/phases.ts deleted file mode 100644 index 0b61ae88f2..0000000000 --- a/packages/core/src/main/start-main-application/runnable-tokens/phases.ts +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { getInjectionToken } from "@ogre-tools/injectable"; -import type { Runnable } from "../../../common/runnable/run-many-for"; -import type { RunnableSync } from "../../../common/runnable/run-many-sync-for"; - -/** - * These tokens are here so that the importing of their respective dependencies - * can be delayed until all of them are ready - */ - -/** - * This runnable token should only have the app paths init so that it can be run by itself - */ -export const appPathsRunnablePhaseInjectionToken = getInjectionToken({ - id: "app-paths-runnable-phase", -}); - -export const showLoadingRunnablePhaseInjectionToken = getInjectionToken({ - id: "show-loading-runnable-phase", -}); - -export const showInitialWindowRunnablePhaseInjectionToken = getInjectionToken({ - id: "show-initial-window-runnable-phase", -}); diff --git a/packages/core/src/main/start-main-application/runnables/emit-service-start-to-event-bus.injectable.ts b/packages/core/src/main/start-main-application/runnables/emit-service-start-to-event-bus.injectable.ts index 9655748a72..e21256c716 100644 --- a/packages/core/src/main/start-main-application/runnables/emit-service-start-to-event-bus.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/emit-service-start-to-event-bus.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import emitAppEventInjectable from "../../../common/app-event-bus/emit-event.injectable"; -import { afterApplicationIsLoadedInjectionToken } from "../runnable-tokens/after-application-is-loaded-injection-token"; +import { afterApplicationIsLoadedInjectionToken } from "@k8slens/application"; const emitServiceStartToEventBusInjectable = getInjectable({ id: "emit-service-start-to-event-bus", diff --git a/packages/core/src/main/start-main-application/runnables/initialize-extensions.injectable.ts b/packages/core/src/main/start-main-application/runnables/initialize-extensions.injectable.ts index 8765721d90..7815ecc2a7 100644 --- a/packages/core/src/main/start-main-application/runnables/initialize-extensions.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/initialize-extensions.injectable.ts @@ -9,7 +9,7 @@ import loggerInjectable from "../../../common/logger.injectable"; import extensionDiscoveryInjectable from "../../../extensions/extension-discovery/extension-discovery.injectable"; import extensionLoaderInjectable from "../../../extensions/extension-loader/extension-loader.injectable"; import showErrorPopupInjectable from "../../electron-app/features/show-error-popup.injectable"; -import { onLoadOfApplicationInjectionToken } from "../runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; const initializeExtensionsInjectable = getInjectable({ id: "initialize-extensions", diff --git a/packages/core/src/main/start-main-application/runnables/kube-config-sync/add-source.injectable.ts b/packages/core/src/main/start-main-application/runnables/kube-config-sync/add-source.injectable.ts index f95a39f665..b7ba895c37 100644 --- a/packages/core/src/main/start-main-application/runnables/kube-config-sync/add-source.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/kube-config-sync/add-source.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import kubeconfigSyncManagerInjectable from "../../../catalog-sources/kubeconfig-sync/manager.injectable"; import catalogEntityRegistryInjectable from "../../../catalog/entity-registry.injectable"; -import { afterApplicationIsLoadedInjectionToken } from "../../runnable-tokens/after-application-is-loaded-injection-token"; +import { afterApplicationIsLoadedInjectionToken } from "@k8slens/application"; const addKubeconfigSyncAsEntitySourceInjectable = getInjectable({ id: "add-kubeconfig-sync-as-entity-source", diff --git a/packages/core/src/main/start-main-application/runnables/kube-config-sync/start-kube-config-sync.injectable.ts b/packages/core/src/main/start-main-application/runnables/kube-config-sync/start-kube-config-sync.injectable.ts index 1dbadc4246..6ae5ccca40 100644 --- a/packages/core/src/main/start-main-application/runnables/kube-config-sync/start-kube-config-sync.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/kube-config-sync/start-kube-config-sync.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { afterApplicationIsLoadedInjectionToken } from "../../runnable-tokens/after-application-is-loaded-injection-token"; +import { afterApplicationIsLoadedInjectionToken } from "@k8slens/application"; import directoryForKubeConfigsInjectable from "../../../../common/app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable"; import ensureDirInjectable from "../../../../common/fs/ensure-dir.injectable"; import kubeconfigSyncManagerInjectable from "../../../catalog-sources/kubeconfig-sync/manager.injectable"; diff --git a/packages/core/src/main/start-main-application/runnables/sentry/setup.injectable.ts b/packages/core/src/main/start-main-application/runnables/sentry/setup.injectable.ts index 6d4111ae78..79141c8d66 100644 --- a/packages/core/src/main/start-main-application/runnables/sentry/setup.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/sentry/setup.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { beforeElectronIsReadyInjectionToken } from "../../runnable-tokens/before-electron-is-ready-injection-token"; +import { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-electron-main"; import initializeSentryReportingWithInjectable from "../../../../common/error-reporting/initialize-sentry-reporting.injectable"; import initializeSentryOnMainInjectable from "./initialize-on-main.injectable"; diff --git a/packages/core/src/main/start-main-application/runnables/setup-hardware-acceleration.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-hardware-acceleration.injectable.ts index ffcff08434..c57e35d822 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-hardware-acceleration.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-hardware-acceleration.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import disableHardwareAccelerationInjectable from "../../electron-app/features/disable-hardware-acceleration.injectable"; import hardwareAccelerationShouldBeDisabledInjectable from "../../vars/hardware-acceleration-should-be-disabled.injectable"; -import { beforeElectronIsReadyInjectionToken } from "../runnable-tokens/before-electron-is-ready-injection-token"; +import { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-electron-main"; const setupHardwareAccelerationInjectable = getInjectable({ id: "setup-hardware-acceleration", diff --git a/packages/core/src/main/start-main-application/runnables/setup-hostnames.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-hostnames.injectable.ts index 265ff49162..26d85283d5 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-hostnames.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-hostnames.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import electronAppInjectable from "../../electron-app/electron-app.injectable"; -import { beforeElectronIsReadyInjectionToken } from "../runnable-tokens/before-electron-is-ready-injection-token"; +import { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-electron-main"; const setupHostnamesInjectable = getInjectable({ id: "setup-hostnames", diff --git a/packages/core/src/main/start-main-application/runnables/setup-immer.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-immer.injectable.ts index 61420cf35b..e847578d01 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-immer.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-immer.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import * as Immer from "immer"; -import { beforeElectronIsReadyInjectionToken } from "../runnable-tokens/before-electron-is-ready-injection-token"; +import { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-electron-main"; const setupImmerInjectable = getInjectable({ id: "setup-immer", diff --git a/packages/core/src/main/start-main-application/runnables/setup-lens-proxy-certificate.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-lens-proxy-certificate.injectable.ts index 9957877ab5..9d473f3182 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-lens-proxy-certificate.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-lens-proxy-certificate.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { generate } from "selfsigned"; import lensProxyCertificateInjectable from "../../../common/certificate/lens-proxy-certificate.injectable"; -import { beforeElectronIsReadyInjectionToken } from "../runnable-tokens/before-electron-is-ready-injection-token"; +import { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-electron-main"; const setupLensProxyCertificateInjectable = getInjectable({ id: "setup-lens-proxy-certificate", diff --git a/packages/core/src/main/start-main-application/runnables/setup-lens-proxy.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-lens-proxy.injectable.ts index 69184ddec2..dc63b8f7a3 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-lens-proxy.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-lens-proxy.injectable.ts @@ -9,7 +9,7 @@ import loggerInjectable from "../../../common/logger.injectable"; import lensProxyPortInjectable from "../../lens-proxy/lens-proxy-port.injectable"; import isWindowsInjectable from "../../../common/vars/is-windows.injectable"; import showErrorPopupInjectable from "../../electron-app/features/show-error-popup.injectable"; -import { beforeApplicationIsLoadingInjectionToken } from "../runnable-tokens/before-application-is-loading-injection-token"; +import { beforeApplicationIsLoadingInjectionToken } from "@k8slens/application"; import buildVersionInjectable from "../../vars/build-version/build-version.injectable"; import initializeBuildVersionInjectable from "../../vars/build-version/init.injectable"; import lensProxyCertificateInjectable from "../../../common/certificate/lens-proxy-certificate.injectable"; diff --git a/packages/core/src/main/start-main-application/runnables/setup-mobx.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-mobx.injectable.ts index d13021cdc6..8227c9ace6 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-mobx.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-mobx.injectable.ts @@ -4,7 +4,7 @@ */ import * as Mobx from "mobx"; import { getInjectable } from "@ogre-tools/injectable"; -import { beforeElectronIsReadyInjectionToken } from "../runnable-tokens/before-electron-is-ready-injection-token"; +import { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-electron-main"; const setupMobxInjectable = getInjectable({ id: "setup-mobx", diff --git a/packages/core/src/main/start-main-application/runnables/setup-proxy-env.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-proxy-env.injectable.ts index 0541c2cfda..7553eeb7eb 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-proxy-env.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-proxy-env.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { beforeElectronIsReadyInjectionToken } from "../runnable-tokens/before-electron-is-ready-injection-token"; +import { beforeElectronIsReadyInjectionToken } from "@k8slens/application-for-electron-main"; import getCommandLineSwitchInjectable from "../../electron-app/features/get-command-line-switch.injectable"; const setupProxyEnvInjectable = getInjectable({ diff --git a/packages/core/src/main/start-main-application/runnables/setup-syncing-of-general-catalog-entities.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-syncing-of-general-catalog-entities.injectable.ts index 6dc0b27512..07b17dfa46 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-syncing-of-general-catalog-entities.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-syncing-of-general-catalog-entities.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import syncGeneralCatalogEntitiesInjectable from "../../catalog-sources/sync-general-catalog-entities.injectable"; -import { onLoadOfApplicationInjectionToken } from "../runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; const setupSyncingOfGeneralCatalogEntitiesInjectable = getInjectable({ id: "setup-syncing-of-general-catalog-entities", diff --git a/packages/core/src/main/start-main-application/runnables/setup-syncing-of-weblinks.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-syncing-of-weblinks.injectable.ts index fa4e6b436c..9259b44ab1 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-syncing-of-weblinks.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-syncing-of-weblinks.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { onLoadOfApplicationInjectionToken } from "../runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; import syncWeblinksInjectable from "../../catalog-sources/sync-weblinks.injectable"; const setupSyncingOfWeblinksInjectable = getInjectable({ diff --git a/packages/core/src/main/start-main-application/runnables/setup-system-ca.injectable.ts b/packages/core/src/main/start-main-application/runnables/setup-system-ca.injectable.ts index e819c42596..ecffc60b6c 100644 --- a/packages/core/src/main/start-main-application/runnables/setup-system-ca.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/setup-system-ca.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { beforeApplicationIsLoadingInjectionToken } from "../runnable-tokens/before-application-is-loading-injection-token"; +import { beforeApplicationIsLoadingInjectionToken } from "@k8slens/application"; import injectSystemCAsInjectable from "../../../features/certificate-authorities/common/inject-system-cas.injectable"; const setupSystemCaInjectable = getInjectable({ diff --git a/packages/core/src/main/start-main-application/runnables/show-initial-window.injectable.ts b/packages/core/src/main/start-main-application/runnables/show-initial-window.injectable.ts index 0ce02bfa85..db1ea42610 100644 --- a/packages/core/src/main/start-main-application/runnables/show-initial-window.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/show-initial-window.injectable.ts @@ -8,7 +8,7 @@ import openDeepLinkInjectable from "../../protocol-handler/lens-protocol-router- import commandLineArgumentsInjectable from "../../utils/command-line-arguments.injectable"; import createFirstApplicationWindowInjectable from "../lens-window/application-window/create-first-application-window.injectable"; import splashWindowInjectable from "../lens-window/splash-window/splash-window.injectable"; -import { showInitialWindowRunnablePhaseInjectionToken } from "../runnable-tokens/phases"; +import { afterApplicationIsLoadedInjectionToken } from "@k8slens/application"; const getDeepLinkUrl = (commandLineArguments: string[]) => ( commandLineArguments @@ -45,7 +45,7 @@ const showInitialWindowInjectable = getInjectable({ }, }; }, - injectionToken: showInitialWindowRunnablePhaseInjectionToken, + injectionToken: afterApplicationIsLoadedInjectionToken, }); export default showInitialWindowInjectable; diff --git a/packages/core/src/main/start-main-application/runnables/show-loading.injectable.ts b/packages/core/src/main/start-main-application/runnables/show-loading.injectable.ts index 2305d4cf3b..f12dd3fe09 100644 --- a/packages/core/src/main/start-main-application/runnables/show-loading.injectable.ts +++ b/packages/core/src/main/start-main-application/runnables/show-loading.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import shouldStartHiddenInjectable from "../../electron-app/features/should-start-hidden.injectable"; import splashWindowInjectable from "../lens-window/splash-window/splash-window.injectable"; -import { showLoadingRunnablePhaseInjectionToken } from "../runnable-tokens/phases"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; const showLoadingInjectable = getInjectable({ id: "show-loading", @@ -23,7 +23,7 @@ const showLoadingInjectable = getInjectable({ }, }; }, - injectionToken: showLoadingRunnablePhaseInjectionToken, + injectionToken: onLoadOfApplicationInjectionToken, }); export default showLoadingInjectable; diff --git a/packages/core/src/main/start-main-application/start-main-application.injectable.ts b/packages/core/src/main/start-main-application/start-main-application.injectable.ts deleted file mode 100644 index 51b0a7f3b7..0000000000 --- a/packages/core/src/main/start-main-application/start-main-application.injectable.ts +++ /dev/null @@ -1,50 +0,0 @@ -/** - * 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 { runManyFor } from "../../common/runnable/run-many-for"; -import { runManySyncFor } from "../../common/runnable/run-many-sync-for"; -import { beforeElectronIsReadyInjectionToken } from "./runnable-tokens/before-electron-is-ready-injection-token"; -import { beforeApplicationIsLoadingInjectionToken } from "./runnable-tokens/before-application-is-loading-injection-token"; -import { onLoadOfApplicationInjectionToken } from "./runnable-tokens/on-load-of-application-injection-token"; -import { afterApplicationIsLoadedInjectionToken } from "./runnable-tokens/after-application-is-loaded-injection-token"; -import waitForElectronToBeReadyInjectable from "../electron-app/features/wait-for-electron-to-be-ready.injectable"; -import { appPathsRunnablePhaseInjectionToken, showInitialWindowRunnablePhaseInjectionToken, showLoadingRunnablePhaseInjectionToken } from "./runnable-tokens/phases"; - -const startMainApplicationInjectable = getInjectable({ - id: "start-main-application", - - instantiate: (di) => { - const runMany = runManyFor(di); - const runManySync = runManySyncFor(di); - const waitForElectronToBeReady = di.inject(waitForElectronToBeReadyInjectable); - - const appPathsRunnablePhase = runManySync(appPathsRunnablePhaseInjectionToken); - const beforeElectronIsReady = runManySync(beforeElectronIsReadyInjectionToken); - const beforeApplicationIsLoading = runMany(beforeApplicationIsLoadingInjectionToken); - const showLoadingRunnablePhase = runMany(showLoadingRunnablePhaseInjectionToken); - const onLoadOfApplication = runMany(onLoadOfApplicationInjectionToken); - const showInitialWindowRunnablePhase = runMany(showInitialWindowRunnablePhaseInjectionToken); - const afterApplicationIsLoaded = runMany(afterApplicationIsLoadedInjectionToken); - - return () => { - // Stuff happening before application is ready needs to be synchronous because of - // https://github.com/electron/electron/issues/21370 - appPathsRunnablePhase(); - beforeElectronIsReady(); - - return (async () => { - await waitForElectronToBeReady(); - await beforeApplicationIsLoading(); - await showLoadingRunnablePhase(); - await onLoadOfApplication(); - await showInitialWindowRunnablePhase(); - await afterApplicationIsLoaded(); - })(); - }; - }, -}); - -export default startMainApplicationInjectable; diff --git a/packages/core/src/main/stores/init-user-store.injectable.ts b/packages/core/src/main/stores/init-user-store.injectable.ts index c8d7ec9fe0..58ac61f86d 100644 --- a/packages/core/src/main/stores/init-user-store.injectable.ts +++ b/packages/core/src/main/stores/init-user-store.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import userStoreFileNameMigrationInjectable from "../../common/user-store/file-name-migration.injectable"; import userStoreInjectable from "../../common/user-store/user-store.injectable"; -import { beforeApplicationIsLoadingInjectionToken } from "../start-main-application/runnable-tokens/before-application-is-loading-injection-token"; +import { beforeApplicationIsLoadingInjectionToken } from "@k8slens/application"; import initDefaultUpdateChannelInjectable from "../vars/default-update-channel/init.injectable"; const initUserStoreInjectable = getInjectable({ diff --git a/packages/core/src/main/theme/sync-theme-from-os/start-syncing-theme-from-operating-system.injectable.ts b/packages/core/src/main/theme/sync-theme-from-os/start-syncing-theme-from-operating-system.injectable.ts index d5c8f51c76..d037f539a7 100644 --- a/packages/core/src/main/theme/sync-theme-from-os/start-syncing-theme-from-operating-system.injectable.ts +++ b/packages/core/src/main/theme/sync-theme-from-os/start-syncing-theme-from-operating-system.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import syncThemeFromOperatingSystemInjectable from "../../electron-app/features/sync-theme-from-operating-system.injectable"; -import { onLoadOfApplicationInjectionToken } from "../../start-main-application/runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; const startSyncingThemeFromOperatingSystemInjectable = getInjectable({ id: "start-syncing-theme-from-operating-system", diff --git a/packages/core/src/main/tray/electron-tray/start-tray.injectable.ts b/packages/core/src/main/tray/electron-tray/start-tray.injectable.ts index 2226205244..3bd61a6997 100644 --- a/packages/core/src/main/tray/electron-tray/start-tray.injectable.ts +++ b/packages/core/src/main/tray/electron-tray/start-tray.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { onLoadOfApplicationInjectionToken } from "../../start-main-application/runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; import electronTrayInjectable from "./electron-tray.injectable"; const startTrayInjectable = getInjectable({ diff --git a/packages/core/src/main/tray/menu-icon/start-reactivity.injectable.ts b/packages/core/src/main/tray/menu-icon/start-reactivity.injectable.ts index 2c03735904..0bb94b53af 100644 --- a/packages/core/src/main/tray/menu-icon/start-reactivity.injectable.ts +++ b/packages/core/src/main/tray/menu-icon/start-reactivity.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { onLoadOfApplicationInjectionToken } from "../../start-main-application/runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; import startTrayInjectable from "../electron-tray/start-tray.injectable"; import reactiveTrayMenuIconInjectable from "./reactive.injectable"; diff --git a/packages/core/src/main/tray/reactive-tray-menu-items/start-reactive-tray-menu-items.injectable.ts b/packages/core/src/main/tray/reactive-tray-menu-items/start-reactive-tray-menu-items.injectable.ts index 634c6cd875..9164afee3b 100644 --- a/packages/core/src/main/tray/reactive-tray-menu-items/start-reactive-tray-menu-items.injectable.ts +++ b/packages/core/src/main/tray/reactive-tray-menu-items/start-reactive-tray-menu-items.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import reactiveTrayMenuItemsInjectable from "./reactive-tray-menu-items.injectable"; -import { onLoadOfApplicationInjectionToken } from "../../start-main-application/runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; import startTrayInjectable from "../electron-tray/start-tray.injectable"; const startReactiveTrayMenuItemsInjectable = getInjectable({ diff --git a/packages/core/src/main/user-store/sync-open-at-login-with-os.injectable.ts b/packages/core/src/main/user-store/sync-open-at-login-with-os.injectable.ts index abad89af97..2a92ac8c7a 100644 --- a/packages/core/src/main/user-store/sync-open-at-login-with-os.injectable.ts +++ b/packages/core/src/main/user-store/sync-open-at-login-with-os.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { reaction } from "mobx"; import userStoreInjectable from "../../common/user-store/user-store.injectable"; import setLoginItemSettingsInjectable from "../electron-app/features/set-login-item-settings.injectable"; -import { onLoadOfApplicationInjectionToken } from "../start-main-application/runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; const setupSyncOpenAtLoginWithOsInjectable = getInjectable({ id: "setup-sync-open-at-login-with-os", diff --git a/packages/core/src/main/utils/channel/channel-listeners/start-listening-on-channels.injectable.ts b/packages/core/src/main/utils/channel/channel-listeners/start-listening-on-channels.injectable.ts index ce6008add4..5e029a16d6 100644 --- a/packages/core/src/main/utils/channel/channel-listeners/start-listening-on-channels.injectable.ts +++ b/packages/core/src/main/utils/channel/channel-listeners/start-listening-on-channels.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { onLoadOfApplicationInjectionToken } from "../../../start-main-application/runnable-tokens/on-load-of-application-injection-token"; +import { onLoadOfApplicationInjectionToken } from "@k8slens/application"; import listeningOnMessageChannelsInjectable from "../../../../common/utils/channel/listening-on-message-channels.injectable"; import listeningOnRequestChannelsInjectable from "./listening-on-request-channels.injectable"; diff --git a/packages/core/src/main/vars/build-version/init.injectable.ts b/packages/core/src/main/vars/build-version/init.injectable.ts index f53e735a47..fc08dce920 100644 --- a/packages/core/src/main/vars/build-version/init.injectable.ts +++ b/packages/core/src/main/vars/build-version/init.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { beforeApplicationIsLoadingInjectionToken } from "../../start-main-application/runnable-tokens/before-application-is-loading-injection-token"; +import { beforeApplicationIsLoadingInjectionToken } from "@k8slens/application"; import buildVersionInjectable from "./build-version.injectable"; const initializeBuildVersionInjectable = getInjectable({ diff --git a/packages/core/src/main/vars/default-update-channel/init.injectable.ts b/packages/core/src/main/vars/default-update-channel/init.injectable.ts index 56e90252f3..0a156e8dee 100644 --- a/packages/core/src/main/vars/default-update-channel/init.injectable.ts +++ b/packages/core/src/main/vars/default-update-channel/init.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { beforeApplicationIsLoadingInjectionToken } from "../../start-main-application/runnable-tokens/before-application-is-loading-injection-token"; +import { beforeApplicationIsLoadingInjectionToken } from "@k8slens/application"; import initReleaseChannelInjectable from "../release-channel/init.injectable"; import defaultUpdateChannelInjectable from "../../../features/application-update/common/selected-update-channel/default-update-channel.injectable"; diff --git a/packages/core/src/main/vars/release-channel/init.injectable.ts b/packages/core/src/main/vars/release-channel/init.injectable.ts index 59527d2194..fe8a838a89 100644 --- a/packages/core/src/main/vars/release-channel/init.injectable.ts +++ b/packages/core/src/main/vars/release-channel/init.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import releaseChannelInjectable from "../../../common/vars/release-channel.injectable"; -import { beforeApplicationIsLoadingInjectionToken } from "../../start-main-application/runnable-tokens/before-application-is-loading-injection-token"; +import { beforeApplicationIsLoadingInjectionToken } from "@k8slens/application"; import initSemanticBuildVersionInjectable from "../semantic-build-version/init.injectable"; const initReleaseChannelInjectable = getInjectable({ diff --git a/packages/core/src/main/vars/semantic-build-version/init.injectable.ts b/packages/core/src/main/vars/semantic-build-version/init.injectable.ts index ee822a8796..c39c3b51a2 100644 --- a/packages/core/src/main/vars/semantic-build-version/init.injectable.ts +++ b/packages/core/src/main/vars/semantic-build-version/init.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import buildSemanticVersionInjectable from "../../../common/vars/build-semantic-version.injectable"; -import { beforeApplicationIsLoadingInjectionToken } from "../../start-main-application/runnable-tokens/before-application-is-loading-injection-token"; +import { beforeApplicationIsLoadingInjectionToken } from "@k8slens/application"; import initializeBuildVersionInjectable from "../build-version/init.injectable"; const initSemanticBuildVersionInjectable = getInjectable({ diff --git a/packages/core/src/renderer/bootstrap.global-override-for-injectable.ts b/packages/core/src/renderer/bootstrap.global-override-for-injectable.ts new file mode 100644 index 0000000000..269ed22d17 --- /dev/null +++ b/packages/core/src/renderer/bootstrap.global-override-for-injectable.ts @@ -0,0 +1,6 @@ +import { getGlobalOverride } from "../common/test-utils/get-global-override"; +import bootstrapInjectable from "./bootstrap.injectable"; + +export default getGlobalOverride(bootstrapInjectable, () => ({ + run: () => {}, +})); diff --git a/packages/core/src/renderer/bootstrap.injectable.ts b/packages/core/src/renderer/bootstrap.injectable.ts new file mode 100644 index 0000000000..f852b87696 --- /dev/null +++ b/packages/core/src/renderer/bootstrap.injectable.ts @@ -0,0 +1,24 @@ +import { getInjectable } from "@ogre-tools/injectable"; +import { + afterApplicationIsLoadedInjectionToken, +} from "@k8slens/application"; +import { bootstrap } from "./bootstrap"; +import startFrameInjectable from "./start-frame/start-frame.injectable"; + +const bootstrapInjectable = getInjectable({ + id: "bootstrap", + + instantiate: (di) => ({ + run: async () => { + await bootstrap(di); + }, + + runAfter: di.inject(startFrameInjectable) + }), + + causesSideEffects: true, + + injectionToken: afterApplicationIsLoadedInjectionToken +}); + +export default bootstrapInjectable; diff --git a/packages/core/src/renderer/bootstrap.tsx b/packages/core/src/renderer/bootstrap.tsx index 88688d4a75..973c426333 100644 --- a/packages/core/src/renderer/bootstrap.tsx +++ b/packages/core/src/renderer/bootstrap.tsx @@ -9,7 +9,10 @@ import React from "react"; 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 type { + DiContainer, + DiContainerForInjection, +} 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"; @@ -18,13 +21,8 @@ import initClusterFrameInjectable from "./frames/cluster-frame/init-cluster-fram import { Router } from "react-router"; import historyInjectable from "./navigation/history.injectable"; import assert from "assert"; -import startFrameInjectable from "./start-frame/start-frame.injectable"; - -export async function bootstrap(di: DiContainer) { - const startFrame = di.inject(startFrameInjectable); - - await startFrame(); +export async function bootstrap(di: DiContainerForInjection) { const rootElem = document.getElementById("app"); assert(rootElem, "#app MUST exist"); @@ -57,7 +55,7 @@ export async function bootstrap(di: DiContainer) { const history = di.inject(historyInjectable); render( - + {DefaultProps(App)} diff --git a/packages/core/src/renderer/components/test-utils/get-application-builder.tsx b/packages/core/src/renderer/components/test-utils/get-application-builder.tsx index 41f26803d4..31f52b11f3 100644 --- a/packages/core/src/renderer/components/test-utils/get-application-builder.tsx +++ b/packages/core/src/renderer/components/test-utils/get-application-builder.tsx @@ -23,8 +23,6 @@ import type { NavigateToHelmCharts } from "../../../common/front-end-routing/rou import navigateToHelmChartsInjectable from "../../../common/front-end-routing/routes/cluster/helm/charts/navigate-to-helm-charts.injectable"; import hostedClusterInjectable from "../../cluster-frame-context/hosted-cluster.injectable"; import type { Cluster } from "../../../common/cluster/cluster"; -import startMainApplicationInjectable from "../../../main/start-main-application/start-main-application.injectable"; -import startFrameInjectable from "../../start-frame/start-frame.injectable"; import type { NamespaceStore } from "../+namespaces/store"; import historyInjectable from "../../navigation/history.injectable"; import type { MinimalTrayMenuItem } from "../../../main/tray/electron-tray/electron-tray.injectable"; @@ -69,6 +67,18 @@ import fsInjectable from "../../../common/fs/fs.injectable"; import joinPathsInjectable from "../../../common/path/join-paths.injectable"; import homeDirectoryPathInjectable from "../../../common/os/home-directory-path.injectable"; import { testUsingFakeTime } from "../../../common/test-utils/use-fake-time"; +import { registerFeature } from "@k8slens/feature-core"; +import { + feature as applicationForElectronMainFeature, +} from "@k8slens/application-for-electron-main"; +import { + feature as applicationFeature, + startApplicationInjectionToken +} from "@k8slens/application"; +import { + testUtils as applicationForElectronTestUtils +} from "@k8slens/application-for-electron-main"; + type Callback = (di: DiContainer) => void | Promise; @@ -165,9 +175,17 @@ export const getApplicationBuilder = () => { }); runInAction(() => { + registerFeature( + mainDi, + applicationFeature, + applicationForElectronMainFeature + ); + mainDi.register(mainExtensionsStateInjectable); }); + applicationForElectronTestUtils.overrideSideEffectsWithFakes(mainDi) + testUsingFakeTime(); const { overrideForWindow, sendToWindow } = overrideChannels(mainDi); @@ -226,6 +244,11 @@ export const getApplicationBuilder = () => { overrideFsWithFakes(windowDi); runInAction(() => { + registerFeature( + windowDi, + applicationFeature, + ); + windowDi.register(rendererExtensionsStateInjectable); }); @@ -253,9 +276,9 @@ export const getApplicationBuilder = () => { await callback(windowDi); } - const startFrame = windowDi.inject(startFrameInjectable); + const startApplication = windowDi.inject(startApplicationInjectionToken); - await startFrame(); + await startApplication(); for (const callback of afterWindowStartCallbacks) { await callback(windowDi); @@ -289,9 +312,9 @@ export const getApplicationBuilder = () => { const namespaces = observable.set(); const namespaceItems = observable.array(); const selectedNamespaces = observable.set(); - const startMainApplication = mainDi.inject(startMainApplicationInjectable); + const startApplication = mainDi.inject(startApplicationInjectionToken); - const startApplication = async ({ shouldStartHidden }: { shouldStartHidden: boolean }) => { + const startApp = async ({ shouldStartHidden }: { shouldStartHidden: boolean }) => { mainDi.inject(lensProxyPortInjectable).set(42); for (const callback of beforeApplicationStartCallbacks) { @@ -299,7 +322,7 @@ export const getApplicationBuilder = () => { } mainDi.override(shouldStartHiddenInjectable, () => shouldStartHidden); - await startMainApplication(); + await startApplication(); for (const callback of afterApplicationStartCallbacks) { await callback(mainDi); @@ -671,11 +694,11 @@ export const getApplicationBuilder = () => { }, startHidden: async () => { - await startApplication({ shouldStartHidden: true }); + await startApp({ shouldStartHidden: true }); }, async render() { - await startApplication({ shouldStartHidden: false }); + await startApp({ shouldStartHidden: false }); return builder .applicationWindow diff --git a/packages/core/src/renderer/create-app.ts b/packages/core/src/renderer/create-app.ts deleted file mode 100644 index e2064a7ae2..0000000000 --- a/packages/core/src/renderer/create-app.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import "./components/app.scss"; - -import { bootstrap } from "./bootstrap"; -import { getInjectable } from "@ogre-tools/injectable"; -import nodeEnvInjectionToken from "../common/vars/node-env-injection-token"; -import { runInAction } from "mobx"; -import { registerInjectables } from "./register-injectables"; -import type { CreateApplication } from "../common/create-app"; -import { getDi } from "./getDi"; - -export const createApplication: CreateApplication = (config) => { - const { mode } = config; - const di = getDi(); - - runInAction(() => { - di.register(getInjectable({ - id: "node-env", - instantiate: () => mode, - injectionToken: nodeEnvInjectionToken, - })); - - registerInjectables(di); - }); - - return { - start: () => bootstrap(di), - di, - }; -}; diff --git a/packages/core/src/renderer/getDi.tsx b/packages/core/src/renderer/getDi.tsx deleted file mode 100644 index 22e545e780..0000000000 --- a/packages/core/src/renderer/getDi.tsx +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { createContainer } from "@ogre-tools/injectable"; -import { registerMobX } from "@ogre-tools/injectable-extension-for-mobx"; -import { registerInjectableReact } from "@ogre-tools/injectable-react"; -import { setLegacyGlobalDiForExtensionApi } from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; - -export const getDi = () => { - const environment = "renderer"; - const di = createContainer(environment); - - registerMobX(di); - registerInjectableReact(di); - setLegacyGlobalDiForExtensionApi(di, environment); - - return di; -}; diff --git a/packages/core/src/renderer/getDiForUnitTesting.tsx b/packages/core/src/renderer/getDiForUnitTesting.tsx index e1f6186874..05a2e028bf 100644 --- a/packages/core/src/renderer/getDiForUnitTesting.tsx +++ b/packages/core/src/renderer/getDiForUnitTesting.tsx @@ -4,7 +4,7 @@ */ import { noop, chunk } from "lodash/fp"; -import { isInjectable } from "@ogre-tools/injectable"; +import { createContainer, isInjectable } from "@ogre-tools/injectable"; import requestFromChannelInjectable from "./utils/channel/request-from-channel.injectable"; import { getOverrideFsWithFakes } from "../test-utils/override-fs-with-fakes"; import terminalSpawningPoolInjectable from "./components/dock/terminal/terminal-spawning-pool.injectable"; @@ -15,14 +15,26 @@ import startTopbarStateSyncInjectable from "./components/layout/top-bar/start-st import watchHistoryStateInjectable from "./remote-helpers/watch-history-state.injectable"; import legacyOnChannelListenInjectable from "./ipc/legacy-channel-listen.injectable"; import type { GlobalOverride } from "../common/test-utils/get-global-override"; -import { getDi } from "./getDi"; + +import { + setLegacyGlobalDiForExtensionApi +} from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; +import { + registerMobX, +} from "@ogre-tools/injectable-extension-for-mobx"; +import { registerInjectableReact } from "@ogre-tools/injectable-react"; export const getDiForUnitTesting = ( opts: { doGeneralOverrides?: boolean } = {}, ) => { const { doGeneralOverrides = false } = opts; - const di = getDi(); + const environment = "renderer"; + const di = createContainer(environment); + + registerMobX(di); + registerInjectableReact(di); + setLegacyGlobalDiForExtensionApi(di, environment); di.preventSideEffects(); diff --git a/packages/core/src/renderer/library.ts b/packages/core/src/renderer/library.ts index aa9c1fc907..cc0255d906 100644 --- a/packages/core/src/renderer/library.ts +++ b/packages/core/src/renderer/library.ts @@ -7,6 +7,12 @@ import React from "react"; import ReactDOM from "react-dom"; // @experimental +export type { + Environments +} from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; + +export { nodeEnvInjectionToken } from "../common/vars/node-env-injection-token"; +export { registerLensCore } from "./register-lens-core"; export { React, ReactDOM }; export * as Mobx from "mobx"; export * as MobxReact from "mobx-react"; @@ -14,5 +20,3 @@ export * as ReactRouter from "react-router"; export * as ReactRouterDom from "react-router-dom"; export * as rendererExtensionApi from "../extensions/renderer-api"; export * as commonExtensionApi from "../extensions/common-api"; -export { createApplication } from "./create-app"; -export type { CreateApplication, Application, ApplicationConfig } from "../common/create-app"; diff --git a/packages/core/src/main/register-injectables.ts b/packages/core/src/renderer/register-lens-core.ts similarity index 66% rename from packages/core/src/main/register-injectables.ts rename to packages/core/src/renderer/register-lens-core.ts index eb18df3d3f..e16a58af10 100644 --- a/packages/core/src/main/register-injectables.ts +++ b/packages/core/src/renderer/register-lens-core.ts @@ -2,19 +2,28 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ + import type { DiContainer } from "@ogre-tools/injectable"; import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration"; import { runInAction } from "mobx"; +import type { + Environments +} from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; +import { + setLegacyGlobalDiForExtensionApi +} from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; + +export function registerLensCore(di: DiContainer, environment: Environments) { + setLegacyGlobalDiForExtensionApi(di, environment); -export function registerInjectables(di: DiContainer) { runInAction(() => { autoRegister({ di, targetModule: module, getRequireContexts: () => [ require.context("./", true, CONTEXT_MATCHER_FOR_NON_FEATURES), - require.context("../extensions", true, CONTEXT_MATCHER_FOR_NON_FEATURES), require.context("../common", true, CONTEXT_MATCHER_FOR_NON_FEATURES), + require.context("../extensions", true, CONTEXT_MATCHER_FOR_NON_FEATURES), require.context("../features", true, CONTEXT_MATCHER_FOR_FEATURES), ], }); diff --git a/packages/core/src/renderer/start-frame/start-frame.injectable.ts b/packages/core/src/renderer/start-frame/start-frame.injectable.ts index 3f1934aa1c..43899cc963 100644 --- a/packages/core/src/renderer/start-frame/start-frame.injectable.ts +++ b/packages/core/src/renderer/start-frame/start-frame.injectable.ts @@ -6,11 +6,13 @@ import { getInjectable } from "@ogre-tools/injectable"; import { runManyFor } from "../../common/runnable/run-many-for"; import * as tokens from "../before-frame-starts/tokens"; import currentlyInClusterFrameInjectable from "../routes/currently-in-cluster-frame.injectable"; +import { + afterApplicationIsLoadedInjectionToken, +} from "@k8slens/application"; const startFrameInjectable = getInjectable({ id: "start-frame", - // TODO: Consolidate contents of bootstrap.tsx here instantiate: (di) => { const runMany = runManyFor(di); const beforeFrameStartsFirst = runMany(tokens.beforeFrameStartsFirstInjectionToken); @@ -21,24 +23,28 @@ const startFrameInjectable = getInjectable({ const beforeClusterFrameStartsSecond = runMany(tokens.beforeClusterFrameStartsSecondInjectionToken); const currentlyInClusterFrame = di.inject(currentlyInClusterFrameInjectable); - return async () => { - await beforeFrameStartsFirst(); + return { + run: async () => { + await beforeFrameStartsFirst(); - if (currentlyInClusterFrame) { - await beforeClusterFrameStartsFirst(); - } else { - await beforeMainFrameStartsFirst(); - } + if (currentlyInClusterFrame) { + await beforeClusterFrameStartsFirst(); + } else { + await beforeMainFrameStartsFirst(); + } - await beforeFrameStartsSecond(); + await beforeFrameStartsSecond(); - if (currentlyInClusterFrame) { - await beforeClusterFrameStartsSecond(); - } else { - await beforeMainFrameStartsSecond(); + if (currentlyInClusterFrame) { + await beforeClusterFrameStartsSecond(); + } else { + await beforeMainFrameStartsSecond(); + } } }; }, + + injectionToken: afterApplicationIsLoadedInjectionToken }); export default startFrameInjectable; diff --git a/packages/core/webpack/renderer.ts b/packages/core/webpack/renderer.ts index 3b133f8f50..ec372de5b4 100755 --- a/packages/core/webpack/renderer.ts +++ b/packages/core/webpack/renderer.ts @@ -21,7 +21,7 @@ export function webpackLensRenderer(): webpack.Configuration { mode: isDevelopment ? "development" : "production", // https://webpack.js.org/configuration/devtool/ (see description of each option) devtool: isDevelopment ? "cheap-module-source-map" : "source-map", - cache: isDevelopment ? { type: "filesystem" } : false, + cache: false,//isDevelopment ? { type: "filesystem" } : false, entry: { renderer: path.resolve(__dirname, "..", "src", "renderer", "library.ts"), }, diff --git a/packages/open-lens/package.json b/packages/open-lens/package.json index eaed23135a..ddbdb4ca37 100644 --- a/packages/open-lens/package.json +++ b/packages/open-lens/package.json @@ -196,6 +196,7 @@ }, "dependencies": { "@k8slens/application": "^6.4.0-beta.13", + "@k8slens/application-for-electron-main": "^6.4.0-beta.13", "@k8slens/core": "^6.4.0-beta.13", "@k8slens/ensure-binaries": "^6.4.0-beta.13", "@k8slens/generate-tray-icons": "^6.4.0-beta.13", @@ -204,6 +205,7 @@ "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.2", "@ogre-tools/injectable-extension-for-mobx": "^15.1.2", "@ogre-tools/injectable-react": "^15.1.2", + "@ogre-tools/injectable-utils": "^15.1.2", "mobx": "^6.8.0", "rimraf": "^4.1.2" }, diff --git a/packages/open-lens/src/main/index.ts b/packages/open-lens/src/main/index.ts index 39500b2240..0dffdc0a0d 100644 --- a/packages/open-lens/src/main/index.ts +++ b/packages/open-lens/src/main/index.ts @@ -1,15 +1,30 @@ import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration"; import { runInAction } from "mobx"; -import { createApplication, mainExtensionApi as Main, commonExtensionApi as Common } from "@k8slens/core/main"; +import { + mainExtensionApi as Main, + commonExtensionApi as Common, + registerLensCore, +} from "@k8slens/core/main"; +import { createContainer } from "@ogre-tools/injectable"; +import { registerMobX } from "@ogre-tools/injectable-extension-for-mobx"; +import { registerFeature } from "@k8slens/feature-core"; +import { feature as applicationFeature, startApplicationInjectionToken } from '@k8slens/application' +import { feature as applicationFeatureForElectronMain } from '@k8slens/application-for-electron-main' -const app = createApplication({ - mode: process.env.NODE_ENV || "development" -}); +const environment = "main"; + +const di = createContainer(environment); + +registerMobX(di); runInAction(() => { + registerLensCore(di, environment); + + registerFeature(di, applicationFeature, applicationFeatureForElectronMain); + try { autoRegister({ - di: app.di, + di, targetModule: module, getRequireContexts: () => [ require.context("./", true, CONTEXT_MATCHER_FOR_NON_FEATURES), @@ -22,7 +37,9 @@ runInAction(() => { } }); -app.start().catch((error) => { +const startApplication = di.inject(startApplicationInjectionToken); + +startApplication().catch((error) => { console.error(error); process.exit(1); }) diff --git a/packages/open-lens/src/main/node-env.injectable.ts b/packages/open-lens/src/main/node-env.injectable.ts new file mode 100644 index 0000000000..750c918555 --- /dev/null +++ b/packages/open-lens/src/main/node-env.injectable.ts @@ -0,0 +1,8 @@ +import { getInjectable } from "@ogre-tools/injectable"; +import { nodeEnvInjectionToken } from "@k8slens/core/main"; + +export const nodeEnvInjectable = getInjectable({ + id: "node-env", + instantiate: () => process.env.NODE_ENV || "development", + injectionToken: nodeEnvInjectionToken, +}); diff --git a/packages/open-lens/src/renderer/index.ts b/packages/open-lens/src/renderer/index.ts index ed28f26d3a..6631986dcc 100644 --- a/packages/open-lens/src/renderer/index.ts +++ b/packages/open-lens/src/renderer/index.ts @@ -1,15 +1,32 @@ import "@k8slens/core/styles"; import { runInAction } from "mobx"; -import { createApplication, rendererExtensionApi as Renderer, commonExtensionApi as Common } from "@k8slens/core/renderer"; +import { + rendererExtensionApi as Renderer, + commonExtensionApi as Common, + registerLensCore, +} from "@k8slens/core/renderer"; import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration"; +import { registerFeature } from "@k8slens/feature-core"; +import { + feature as applicationFeature, + startApplicationInjectionToken +} from "@k8slens/application"; +import { createContainer } from "@ogre-tools/injectable"; +import { registerMobX } from "@ogre-tools/injectable-extension-for-mobx"; +import { registerInjectableReact } from "@ogre-tools/injectable-react"; -const app = createApplication({ - mode: process.env.NODE_ENV || "development" -}); +const environment = "main"; + +const di = createContainer(environment); runInAction(() => { + registerMobX(di); + registerInjectableReact(di); + registerLensCore(di, environment); + registerFeature(di, applicationFeature); + autoRegister({ - di: app.di, + di, targetModule: module, getRequireContexts: () => [ require.context("./", true, CONTEXT_MATCHER_FOR_NON_FEATURES), @@ -18,7 +35,9 @@ runInAction(() => { }); }); -app.start(); +const startApplication = di.inject(startApplicationInjectionToken); + +startApplication(); export { React, diff --git a/packages/open-lens/src/renderer/node-env.injectable.ts b/packages/open-lens/src/renderer/node-env.injectable.ts new file mode 100644 index 0000000000..8c50e853f1 --- /dev/null +++ b/packages/open-lens/src/renderer/node-env.injectable.ts @@ -0,0 +1,8 @@ +import { getInjectable } from "@ogre-tools/injectable"; +import { nodeEnvInjectionToken } from "@k8slens/core/renderer"; + +export const nodeEnvInjectable = getInjectable({ + id: "node-env", + instantiate: () => process.env.NODE_ENV || "development", + injectionToken: nodeEnvInjectionToken, +}); diff --git a/packages/open-lens/webpack/renderer.ts b/packages/open-lens/webpack/renderer.ts index cd3f65e978..d561415f1f 100644 --- a/packages/open-lens/webpack/renderer.ts +++ b/packages/open-lens/webpack/renderer.ts @@ -14,7 +14,7 @@ import CopyPlugin from "copy-webpack-plugin"; import type { WebpackPluginInstance } from "webpack"; import { DefinePlugin } from "webpack"; - import { assetsFolderName, isDevelopment, rendererDir, buildDir, htmlTemplate, publicPath, sassCommonVars } from "./vars"; + import { assetsFolderName, isDevelopment, rendererDir, buildDir, htmlTemplate, publicPath } from "./vars"; import { platform } from "process"; const renderer: webpack.Configuration = { @@ -23,7 +23,7 @@ mode: isDevelopment ? "development" : "production", // https://webpack.js.org/configuration/devtool/ (see description of each option) devtool: isDevelopment ? "cheap-module-source-map" : "source-map", - cache: isDevelopment ? { type: "filesystem" } : false, + cache: false, //isDevelopment ? { type: "filesystem" } : false, entry: { lens: path.resolve(rendererDir, "index.ts"), },