From 688336647d04b77760a250c2fee84bfed36e78af Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Wed, 22 Feb 2023 18:58:05 +0200 Subject: [PATCH] Extract injection token for application information to separate NPM package (#7211) * Introduce dummy package for application Signed-off-by: Janne Savolainen * Introduce application information token in application Feature Signed-off-by: Janne Savolainen * Switch to using applicationInformationToken from application feature Signed-off-by: Janne Savolainen --------- Signed-off-by: Janne Savolainen --- package-lock.json | 19 +++++++- packages/core/package.json | 1 + .../welcome-route-config.injectable.ts | 4 +- packages/core/src/common/library.ts | 2 - .../vars/application-copyright.injectable.ts | 2 +- .../application-description.injectable.ts | 2 +- ...application-information-fake-injectable.ts | 30 +++++++++++++ .../application-information-injectable.ts | 20 --------- .../vars/application-information-token.ts | 15 ------- ...ormation.global-override-for-injectable.ts | 24 ---------- .../bundled-kubectl-version.injectable.ts | 4 +- .../content-security-policy.injectable.ts | 4 +- .../common/vars/product-name.injectable.ts | 2 +- .../common/vars/sentry-dsn-url.injectable.ts | 4 +- .../store-migration-version.injectable.ts | 2 +- .../publish-is-configured.injectable.ts | 4 +- .../store-migrations/snap.injectable.ts | 2 +- packages/core/src/main/getDi.ts | 12 +---- packages/core/src/main/getDiForUnitTesting.ts | 7 +-- .../create-electron-window.injectable.ts | 2 +- .../migrations/currentVersion.injectable.ts | 2 +- packages/core/src/renderer/getDi.tsx | 12 +---- .../core/src/renderer/getDiForUnitTesting.tsx | 7 +-- packages/open-lens/package.json | 1 + .../application-information.injectable.ts | 44 ++++++++++++++++--- .../technical-features/application/README.md | 18 ++++++++ .../technical-features/application/index.ts | 3 ++ .../application/jest.config.js | 2 + .../application/package.json | 34 ++++++++++++++ .../src/application-information-token.ts | 24 ++++++++++ .../application/tsconfig.json | 3 ++ .../application/webpack.config.js | 1 + 32 files changed, 201 insertions(+), 112 deletions(-) create mode 100644 packages/core/src/common/vars/application-information-fake-injectable.ts delete mode 100644 packages/core/src/common/vars/application-information-injectable.ts delete mode 100644 packages/core/src/common/vars/application-information-token.ts delete mode 100644 packages/core/src/common/vars/application-information.global-override-for-injectable.ts create mode 100644 packages/technical-features/application/README.md create mode 100644 packages/technical-features/application/index.ts create mode 100644 packages/technical-features/application/jest.config.js create mode 100644 packages/technical-features/application/package.json create mode 100644 packages/technical-features/application/src/application-information-token.ts create mode 100644 packages/technical-features/application/tsconfig.json create mode 100644 packages/technical-features/application/webpack.config.js diff --git a/package-lock.json b/package-lock.json index ea90dd7e37..f5e29555c3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3281,6 +3281,10 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@k8slens/application": { + "resolved": "packages/technical-features/application", + "link": true + }, "node_modules/@k8slens/bump-version-for-cron": { "resolved": "packages/bump-version-for-cron", "link": true @@ -32254,7 +32258,7 @@ "dependencies": { "@astronautlabs/jsonpath": "^1.1.0", "@hapi/call": "^9.0.1", - "@hapi/subtext": "^7.0.4", + "@hapi/subtext": "^7.1.0", "@k8slens/node-fetch": "^6.4.0-beta.13", "@kubernetes/client-node": "^0.18.1", "@material-ui/styles": "^4.11.5", @@ -32461,6 +32465,7 @@ "node": ">=16 <17" }, "peerDependencies": { + "@k8slens/application": "^6.4.0-beta.13", "@types/byline": "^4.2.33", "@types/chart.js": "^2.9.36", "@types/color": "^3.0.3", @@ -34095,6 +34100,7 @@ } }, "packages/infrastructure/webpack": { + "name": "@k8slens/webpack", "version": "0.0.1", "license": "MIT", "dependencies": { @@ -34291,6 +34297,7 @@ "hasInstallScript": true, "license": "MIT", "dependencies": { + "@k8slens/application": "^6.4.0-beta.13", "@k8slens/core": "^6.4.0-beta.13", "@k8slens/ensure-binaries": "^6.4.0-beta.13", "@k8slens/generate-tray-icons": "^6.4.0-beta.13", @@ -34534,6 +34541,16 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.12.tgz", "integrity": "sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==", "dev": true + }, + "packages/technical-features/application": { + "name": "@k8slens/application", + "version": "6.4.0-beta.13", + "license": "MIT", + "peerDependencies": { + "@ogre-tools/fp": "^12.0.1", + "@ogre-tools/injectable": "^12.0.1", + "lodash": "^4.17.15" + } } } } diff --git a/packages/core/package.json b/packages/core/package.json index 4e9ae7c9bf..f6d58909aa 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -330,6 +330,7 @@ "xterm-addon-fit": "^0.5.0" }, "peerDependencies": { + "@k8slens/application": "^6.4.0-beta.13", "@types/byline": "^4.2.33", "@types/chart.js": "^2.9.36", "@types/color": "^3.0.3", diff --git a/packages/core/src/common/front-end-routing/routes/welcome/welcome-route-config.injectable.ts b/packages/core/src/common/front-end-routing/routes/welcome/welcome-route-config.injectable.ts index d7aadf2f91..9883c1476b 100644 --- a/packages/core/src/common/front-end-routing/routes/welcome/welcome-route-config.injectable.ts +++ b/packages/core/src/common/front-end-routing/routes/welcome/welcome-route-config.injectable.ts @@ -2,13 +2,13 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ +import { applicationInformationToken } from "@k8slens/application"; import { getInjectable } from "@ogre-tools/injectable"; -import { applicationInformationToken } from "../../../vars/application-information-token"; const welcomeRouteConfigInjectable = getInjectable({ id: "welcome-route-config", - instantiate: (di) => di.inject(applicationInformationToken).config.welcomeRoute, + instantiate: (di) => di.inject(applicationInformationToken).welcomeRoute, }); export default welcomeRouteConfigInjectable; diff --git a/packages/core/src/common/library.ts b/packages/core/src/common/library.ts index f4aee75513..bc625eb3dd 100644 --- a/packages/core/src/common/library.ts +++ b/packages/core/src/common/library.ts @@ -4,6 +4,4 @@ */ // @experimental -export { applicationInformationToken } from "./vars/application-information-token"; -export type { ApplicationInformation } from "./vars/application-information-token"; export { bundledExtensionInjectionToken } from "../extensions/extension-discovery/bundled-extension-token"; diff --git a/packages/core/src/common/vars/application-copyright.injectable.ts b/packages/core/src/common/vars/application-copyright.injectable.ts index 0630c98cb6..440a20b5d1 100644 --- a/packages/core/src/common/vars/application-copyright.injectable.ts +++ b/packages/core/src/common/vars/application-copyright.injectable.ts @@ -2,8 +2,8 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ +import { applicationInformationToken } from "@k8slens/application"; import { getInjectable } from "@ogre-tools/injectable"; -import { applicationInformationToken } from "./application-information-token"; const applicationCopyrightInjectable = getInjectable({ id: "application-copyright", diff --git a/packages/core/src/common/vars/application-description.injectable.ts b/packages/core/src/common/vars/application-description.injectable.ts index 8dabb8f629..2b562df7a1 100644 --- a/packages/core/src/common/vars/application-description.injectable.ts +++ b/packages/core/src/common/vars/application-description.injectable.ts @@ -2,8 +2,8 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ +import { applicationInformationToken } from "@k8slens/application"; import { getInjectable } from "@ogre-tools/injectable"; -import { applicationInformationToken } from "./application-information-token"; const applicationDescriptionInjectable = getInjectable({ id: "application-description", diff --git a/packages/core/src/common/vars/application-information-fake-injectable.ts b/packages/core/src/common/vars/application-information-fake-injectable.ts new file mode 100644 index 0000000000..c881c4c8ca --- /dev/null +++ b/packages/core/src/common/vars/application-information-fake-injectable.ts @@ -0,0 +1,30 @@ +/** + * 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 { applicationInformationToken } from "@k8slens/application"; + +export const applicationInformationFakeInjectable = getInjectable({ + id: "application-information-fake", + + instantiate: () => ({ + name: "some-product-name", + productName: "some-product-name", + version: "6.0.0", + updatingIsEnabled: false, + k8sProxyVersion: "0.2.1", + bundledKubectlVersion: "1.23.3", + bundledHelmVersion: "3.7.2", + sentryDsn: "", + contentSecurityPolicy: + "script-src 'unsafe-eval' 'self'; frame-src http://*.localhost:*/; img-src * data:", + + welcomeRoute: "/welcome", + copyright: "some-copyright-information", + description: "some-descriptive-text", + }), + + injectionToken: applicationInformationToken, +}); diff --git a/packages/core/src/common/vars/application-information-injectable.ts b/packages/core/src/common/vars/application-information-injectable.ts deleted file mode 100644 index 8530257a3a..0000000000 --- a/packages/core/src/common/vars/application-information-injectable.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * 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 packageJson from "../../../package.json"; -import { applicationInformationToken } from "../../common/vars/application-information-token"; - -const applicationInformationInjectable = getInjectable({ - id: "application-information", - injectionToken: applicationInformationToken, - instantiate: () => { - const { version, config, productName, build, copyright, description, name } = packageJson; - - return { version, config, productName, build, copyright, description, name }; - }, - causesSideEffects: true, -}); - -export default applicationInformationInjectable; diff --git a/packages/core/src/common/vars/application-information-token.ts b/packages/core/src/common/vars/application-information-token.ts deleted file mode 100644 index 67b187478a..0000000000 --- a/packages/core/src/common/vars/application-information-token.ts +++ /dev/null @@ -1,15 +0,0 @@ -/** - * 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"; -import type packageJson from "../../../package.json"; - -export type ApplicationInformation = Pick & { - build: Partial & { publish?: unknown[] }; -}; - -export const applicationInformationToken = getInjectionToken({ - id: "application-information-token", -}); diff --git a/packages/core/src/common/vars/application-information.global-override-for-injectable.ts b/packages/core/src/common/vars/application-information.global-override-for-injectable.ts deleted file mode 100644 index e0b886fa65..0000000000 --- a/packages/core/src/common/vars/application-information.global-override-for-injectable.ts +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { getGlobalOverride } from "../test-utils/get-global-override"; -import applicationInformationInjectable from "./application-information-injectable"; - -export default getGlobalOverride(applicationInformationInjectable, () => ({ - name: "some-product-name", - productName: "some-product-name", - version: "6.0.0", - build: {} as any, - config: { - k8sProxyVersion: "0.2.1", - bundledKubectlVersion: "1.23.3", - bundledHelmVersion: "3.7.2", - sentryDsn: "", - contentSecurityPolicy: "script-src 'unsafe-eval' 'self'; frame-src http://*.localhost:*/; img-src * data:", - welcomeRoute: "/welcome", - }, - copyright: "some-copyright-information", - description: "some-descriptive-text", -})); diff --git a/packages/core/src/common/vars/bundled-kubectl-version.injectable.ts b/packages/core/src/common/vars/bundled-kubectl-version.injectable.ts index c15457a2c0..bf3228e44f 100644 --- a/packages/core/src/common/vars/bundled-kubectl-version.injectable.ts +++ b/packages/core/src/common/vars/bundled-kubectl-version.injectable.ts @@ -2,12 +2,12 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ +import { applicationInformationToken } from "@k8slens/application"; import { getInjectable } from "@ogre-tools/injectable"; -import { applicationInformationToken } from "./application-information-token"; const bundledKubectlVersionInjectable = getInjectable({ id: "bundled-kubectl-version", - instantiate: (di) => di.inject(applicationInformationToken).config.bundledKubectlVersion, + instantiate: (di) => di.inject(applicationInformationToken).bundledKubectlVersion, }); export default bundledKubectlVersionInjectable; diff --git a/packages/core/src/common/vars/content-security-policy.injectable.ts b/packages/core/src/common/vars/content-security-policy.injectable.ts index b516571d2f..56d70e3e97 100644 --- a/packages/core/src/common/vars/content-security-policy.injectable.ts +++ b/packages/core/src/common/vars/content-security-policy.injectable.ts @@ -2,12 +2,12 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ +import { applicationInformationToken } from "@k8slens/application"; import { getInjectable } from "@ogre-tools/injectable"; -import { applicationInformationToken } from "./application-information-token"; const contentSecurityPolicyInjectable = getInjectable({ id: "content-security-policy", - instantiate: (di) => di.inject(applicationInformationToken).config.contentSecurityPolicy, + instantiate: (di) => di.inject(applicationInformationToken).contentSecurityPolicy, }); export default contentSecurityPolicyInjectable; diff --git a/packages/core/src/common/vars/product-name.injectable.ts b/packages/core/src/common/vars/product-name.injectable.ts index aa156e427f..6437af3c6c 100644 --- a/packages/core/src/common/vars/product-name.injectable.ts +++ b/packages/core/src/common/vars/product-name.injectable.ts @@ -2,8 +2,8 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ +import { applicationInformationToken } from "@k8slens/application"; import { getInjectable } from "@ogre-tools/injectable"; -import { applicationInformationToken } from "./application-information-token"; const productNameInjectable = getInjectable({ id: "product-name", diff --git a/packages/core/src/common/vars/sentry-dsn-url.injectable.ts b/packages/core/src/common/vars/sentry-dsn-url.injectable.ts index 1fa48b95f1..0ca6cab9e5 100644 --- a/packages/core/src/common/vars/sentry-dsn-url.injectable.ts +++ b/packages/core/src/common/vars/sentry-dsn-url.injectable.ts @@ -2,12 +2,12 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ +import { applicationInformationToken } from "@k8slens/application"; import { getInjectable } from "@ogre-tools/injectable"; -import { applicationInformationToken } from "./application-information-token"; const sentryDataSourceNameInjectable = getInjectable({ id: "sentry-data-source-name", - instantiate: (di) => di.inject(applicationInformationToken).config.sentryDsn, + instantiate: (di) => di.inject(applicationInformationToken).sentryDsn, }); export default sentryDataSourceNameInjectable; diff --git a/packages/core/src/common/vars/store-migration-version.injectable.ts b/packages/core/src/common/vars/store-migration-version.injectable.ts index 4a4b232da8..6dfbff2e94 100644 --- a/packages/core/src/common/vars/store-migration-version.injectable.ts +++ b/packages/core/src/common/vars/store-migration-version.injectable.ts @@ -2,8 +2,8 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ +import { applicationInformationToken } from "@k8slens/application"; import { getInjectable } from "@ogre-tools/injectable"; -import { applicationInformationToken } from "./application-information-token"; const storeMigrationVersionInjectable = getInjectable({ id: "store-migration-version", diff --git a/packages/core/src/features/application-update/main/updating-is-enabled/publish-is-configured/publish-is-configured.injectable.ts b/packages/core/src/features/application-update/main/updating-is-enabled/publish-is-configured/publish-is-configured.injectable.ts index 8581cb4860..de451ad5aa 100644 --- a/packages/core/src/features/application-update/main/updating-is-enabled/publish-is-configured/publish-is-configured.injectable.ts +++ b/packages/core/src/features/application-update/main/updating-is-enabled/publish-is-configured/publish-is-configured.injectable.ts @@ -2,12 +2,12 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ +import { applicationInformationToken } from "@k8slens/application"; import { getInjectable } from "@ogre-tools/injectable"; -import { applicationInformationToken } from "../../../../../common/vars/application-information-token"; const publishIsConfiguredInjectable = getInjectable({ id: "publish-is-configured", - instantiate: (di) => Boolean(di.inject(applicationInformationToken).build.publish?.length), + instantiate: (di) => Boolean(di.inject(applicationInformationToken).updatingIsEnabled), }); export default publishIsConfiguredInjectable; diff --git a/packages/core/src/main/cluster/store-migrations/snap.injectable.ts b/packages/core/src/main/cluster/store-migrations/snap.injectable.ts index e09874c0e5..d4efc37612 100644 --- a/packages/core/src/main/cluster/store-migrations/snap.injectable.ts +++ b/packages/core/src/main/cluster/store-migrations/snap.injectable.ts @@ -6,12 +6,12 @@ // Fix embedded kubeconfig paths under snap config import { getInjectable } from "@ogre-tools/injectable"; -import { applicationInformationToken } from "../../../common/vars/application-information-token"; import { clusterStoreMigrationInjectionToken } from "../../../common/cluster-store/migration-token"; import loggerInjectable from "../../../common/logger.injectable"; import isSnapPackageInjectable from "../../../common/vars/is-snap-package.injectable"; import type { ClusterModel } from "../../../common/cluster-types"; import pathExistsSyncInjectable from "../../../common/fs/path-exists-sync.injectable"; +import { applicationInformationToken } from "@k8slens/application"; const clusterStoreSnapMigrationInjectable = getInjectable({ id: "cluster-store-snap-migration", diff --git a/packages/core/src/main/getDi.ts b/packages/core/src/main/getDi.ts index db7decece8..e325e66ed5 100644 --- a/packages/core/src/main/getDi.ts +++ b/packages/core/src/main/getDi.ts @@ -3,15 +3,5 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { createContainer } from "@ogre-tools/injectable"; -import { runInAction } from "mobx"; -import applicationInformationInjectable from "../common/vars/application-information-injectable"; -export const getDi = () => { - const di = createContainer("main"); - - runInAction(() => { - di.register(applicationInformationInjectable); - }); - - return di; -}; +export const getDi = () => createContainer("main"); diff --git a/packages/core/src/main/getDiForUnitTesting.ts b/packages/core/src/main/getDiForUnitTesting.ts index 1698997e36..5e923433fa 100644 --- a/packages/core/src/main/getDiForUnitTesting.ts +++ b/packages/core/src/main/getDiForUnitTesting.ts @@ -29,9 +29,9 @@ 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"; +import { applicationInformationFakeInjectable } from "../common/vars/application-information-fake-injectable"; export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {}) { const { @@ -57,9 +57,10 @@ export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {}) .filter(isInjectable) ) as Injectable[]; + registerMobX(di); + runInAction(() => { - registerMobX(di); - di.register(applicationInformationInjectable); + di.register(applicationInformationFakeInjectable); chunk(100)(injectables).forEach(chunkInjectables => { di.register(...chunkInjectables); diff --git a/packages/core/src/main/start-main-application/lens-window/application-window/create-electron-window.injectable.ts b/packages/core/src/main/start-main-application/lens-window/application-window/create-electron-window.injectable.ts index 0f8c84668b..b53f58c838 100644 --- a/packages/core/src/main/start-main-application/lens-window/application-window/create-electron-window.injectable.ts +++ b/packages/core/src/main/start-main-application/lens-window/application-window/create-electron-window.injectable.ts @@ -13,9 +13,9 @@ import openLinkInBrowserInjectable from "../../../../common/utils/open-link-in-b import getAbsolutePathInjectable from "../../../../common/path/get-absolute-path.injectable"; import lensResourcesDirInjectable from "../../../../common/vars/lens-resources-dir.injectable"; import isLinuxInjectable from "../../../../common/vars/is-linux.injectable"; -import { applicationInformationToken } from "../../../../common/vars/application-information-token"; import pathExistsSyncInjectable from "../../../../common/fs/path-exists-sync.injectable"; import lensProxyCertificateInjectable from "../../../../common/certificate/lens-proxy-certificate.injectable"; +import { applicationInformationToken } from "@k8slens/application"; export type ElectronWindowTitleBarStyle = "hiddenInset" | "hidden" | "default" | "customButtonsOnHover"; diff --git a/packages/core/src/main/weblinks-store/migrations/currentVersion.injectable.ts b/packages/core/src/main/weblinks-store/migrations/currentVersion.injectable.ts index a424743697..2e26f4996b 100644 --- a/packages/core/src/main/weblinks-store/migrations/currentVersion.injectable.ts +++ b/packages/core/src/main/weblinks-store/migrations/currentVersion.injectable.ts @@ -7,8 +7,8 @@ import { docsUrl, slackUrl } from "../../../common/vars"; import type { WeblinkData } from "../../../common/weblinks-store/weblink-store"; import { getInjectable } from "@ogre-tools/injectable"; import { weblinkStoreMigrationInjectionToken } from "../../../common/weblinks-store/migration-token"; -import { applicationInformationToken } from "../../../common/vars/application-information-token"; import { lensDocumentationWeblinkId, lensSlackWeblinkId } from "../links"; +import { applicationInformationToken } from "@k8slens/application"; const currentVersionWeblinkStoreMigrationInjectable = getInjectable({ id: "current-version-weblink-store-migration", diff --git a/packages/core/src/renderer/getDi.tsx b/packages/core/src/renderer/getDi.tsx index de61d5ab67..77d665760c 100644 --- a/packages/core/src/renderer/getDi.tsx +++ b/packages/core/src/renderer/getDi.tsx @@ -4,15 +4,5 @@ */ import { createContainer } from "@ogre-tools/injectable"; -import { runInAction } from "mobx"; -import applicationInformationInjectable from "../common/vars/application-information-injectable"; -export const getDi = () => { - const di = createContainer("renderer"); - - runInAction(() => { - di.register(applicationInformationInjectable); - }); - - return di; -}; +export const getDi = () => createContainer("renderer"); diff --git a/packages/core/src/renderer/getDiForUnitTesting.tsx b/packages/core/src/renderer/getDiForUnitTesting.tsx index ac42796d9b..07cc70ef80 100644 --- a/packages/core/src/renderer/getDiForUnitTesting.tsx +++ b/packages/core/src/renderer/getDiForUnitTesting.tsx @@ -18,8 +18,8 @@ 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 applicationInformationInjectable from "../common/vars/application-information-injectable"; import nodeEnvInjectionToken from "../common/vars/node-env-injection-token"; +import { applicationInformationFakeInjectable } from "../common/vars/application-information-fake-injectable"; export const getDiForUnitTesting = ( opts: { doGeneralOverrides?: boolean } = {}, @@ -45,9 +45,10 @@ export const getDiForUnitTesting = ( .filter(isInjectable) ) as Injectable[]; + registerMobX(di); + runInAction(() => { - registerMobX(di); - di.register(applicationInformationInjectable); + di.register(applicationInformationFakeInjectable); chunk(100)(injectables).forEach((chunkInjectables) => { di.register(...chunkInjectables); diff --git a/packages/open-lens/package.json b/packages/open-lens/package.json index 37ec8cb07b..8507be2395 100644 --- a/packages/open-lens/package.json +++ b/packages/open-lens/package.json @@ -195,6 +195,7 @@ } }, "dependencies": { + "@k8slens/application": "^6.4.0-beta.13", "@k8slens/core": "^6.4.0-beta.13", "@k8slens/ensure-binaries": "^6.4.0-beta.13", "@k8slens/generate-tray-icons": "^6.4.0-beta.13", diff --git a/packages/open-lens/src/common/application-information.injectable.ts b/packages/open-lens/src/common/application-information.injectable.ts index 603ea171ad..49e95f4bdc 100644 --- a/packages/open-lens/src/common/application-information.injectable.ts +++ b/packages/open-lens/src/common/application-information.injectable.ts @@ -1,15 +1,49 @@ - +/** + * 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 { applicationInformationToken, ApplicationInformation } from "@k8slens/core/common"; import packageJson from "../../package.json"; +import { applicationInformationToken } from "@k8slens/application"; const applicationInformationInjectable = getInjectable({ id: "application-information", injectionToken: applicationInformationToken, - instantiate: () => { - const { version, config, productName, build, copyright, description, name } = packageJson; - return { version, config, productName, build, copyright, description, name } as ApplicationInformation; + instantiate: () => { + const { + version, + + config: { + bundledHelmVersion, + bundledKubectlVersion, + contentSecurityPolicy, + k8sProxyVersion, + sentryDsn, + welcomeRoute, + }, + + productName, + build, + copyright, + description, + name, + } = packageJson; + + return { + version, + productName, + copyright, + description, + name, + k8sProxyVersion, + bundledKubectlVersion, + bundledHelmVersion, + sentryDsn, + contentSecurityPolicy, + welcomeRoute, + updatingIsEnabled: (build as any)?.publish?.length > 0, + }; }, causesSideEffects: true, }); diff --git a/packages/technical-features/application/README.md b/packages/technical-features/application/README.md new file mode 100644 index 0000000000..451e211c85 --- /dev/null +++ b/packages/technical-features/application/README.md @@ -0,0 +1,18 @@ +# @k8slens/application + +This package contains stuff related to creating Lens-applications. + +In the beginning it will contain just the injection tokens used to configure the application. + +## Install +```bash +$ npm install @k8slens/application +``` + + +## Usage + +As of now, this package doesn't do anything alone. It just provides you way to register implementation for contract. + +Future ambition is that all stuff related to how applications are built will be relocated here. + diff --git a/packages/technical-features/application/index.ts b/packages/technical-features/application/index.ts new file mode 100644 index 0000000000..8686f83dd1 --- /dev/null +++ b/packages/technical-features/application/index.ts @@ -0,0 +1,3 @@ +export { applicationInformationToken } from "./src/application-information-token"; +export type { ApplicationInformation } from "./src/application-information-token"; + diff --git a/packages/technical-features/application/jest.config.js b/packages/technical-features/application/jest.config.js new file mode 100644 index 0000000000..23be80353b --- /dev/null +++ b/packages/technical-features/application/jest.config.js @@ -0,0 +1,2 @@ +module.exports = + require("@k8slens/jest").monorepoPackageConfig(__dirname).configForReact; diff --git a/packages/technical-features/application/package.json b/packages/technical-features/application/package.json new file mode 100644 index 0000000000..e5d08f6c49 --- /dev/null +++ b/packages/technical-features/application/package.json @@ -0,0 +1,34 @@ +{ + "name": "@k8slens/application", + "private": false, + "version": "6.4.0-beta.13", + "description": "Package for creating Lens applications", + "type": "commonjs", + "files": [ + "dist" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/lensapp/monorepo.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": "lens-build", + "build:remove": "lens-remove-build", + "code-style:fix": "lens-fix-code-style", + "code-style:verify": "lens-verify-code-style", + "test": "lens-test" + }, + "peerDependencies": { + "@ogre-tools/fp": "^12.0.1", + "@ogre-tools/injectable": "^12.0.1", + "lodash": "^4.17.15" + } +} diff --git a/packages/technical-features/application/src/application-information-token.ts b/packages/technical-features/application/src/application-information-token.ts new file mode 100644 index 0000000000..2f724044c1 --- /dev/null +++ b/packages/technical-features/application/src/application-information-token.ts @@ -0,0 +1,24 @@ +/** + * 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"; + +export type ApplicationInformation = { + name: string; + version: string; + productName: string; + copyright: string; + description: string; + k8sProxyVersion: string, + bundledKubectlVersion: string, + bundledHelmVersion: string, + sentryDsn: string, + contentSecurityPolicy: string, + welcomeRoute: string, + updatingIsEnabled: boolean; +} + +export const applicationInformationToken = getInjectionToken({ + id: "application-information-token", +}); diff --git a/packages/technical-features/application/tsconfig.json b/packages/technical-features/application/tsconfig.json new file mode 100644 index 0000000000..a4f6fa613e --- /dev/null +++ b/packages/technical-features/application/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@k8slens/typescript/config/base.json" +} diff --git a/packages/technical-features/application/webpack.config.js b/packages/technical-features/application/webpack.config.js new file mode 100644 index 0000000000..3183f30179 --- /dev/null +++ b/packages/technical-features/application/webpack.config.js @@ -0,0 +1 @@ +module.exports = require("@k8slens/webpack").configForNode;