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

Create more explicit application

- Make testing use more production code

Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
Sebastian Malton 2023-03-01 09:29:03 -05:00
parent 6d1e43e82c
commit c4be3c5b1f
7 changed files with 44 additions and 36 deletions

View File

@ -0,0 +1,17 @@
/**
* 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<void>;
readonly di: DiContainerForInjection;
}
export type CreateApplication = (config: ApplicationConfig) => Application;

View File

@ -3,20 +3,17 @@
* Licensed under MIT License. See LICENSE in root directory for more information. * Licensed under MIT License. See LICENSE in root directory for more information.
*/ */
import type { DiContainer } from "@ogre-tools/injectable";
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { runInAction } from "mobx"; import { runInAction } from "mobx";
import type { CreateApplication } from "../common/create-app";
import nodeEnvInjectionToken from "../common/vars/node-env-injection-token"; import nodeEnvInjectionToken from "../common/vars/node-env-injection-token";
import { getDi } from "./getDi";
import { registerInjectables } from "./register-injectables"; import { registerInjectables } from "./register-injectables";
import startMainApplicationInjectable from "./start-main-application/start-main-application.injectable"; import startMainApplicationInjectable from "./start-main-application/start-main-application.injectable";
interface AppConfig { export const createApplication: CreateApplication = (config) => {
di: DiContainer; const { mode } = config;
mode: string; const di = getDi();
}
export function createApp(conf: AppConfig) {
const { di, mode } = conf;
runInAction(() => { runInAction(() => {
di.register(getInjectable({ di.register(getInjectable({
@ -28,9 +25,8 @@ export function createApp(conf: AppConfig) {
registerInjectables(di); registerInjectables(di);
}); });
const startMainApplication = di.inject(startMainApplicationInjectable);
return { return {
start: () => startMainApplication(), start: di.inject(startMainApplicationInjectable),
di,
}; };
} };

View File

@ -8,7 +8,8 @@ export { afterApplicationIsLoadedInjectionToken } from "./start-main-application
export { beforeApplicationIsLoadingInjectionToken } from "./start-main-application/runnable-tokens/before-application-is-loading-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 { 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 { onLoadOfApplicationInjectionToken } from "./start-main-application/runnable-tokens/on-load-of-application-injection-token";
export { createApp } from "./create-app"; export { createApplication } from "./create-app";
export type { CreateApplication, Application, ApplicationConfig } from "../common/create-app";
export * as Mobx from "mobx"; export * as Mobx from "mobx";
export * as mainExtensionApi from "../extensions/main-api"; export * as mainExtensionApi from "../extensions/main-api";
export * as commonExtensionApi from "../extensions/common-api"; export * as commonExtensionApi from "../extensions/common-api";

View File

@ -5,19 +5,16 @@
import "./components/app.scss"; import "./components/app.scss";
import { bootstrap } from "./bootstrap"; import { bootstrap } from "./bootstrap";
import type { DiContainer } from "@ogre-tools/injectable";
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import nodeEnvInjectionToken from "../common/vars/node-env-injection-token"; import nodeEnvInjectionToken from "../common/vars/node-env-injection-token";
import { runInAction } from "mobx"; import { runInAction } from "mobx";
import { registerInjectables } from "./register-injectables"; import { registerInjectables } from "./register-injectables";
import type { CreateApplication } from "../common/create-app";
import { getDi } from "./getDi";
interface AppConfig { export const createApplication: CreateApplication = (config) => {
di: DiContainer; const { mode } = config;
mode: string; const di = getDi();
}
export function createApp(conf: AppConfig) {
const { di, mode } = conf;
runInAction(() => { runInAction(() => {
di.register(getInjectable({ di.register(getInjectable({
@ -25,10 +22,12 @@ export function createApp(conf: AppConfig) {
instantiate: () => mode, instantiate: () => mode,
injectionToken: nodeEnvInjectionToken, injectionToken: nodeEnvInjectionToken,
})); }));
registerInjectables(di); registerInjectables(di);
}); });
return { return {
start: () => bootstrap(di), start: () => bootstrap(di),
di,
}; };
} };

View File

@ -14,4 +14,5 @@ export * as ReactRouter from "react-router";
export * as ReactRouterDom from "react-router-dom"; export * as ReactRouterDom from "react-router-dom";
export * as rendererExtensionApi from "../extensions/renderer-api"; export * as rendererExtensionApi from "../extensions/renderer-api";
export * as commonExtensionApi from "../extensions/common-api"; export * as commonExtensionApi from "../extensions/common-api";
export { createApp } from "./create-app"; export { createApplication } from "./create-app";
export type { CreateApplication, Application, ApplicationConfig } from "../common/create-app";

View File

@ -1,18 +1,15 @@
import { createContainer } from "@ogre-tools/injectable";
import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration"; import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration";
import { runInAction } from "mobx"; import { runInAction } from "mobx";
import { createApp, mainExtensionApi as Main, commonExtensionApi as Common } from "@k8slens/core/main"; import { createApplication, mainExtensionApi as Main, commonExtensionApi as Common } from "@k8slens/core/main";
const di = createContainer("main"); const app = createApplication({
const app = createApp({
di,
mode: process.env.NODE_ENV || "development" mode: process.env.NODE_ENV || "development"
}); });
runInAction(() => { runInAction(() => {
try { try {
autoRegister({ autoRegister({
di, di: app.di,
targetModule: module, targetModule: module,
getRequireContexts: () => [ getRequireContexts: () => [
require.context("./", true, CONTEXT_MATCHER_FOR_NON_FEATURES), require.context("./", true, CONTEXT_MATCHER_FOR_NON_FEATURES),

View File

@ -1,18 +1,15 @@
import "@k8slens/core/styles"; import "@k8slens/core/styles";
import { createContainer } from "@ogre-tools/injectable";
import { runInAction } from "mobx"; import { runInAction } from "mobx";
import { createApp, rendererExtensionApi as Renderer, commonExtensionApi as Common } from "@k8slens/core/renderer"; import { createApplication, rendererExtensionApi as Renderer, commonExtensionApi as Common } from "@k8slens/core/renderer";
import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration"; import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration";
const di = createContainer("renderer"); const app = createApplication({
const app = createApp({
di,
mode: process.env.NODE_ENV || "development" mode: process.env.NODE_ENV || "development"
}); });
runInAction(() => { runInAction(() => {
autoRegister({ autoRegister({
di, di: app.di,
targetModule: module, targetModule: module,
getRequireContexts: () => [ getRequireContexts: () => [
require.context("./", true, CONTEXT_MATCHER_FOR_NON_FEATURES), require.context("./", true, CONTEXT_MATCHER_FOR_NON_FEATURES),