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

introduce nodeEnvInjectionToken

Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
This commit is contained in:
Jari Kolehmainen 2022-12-22 12:13:42 +02:00
parent a3762dc36b
commit f66050f1aa
12 changed files with 119 additions and 82 deletions

View File

@ -3,14 +3,15 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import nodeEnvInjectionToken from "../vars/node-env-injection-token";
const environmentVariablesInjectable = getInjectable({
id: "environment-variables",
instantiate: () => {
instantiate: (di) => {
// IMPORTANT: The syntax needs to be exactly this in order to make environment variable values
// hard-coded at compile-time by Webpack.
const NODE_ENV = process.env.NODE_ENV;
const NODE_ENV = di.inject(nodeEnvInjectionToken);
const JEST_WORKER_ID = process.env.JEST_WORKER_ID;
const CICD = process.env.CICD;

View File

@ -0,0 +1,11 @@
/**
* 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";
const nodeEnvInjectionToken = getInjectionToken<string | undefined>({
id: "node-env-injection-token",
});
export default nodeEnvInjectionToken;

36
src/main/create-app.ts Normal file
View File

@ -0,0 +1,36 @@
/**
* 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 { getInjectable } from "@ogre-tools/injectable";
import { runInAction } from "mobx";
import nodeEnvInjectionToken from "../common/vars/node-env-injection-token";
import { registerInjectables } from "./register-injectables";
import startMainApplicationInjectable from "./start-main-application/start-main-application.injectable";
interface AppConfig {
di: DiContainer;
mode: string;
}
export function createApp(conf: AppConfig) {
const { di, mode } = conf;
runInAction(() => {
di.register(getInjectable({
id: "node-env",
instantiate: () => mode,
injectionToken: nodeEnvInjectionToken,
}));
registerInjectables(di);
});
const startMainApplication = di.inject(startMainApplicationInjectable);
return {
start: () => startMainApplication(),
};
}

View File

@ -5,7 +5,7 @@
import { kebabCase, noop, chunk } from "lodash/fp";
import type { DiContainer, Injectable } from "@ogre-tools/injectable";
import { createContainer, isInjectable } from "@ogre-tools/injectable";
import { createContainer, isInjectable, getInjectable } from "@ogre-tools/injectable";
import { Environments, setLegacyGlobalDiForExtensionApi } from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
import writeJsonFileInjectable from "../common/fs/write-json-file.injectable";
import readJsonFileInjectable from "../common/fs/read-json-file.injectable";
@ -72,6 +72,7 @@ import initializeClusterManagerInjectable from "./cluster/initialize-manager.inj
import addKubeconfigSyncAsEntitySourceInjectable from "./start-main-application/runnables/kube-config-sync/add-source.injectable";
import type { GlobalOverride } from "../common/test-utils/get-global-override";
import applicationInformationInjectable from "../common/vars/application-information-injectable";
import nodeEnvInjectionToken from "../common/vars/node-env-injection-token";
export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {}) {
const {
@ -80,6 +81,12 @@ export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {})
const di = createContainer("main");
di.register(getInjectable({
id: "node-env",
instantiate: () => "test",
injectionToken: nodeEnvInjectionToken,
}));
setLegacyGlobalDiForExtensionApi(di, Environments.main);
di.preventSideEffects();

View File

@ -7,19 +7,17 @@
import { getDi } from "./getDi";
import { Mobx, LensExtensions, Pty } from "./extension-api";
import { startApp } from "./start-app";
import { createApp } from "./create-app";
const di = getDi();
const app = createApp({
di,
mode: process.env.NODE_ENV || "development",
});
(async () => {
try {
await startApp({
di,
});
} catch (error) {
console.error(error);
process.exit(1);
}
})();
app.start().catch((error) => {
console.error(error);
process.exit(1);
});
export { Mobx, LensExtensions, Pty };

View File

@ -3,18 +3,16 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { registerInjectables } from "./register-injectables";
import { afterApplicationIsLoadedInjectionToken } from "./start-main-application/runnable-tokens/after-application-is-loaded-injection-token";
import { beforeApplicationIsLoadingInjectionToken } from "./start-main-application/runnable-tokens/before-application-is-loading-injection-token";
import { beforeElectronIsReadyInjectionToken } from "./start-main-application/runnable-tokens/before-electron-is-ready-injection-token";
import { onLoadOfApplicationInjectionToken } from "./start-main-application/runnable-tokens/on-load-of-application-injection-token";
import * as extensionApi from "./extension-api";
import { startApp } from "./start-app";
import { createApp } from "./create-app";
// @experimental
export {
registerInjectables,
startApp,
createApp,
extensionApi,
afterApplicationIsLoadedInjectionToken,
beforeApplicationIsLoadingInjectionToken,

View File

@ -1,29 +0,0 @@
/**
* 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 environmentVariablesInjectable from "../common/utils/environment-variables.injectable";
import startMainApplicationInjectable from "./start-main-application/start-main-application.injectable";
interface AppConfig {
di: DiContainer;
mode?: "production" | "development";
}
export async function startApp(conf: AppConfig) {
const { di, mode } = conf;
if (mode) {
const environmentVariables = di.inject(environmentVariablesInjectable);
environmentVariables.NODE_ENV = mode;
}
const startMainApplication = di.inject(startMainApplicationInjectable);
await startMainApplication();
return di;
}

View File

@ -0,0 +1,34 @@
/**
* 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 type { DiContainer } from "@ogre-tools/injectable";
import { getInjectable } from "@ogre-tools/injectable";
import nodeEnvInjectionToken from "../common/vars/node-env-injection-token";
import { runInAction } from "mobx";
import { registerInjectables } from "./register-injectables";
interface AppConfig {
di: DiContainer;
mode: string;
}
export function createApp(conf: AppConfig) {
const { di, mode } = conf;
runInAction(() => {
di.register(getInjectable({
id: "node-env",
instantiate: () => mode,
injectionToken: nodeEnvInjectionToken,
}));
registerInjectables(di);
});
return {
start: () => bootstrap(di),
};
}

View File

@ -5,7 +5,7 @@
import { noop, chunk } from "lodash/fp";
import type { DiContainer, Injectable } from "@ogre-tools/injectable";
import { createContainer, isInjectable } from "@ogre-tools/injectable";
import { createContainer, isInjectable, getInjectable } from "@ogre-tools/injectable";
import { Environments, setLegacyGlobalDiForExtensionApi } from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
import requestFromChannelInjectable from "./utils/channel/request-from-channel.injectable";
import loggerInjectable from "../common/logger.injectable";
@ -42,6 +42,7 @@ import storageSaveDelayInjectable from "./utils/create-storage/storage-save-dela
import environmentVariablesInjectable from "../common/utils/environment-variables.injectable";
import type { GlobalOverride } from "../common/test-utils/get-global-override";
import applicationInformationInjectable from "../common/vars/application-information-injectable";
import nodeEnvInjectionToken from "../common/vars/node-env-injection-token";
export const getDiForUnitTesting = (
opts: { doGeneralOverrides?: boolean } = {},
@ -50,6 +51,12 @@ export const getDiForUnitTesting = (
const di = createContainer("renderer");
di.register(getInjectable({
id: "node-env",
instantiate: () => "test",
injectionToken: nodeEnvInjectionToken,
}));
di.preventSideEffects();
setLegacyGlobalDiForExtensionApi(di, Environments.renderer);

View File

@ -10,14 +10,16 @@ import {
React, ReactDOM, ReactRouter,
ReactRouterDom, Mobx, MobxReact, LensExtensions,
} from "./extension-api";
import { startApp } from "./start-app";
import { createApp } from "./create-app";
const di = getDi();
const app = createApp({
di,
mode: process.env.NODE_ENV || "development",
});
// run
startApp({
di,
});
app.start();
export {
React,

View File

@ -5,12 +5,10 @@
import "./components/app.scss";
import * as extensionApi from "./extension-api";
import { registerInjectables } from "./register-injectables";
import { startApp } from "./start-app";
import { createApp } from "./create-app";
// @experimental
export {
startApp,
createApp,
extensionApi,
registerInjectables,
};

View File

@ -1,26 +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 type { DiContainer } from "@ogre-tools/injectable";
import environmentVariablesInjectable from "../common/utils/environment-variables.injectable";
interface AppConfig {
di: DiContainer;
mode?: "production" | "development";
}
export function startApp(conf: AppConfig) {
const { di, mode } = conf;
if (mode) {
const environmentVariables = di.inject(environmentVariablesInjectable);
environmentVariables.NODE_ENV = mode;
}
bootstrap(di);
}