Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cleanup getDi and registering injectables #7251

Merged
merged 4 commits into from
Mar 1, 2023
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions packages/core/src/common/catalog-entities/web-link.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* 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 { CatalogCategory, CatalogEntity, categoryVersion } from "../catalog/catalog-entity";
import productNameInjectable from "../vars/product-name.injectable";
Expand Down Expand Up @@ -32,7 +32,7 @@ export class WebLink extends CatalogEntity<CatalogEntityMetadata, WebLinkStatus,

onContextMenuOpen(context: CatalogEntityContextMenuContext) {
// 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 weblinkStore = di.inject(weblinkStoreInjectable);

Expand Down
17 changes: 17 additions & 0 deletions packages/core/src/common/create-app.ts
Original file line number Diff line number Diff line change
@@ -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;
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {
createContainer,
getInjectable,
} 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";

describe("asLegacyGlobalObjectForExtensionApiWithModifications", () => {
Expand All @@ -25,7 +25,7 @@ describe("asLegacyGlobalObjectForExtensionApiWithModifications", () => {

jest.spyOn(di, "inject");

setLegacyGlobalDiForExtensionApi(di, Environments.renderer);
setLegacyGlobalDiForExtensionApi(di, "renderer");

someInjectable = getInjectable({
id: "some-injectable",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,11 @@
*/
import type { DiContainer } from "@ogre-tools/injectable";

const legacyGlobalDis = new Map<Environments, DiContainer>();
export type Environments = "main" | "renderer";

export enum Environments {
renderer,
main,
}
const legacyGlobalDis = new Map<Environments, DiContainer>();

export const setLegacyGlobalDiForExtensionApi = (
di: DiContainer,
environment: Environments,
) => {
export const setLegacyGlobalDiForExtensionApi = (di: DiContainer, environment: Environments) => {
legacyGlobalDis.set(environment, di);
};

Expand Down
9 changes: 2 additions & 7 deletions packages/core/src/extensions/main-api/navigation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,11 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/

import {
Environments,
getEnvironmentSpecificLegacyGlobalDiForExtensionApi,
} from "../as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";

import { 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";

export function navigate(url: string) {
const di = getEnvironmentSpecificLegacyGlobalDiForExtensionApi(Environments.main);

const di = getEnvironmentSpecificLegacyGlobalDiForExtensionApi("main");
const navigate = di.inject(navigateInjectable);

return navigate(url);
Expand Down
20 changes: 8 additions & 12 deletions packages/core/src/main/create-app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,17 @@
* 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 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";

interface AppConfig {
di: DiContainer;
mode: string;
}

export function createApp(conf: AppConfig) {
const { di, mode } = conf;
export const createApplication: CreateApplication = (config) => {
const { mode } = config;
const di = getDi();

runInAction(() => {
di.register(getInjectable({
Expand All @@ -28,9 +25,8 @@ export function createApp(conf: AppConfig) {
registerInjectables(di);
});

const startMainApplication = di.inject(startMainApplicationInjectable);

return {
start: () => startMainApplication(),
start: di.inject(startMainApplicationInjectable),
di,
};
}
};
12 changes: 11 additions & 1 deletion packages/core/src/main/getDi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,15 @@
* 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 = () => createContainer("main");
export const getDi = () => {
const environment = "main";
const di = createContainer(environment);

registerMobX(di);
setLegacyGlobalDiForExtensionApi(di, environment);

return di;
};
11 changes: 3 additions & 8 deletions packages/core/src/main/getDiForUnitTesting.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@

import { chunk } from "lodash/fp";
import type { DiContainer, Injectable } 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 { isInjectable, getInjectable } from "@ogre-tools/injectable";
import spawnInjectable from "./child-process/spawn.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";
Expand All @@ -25,29 +24,27 @@ import electronQuitAndInstallUpdateInjectable from "./electron-app/features/elec
import electronUpdaterIsActiveInjectable from "./electron-app/features/electron-updater-is-active.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 { registerMobX } from "@ogre-tools/injectable-extension-for-mobx";
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 nodeEnvInjectionToken from "../common/vars/node-env-injection-token";
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 } = {}) {
const {
doGeneralOverrides = false,
} = opts;

const di = createContainer("main");
const di = getDi();

di.register(getInjectable({
id: "node-env",
instantiate: () => "production",
injectionToken: nodeEnvInjectionToken,
}));

setLegacyGlobalDiForExtensionApi(di, Environments.main);

di.preventSideEffects();

const injectables = (
Expand All @@ -57,8 +54,6 @@ export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {})
.filter(isInjectable)
) as Injectable<any, any, any>[];

registerMobX(di);

runInAction(() => {
di.register(applicationInformationFakeInjectable);

Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/main/library.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 { 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 { 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 mainExtensionApi from "../extensions/main-api";
export * as commonExtensionApi from "../extensions/common-api";
Expand Down
8 changes: 0 additions & 8 deletions packages/core/src/main/register-injectables.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,10 @@
*/
import type { DiContainer } from "@ogre-tools/injectable";
import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration";
import { registerMobX } from "@ogre-tools/injectable-extension-for-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) {
setLegacyGlobalDiForExtensionApi(di, Environments.main);

runInAction(() => {
registerMobX(di);

autoRegister({
di,
targetModule: module,
Expand All @@ -25,6 +19,4 @@ export function registerInjectables(di: DiContainer) {
],
});
});

return di;
}
19 changes: 9 additions & 10 deletions packages/core/src/renderer/create-app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,30 +5,29 @@
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";
import type { CreateApplication } from "../common/create-app";
import { getDi } from "./getDi";

interface AppConfig {
di: DiContainer;
mode: string;
}

export function createApp(conf: AppConfig) {
const { di, mode } = conf;
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,
};
}
};
14 changes: 13 additions & 1 deletion packages/core/src/renderer/getDi.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,17 @@
*/

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;
};
13 changes: 3 additions & 10 deletions packages/core/src/renderer/getDiForUnitTesting.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,29 +5,27 @@

import { noop, chunk } from "lodash/fp";
import type { Injectable } 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 { isInjectable, getInjectable } 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";
import hostedClusterIdInjectable from "./cluster-frame-context/hosted-cluster-id.injectable";
import { runInAction } from "mobx";
import requestAnimationFrameInjectable from "./components/animate/request-animation-frame.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 legacyOnChannelListenInjectable from "./ipc/legacy-channel-listen.injectable";
import type { GlobalOverride } from "../common/test-utils/get-global-override";
import nodeEnvInjectionToken from "../common/vars/node-env-injection-token";
import { applicationInformationFakeInjectable } from "../common/vars/application-information-fake-injectable";
import { registerInjectableReact } from "@ogre-tools/injectable-react";
import { getDi } from "./getDi";

export const getDiForUnitTesting = (
opts: { doGeneralOverrides?: boolean } = {},
) => {
const { doGeneralOverrides = false } = opts;

const di = createContainer("renderer");
const di = getDi();

di.register(getInjectable({
id: "node-env",
Expand All @@ -37,18 +35,13 @@ export const getDiForUnitTesting = (

di.preventSideEffects();

setLegacyGlobalDiForExtensionApi(di, Environments.renderer);

const injectables = (
global.injectablePaths.renderer.paths
.map(path => require(path))
.flatMap(Object.values)
.filter(isInjectable)
) as Injectable<any, any, any>[];

registerMobX(di);
registerInjectableReact(di);

runInAction(() => {
di.register(applicationInformationFakeInjectable);

Expand Down
3 changes: 2 additions & 1 deletion packages/core/src/renderer/library.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@ 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 { createApp } from "./create-app";
export { createApplication } from "./create-app";
export type { CreateApplication, Application, ApplicationConfig } from "../common/create-app";
11 changes: 0 additions & 11 deletions packages/core/src/renderer/register-injectables.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,10 @@

import type { DiContainer } from "@ogre-tools/injectable";
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 { Environments, setLegacyGlobalDiForExtensionApi } from "../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";

export function registerInjectables(di: DiContainer) {
setLegacyGlobalDiForExtensionApi(di, Environments.renderer);

registerMobX(di);
registerInjectableReact(di);

runInAction(() => {

autoRegister({
di,
targetModule: module,
Expand All @@ -29,6 +20,4 @@ export function registerInjectables(di: DiContainer) {
],
});
});

return di;
}