mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
* wip: restructure to monorepo Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * refactor create-release-pr to a package Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * build fixes Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * github workflow fixes Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix typo Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * add webpack-env types to core Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix github workflows Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * refactor/fix integration tests Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * lint fix Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * yarn run dev Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * eslint settings for vscode Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * move templates to right package Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * open-lens build fixes Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * integration test fix Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix nx task dependencies Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * use bash shell for unit tests in test workflow Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix test:unit for windows Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix win-ca webpack error in open-lens Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix win-ca webpack error in open-lens Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * fix build:app on windows Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * remove ELECTRON_BUILDER_EXTRA_ARGS Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * sync src/ from master Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> * remove Makefile from core Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com> Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
134 lines
5.8 KiB
TypeScript
134 lines
5.8 KiB
TypeScript
/**
|
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
*/
|
|
|
|
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 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";
|
|
import setupLensProxyInjectable from "./start-main-application/runnables/setup-lens-proxy.injectable";
|
|
import setupSyncingOfWeblinksInjectable from "./start-main-application/runnables/setup-syncing-of-weblinks.injectable";
|
|
import setupDeepLinkingInjectable from "./electron-app/runnables/setup-deep-linking.injectable";
|
|
import setupMainWindowVisibilityAfterActivationInjectable from "./electron-app/runnables/setup-main-window-visibility-after-activation.injectable";
|
|
import setupDeviceShutdownInjectable from "./electron-app/runnables/setup-device-shutdown.injectable";
|
|
import setupApplicationNameInjectable from "./electron-app/runnables/setup-application-name.injectable";
|
|
import setupRunnablesBeforeClosingOfApplicationInjectable from "./electron-app/runnables/setup-runnables-before-closing-of-application.injectable";
|
|
import clusterFramesInjectable from "../common/cluster-frames.injectable";
|
|
import type { ClusterFrameInfo } from "../common/cluster-frames";
|
|
import { observable, runInAction } from "mobx";
|
|
import broadcastMessageInjectable from "../common/ipc/broadcast-message.injectable";
|
|
import electronQuitAndInstallUpdateInjectable from "./electron-app/features/electron-quit-and-install-update.injectable";
|
|
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 applicationInformationInjectable from "../common/vars/application-information-injectable";
|
|
import nodeEnvInjectionToken from "../common/vars/node-env-injection-token";
|
|
import { getOverrideFsWithFakes } from "../test-utils/override-fs-with-fakes";
|
|
|
|
export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {}) {
|
|
const {
|
|
doGeneralOverrides = false,
|
|
} = opts;
|
|
|
|
const di = createContainer("main");
|
|
|
|
di.register(getInjectable({
|
|
id: "node-env",
|
|
instantiate: () => "production",
|
|
injectionToken: nodeEnvInjectionToken,
|
|
}));
|
|
|
|
setLegacyGlobalDiForExtensionApi(di, Environments.main);
|
|
|
|
di.preventSideEffects();
|
|
|
|
const injectables = (
|
|
global.injectablePaths.main.paths
|
|
.map(path => require(path))
|
|
.flatMap(Object.values)
|
|
.filter(isInjectable)
|
|
) as Injectable<any, any, any>[];
|
|
|
|
runInAction(() => {
|
|
registerMobX(di);
|
|
di.register(applicationInformationInjectable);
|
|
|
|
chunk(100)(injectables).forEach(chunkInjectables => {
|
|
di.register(...chunkInjectables);
|
|
});
|
|
});
|
|
|
|
if (doGeneralOverrides) {
|
|
for (const globalOverridePath of global.injectablePaths.main.globalOverridePaths) {
|
|
const globalOverride = require(globalOverridePath).default as GlobalOverride;
|
|
|
|
di.override(globalOverride.injectable, globalOverride.overridingInstantiate);
|
|
}
|
|
|
|
di.override(electronInjectable, () => ({}));
|
|
di.override(waitUntilBundledExtensionsAreLoadedInjectable, () => async () => {});
|
|
|
|
overrideRunnablesHavingSideEffects(di);
|
|
overrideElectronFeatures(di);
|
|
getOverrideFsWithFakes()(di);
|
|
|
|
di.override(clusterFramesInjectable, () => observable.map<string, ClusterFrameInfo>());
|
|
|
|
di.override(broadcastMessageInjectable, () => (channel) => {
|
|
throw new Error(`Tried to broadcast message to channel "${channel}" over IPC without explicit override.`);
|
|
});
|
|
di.override(spawnInjectable, () => () => {
|
|
return {
|
|
stderr: { on: jest.fn(), removeAllListeners: jest.fn() },
|
|
stdout: { on: jest.fn(), removeAllListeners: jest.fn() },
|
|
on: jest.fn(),
|
|
} as never;
|
|
});
|
|
}
|
|
|
|
return di;
|
|
}
|
|
|
|
// TODO: Reorganize code in Runnables to get rid of requirement for override
|
|
const overrideRunnablesHavingSideEffects = (di: DiContainer) => {
|
|
[
|
|
initializeExtensionsInjectable,
|
|
initializeClusterManagerInjectable,
|
|
setupIpcMainHandlersInjectable,
|
|
setupLensProxyInjectable,
|
|
setupSyncingOfWeblinksInjectable,
|
|
].forEach((injectable) => {
|
|
di.override(injectable, () => ({
|
|
id: injectable.id,
|
|
run: () => {},
|
|
}));
|
|
});
|
|
};
|
|
|
|
const overrideElectronFeatures = (di: DiContainer) => {
|
|
[
|
|
setupMainWindowVisibilityAfterActivationInjectable,
|
|
setupDeviceShutdownInjectable,
|
|
setupDeepLinkingInjectable,
|
|
setupApplicationNameInjectable,
|
|
setupRunnablesBeforeClosingOfApplicationInjectable,
|
|
].forEach((injectable) => {
|
|
di.override(injectable, () => ({
|
|
id: injectable.id,
|
|
run: () => {},
|
|
}));
|
|
});
|
|
|
|
di.override(electronQuitAndInstallUpdateInjectable, () => () => {});
|
|
di.override(setUpdateOnQuitInjectable, () => () => {});
|
|
di.override(electronUpdaterIsActiveInjectable, () => false);
|
|
};
|