From 5943a21671afdbabf6f712b836d82cc8ed68fbbe Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Tue, 21 Mar 2023 10:15:22 +0200 Subject: [PATCH] Extract message-bridge to separate NPM package to prevent dev dependencies being in the production bundle Signed-off-by: Janne Savolainen --- package-lock.json | 21 +++++++++ packages/core/package.json | 1 + .../test-utils/get-application-builder.tsx | 5 ++- .../computed-channel.test.tsx | 2 +- .../agnostic/src/features/actual/index.ts | 1 + .../src/features/unit-testing/index.ts | 1 - .../message-bridge-fake/.eslintrc.json | 6 +++ .../messaging/message-bridge-fake/.prettierrc | 1 + .../messaging/message-bridge-fake/index.ts | 3 ++ .../message-bridge-fake/jest.config.js | 1 + .../message-bridge-fake/package.json | 43 +++++++++++++++++++ .../get-message-bridge-fake.test.ts | 29 +++++++------ .../get-message-bridge-fake.ts | 18 ++++---- .../message-bridge-fake/tsconfig.json | 4 ++ .../message-bridge-fake/webpack.config.js | 1 + 15 files changed, 110 insertions(+), 27 deletions(-) create mode 100644 packages/technical-features/messaging/message-bridge-fake/.eslintrc.json create mode 100644 packages/technical-features/messaging/message-bridge-fake/.prettierrc create mode 100644 packages/technical-features/messaging/message-bridge-fake/index.ts create mode 100644 packages/technical-features/messaging/message-bridge-fake/jest.config.js create mode 100644 packages/technical-features/messaging/message-bridge-fake/package.json rename packages/technical-features/messaging/{agnostic/src/features/unit-testing => message-bridge-fake/src}/get-message-bridge-fake/get-message-bridge-fake.test.ts (93%) rename packages/technical-features/messaging/{agnostic/src/features/unit-testing => message-bridge-fake/src}/get-message-bridge-fake/get-message-bridge-fake.ts (88%) create mode 100644 packages/technical-features/messaging/message-bridge-fake/tsconfig.json create mode 100644 packages/technical-features/messaging/message-bridge-fake/webpack.config.js diff --git a/package-lock.json b/package-lock.json index 8663f29737..311c78425a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4725,6 +4725,10 @@ "resolved": "packages/technical-features/messaging/agnostic", "link": true }, + "node_modules/@k8slens/messaging-fake-bridge": { + "resolved": "packages/technical-features/messaging/message-bridge-fake", + "link": true + }, "node_modules/@k8slens/messaging-for-main": { "resolved": "packages/technical-features/messaging/main", "link": true @@ -37245,6 +37249,23 @@ "lodash": "^4.17.21" } }, + "packages/technical-features/messaging/message-bridge-fake": { + "version": "1.0.0-alpha.1", + "license": "MIT", + "devDependencies": { + "@async-fn/jest": "^1.6.4", + "@k8slens/eslint-config": "^6.5.0-alpha.1", + "@k8slens/feature-core": "6.5.0-alpha.1", + "@ogre-tools/injectable-extension-for-mobx": "^15.1.2", + "mobx": "^6.7.0" + }, + "peerDependencies": { + "@k8slens/messaging": "^1.0.0-alpha.1", + "@ogre-tools/fp": "^15.1.2", + "@ogre-tools/injectable": "^15.1.2", + "lodash": "^4.17.21" + } + }, "packages/technical-features/messaging/renderer": { "name": "@k8slens/messaging-for-renderer", "version": "1.0.0-alpha.1", diff --git a/packages/core/package.json b/packages/core/package.json index 4067c350ca..15c79d774d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -189,6 +189,7 @@ }, "devDependencies": { "@async-fn/jest": "1.6.4", + "@k8slens/messaging-fake-bridge": "^1.0.0-alpha.1", "@material-ui/core": "^4.12.3", "@material-ui/icons": "^4.11.2", "@material-ui/lab": "^4.0.0-alpha.60", diff --git a/packages/core/src/renderer/components/test-utils/get-application-builder.tsx b/packages/core/src/renderer/components/test-utils/get-application-builder.tsx index cad903da39..4ae3441e76 100644 --- a/packages/core/src/renderer/components/test-utils/get-application-builder.tsx +++ b/packages/core/src/renderer/components/test-utils/get-application-builder.tsx @@ -70,7 +70,8 @@ import { registerFeature } from "@k8slens/feature-core"; import { applicationFeatureForElectronMain, testUtils as applicationForElectronTestUtils } from "@k8slens/application-for-electron-main"; import { applicationFeature, startApplicationInjectionToken } from "@k8slens/application"; import { testUsingFakeTime } from "../../../test-utils/use-fake-time"; -import { sendMessageToChannelInjectionToken, testUtils as messagingTestUtils } from "@k8slens/messaging"; +import { sendMessageToChannelInjectionToken } from "@k8slens/messaging"; +import { getMessageBridgeFake } from "@k8slens/messaging-fake-bridge"; type MainDiCallback = (container: { mainDi: DiContainer }) => void | Promise; type WindowDiCallback = (container: { windowDi: DiContainer }) => void | Promise; @@ -179,7 +180,7 @@ export const getApplicationBuilder = () => { testUsingFakeTime(); - const messageBridgeFake = messagingTestUtils.getMessageBridgeFake(); + const messageBridgeFake = getMessageBridgeFake(); messageBridgeFake.involve(mainDi); diff --git a/packages/technical-features/messaging/agnostic/src/features/actual/computed-channel/computed-channel.test.tsx b/packages/technical-features/messaging/agnostic/src/features/actual/computed-channel/computed-channel.test.tsx index 4bedeb9e25..5860adae82 100644 --- a/packages/technical-features/messaging/agnostic/src/features/actual/computed-channel/computed-channel.test.tsx +++ b/packages/technical-features/messaging/agnostic/src/features/actual/computed-channel/computed-channel.test.tsx @@ -4,7 +4,7 @@ import { createContainer, DiContainer, getInjectable } from "@ogre-tools/injecta import { getMessageBridgeFake, MessageBridgeFake, -} from "../../unit-testing/get-message-bridge-fake/get-message-bridge-fake"; +} from "@k8slens/messaging-fake-bridge"; import { startApplicationInjectionToken } from "@k8slens/application"; import { computed, diff --git a/packages/technical-features/messaging/agnostic/src/features/actual/index.ts b/packages/technical-features/messaging/agnostic/src/features/actual/index.ts index 4a22a2087d..154cb2831a 100644 --- a/packages/technical-features/messaging/agnostic/src/features/actual/index.ts +++ b/packages/technical-features/messaging/agnostic/src/features/actual/index.ts @@ -27,6 +27,7 @@ export type { SendMessageToChannel } from "./message/message-to-channel-injectio export type { GetMessageChannelListenerInfo, MessageChannel, + MessageChannelHandler, MessageChannelListener, } from "./message/message-channel-listener-injection-token"; diff --git a/packages/technical-features/messaging/agnostic/src/features/unit-testing/index.ts b/packages/technical-features/messaging/agnostic/src/features/unit-testing/index.ts index 73eb5e4f43..e0ee8eb25b 100644 --- a/packages/technical-features/messaging/agnostic/src/features/unit-testing/index.ts +++ b/packages/technical-features/messaging/agnostic/src/features/unit-testing/index.ts @@ -1,2 +1 @@ export { messagingFeatureForUnitTesting } from "./feature"; -export { getMessageBridgeFake } from "./get-message-bridge-fake/get-message-bridge-fake"; diff --git a/packages/technical-features/messaging/message-bridge-fake/.eslintrc.json b/packages/technical-features/messaging/message-bridge-fake/.eslintrc.json new file mode 100644 index 0000000000..b15115cb69 --- /dev/null +++ b/packages/technical-features/messaging/message-bridge-fake/.eslintrc.json @@ -0,0 +1,6 @@ +{ + "extends": "@k8slens/eslint-config/eslint", + "parserOptions": { + "project": "./tsconfig.json" + } +} diff --git a/packages/technical-features/messaging/message-bridge-fake/.prettierrc b/packages/technical-features/messaging/message-bridge-fake/.prettierrc new file mode 100644 index 0000000000..edd47b479e --- /dev/null +++ b/packages/technical-features/messaging/message-bridge-fake/.prettierrc @@ -0,0 +1 @@ +"@k8slens/eslint-config/prettier" diff --git a/packages/technical-features/messaging/message-bridge-fake/index.ts b/packages/technical-features/messaging/message-bridge-fake/index.ts new file mode 100644 index 0000000000..6b85a40628 --- /dev/null +++ b/packages/technical-features/messaging/message-bridge-fake/index.ts @@ -0,0 +1,3 @@ +export type { MessageBridgeFake } from "./src/get-message-bridge-fake/get-message-bridge-fake"; + +export { getMessageBridgeFake } from "./src/get-message-bridge-fake/get-message-bridge-fake"; diff --git a/packages/technical-features/messaging/message-bridge-fake/jest.config.js b/packages/technical-features/messaging/message-bridge-fake/jest.config.js new file mode 100644 index 0000000000..38d54ab7b6 --- /dev/null +++ b/packages/technical-features/messaging/message-bridge-fake/jest.config.js @@ -0,0 +1 @@ +module.exports = require("@k8slens/jest").monorepoPackageConfig(__dirname).configForReact; diff --git a/packages/technical-features/messaging/message-bridge-fake/package.json b/packages/technical-features/messaging/message-bridge-fake/package.json new file mode 100644 index 0000000000..95686c04dc --- /dev/null +++ b/packages/technical-features/messaging/message-bridge-fake/package.json @@ -0,0 +1,43 @@ +{ + "name": "@k8slens/messaging-fake-bridge", + "private": false, + "version": "1.0.0-alpha.1", + "description": "Fake implementation to bridge multiple dependency injection containers.", + "type": "commonjs", + "files": [ + "dist" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/lensapp/lens.git" + }, + "main": "dist/index.js", + "types": "dist/index.d.ts", + "author": { + "name": "OpenLens Authors", + "email": "info@k8slens.dev" + }, + "license": "MIT", + "homepage": "https://github.com/lensapp/lens", + "scripts": { + "build": "webpack", + "dev": "webpack --mode=development --watch", + "test:unit": "jest --coverage --runInBand", + "lint:fix": "lens-lint --fix", + "lint": "lens-lint" + }, + "peerDependencies": { + "@k8slens/messaging": "^1.0.0-alpha.1", + "@ogre-tools/fp": "^15.1.2", + "@ogre-tools/injectable": "^15.1.2", + "lodash": "^4.17.21" + }, + + "devDependencies": { + "@async-fn/jest": "^1.6.4", + "@k8slens/feature-core": "6.5.0-alpha.1", + "@k8slens/eslint-config": "^6.5.0-alpha.1", + "@ogre-tools/injectable-extension-for-mobx": "^15.1.2", + "mobx": "^6.7.0" + } +} diff --git a/packages/technical-features/messaging/agnostic/src/features/unit-testing/get-message-bridge-fake/get-message-bridge-fake.test.ts b/packages/technical-features/messaging/message-bridge-fake/src/get-message-bridge-fake/get-message-bridge-fake.test.ts similarity index 93% rename from packages/technical-features/messaging/agnostic/src/features/unit-testing/get-message-bridge-fake/get-message-bridge-fake.test.ts rename to packages/technical-features/messaging/message-bridge-fake/src/get-message-bridge-fake/get-message-bridge-fake.test.ts index 17e148aa9b..e91109df10 100644 --- a/packages/technical-features/messaging/agnostic/src/features/unit-testing/get-message-bridge-fake/get-message-bridge-fake.test.ts +++ b/packages/technical-features/messaging/message-bridge-fake/src/get-message-bridge-fake/get-message-bridge-fake.test.ts @@ -1,24 +1,23 @@ import { createContainer, DiContainer, Injectable } from "@ogre-tools/injectable"; import asyncFn, { AsyncFnMock } from "@async-fn/jest"; -import { registerFeature } from "@k8slens/feature-core/src/register-feature"; +import { registerFeature } from "@k8slens/feature-core"; import { + getMessageChannel, getMessageChannelListenerInjectable, + getRequestChannel, + getRequestChannelListenerInjectable, MessageChannel, -} from "../../actual/message/message-channel-listener-injection-token"; -import { sendMessageToChannelInjectionToken } from "../../actual/message/message-to-channel-injection-token"; + testUtils, + RequestChannel, + requestFromChannelInjectionToken, + sendMessageToChannelInjectionToken, +} from "@k8slens/messaging"; + import { registerMobX } from "@ogre-tools/injectable-extension-for-mobx"; import { runInAction } from "mobx"; -import { - getRequestChannelListenerInjectable, - RequestChannel, -} from "../../actual/request/request-channel-listener-injection-token"; -import { requestFromChannelInjectionToken } from "../../actual/request/request-from-channel-injection-token"; import { getPromiseStatus } from "@k8slens/test-utils"; import { getMessageBridgeFake } from "./get-message-bridge-fake"; -import { getMessageChannel } from "../../actual/message/get-message-channel"; -import { getRequestChannel } from "../../actual/request/get-request-channel"; import { startApplicationInjectionToken } from "@k8slens/application"; -import { messagingFeatureForUnitTesting } from "../feature"; type SomeMessageChannel = MessageChannel; type SomeRequestChannel = RequestChannel; @@ -58,9 +57,11 @@ const someRequestChannelWithoutListeners: SomeRequestChannel = { registerMobX(someDiWithoutListeners); runInAction(() => { - registerFeature(someDi1, messagingFeatureForUnitTesting); - registerFeature(someDi2, messagingFeatureForUnitTesting); - registerFeature(someDiWithoutListeners, messagingFeatureForUnitTesting); + const feature = testUtils.messagingFeatureForUnitTesting; + + registerFeature(someDi1, feature); + registerFeature(someDi2, feature); + registerFeature(someDiWithoutListeners, feature); }); messageBridgeFake.involve(someDi1, someDi2, someDiWithoutListeners); diff --git a/packages/technical-features/messaging/agnostic/src/features/unit-testing/get-message-bridge-fake/get-message-bridge-fake.ts b/packages/technical-features/messaging/message-bridge-fake/src/get-message-bridge-fake/get-message-bridge-fake.ts similarity index 88% rename from packages/technical-features/messaging/agnostic/src/features/unit-testing/get-message-bridge-fake/get-message-bridge-fake.ts rename to packages/technical-features/messaging/message-bridge-fake/src/get-message-bridge-fake/get-message-bridge-fake.ts index cf5d2f93c2..ef8eed6461 100644 --- a/packages/technical-features/messaging/agnostic/src/features/unit-testing/get-message-bridge-fake/get-message-bridge-fake.ts +++ b/packages/technical-features/messaging/message-bridge-fake/src/get-message-bridge-fake/get-message-bridge-fake.ts @@ -1,16 +1,16 @@ import type { DiContainer } from "@ogre-tools/injectable"; -import type { Channel } from "../../actual/channel.no-coverage"; -import type { MessageChannelHandler } from "../../actual/message/message-channel-listener-injection-token"; -import type { RequestChannelHandler } from "../../actual/request/request-channel-listener-injection-token"; -import { sendMessageToChannelInjectionToken } from "../../actual/message/message-to-channel-injection-token"; -import { enlistMessageChannelListenerInjectionToken } from "../../actual/message/enlist-message-channel-listener-injection-token"; -import { pipeline } from "@ogre-tools/fp"; -import { filter, map } from "lodash/fp"; +import type { Channel, MessageChannelHandler, RequestChannelHandler } from "@k8slens/messaging"; + import { + enlistMessageChannelListenerInjectionToken, + enlistRequestChannelListenerInjectionToken, RequestFromChannel, requestFromChannelInjectionToken, -} from "../../actual/request/request-from-channel-injection-token"; -import { enlistRequestChannelListenerInjectionToken } from "../../actual/request/enlist-request-channel-listener-injection-token"; + sendMessageToChannelInjectionToken, +} from "@k8slens/messaging"; + +import { pipeline } from "@ogre-tools/fp"; +import { filter, map } from "lodash/fp"; import asyncFn, { AsyncFnMock } from "@async-fn/jest"; export type MessageBridgeFake = { diff --git a/packages/technical-features/messaging/message-bridge-fake/tsconfig.json b/packages/technical-features/messaging/message-bridge-fake/tsconfig.json new file mode 100644 index 0000000000..ec29a8f75f --- /dev/null +++ b/packages/technical-features/messaging/message-bridge-fake/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "@k8slens/typescript/config/base.json", + "include": ["**/*.ts", "**/*.tsx"] +} diff --git a/packages/technical-features/messaging/message-bridge-fake/webpack.config.js b/packages/technical-features/messaging/message-bridge-fake/webpack.config.js new file mode 100644 index 0000000000..3183f30179 --- /dev/null +++ b/packages/technical-features/messaging/message-bridge-fake/webpack.config.js @@ -0,0 +1 @@ +module.exports = require("@k8slens/webpack").configForNode;