mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Switch to using start application from Feature (#7260)
Signed-off-by: Janne Savolainen <janne.savolainen@live.fi>
This commit is contained in:
1 parent
a9bd5ae7e2
commit
129565f08a
79 files changed
+272
-339
No files matched your search
@@ -0,0 +1,10 @@
|
||||
/**
|
||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
||||
*/
|
||||
import { getGlobalOverride } from "../common/test-utils/get-global-override";
|
||||
import bootstrapInjectable from "./bootstrap.injectable";
|
||||
|
||||
export default getGlobalOverride(bootstrapInjectable, () => ({
|
||||
run: () => {},
|
||||
}));
|
||||
@@ -0,0 +1,28 @@
|
||||
/**
|
||||
* 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 {
|
||||
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;
|
||||
@@ -9,7 +9,9 @@ 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 {
|
||||
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 +20,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");
|
||||
|
||||
@@ -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,16 @@ 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 {
|
||||
applicationFeatureForElectronMain,
|
||||
testUtils as applicationForElectronTestUtils,
|
||||
} from "@k8slens/application-for-electron-main";
|
||||
import {
|
||||
applicationFeature,
|
||||
startApplicationInjectionToken,
|
||||
} from "@k8slens/application";
|
||||
|
||||
|
||||
type Callback = (di: DiContainer) => void | Promise<void>;
|
||||
|
||||
@@ -165,9 +173,17 @@ export const getApplicationBuilder = () => {
|
||||
});
|
||||
|
||||
runInAction(() => {
|
||||
registerFeature(
|
||||
mainDi,
|
||||
applicationFeature,
|
||||
applicationFeatureForElectronMain,
|
||||
);
|
||||
|
||||
mainDi.register(mainExtensionsStateInjectable);
|
||||
});
|
||||
|
||||
applicationForElectronTestUtils.overrideSideEffectsWithFakes(mainDi);
|
||||
|
||||
testUsingFakeTime();
|
||||
|
||||
const { overrideForWindow, sendToWindow } = overrideChannels(mainDi);
|
||||
@@ -226,6 +242,11 @@ export const getApplicationBuilder = () => {
|
||||
overrideFsWithFakes(windowDi);
|
||||
|
||||
runInAction(() => {
|
||||
registerFeature(
|
||||
windowDi,
|
||||
applicationFeature,
|
||||
);
|
||||
|
||||
windowDi.register(rendererExtensionsStateInjectable);
|
||||
});
|
||||
|
||||
@@ -253,9 +274,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 +310,9 @@ export const getApplicationBuilder = () => {
|
||||
const namespaces = observable.set<string>();
|
||||
const namespaceItems = observable.array<Namespace>();
|
||||
const selectedNamespaces = observable.set<string>();
|
||||
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 +320,7 @@ export const getApplicationBuilder = () => {
|
||||
}
|
||||
|
||||
mainDi.override(shouldStartHiddenInjectable, () => shouldStartHidden);
|
||||
await startMainApplication();
|
||||
await startApplication();
|
||||
|
||||
for (const callback of afterApplicationStartCallbacks) {
|
||||
await callback(mainDi);
|
||||
@@ -671,11 +692,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
|
||||
|
||||
@@ -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,
|
||||
};
|
||||
};
|
||||
@@ -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;
|
||||
};
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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";
|
||||
+9
-1
@@ -6,8 +6,16 @@
|
||||
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,
|
||||
@@ -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;
|
||||
Reference in new issue
Block a user