mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Cleanup getDi and registering injectables (#7251)
* Cleanup getDi and registering injectables Signed-off-by: Sebastian Malton <sebastian@malton.name> * Create more explicit application - Make testing use more production code Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix uses of getEnvironmentSpecificLegacyGlobalDiForExtensionApi Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix unit tests Signed-off-by: Sebastian Malton <sebastian@malton.name> --------- Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
b5f0960ee1
commit
c67230f322
@ -3,7 +3,7 @@
|
|||||||
* 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 { Environments, getEnvironmentSpecificLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
|
import { getEnvironmentSpecificLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
|
||||||
import type { CatalogEntityContextMenuContext, CatalogEntityMetadata, CatalogEntityStatus } from "../catalog";
|
import type { CatalogEntityContextMenuContext, CatalogEntityMetadata, CatalogEntityStatus } from "../catalog";
|
||||||
import { CatalogCategory, CatalogEntity, categoryVersion } from "../catalog/catalog-entity";
|
import { CatalogCategory, CatalogEntity, categoryVersion } from "../catalog/catalog-entity";
|
||||||
import productNameInjectable from "../vars/product-name.injectable";
|
import productNameInjectable from "../vars/product-name.injectable";
|
||||||
@ -32,7 +32,7 @@ export class WebLink extends CatalogEntity<CatalogEntityMetadata, WebLinkStatus,
|
|||||||
|
|
||||||
onContextMenuOpen(context: CatalogEntityContextMenuContext) {
|
onContextMenuOpen(context: CatalogEntityContextMenuContext) {
|
||||||
// NOTE: this is safe because `onContextMenuOpen` is only supposed to be called in the renderer
|
// NOTE: this is safe because `onContextMenuOpen` is only supposed to be called in the renderer
|
||||||
const di = getEnvironmentSpecificLegacyGlobalDiForExtensionApi(Environments.renderer);
|
const di = getEnvironmentSpecificLegacyGlobalDiForExtensionApi("renderer");
|
||||||
const productName = di.inject(productNameInjectable);
|
const productName = di.inject(productNameInjectable);
|
||||||
const weblinkStore = di.inject(weblinkStoreInjectable);
|
const weblinkStore = di.inject(weblinkStoreInjectable);
|
||||||
|
|
||||||
|
|||||||
17
packages/core/src/common/create-app.ts
Normal file
17
packages/core/src/common/create-app.ts
Normal 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;
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
/**
|
||||||
|
* 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 nodeEnvInjectionToken from "./node-env-injection-token";
|
||||||
|
|
||||||
|
const nodeEnvFakeInjectable = getInjectable({
|
||||||
|
id: "node-env-fake",
|
||||||
|
instantiate: () => "production",
|
||||||
|
injectionToken: nodeEnvInjectionToken,
|
||||||
|
});
|
||||||
|
|
||||||
|
export default nodeEnvFakeInjectable;
|
||||||
@ -9,7 +9,7 @@ import {
|
|||||||
createContainer,
|
createContainer,
|
||||||
getInjectable,
|
getInjectable,
|
||||||
} from "@ogre-tools/injectable";
|
} from "@ogre-tools/injectable";
|
||||||
import { Environments, setLegacyGlobalDiForExtensionApi } from "./legacy-global-di-for-extension-api";
|
import { setLegacyGlobalDiForExtensionApi } from "./legacy-global-di-for-extension-api";
|
||||||
import { asLegacyGlobalObjectForExtensionApiWithModifications } from "./as-legacy-global-object-for-extension-api-with-modifications";
|
import { asLegacyGlobalObjectForExtensionApiWithModifications } from "./as-legacy-global-object-for-extension-api-with-modifications";
|
||||||
|
|
||||||
describe("asLegacyGlobalObjectForExtensionApiWithModifications", () => {
|
describe("asLegacyGlobalObjectForExtensionApiWithModifications", () => {
|
||||||
@ -25,7 +25,7 @@ describe("asLegacyGlobalObjectForExtensionApiWithModifications", () => {
|
|||||||
|
|
||||||
jest.spyOn(di, "inject");
|
jest.spyOn(di, "inject");
|
||||||
|
|
||||||
setLegacyGlobalDiForExtensionApi(di, Environments.renderer);
|
setLegacyGlobalDiForExtensionApi(di, "renderer");
|
||||||
|
|
||||||
someInjectable = getInjectable({
|
someInjectable = getInjectable({
|
||||||
id: "some-injectable",
|
id: "some-injectable",
|
||||||
|
|||||||
@ -4,17 +4,11 @@
|
|||||||
*/
|
*/
|
||||||
import type { DiContainer } from "@ogre-tools/injectable";
|
import type { DiContainer } from "@ogre-tools/injectable";
|
||||||
|
|
||||||
|
export type Environments = "main" | "renderer";
|
||||||
|
|
||||||
const legacyGlobalDis = new Map<Environments, DiContainer>();
|
const legacyGlobalDis = new Map<Environments, DiContainer>();
|
||||||
|
|
||||||
export enum Environments {
|
export const setLegacyGlobalDiForExtensionApi = (di: DiContainer, environment: Environments) => {
|
||||||
renderer,
|
|
||||||
main,
|
|
||||||
}
|
|
||||||
|
|
||||||
export const setLegacyGlobalDiForExtensionApi = (
|
|
||||||
di: DiContainer,
|
|
||||||
environment: Environments,
|
|
||||||
) => {
|
|
||||||
legacyGlobalDis.set(environment, di);
|
legacyGlobalDis.set(environment, di);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -3,16 +3,11 @@
|
|||||||
* 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 {
|
import { getEnvironmentSpecificLegacyGlobalDiForExtensionApi } from "../as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
|
||||||
Environments,
|
|
||||||
getEnvironmentSpecificLegacyGlobalDiForExtensionApi,
|
|
||||||
} from "../as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
|
|
||||||
|
|
||||||
import navigateInjectable from "../../main/start-main-application/lens-window/navigate.injectable";
|
import navigateInjectable from "../../main/start-main-application/lens-window/navigate.injectable";
|
||||||
|
|
||||||
export function navigate(url: string) {
|
export function navigate(url: string) {
|
||||||
const di = getEnvironmentSpecificLegacyGlobalDiForExtensionApi(Environments.main);
|
const di = getEnvironmentSpecificLegacyGlobalDiForExtensionApi("main");
|
||||||
|
|
||||||
const navigate = di.inject(navigateInjectable);
|
const navigate = di.inject(navigateInjectable);
|
||||||
|
|
||||||
return navigate(url);
|
return navigate(url);
|
||||||
|
|||||||
@ -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,
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
|
|||||||
@ -3,5 +3,15 @@
|
|||||||
* 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 { createContainer } from "@ogre-tools/injectable";
|
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 = () => createContainer("main");
|
export const getDi = () => {
|
||||||
|
const environment = "main";
|
||||||
|
const di = createContainer(environment);
|
||||||
|
|
||||||
|
registerMobX(di);
|
||||||
|
setLegacyGlobalDiForExtensionApi(di, environment);
|
||||||
|
|
||||||
|
return di;
|
||||||
|
};
|
||||||
|
|||||||
@ -4,9 +4,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { chunk } from "lodash/fp";
|
import { chunk } from "lodash/fp";
|
||||||
import type { DiContainer, Injectable } from "@ogre-tools/injectable";
|
import type { DiContainer } from "@ogre-tools/injectable";
|
||||||
import { createContainer, isInjectable, getInjectable } from "@ogre-tools/injectable";
|
import { isInjectable } from "@ogre-tools/injectable";
|
||||||
import { Environments, setLegacyGlobalDiForExtensionApi } from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
|
|
||||||
import spawnInjectable from "./child-process/spawn.injectable";
|
import spawnInjectable from "./child-process/spawn.injectable";
|
||||||
import initializeExtensionsInjectable from "./start-main-application/runnables/initialize-extensions.injectable";
|
import initializeExtensionsInjectable from "./start-main-application/runnables/initialize-extensions.injectable";
|
||||||
import setupIpcMainHandlersInjectable from "./electron-app/runnables/setup-ipc-main-handlers/setup-ipc-main-handlers.injectable";
|
import setupIpcMainHandlersInjectable from "./electron-app/runnables/setup-ipc-main-handlers/setup-ipc-main-handlers.injectable";
|
||||||
@ -25,46 +24,30 @@ import electronQuitAndInstallUpdateInjectable from "./electron-app/features/elec
|
|||||||
import electronUpdaterIsActiveInjectable from "./electron-app/features/electron-updater-is-active.injectable";
|
import electronUpdaterIsActiveInjectable from "./electron-app/features/electron-updater-is-active.injectable";
|
||||||
import setUpdateOnQuitInjectable from "./electron-app/features/set-update-on-quit.injectable";
|
import setUpdateOnQuitInjectable from "./electron-app/features/set-update-on-quit.injectable";
|
||||||
import waitUntilBundledExtensionsAreLoadedInjectable from "./start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable";
|
import waitUntilBundledExtensionsAreLoadedInjectable from "./start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable";
|
||||||
import { registerMobX } from "@ogre-tools/injectable-extension-for-mobx";
|
|
||||||
import electronInjectable from "./utils/resolve-system-proxy/electron.injectable";
|
import electronInjectable from "./utils/resolve-system-proxy/electron.injectable";
|
||||||
import initializeClusterManagerInjectable from "./cluster/initialize-manager.injectable";
|
import initializeClusterManagerInjectable from "./cluster/initialize-manager.injectable";
|
||||||
import type { GlobalOverride } from "../common/test-utils/get-global-override";
|
import type { GlobalOverride } from "../common/test-utils/get-global-override";
|
||||||
import nodeEnvInjectionToken from "../common/vars/node-env-injection-token";
|
|
||||||
import { getOverrideFsWithFakes } from "../test-utils/override-fs-with-fakes";
|
import { getOverrideFsWithFakes } from "../test-utils/override-fs-with-fakes";
|
||||||
import { applicationInformationFakeInjectable } from "../common/vars/application-information-fake-injectable";
|
import { getDi } from "./getDi";
|
||||||
|
|
||||||
export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {}) {
|
export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {}) {
|
||||||
const {
|
const {
|
||||||
doGeneralOverrides = false,
|
doGeneralOverrides = false,
|
||||||
} = opts;
|
} = opts;
|
||||||
|
|
||||||
const di = createContainer("main");
|
const di = getDi();
|
||||||
|
|
||||||
di.register(getInjectable({
|
|
||||||
id: "node-env",
|
|
||||||
instantiate: () => "production",
|
|
||||||
injectionToken: nodeEnvInjectionToken,
|
|
||||||
}));
|
|
||||||
|
|
||||||
setLegacyGlobalDiForExtensionApi(di, Environments.main);
|
|
||||||
|
|
||||||
di.preventSideEffects();
|
di.preventSideEffects();
|
||||||
|
|
||||||
const injectables = (
|
runInAction(() => {
|
||||||
global.injectablePaths.main.paths
|
const injectables = global.injectablePaths.main.paths
|
||||||
.map(path => require(path))
|
.map(path => require(path))
|
||||||
.flatMap(Object.values)
|
.flatMap(Object.values)
|
||||||
.filter(isInjectable)
|
.filter(isInjectable);
|
||||||
) as Injectable<any, any, any>[];
|
|
||||||
|
|
||||||
registerMobX(di);
|
for (const block of chunk(100)(injectables)) {
|
||||||
|
di.register(...block);
|
||||||
runInAction(() => {
|
}
|
||||||
di.register(applicationInformationFakeInjectable);
|
|
||||||
|
|
||||||
chunk(100)(injectables).forEach(chunkInjectables => {
|
|
||||||
di.register(...chunkInjectables);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (doGeneralOverrides) {
|
if (doGeneralOverrides) {
|
||||||
|
|||||||
@ -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";
|
||||||
|
|||||||
@ -4,16 +4,10 @@
|
|||||||
*/
|
*/
|
||||||
import type { DiContainer } from "@ogre-tools/injectable";
|
import type { DiContainer } 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 { registerMobX } from "@ogre-tools/injectable-extension-for-mobx";
|
|
||||||
import { runInAction } from "mobx";
|
import { runInAction } from "mobx";
|
||||||
import { Environments, setLegacyGlobalDiForExtensionApi } from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
|
|
||||||
|
|
||||||
export function registerInjectables(di: DiContainer) {
|
export function registerInjectables(di: DiContainer) {
|
||||||
setLegacyGlobalDiForExtensionApi(di, Environments.main);
|
|
||||||
|
|
||||||
runInAction(() => {
|
runInAction(() => {
|
||||||
registerMobX(di);
|
|
||||||
|
|
||||||
autoRegister({
|
autoRegister({
|
||||||
di,
|
di,
|
||||||
targetModule: module,
|
targetModule: module,
|
||||||
@ -25,6 +19,4 @@ export function registerInjectables(di: DiContainer) {
|
|||||||
],
|
],
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
return di;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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,
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
|
|||||||
@ -4,5 +4,17 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { createContainer } from "@ogre-tools/injectable";
|
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 = () => createContainer("renderer");
|
export const getDi = () => {
|
||||||
|
const environment = "renderer";
|
||||||
|
const di = createContainer(environment);
|
||||||
|
|
||||||
|
registerMobX(di);
|
||||||
|
registerInjectableReact(di);
|
||||||
|
setLegacyGlobalDiForExtensionApi(di, environment);
|
||||||
|
|
||||||
|
return di;
|
||||||
|
};
|
||||||
|
|||||||
@ -4,9 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import { noop, chunk } from "lodash/fp";
|
import { noop, chunk } from "lodash/fp";
|
||||||
import type { Injectable } from "@ogre-tools/injectable";
|
import { 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 requestFromChannelInjectable from "./utils/channel/request-from-channel.injectable";
|
||||||
import { getOverrideFsWithFakes } from "../test-utils/override-fs-with-fakes";
|
import { getOverrideFsWithFakes } from "../test-utils/override-fs-with-fakes";
|
||||||
import terminalSpawningPoolInjectable from "./components/dock/terminal/terminal-spawning-pool.injectable";
|
import terminalSpawningPoolInjectable from "./components/dock/terminal/terminal-spawning-pool.injectable";
|
||||||
@ -14,47 +12,29 @@ import hostedClusterIdInjectable from "./cluster-frame-context/hosted-cluster-id
|
|||||||
import { runInAction } from "mobx";
|
import { runInAction } from "mobx";
|
||||||
import requestAnimationFrameInjectable from "./components/animate/request-animation-frame.injectable";
|
import requestAnimationFrameInjectable from "./components/animate/request-animation-frame.injectable";
|
||||||
import startTopbarStateSyncInjectable from "./components/layout/top-bar/start-state-sync.injectable";
|
import startTopbarStateSyncInjectable from "./components/layout/top-bar/start-state-sync.injectable";
|
||||||
import { registerMobX } from "@ogre-tools/injectable-extension-for-mobx";
|
|
||||||
import watchHistoryStateInjectable from "./remote-helpers/watch-history-state.injectable";
|
import watchHistoryStateInjectable from "./remote-helpers/watch-history-state.injectable";
|
||||||
import legacyOnChannelListenInjectable from "./ipc/legacy-channel-listen.injectable";
|
import legacyOnChannelListenInjectable from "./ipc/legacy-channel-listen.injectable";
|
||||||
import type { GlobalOverride } from "../common/test-utils/get-global-override";
|
import type { GlobalOverride } from "../common/test-utils/get-global-override";
|
||||||
import nodeEnvInjectionToken from "../common/vars/node-env-injection-token";
|
import { getDi } from "./getDi";
|
||||||
import { applicationInformationFakeInjectable } from "../common/vars/application-information-fake-injectable";
|
|
||||||
import { registerInjectableReact } from "@ogre-tools/injectable-react";
|
|
||||||
|
|
||||||
export const getDiForUnitTesting = (
|
export const getDiForUnitTesting = (
|
||||||
opts: { doGeneralOverrides?: boolean } = {},
|
opts: { doGeneralOverrides?: boolean } = {},
|
||||||
) => {
|
) => {
|
||||||
const { doGeneralOverrides = false } = opts;
|
const { doGeneralOverrides = false } = opts;
|
||||||
|
|
||||||
const di = createContainer("renderer");
|
const di = getDi();
|
||||||
|
|
||||||
di.register(getInjectable({
|
|
||||||
id: "node-env",
|
|
||||||
instantiate: () => "production",
|
|
||||||
injectionToken: nodeEnvInjectionToken,
|
|
||||||
}));
|
|
||||||
|
|
||||||
di.preventSideEffects();
|
di.preventSideEffects();
|
||||||
|
|
||||||
setLegacyGlobalDiForExtensionApi(di, Environments.renderer);
|
runInAction(() => {
|
||||||
|
const injectables = global.injectablePaths.renderer.paths
|
||||||
const injectables = (
|
|
||||||
global.injectablePaths.renderer.paths
|
|
||||||
.map(path => require(path))
|
.map(path => require(path))
|
||||||
.flatMap(Object.values)
|
.flatMap(Object.values)
|
||||||
.filter(isInjectable)
|
.filter(isInjectable);
|
||||||
) as Injectable<any, any, any>[];
|
|
||||||
|
|
||||||
registerMobX(di);
|
for (const block of chunk(100)(injectables)) {
|
||||||
registerInjectableReact(di);
|
di.register(...block);
|
||||||
|
}
|
||||||
runInAction(() => {
|
|
||||||
di.register(applicationInformationFakeInjectable);
|
|
||||||
|
|
||||||
chunk(100)(injectables).forEach((chunkInjectables) => {
|
|
||||||
di.register(...chunkInjectables);
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
if (doGeneralOverrides) {
|
if (doGeneralOverrides) {
|
||||||
|
|||||||
@ -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";
|
||||||
|
|||||||
@ -5,19 +5,10 @@
|
|||||||
|
|
||||||
import type { DiContainer } from "@ogre-tools/injectable";
|
import type { DiContainer } 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 { registerMobX } from "@ogre-tools/injectable-extension-for-mobx";
|
|
||||||
import { registerInjectableReact } from "@ogre-tools/injectable-react";
|
|
||||||
import { runInAction } from "mobx";
|
import { runInAction } from "mobx";
|
||||||
import { Environments, setLegacyGlobalDiForExtensionApi } from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
|
|
||||||
|
|
||||||
export function registerInjectables(di: DiContainer) {
|
export function registerInjectables(di: DiContainer) {
|
||||||
setLegacyGlobalDiForExtensionApi(di, Environments.renderer);
|
|
||||||
|
|
||||||
registerMobX(di);
|
|
||||||
registerInjectableReact(di);
|
|
||||||
|
|
||||||
runInAction(() => {
|
runInAction(() => {
|
||||||
|
|
||||||
autoRegister({
|
autoRegister({
|
||||||
di,
|
di,
|
||||||
targetModule: module,
|
targetModule: module,
|
||||||
@ -29,6 +20,4 @@ export function registerInjectables(di: DiContainer) {
|
|||||||
],
|
],
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
return di;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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),
|
||||||
|
|||||||
@ -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),
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user