From eae90f64f584ca0010b789f22d9b2320c9f76793 Mon Sep 17 00:00:00 2001 From: Juho Heikka Date: Thu, 16 Mar 2023 10:13:56 +0200 Subject: [PATCH] Add implementation for injection token --- package-lock.json | 42 ++++++--- packages/core/package.json | 2 +- .../components/+cluster/cluster-overview.tsx | 2 +- .../+cluster/ui-block.injectable.tsx | 19 ++++ packages/open-lens/package.json | 1 + packages/open-lens/src/renderer/index.ts | 2 + packages/technical-features/metrics/index.ts | 2 + .../metrics/package-lock.json | 93 ++----------------- .../technical-features/metrics/package.json | 2 + .../cluster-overview-ui-block.injectable.ts | 2 +- .../technical-features/metrics/src/feature.ts | 15 +++ 11 files changed, 82 insertions(+), 100 deletions(-) create mode 100644 packages/core/src/renderer/components/+cluster/ui-block.injectable.tsx create mode 100644 packages/technical-features/metrics/src/feature.ts diff --git a/package-lock.json b/package-lock.json index 61ba8e5f3b..2cb6fcc272 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4714,6 +4714,10 @@ "resolved": "packages/infrastructure/jest", "link": true }, + "node_modules/@k8slens/metrics": { + "resolved": "packages/technical-features/metrics", + "link": true + }, "node_modules/@k8slens/node-fetch": { "resolved": "packages/node-fetch", "link": true @@ -12936,9 +12940,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.329", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.329.tgz", - "integrity": "sha512-dcwPzNUG4+reo5z+wHnrl2eZMu4kz+nLQEeepxLEDTLDC7Mi7AVTM4NXWct1TZyu3G4oQgygaAfbByaBtPqw2Q==" + "version": "1.4.331", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.331.tgz", + "integrity": "sha512-tdtr9y9oJl8VDiS+HeB6e/JDJqdDGjIk3yRfEMHm5rDnWQ/D5SbafybAayInxolbfbH6pouV5g7ZUAwE/WVtHw==" }, "node_modules/electron-updater": { "version": "4.6.5", @@ -30290,9 +30294,9 @@ } }, "node_modules/sass": { - "version": "1.59.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.59.2.tgz", - "integrity": "sha512-jJyO6SmbzkJexF8MUorHx5tAilcgabioYxT/BHbY4+OvoqmbHxsYlrjZ8Adhqcgl6Zqwie0TgMXLCAmPFxXOuw==", + "version": "1.59.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.59.3.tgz", + "integrity": "sha512-QCq98N3hX1jfTCoUAsF3eyGuXLsY7BCnCEg9qAact94Yc21npG2/mVOqoDvE0fCbWDqiM4WlcJQla0gWG2YlxQ==", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -33449,9 +33453,9 @@ } }, "node_modules/webpack": { - "version": "5.76.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz", - "integrity": "sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==", + "version": "5.76.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.2.tgz", + "integrity": "sha512-Th05ggRm23rVzEOlX8y67NkYCHa9nTNcwHPBhdg+lKG+mtiW7XgggjAeeLnADAe7mLjJ6LUNfgHAuRRh+Z6J7w==", "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", @@ -34589,6 +34593,7 @@ "peerDependencies": { "@k8slens/application": "^6.5.0-alpha.0", "@k8slens/application-for-electron-main": "^6.5.0-alpha.0", + "@k8slens/metrics": "^6.5.0-alpha.1", "@k8slens/run-many": "^1.0.0-alpha.1", "@k8slens/test-utils": "^1.0.0-alpha.1", "@k8slens/utilities": "^1.0.0-alpha.1", @@ -35259,9 +35264,9 @@ "integrity": "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==" }, "packages/infrastructure/jest/node_modules/@types/jest": { - "version": "29.4.1", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.1.tgz", - "integrity": "sha512-zDQSWXG+ZkEvs2zFFMszePhx4euKz+Yt3Gg1P+RHjfJBinTTr6L2DEyovO4V/WrKXuF0Dgn56GWGZPDa6TW9eQ==", + "version": "29.4.4", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.4.4.tgz", + "integrity": "sha512-qezb65VIH7X1wobSnd6Lvdve7PXSyQRa3dljTkhTtDhi603RvHQCshSlJcuyMLHJpeHgY3NKwvDJWxMOOHxGDQ==", "dependencies": { "expect": "^29.0.0", "pretty-format": "^29.0.0" @@ -36513,6 +36518,7 @@ "@k8slens/ensure-binaries": "^6.5.0-alpha.1", "@k8slens/feature-core": "^6.5.0-alpha.1", "@k8slens/generate-tray-icons": "^6.5.0-alpha.1", + "@k8slens/metrics": "^6.5.0-alpha.1", "@k8slens/run-many": "^1.0.0-alpha.1", "@k8slens/test-utils": "^1.0.0-alpha.1", "@k8slens/utilities": "^1.0.0-alpha.1", @@ -37066,6 +37072,18 @@ "@ogre-tools/injectable": "^15.1.2" } }, + "packages/technical-features/metrics": { + "name": "@k8slens/metrics", + "version": "6.5.0-alpha.1", + "license": "MIT", + "devDependencies": { + "@k8slens/eslint-config": "6.5.0-alpha.1" + }, + "peerDependencies": { + "@k8slens/feature-core": "^6.5.0-alpha.0", + "@ogre-tools/injectable": "^15.1.2" + } + }, "packages/utility-features/run-many": { "name": "@k8slens/run-many", "version": "1.0.0-alpha.1", diff --git a/packages/core/package.json b/packages/core/package.json index 2148632822..e857ce15e5 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -329,9 +329,9 @@ "xterm-addon-fit": "^0.5.0" }, "peerDependencies": { + "@k8slens/metrics": "^6.5.0-alpha.1", "@k8slens/application": "^6.5.0-alpha.0", "@k8slens/application-for-electron-main": "^6.5.0-alpha.0", - "@k8slens/metrics": "^6.5.0-alpha.0", "@k8slens/run-many": "^1.0.0-alpha.1", "@k8slens/test-utils": "^1.0.0-alpha.1", "@k8slens/utilities": "^1.0.0-alpha.1", diff --git a/packages/core/src/renderer/components/+cluster/cluster-overview.tsx b/packages/core/src/renderer/components/+cluster/cluster-overview.tsx index c4578e5c76..03155d1a1f 100644 --- a/packages/core/src/renderer/components/+cluster/cluster-overview.tsx +++ b/packages/core/src/renderer/components/+cluster/cluster-overview.tsx @@ -81,7 +81,7 @@ class NonInjectedClusterOverview extends React.Component { <> {this.props.uiBlocks.map((block) => ( - +
{block.text}
))} lol diff --git a/packages/core/src/renderer/components/+cluster/ui-block.injectable.tsx b/packages/core/src/renderer/components/+cluster/ui-block.injectable.tsx new file mode 100644 index 0000000000..af7f5c7114 --- /dev/null +++ b/packages/core/src/renderer/components/+cluster/ui-block.injectable.tsx @@ -0,0 +1,19 @@ +/** + * 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 { clusterOverviewUIBlockInjectionToken } from "@k8slens/metrics"; + +const uiBlock = getInjectable({ + id: "lol", + instantiate: () => { + return { + id: "lol-id", + text: "lol", + }; + }, + injectionToken: clusterOverviewUIBlockInjectionToken, +}); + +export default uiBlock; diff --git a/packages/open-lens/package.json b/packages/open-lens/package.json index 4a4588a865..0b67e40b4c 100644 --- a/packages/open-lens/package.json +++ b/packages/open-lens/package.json @@ -196,6 +196,7 @@ }, "dependencies": { "@k8slens/application": "^6.5.0-alpha.1", + "@k8slens/metrics": "^6.5.0-alpha.1", "@k8slens/application-for-electron-main": "^6.5.0-alpha.1", "@k8slens/core": "^6.5.0-alpha.2", "@k8slens/ensure-binaries": "^6.5.0-alpha.1", diff --git a/packages/open-lens/src/renderer/index.ts b/packages/open-lens/src/renderer/index.ts index 9f0770de26..11d80b9bec 100644 --- a/packages/open-lens/src/renderer/index.ts +++ b/packages/open-lens/src/renderer/index.ts @@ -14,6 +14,7 @@ import { import { createContainer } from "@ogre-tools/injectable"; import { registerMobX } from "@ogre-tools/injectable-extension-for-mobx"; import { registerInjectableReact } from "@ogre-tools/injectable-react"; +import { metricsFeature } from "@k8slens/metrics"; const environment = "renderer"; @@ -24,6 +25,7 @@ runInAction(() => { registerInjectableReact(di); registerLensCore(di, environment); registerFeature(di, applicationFeature); + registerFeature(di, metricsFeature); autoRegister({ di, diff --git a/packages/technical-features/metrics/index.ts b/packages/technical-features/metrics/index.ts index 4e6a71b188..9ebc159775 100644 --- a/packages/technical-features/metrics/index.ts +++ b/packages/technical-features/metrics/index.ts @@ -2,5 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ +export { metricsFeature } from "./src/feature"; + export type { ClusterOverviewUIBlock } from "./src/cluster-overview/cluster-overview-ui-block.injectable"; export { clusterOverviewUIBlockInjectionToken } from "./src/cluster-overview/cluster-overview-ui-block.injectable"; diff --git a/packages/technical-features/metrics/package-lock.json b/packages/technical-features/metrics/package-lock.json index de125565f6..3b957a3a61 100644 --- a/packages/technical-features/metrics/package-lock.json +++ b/packages/technical-features/metrics/package-lock.json @@ -9,12 +9,10 @@ "version": "6.5.0-alpha.1", "license": "MIT", "devDependencies": { - "@k8slens/eslint-config": "6.5.0-alpha.1", - "@types/react": "^17.0.45" + "@k8slens/eslint-config": "6.5.0-alpha.1" }, "peerDependencies": { - "@ogre-tools/injectable": "^15.1.2", - "react": "^17.0.2" + "@ogre-tools/injectable": "^15.1.2" } }, "node_modules/@ampproject/remapping": { @@ -2435,29 +2433,6 @@ "dev": true, "peer": true }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "node_modules/@types/react": { - "version": "17.0.53", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.53.tgz", - "integrity": "sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, "node_modules/@types/semver": { "version": "7.3.13", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", @@ -3205,12 +3180,6 @@ "node": ">= 8" } }, - "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true - }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -4997,6 +4966,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "peer": true }, "node_modules/js-yaml": { @@ -5151,6 +5121,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, "peer": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -5248,6 +5219,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, "peer": true, "engines": { "node": ">=0.10.0" @@ -5615,19 +5587,6 @@ ], "peer": true }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -8182,29 +8141,6 @@ "dev": true, "peer": true }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "@types/react": { - "version": "17.0.53", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.53.tgz", - "integrity": "sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, "@types/semver": { "version": "7.3.13", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.13.tgz", @@ -8731,12 +8667,6 @@ "which": "^2.0.1" } }, - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true - }, "damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -10076,6 +10006,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "peer": true }, "js-yaml": { @@ -10203,6 +10134,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, "peer": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -10285,6 +10217,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, "peer": true }, "object-inspect": { @@ -10539,16 +10472,6 @@ "dev": true, "peer": true }, - "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", diff --git a/packages/technical-features/metrics/package.json b/packages/technical-features/metrics/package.json index f461494b33..8c8fc54222 100644 --- a/packages/technical-features/metrics/package.json +++ b/packages/technical-features/metrics/package.json @@ -25,12 +25,14 @@ "homepage": "https://github.com/lensapp/lens", "scripts": { "build": "webpack", + "clean": "rimraf dist/", "dev": "webpack --mode=development --watch", "test": "jest --coverage --runInBand", "lint": "lens-lint", "lint:fix": "lens-lint --fix" }, "peerDependencies": { + "@k8slens/feature-core": "^6.5.0-alpha.0", "@ogre-tools/injectable": "^15.1.2" }, "devDependencies": { diff --git a/packages/technical-features/metrics/src/cluster-overview/cluster-overview-ui-block.injectable.ts b/packages/technical-features/metrics/src/cluster-overview/cluster-overview-ui-block.injectable.ts index c8b60597b7..e724504d8b 100644 --- a/packages/technical-features/metrics/src/cluster-overview/cluster-overview-ui-block.injectable.ts +++ b/packages/technical-features/metrics/src/cluster-overview/cluster-overview-ui-block.injectable.ts @@ -6,7 +6,7 @@ import { getInjectionToken } from "@ogre-tools/injectable"; export type ClusterOverviewUIBlock = { id: string; - component: React.ElementType; + text: string; }; export const clusterOverviewUIBlockInjectionToken = getInjectionToken({ diff --git a/packages/technical-features/metrics/src/feature.ts b/packages/technical-features/metrics/src/feature.ts new file mode 100644 index 0000000000..2d76e22782 --- /dev/null +++ b/packages/technical-features/metrics/src/feature.ts @@ -0,0 +1,15 @@ +import { getFeature } from "@k8slens/feature-core"; +import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration"; + +export const metricsFeature = getFeature({ + id: "metrics", + + register: (di) => { + autoRegister({ + di, + targetModule: module, + + getRequireContexts: () => [require.context("./", true, /\.injectable\.(ts|tsx)$/)], + }); + }, +});