From fd00515c8c6dd975bb23dc7eba2b935dad0199af Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Jan 2023 08:56:58 -0500 Subject: [PATCH 01/37] Bump eslint-plugin-import from 2.26.0 to 2.27.4 (#6933) Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.26.0 to 2.27.4. - [Release notes](https://github.com/import-js/eslint-plugin-import/releases) - [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md) - [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.26.0...v2.27.4) --- updated-dependencies: - dependency-name: eslint-plugin-import dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 102 ++++++++++++++++++--------------------------------- 2 files changed, 36 insertions(+), 68 deletions(-) diff --git a/package.json b/package.json index c8b28c215e..b7804e661e 100644 --- a/package.json +++ b/package.json @@ -392,7 +392,7 @@ "eslint": "^8.31.0", "eslint-import-resolver-typescript": "^3.5.3", "eslint-plugin-header": "^3.1.1", - "eslint-plugin-import": "^2.26.0", + "eslint-plugin-import": "^2.27.4", "eslint-plugin-react": "7.32.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-unused-imports": "^2.0.0", diff --git a/yarn.lock b/yarn.lock index c8c882b770..43aa9f0dfa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3373,17 +3373,17 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.flat@^1.2.5: - version "1.3.0" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b" - integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw== +array.prototype.flat@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2" + integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA== dependencies: call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.1: +array.prototype.flatmap@^1.3.0, array.prototype.flatmap@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== @@ -5537,7 +5537,7 @@ error-stack-parser@^2.0.6: dependencies: stackframe "^1.1.1" -es-abstract@^1.19.0, es-abstract@^1.19.2, es-abstract@^1.19.5: +es-abstract@^1.19.0, es-abstract@^1.19.5: version "1.20.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.0.tgz#b2d526489cceca004588296334726329e0a6bfb6" integrity sha512-URbD8tgRthKD3YcC39vbvSDrX23upXnPcnGAjQfgxXF5ID75YcENawc9ZX/9iTP9ptUyfCLIxTTuMYoRfiOVKA== @@ -5839,13 +5839,14 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" -eslint-import-resolver-node@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd" - integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw== +eslint-import-resolver-node@^0.3.7: + version "0.3.7" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz#83b375187d412324a1963d84fa664377a23eb4d7" + integrity sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA== dependencies: debug "^3.2.7" - resolve "^1.20.0" + is-core-module "^2.11.0" + resolve "^1.22.1" eslint-import-resolver-typescript@^3.5.3: version "3.5.3" @@ -5860,36 +5861,37 @@ eslint-import-resolver-typescript@^3.5.3: is-glob "^4.0.3" synckit "^0.8.4" -eslint-module-utils@^2.7.3: - version "2.7.3" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee" - integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ== +eslint-module-utils@^2.7.4: + version "2.7.4" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz#4f3e41116aaf13a20792261e61d3a2e7e0583974" + integrity sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA== dependencies: debug "^3.2.7" - find-up "^2.1.0" eslint-plugin-header@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz#6ce512432d57675265fac47292b50d1eff11acd6" integrity sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg== -eslint-plugin-import@^2.26.0: - version "2.26.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b" - integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA== +eslint-plugin-import@^2.27.4: + version "2.27.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.4.tgz#319c2f6f6580e1678d674a258ee5e981c10cc25b" + integrity sha512-Z1jVt1EGKia1X9CnBCkpAOhWy8FgQ7OmJ/IblEkT82yrFU/xJaxwujaTzLWqigewwynRQ9mmHfX9MtAfhxm0sA== dependencies: - array-includes "^3.1.4" - array.prototype.flat "^1.2.5" - debug "^2.6.9" + array-includes "^3.1.6" + array.prototype.flat "^1.3.1" + array.prototype.flatmap "^1.3.0" + debug "^3.2.7" doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.6" - eslint-module-utils "^2.7.3" + eslint-import-resolver-node "^0.3.7" + eslint-module-utils "^2.7.4" has "^1.0.3" - is-core-module "^2.8.1" + is-core-module "^2.11.0" is-glob "^4.0.3" minimatch "^3.1.2" - object.values "^1.1.5" - resolve "^1.22.0" + object.values "^1.1.6" + resolve "^1.22.1" + semver "^6.3.0" tsconfig-paths "^3.14.1" eslint-plugin-react-hooks@^4.6.0: @@ -6474,13 +6476,6 @@ find-root@^1.1.0: resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -7678,7 +7673,7 @@ is-cidr@^4.0.2: dependencies: cidr-regex "^3.1.1" -is-core-module@^2.10.0, is-core-module@^2.8.1, is-core-module@^2.9.0: +is-core-module@^2.10.0, is-core-module@^2.11.0, is-core-module@^2.8.1, is-core-module@^2.9.0: version "2.11.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== @@ -9034,14 +9029,6 @@ localforage@^1.8.1: dependencies: lie "3.1.1" -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -10232,7 +10219,7 @@ object.pick@^1.2.0: dependencies: isobject "^3.0.1" -object.values@^1.1.5, object.values@^1.1.6: +object.values@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== @@ -10389,13 +10376,6 @@ p-is-promise@^1.1.0: resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" integrity sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg== -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -10410,13 +10390,6 @@ p-limit@^3.0.2, p-limit@^3.1.0: dependencies: yocto-queue "^0.1.0" -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -10460,11 +10433,6 @@ p-timeout@^2.0.1: dependencies: p-finally "^1.0.0" -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - p-try@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" @@ -11602,7 +11570,7 @@ resolve.exports@^1.1.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.12.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.22.1, resolve@^1.9.0: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.12.0, resolve@^1.20.0, resolve@^1.22.1, resolve@^1.9.0: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== From 875972e1ee8ecedfc072972a40983d5ee5621a53 Mon Sep 17 00:00:00 2001 From: Roman Date: Fri, 13 Jan 2023 16:14:07 +0200 Subject: [PATCH 02/37] Better handling loading terminal fonts (#6913) * better handling loading terminal fonts timing issues, fix #5019 Signed-off-by: Roman * refactoring, loading all terminal fonts to earliest stage app starting Signed-off-by: Roman * attempt to fix tests Signed-off-by: Roman Signed-off-by: Roman --- ...ation-to-terminal-preferences.test.ts.snap | 2 +- .../terminal-font-family.tsx | 42 +++++----- src/renderer/components/app.scss | 16 ---- .../terminal/create-terminal.injectable.ts | 3 +- ...al-fonts.global-override-for-injectable.ts | 14 ++++ .../terminal/terminal-fonts.injectable.ts | 78 +++++++++++++++++++ src/renderer/components/fonts.scss | 55 ------------- src/renderer/template.html | 11 --- 8 files changed, 116 insertions(+), 105 deletions(-) create mode 100644 src/renderer/components/dock/terminal/terminal-fonts.global-override-for-injectable.ts create mode 100644 src/renderer/components/dock/terminal/terminal-fonts.injectable.ts diff --git a/src/features/preferences/__snapshots__/navigation-to-terminal-preferences.test.ts.snap b/src/features/preferences/__snapshots__/navigation-to-terminal-preferences.test.ts.snap index 0fe8c4df2c..0c485b5f27 100644 --- a/src/features/preferences/__snapshots__/navigation-to-terminal-preferences.test.ts.snap +++ b/src/features/preferences/__snapshots__/navigation-to-terminal-preferences.test.ts.snap @@ -1141,7 +1141,7 @@ exports[`preferences - navigation to terminal preferences given in preferences, class="Select__single-value css-1dimb5e-singleValue" > RobotoMono diff --git a/src/features/preferences/renderer/preference-items/terminal/terminal-font-family/terminal-font-family.tsx b/src/features/preferences/renderer/preference-items/terminal/terminal-font-family/terminal-font-family.tsx index 14bc5efacd..7ff161862e 100644 --- a/src/features/preferences/renderer/preference-items/terminal/terminal-font-family/terminal-font-family.tsx +++ b/src/features/preferences/renderer/preference-items/terminal/terminal-font-family/terminal-font-family.tsx @@ -13,26 +13,29 @@ import { Select } from "../../../../../../renderer/components/select"; import type { Logger } from "../../../../../../common/logger"; import { action } from "mobx"; import loggerInjectable from "../../../../../../common/logger.injectable"; +import { + terminalFontsInjectable, +} from "../../../../../../renderer/components/dock/terminal/terminal-fonts.injectable"; interface Dependencies { userStore: UserStore; logger: Logger; + terminalFonts: Map; } const NonInjectedTerminalFontFamily = observer( - ({ userStore, logger }: Dependencies) => { - - // fonts must be declared in `fonts.scss` and at `template.html` (if early-preloading required) - const supportedCustomFonts: SelectOption[] = [ - "RobotoMono", "Anonymous Pro", "IBM Plex Mono", "JetBrains Mono", "Red Hat Mono", - "Source Code Pro", "Space Mono", "Ubuntu Mono", - ].map(customFont => { + ({ userStore, logger, terminalFonts }: Dependencies) => { + const bundledFonts: SelectOption[] = Array.from(terminalFonts.keys()).map(font => { const { fontFamily, fontSize } = userStore.terminalConfig; return { - label: {customFont}, - value: customFont, - isSelected: fontFamily === customFont, + label: ( + + {font} + + ), + value: font, + isSelected: fontFamily === font, }; }); @@ -50,7 +53,7 @@ const NonInjectedTerminalFontFamily = observer( themeName="lens" controlShouldRenderValue value={userStore.terminalConfig.fontFamily} - options={supportedCustomFonts} + options={bundledFonts} onChange={onFontFamilyChange as any} /> @@ -58,13 +61,10 @@ const NonInjectedTerminalFontFamily = observer( }, ); -export const TerminalFontFamily = withInjectables( - NonInjectedTerminalFontFamily, - - { - getProps: (di) => ({ - userStore: di.inject(userStoreInjectable), - logger: di.inject(loggerInjectable), - }), - }, -); +export const TerminalFontFamily = withInjectables(NonInjectedTerminalFontFamily, { + getProps: (di) => ({ + userStore: di.inject(userStoreInjectable), + logger: di.inject(loggerInjectable), + terminalFonts: di.inject(terminalFontsInjectable), + }), +}); diff --git a/src/renderer/components/app.scss b/src/renderer/components/app.scss index f44d1ee165..b8dd5007b1 100755 --- a/src/renderer/components/app.scss +++ b/src/renderer/components/app.scss @@ -232,22 +232,6 @@ iframe { } } -#fonts-preloading { - > span { - position: absolute; - visibility: hidden; - height: 0; - - &:before { - width: 0; - display: block; - overflow: hidden; - content: "text-example"; // some text required to start applying/rendering font in document - font-family: inherit; // font-family must be specified via style="" (see: template.html) - } - } -} - // app's common loading indicator, displaying on the route transitions #loading { position: absolute; diff --git a/src/renderer/components/dock/terminal/create-terminal.injectable.ts b/src/renderer/components/dock/terminal/create-terminal.injectable.ts index 27c7c0664a..2ff82e2c17 100644 --- a/src/renderer/components/dock/terminal/create-terminal.injectable.ts +++ b/src/renderer/components/dock/terminal/create-terminal.injectable.ts @@ -9,7 +9,8 @@ import type { TabId } from "../dock/store"; import type { TerminalApi } from "../../../api/terminal-api"; import terminalSpawningPoolInjectable from "./terminal-spawning-pool.injectable"; import terminalConfigInjectable from "../../../../common/user-store/terminal-config.injectable"; -import terminalCopyOnSelectInjectable from "../../../../common/user-store/terminal-copy-on-select.injectable"; +import terminalCopyOnSelectInjectable + from "../../../../common/user-store/terminal-copy-on-select.injectable"; import isMacInjectable from "../../../../common/vars/is-mac.injectable"; import openLinkInBrowserInjectable from "../../../../common/utils/open-link-in-browser.injectable"; import xtermColorThemeInjectable from "../../../themes/terminal-colors.injectable"; diff --git a/src/renderer/components/dock/terminal/terminal-fonts.global-override-for-injectable.ts b/src/renderer/components/dock/terminal/terminal-fonts.global-override-for-injectable.ts new file mode 100644 index 0000000000..eb549af384 --- /dev/null +++ b/src/renderer/components/dock/terminal/terminal-fonts.global-override-for-injectable.ts @@ -0,0 +1,14 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getGlobalOverride } from "../../../../common/test-utils/get-global-override"; +import { preloadAllTerminalFontsInjectable } from "./terminal-fonts.injectable"; + +export default getGlobalOverride(preloadAllTerminalFontsInjectable, () => { + return { + id: "", + async run() { + }, + }; +}); diff --git a/src/renderer/components/dock/terminal/terminal-fonts.injectable.ts b/src/renderer/components/dock/terminal/terminal-fonts.injectable.ts new file mode 100644 index 0000000000..1609f8b411 --- /dev/null +++ b/src/renderer/components/dock/terminal/terminal-fonts.injectable.ts @@ -0,0 +1,78 @@ +/** + * 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 { beforeFrameStartsFirstInjectionToken } from "../../../before-frame-starts/tokens"; +import RobotoMono from "../../../fonts/Roboto-Mono-nerd.ttf"; // patched font with icons +import AnonymousPro from "../../../fonts/AnonymousPro-Regular.ttf"; +import IBMPlexMono from "../../../fonts/IBMPlexMono-Regular.ttf"; +import JetBrainsMono from "../../../fonts/JetBrainsMono-Regular.ttf"; +import RedHatMono from "../../../fonts/RedHatMono-Regular.ttf"; +import SourceCodePro from "../../../fonts/SourceCodePro-Regular.ttf"; +import SpaceMono from "../../../fonts/SpaceMono-Regular.ttf"; +import UbuntuMono from "../../../fonts/UbuntuMono-Regular.ttf"; + +export const terminalFontsInjectable = getInjectable({ + id: "terminalFontsInjectable", + + instantiate() { + return new Map([ + ["RobotoMono", RobotoMono], + ["Anonymous Pro", AnonymousPro], + ["IBM Plex Mono", IBMPlexMono], + ["JetBrains Mono", JetBrainsMono], + ["Red Hat Mono", RedHatMono], + ["Source Code Pro", SourceCodePro], + ["Space Mono", SpaceMono], + ["Ubuntu Mono", UbuntuMono], + ]); + }, +}); + + +export const preloadTerminalFontInjectable = getInjectable({ + id: "preloadTerminalFontInjectable", + + instantiate(di) { + const terminalFonts = di.inject(terminalFontsInjectable); + + return async function (fontFamily: string): Promise { + const fontBundledPath = terminalFonts.get(fontFamily); + const fontLoaded = document.fonts.check(`10px ${fontFamily}`); + + if (fontLoaded || !fontBundledPath) return; + + const font = new FontFace(fontFamily, `url(${fontBundledPath})`); + + document.fonts.add(font); + await font.load(); + }; + }, + + causesSideEffects: true, +}); + +export const preloadAllTerminalFontsInjectable = getInjectable({ + id: "preloadAllTerminalFontsInjectable", + + instantiate(di) { + const terminalFonts = di.inject(terminalFontsInjectable); + const preloadFont = di.inject(preloadTerminalFontInjectable); + + return { + id: "preload-all-terminal-fonts", + + async run() { + await Promise.allSettled( + Array.from(terminalFonts.keys()).map(preloadFont), + ); + }, + }; + }, + + injectionToken: beforeFrameStartsFirstInjectionToken, + + causesSideEffects: true, +}); diff --git a/src/renderer/components/fonts.scss b/src/renderer/components/fonts.scss index 40f9e9625b..ebbe2894dc 100644 --- a/src/renderer/components/fonts.scss +++ b/src/renderer/components/fonts.scss @@ -44,58 +44,3 @@ font-display: block; src: url("../fonts/MaterialIcons-Regular.ttf") format("truetype"); } - - -// Terminal fonts (monospaced) -// Source: https://fonts.google.com/?category=Monospace -@font-face { - font-family: "Anonymous Pro"; - src: local("Anonymous Pro"), url("../fonts/AnonymousPro-Regular.ttf") format("truetype"); - font-display: block; -} - -@font-face { - font-family: "IBM Plex Mono"; - src: local("IBM Plex Mono"), url("../fonts/IBMPlexMono-Regular.ttf") format("truetype"); - font-display: block; -} - -@font-face { - font-family: "JetBrains Mono"; - src: local("JetBrains Mono"), url("../fonts/JetBrainsMono-Regular.ttf") format("truetype"); - font-display: block; -} - -@font-face { - font-family: "Red Hat Mono"; - src: local("Red Hat Mono"), url("../fonts/RedHatMono-Regular.ttf") format("truetype"); - font-display: block; -} - - -@font-face { - font-family: "Source Code Pro"; - src: local("Source Code Pro"), url("../fonts/SourceCodePro-Regular.ttf") format("truetype"); - font-display: block; -} - -@font-face { - font-family: "Space Mono"; - src: local("Space Mono"), url("../fonts/SpaceMono-Regular.ttf") format("truetype"); - font-display: block; -} - -@font-face { - font-family: "Ubuntu Mono"; - src: local("Ubuntu Mono"), url("../fonts/UbuntuMono-Regular.ttf") format("truetype"); - font-display: block; -} - -// Patched RobotoMono font with icons -// RobotoMono Windows Compatible for using in terminal -// https://github.com/ryanoasis/nerd-fonts/tree/master/patched-fonts/RobotoMono -@font-face { - font-family: "RobotoMono"; - src: local("RobotoMono"), url("../fonts/Roboto-Mono-nerd.ttf") format("truetype"); - font-display: block; -} diff --git a/src/renderer/template.html b/src/renderer/template.html index 5860854d9a..87ea5dca3d 100755 --- a/src/renderer/template.html +++ b/src/renderer/template.html @@ -5,17 +5,6 @@
-
- - - - - - - - - -
From c361852dd2ebe1cf6ab8bb7fcf8f19aba727e1a5 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Fri, 13 Jan 2023 06:59:13 -0800 Subject: [PATCH 03/37] Release 6.4.0-alpha.3 (#6935) Signed-off-by: Sebastian Malton Signed-off-by: Sebastian Malton --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b7804e661e..e6be0e127f 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "productName": "OpenLens", "description": "OpenLens - Open Source IDE for Kubernetes", "homepage": "https://github.com/lensapp/lens", - "version": "6.4.0-alpha.2", + "version": "6.4.0-alpha.3", "repository": { "type": "git", "url": "git+https://github.com/lensapp/lens.git" From 90c8e8e70c6ca8a6b15e8c9587a961a3441aaedb Mon Sep 17 00:00:00 2001 From: Panu Horsmalahti Date: Mon, 16 Jan 2023 14:27:25 +0200 Subject: [PATCH 04/37] Fix Notifications extension API (#6946) * Fix Notifications extension API Signed-off-by: Panu Horsmalahti * Only export specific types and values. Signed-off-by: Panu Horsmalahti Signed-off-by: Panu Horsmalahti --- src/extensions/renderer-api/components.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/extensions/renderer-api/components.ts b/src/extensions/renderer-api/components.ts index dc8c52053d..e4102433bf 100644 --- a/src/extensions/renderer-api/components.ts +++ b/src/extensions/renderer-api/components.ts @@ -73,14 +73,14 @@ export * from "../../renderer/components/dialog"; export * from "../../renderer/components/line-progress"; export * from "../../renderer/components/menu"; -export type { - CreateNotificationOptions, - Notification, - NotificationId, - NotificationMessage, +export { NotificationStatus, - ShowNotification, - NotificationsStore, + type CreateNotificationOptions, + type Notification, + type NotificationId, + type NotificationMessage, + type ShowNotification, + type NotificationsStore, } from "../../renderer/components/notifications"; export const Notifications = { From 096715915c8703155fc50aadec1d12fde64c0726 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Mon, 16 Jan 2023 04:52:44 -0800 Subject: [PATCH 05/37] Fix not being able to add new Kubeconfig syncs (#6938) Signed-off-by: Sebastian Malton Signed-off-by: Sebastian Malton --- ...kubernetes-cluster-catalog-add-menu.injectable.ts | 1 - .../initializers/add-sync-entries.injectable.tsx | 12 ++++-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/src/renderer/before-frame-starts/runnables/setup-kubernetes-cluster-catalog-add-menu.injectable.ts b/src/renderer/before-frame-starts/runnables/setup-kubernetes-cluster-catalog-add-menu.injectable.ts index 20566b5dac..5d6efad5eb 100644 --- a/src/renderer/before-frame-starts/runnables/setup-kubernetes-cluster-catalog-add-menu.injectable.ts +++ b/src/renderer/before-frame-starts/runnables/setup-kubernetes-cluster-catalog-add-menu.injectable.ts @@ -16,7 +16,6 @@ const setupKubernetesClusterCatalogAddMenuListenerInjectable = getInjectable({ instantiate: (di) => ({ id: "setup-kubernetes-cluster-catalog-add-menu-listener", run: () => { - // NOTE: these have to be here so that they are initialized only after the `runAfter` is ran const navigateToAddCluster = di.inject(navigateToAddClusterInjectable); const addSyncEntries = di.inject(addSyncEntriesInjectable); const kubernetesClusterCategory = di.inject(kubernetesClusterCategoryInjectable); diff --git a/src/renderer/initializers/add-sync-entries.injectable.tsx b/src/renderer/initializers/add-sync-entries.injectable.tsx index 5190bac73a..2f9f3ec74e 100644 --- a/src/renderer/initializers/add-sync-entries.injectable.tsx +++ b/src/renderer/initializers/add-sync-entries.injectable.tsx @@ -6,8 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import userStoreInjectable from "../../common/user-store/user-store.injectable"; import React from "react"; import navigateToKubernetesPreferencesInjectable from "../../features/preferences/common/navigate-to-kubernetes-preferences.injectable"; -import discoverAllKubeconfigSyncKindsInjectable from "../../features/preferences/renderer/preference-items/kubernetes/kubeconfig-sync/discover-all-sync-kinds.injectable"; -import { action } from "mobx"; +import { runInAction } from "mobx"; import showSuccessNotificationInjectable from "../components/notifications/show-success-notification.injectable"; const addSyncEntriesInjectable = getInjectable({ @@ -16,14 +15,11 @@ const addSyncEntriesInjectable = getInjectable({ instantiate: (di) => { const userStore = di.inject(userStoreInjectable); const navigateToKubernetesPreferences = di.inject(navigateToKubernetesPreferencesInjectable); - const discoverAllKubeconfigSyncKinds = di.inject(discoverAllKubeconfigSyncKindsInjectable); const showSuccessNotification = di.inject(showSuccessNotificationInjectable); - return async (filePaths: string[]) => { - const kinds = await discoverAllKubeconfigSyncKinds(filePaths); - - action(() => { - for (const [path] of kinds) { + return async (paths: string[]) => { + runInAction(() => { + for (const path of paths) { userStore.syncKubeconfigEntries.set(path, {}); } }); From 56972dcda54abf34935c8a3568345bba7872d1e1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jan 2023 09:07:40 -0500 Subject: [PATCH 06/37] Bump esbuild from 0.16.17 to 0.17.0 (#6945) Bumps [esbuild](https://github.com/evanw/esbuild) from 0.16.17 to 0.17.0. - [Release notes](https://github.com/evanw/esbuild/releases) - [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md) - [Commits](https://github.com/evanw/esbuild/compare/v0.16.17...v0.17.0) --- updated-dependencies: - dependency-name: esbuild dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 228 +++++++++++++++++++++++++-------------------------- 2 files changed, 115 insertions(+), 115 deletions(-) diff --git a/package.json b/package.json index e6be0e127f..fb0bbca030 100644 --- a/package.json +++ b/package.json @@ -387,7 +387,7 @@ "electron": "^19.1.9", "electron-builder": "^23.6.0", "electron-notarize": "^0.3.0", - "esbuild": "^0.16.17", + "esbuild": "^0.17.0", "esbuild-loader": "^2.20.0", "eslint": "^8.31.0", "eslint-import-resolver-typescript": "^3.5.3", diff --git a/yarn.lock b/yarn.lock index 43aa9f0dfa..eca0d59f87 100644 --- a/yarn.lock +++ b/yarn.lock @@ -598,125 +598,125 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== -"@esbuild/android-arm64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz#cf91e86df127aa3d141744edafcba0abdc577d23" - integrity sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg== +"@esbuild/android-arm64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.0.tgz#dd4c28274f08a16be95430d19fc0dab835fd2eae" + integrity sha512-77GVyD7ToESy/7+9eI8z62GGBdS/hsqsrpM+JA4kascky86wHbN29EEFpkVvxajPL7k6mbLJ5VBQABdj7n9FhQ== "@esbuild/android-arm@0.15.18": version "0.15.18" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.18.tgz#266d40b8fdcf87962df8af05b76219bc786b4f80" integrity sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw== -"@esbuild/android-arm@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz#025b6246d3f68b7bbaa97069144fb5fb70f2fff2" - integrity sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw== +"@esbuild/android-arm@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.0.tgz#10d289617902f877a28f9f7913f4f54a4e699875" + integrity sha512-hlbX5ym1V5kIKvnwFhm6rhar7MNqfJrZyYTNfk6+WS1uQfQmszFgXeyPH2beP3lSCumZyqX0zMBfOqftOpZ7GA== -"@esbuild/android-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz#c820e0fef982f99a85c4b8bfdd582835f04cd96e" - integrity sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ== +"@esbuild/android-x64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.0.tgz#b0c124e434cec1a6551b400850458c860a30ecb4" + integrity sha512-TroxZdZhtAz0JyD0yahtjcbKuIXrBEAoAazaYSeR2e2tUtp9uXrcbpwFJF6oxxOiOOne6y7l4hx4YVnMW/tdFw== -"@esbuild/darwin-arm64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz#edef4487af6b21afabba7be5132c26d22379b220" - integrity sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w== +"@esbuild/darwin-arm64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.0.tgz#4a1b65e756cc29e8d68a5ace0a2eb1c63614a767" + integrity sha512-wP/v4cgdWt1m8TS/WmbaBc3NZON10eCbm6XepdVc3zJuqruHCzCKcC9dTSTEk50zX04REcRcbIbdhTMciQoFIg== -"@esbuild/darwin-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz#42829168730071c41ef0d028d8319eea0e2904b4" - integrity sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg== +"@esbuild/darwin-x64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.0.tgz#9a59890391f17cd3998d2c7959ea70a1aad28c93" + integrity sha512-R4WB6D6V9KGO/3LVTT8UlwRJO26IBFatOdo/bRXksfJR0vyOi2/lgmAAMBSpgcnnwvts9QsWiyM++mTTlwRseA== -"@esbuild/freebsd-arm64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz#1f4af488bfc7e9ced04207034d398e793b570a27" - integrity sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw== +"@esbuild/freebsd-arm64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.0.tgz#3412ffa1703c991b4d562176881fb43a9ee6f7e3" + integrity sha512-FO7+UEZv79gen2df8StFYFHZPI9ADozpFepLZCxY+O8sYLDa1rirvenmLwJiOHmeQRJ5orYedFeLk1PFlZ6t8Q== -"@esbuild/freebsd-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz#636306f19e9bc981e06aa1d777302dad8fddaf72" - integrity sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug== +"@esbuild/freebsd-x64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.0.tgz#427f2a07c997fb30f1a8906b070e28959f38f1e2" + integrity sha512-qCsNRsVTaC3ekwZcb2sa7l1gwCtJK3EqCWyDgpoQocYf3lRpbAzaCvqZSF2+NOO64cV+JbedXPsFiXU1aaVcIg== -"@esbuild/linux-arm64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz#a003f7ff237c501e095d4f3a09e58fc7b25a4aca" - integrity sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g== +"@esbuild/linux-arm64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.0.tgz#0e32c6a6b290406b1203854c2d594987570dd66c" + integrity sha512-js4Vlch5XJQYISbDVJd2hsI/MsfVUz6d/FrclCE73WkQmniH37vFpuQI42ntWAeBghDIfaPZ6f9GilhwGzVFUg== -"@esbuild/linux-arm@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz#b591e6a59d9c4fe0eeadd4874b157ab78cf5f196" - integrity sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ== +"@esbuild/linux-arm@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.0.tgz#5a70a95bf336035884dee123b5453aeab9c608f3" + integrity sha512-Y2G2NU6155gcfNKvrakVmZV5xUAEhXjsN/uKtbKKRnvee0mHUuaT3OdQJDJKjHVGr6B0898pc3slRpI1PqspoQ== -"@esbuild/linux-ia32@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz#24333a11027ef46a18f57019450a5188918e2a54" - integrity sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg== +"@esbuild/linux-ia32@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.0.tgz#47baca8e733405a81952bcc475da1b8e5682915f" + integrity sha512-7tl/jSPkF59R3zeFDB2/09zLGhcM7DM+tCoOqjJbQjuL6qbMWomGT2RglCqRFpCSdzBx0hukmPPgUAMlmdj0sQ== "@esbuild/linux-loong64@0.15.18": version "0.15.18" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz#128b76ecb9be48b60cf5cfc1c63a4f00691a3239" integrity sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ== -"@esbuild/linux-loong64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz#d5ad459d41ed42bbd4d005256b31882ec52227d8" - integrity sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ== +"@esbuild/linux-loong64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.0.tgz#809398ca125ba3b57d4d12d261f2471ac32b1edb" + integrity sha512-OG356F7dIVVF+EXJx5UfzFr1I5l6ES53GlMNSr3U1MhlaVyrP9um5PnrSJ+7TSDAzUC7YGjxb2GQWqHLd5XFoA== -"@esbuild/linux-mips64el@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz#4e5967a665c38360b0a8205594377d4dcf9c3726" - integrity sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw== +"@esbuild/linux-mips64el@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.0.tgz#94b50097a3421ff538eb6a41cd4fb5db4c4993ff" + integrity sha512-LWQJgGpxrjh2x08UYf6G5R+Km7zhkpCvKXtFQ6SX0fimDvy1C8kslgFHGxLS0wjGV8C4BNnENW/HNy57+RB7iA== -"@esbuild/linux-ppc64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz#206443a02eb568f9fdf0b438fbd47d26e735afc8" - integrity sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g== +"@esbuild/linux-ppc64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.0.tgz#3a580bc8b494d3b273cf08a3bb0d893b31b786ae" + integrity sha512-f40N8fKiTQslUcUuhof2/syOQ+DC9Mqdnm9d063pew+Ptv9r6dBNLQCz4300MOfCLAbb0SdnrcMSzHbMehXWLw== -"@esbuild/linux-riscv64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz#c351e433d009bf256e798ad048152c8d76da2fc9" - integrity sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw== +"@esbuild/linux-riscv64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.0.tgz#bf75f769e5fa35d143bc5759520e4277b3a95bcc" + integrity sha512-sc/pvLexRvxgEbmeq7LfLGnzUBFi/E2MGbnQj3CG8tnQ90tWPTi+9CbZEgIADhj6CAlCCmqxpUclIV1CRVUOTw== -"@esbuild/linux-s390x@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz#661f271e5d59615b84b6801d1c2123ad13d9bd87" - integrity sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w== +"@esbuild/linux-s390x@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.0.tgz#ad6569476d6751cc9255fe059a5e074a08dd3e27" + integrity sha512-7xq9/kY0vunCL2vjHKdHGI+660pCdeEC6K6TWBVvbTGXvT8s/qacfxMgr8PCeQRbNUZLOA13G6/G1+c0lYXO1A== -"@esbuild/linux-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz#e4ba18e8b149a89c982351443a377c723762b85f" - integrity sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw== +"@esbuild/linux-x64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.0.tgz#7e38c248b8c9f39240c0914872f93893bde7182a" + integrity sha512-o7FhBLONk1mLT2ytlj/j/WuJcPdhWcVpysSJn1s9+zRdLwLKveipbPi5SIasJIqMq0T4CkQW76pxJYMqz9HrQA== -"@esbuild/netbsd-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz#7d4f4041e30c5c07dd24ffa295c73f06038ec775" - integrity sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA== +"@esbuild/netbsd-x64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.0.tgz#46e770aa6a14dad73d2cdf6a9521585eca1005ef" + integrity sha512-V6xXsv71b8vwFCW/ky82Rs//SbyA+ORty6A7Mzkg33/4NbYZ/1Vcbk7qAN5oi0i/gS4Q0+7dYT7NqaiVZ7+Xjw== -"@esbuild/openbsd-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz#970fa7f8470681f3e6b1db0cc421a4af8060ec35" - integrity sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg== +"@esbuild/openbsd-x64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.0.tgz#5d4070663448db20d3de42f7a44a2c2dd0cac847" + integrity sha512-StlQor6A0Y9SSDxraytr46Qbz25zsSDmsG3MCaNkBnABKHP3QsngOCfdBikqHVVrXeK0KOTmtX92/ncTGULYgQ== -"@esbuild/sunos-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz#abc60e7c4abf8b89fb7a4fe69a1484132238022c" - integrity sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw== +"@esbuild/sunos-x64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.0.tgz#4a77dbf1691ce2fd9aba69f58248d46f3e28f98b" + integrity sha512-K64Wqw57j8KrwjR3QjsuzN/qDGK6Cno6QYtIlWAmGab5iYPBZCWz7HFtF2a86/130LmUsdXqOID7J0SmjjRFIQ== -"@esbuild/win32-arm64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz#7b0ff9e8c3265537a7a7b1fd9a24e7bd39fcd87a" - integrity sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw== +"@esbuild/win32-arm64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.0.tgz#9b7cb6839240cd4408fbca6565c6a08e277d73bb" + integrity sha512-hly6iSWAf0hf3aHD18/qW7iFQbg9KAQ0RFGG9plcxkhL4uGw43O+lETGcSO/PylNleFowP/UztpF6U4oCYgpPw== -"@esbuild/win32-ia32@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz#e90fe5267d71a7b7567afdc403dfd198c292eb09" - integrity sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig== +"@esbuild/win32-ia32@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.0.tgz#059a1651b830bfc188920487badd12a8e1b8f050" + integrity sha512-aL4EWPh0nyC5uYRfn+CHkTgawd4DjtmwquthNDmGf6Ht6+mUc+bQXyZNH1QIw8x20hSqFc4Tf36aLLWP/TPR3g== -"@esbuild/win32-x64@0.16.17": - version "0.16.17" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz#c5a1a4bfe1b57f0c3e61b29883525c6da3e5c091" - integrity sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q== +"@esbuild/win32-x64@0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.0.tgz#d2253fef7e7cd11f010f688fa4f5ebb2875f34c1" + integrity sha512-W6IIQ9Rt43I/GqfXeBFLk0TvowKBoirs9sw2LPfhHax6ayMlW5PhFzSJ76I1ac9Pk/aRcSMrHWvVyZs8ZPK2wA== "@eslint/eslintrc@^1.4.1": version "1.4.1" @@ -5762,33 +5762,33 @@ esbuild@^0.15.6: esbuild-windows-64 "0.15.18" esbuild-windows-arm64 "0.15.18" -esbuild@^0.16.17: - version "0.16.17" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.16.17.tgz#fc2c3914c57ee750635fee71b89f615f25065259" - integrity sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg== +esbuild@^0.17.0: + version "0.17.0" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.0.tgz#fcf19373d1d546bdbec1557276284c0e6350380b" + integrity sha512-4yGk3rD95iS/wGzrx0Ji5czZcx1j2wvfF1iAJaX2FIYLB6sU6wYkDeplpZHzfwQw2yXGXsAoxmO6LnMQkl04Kg== optionalDependencies: - "@esbuild/android-arm" "0.16.17" - "@esbuild/android-arm64" "0.16.17" - "@esbuild/android-x64" "0.16.17" - "@esbuild/darwin-arm64" "0.16.17" - "@esbuild/darwin-x64" "0.16.17" - "@esbuild/freebsd-arm64" "0.16.17" - "@esbuild/freebsd-x64" "0.16.17" - "@esbuild/linux-arm" "0.16.17" - "@esbuild/linux-arm64" "0.16.17" - "@esbuild/linux-ia32" "0.16.17" - "@esbuild/linux-loong64" "0.16.17" - "@esbuild/linux-mips64el" "0.16.17" - "@esbuild/linux-ppc64" "0.16.17" - "@esbuild/linux-riscv64" "0.16.17" - "@esbuild/linux-s390x" "0.16.17" - "@esbuild/linux-x64" "0.16.17" - "@esbuild/netbsd-x64" "0.16.17" - "@esbuild/openbsd-x64" "0.16.17" - "@esbuild/sunos-x64" "0.16.17" - "@esbuild/win32-arm64" "0.16.17" - "@esbuild/win32-ia32" "0.16.17" - "@esbuild/win32-x64" "0.16.17" + "@esbuild/android-arm" "0.17.0" + "@esbuild/android-arm64" "0.17.0" + "@esbuild/android-x64" "0.17.0" + "@esbuild/darwin-arm64" "0.17.0" + "@esbuild/darwin-x64" "0.17.0" + "@esbuild/freebsd-arm64" "0.17.0" + "@esbuild/freebsd-x64" "0.17.0" + "@esbuild/linux-arm" "0.17.0" + "@esbuild/linux-arm64" "0.17.0" + "@esbuild/linux-ia32" "0.17.0" + "@esbuild/linux-loong64" "0.17.0" + "@esbuild/linux-mips64el" "0.17.0" + "@esbuild/linux-ppc64" "0.17.0" + "@esbuild/linux-riscv64" "0.17.0" + "@esbuild/linux-s390x" "0.17.0" + "@esbuild/linux-x64" "0.17.0" + "@esbuild/netbsd-x64" "0.17.0" + "@esbuild/openbsd-x64" "0.17.0" + "@esbuild/sunos-x64" "0.17.0" + "@esbuild/win32-arm64" "0.17.0" + "@esbuild/win32-ia32" "0.17.0" + "@esbuild/win32-x64" "0.17.0" escalade@^3.1.1: version "3.1.1" From e1abea0488f7c18e1d4ee02e5eae5fef030ad1a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jan 2023 09:08:06 -0500 Subject: [PATCH 07/37] Bump marked from 4.2.5 to 4.2.12 (#6942) Bumps [marked](https://github.com/markedjs/marked) from 4.2.5 to 4.2.12. - [Release notes](https://github.com/markedjs/marked/releases) - [Changelog](https://github.com/markedjs/marked/blob/master/.releaserc.json) - [Commits](https://github.com/markedjs/marked/compare/v4.2.5...v4.2.12) --- updated-dependencies: - dependency-name: marked dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index fb0bbca030..ca887d19f6 100644 --- a/package.json +++ b/package.json @@ -267,7 +267,7 @@ "js-yaml": "^4.1.0", "jsdom": "^16.7.0", "lodash": "^4.17.15", - "marked": "^4.2.5", + "marked": "^4.2.12", "md5-file": "^5.0.0", "mobx": "^6.7.0", "mobx-observable-history": "^2.0.3", diff --git a/yarn.lock b/yarn.lock index eca0d59f87..42d3106fed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9296,10 +9296,10 @@ markdown@^0.5.0: dependencies: nopt "~2.1.1" -marked@^4.2.5: - version "4.2.5" - resolved "https://registry.yarnpkg.com/marked/-/marked-4.2.5.tgz#979813dfc1252cc123a79b71b095759a32f42a5d" - integrity sha512-jPueVhumq7idETHkb203WDD4fMA3yV9emQ5vLwop58lu8bTclMghBWcYAavlDqIEMaisADinV1TooIFCfqOsYQ== +marked@^4.2.12, marked@^4.2.5: + version "4.2.12" + resolved "https://registry.yarnpkg.com/marked/-/marked-4.2.12.tgz#d69a64e21d71b06250da995dcd065c11083bebb5" + integrity sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw== matcher-collection@^2.0.0: version "2.0.1" From 5c9dc034b7b5f79d94523431bbd9ca48b5dfddf7 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Mon, 16 Jan 2023 07:04:43 -0800 Subject: [PATCH 08/37] Fix extension API (#6947) - Make sure that dependency constructors are not exported - Readd `KubeJsonApi.forCluster` Signed-off-by: Sebastian Malton Signed-off-by: Sebastian Malton --- src/extensions/common-api/k8s-api.ts | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/extensions/common-api/k8s-api.ts b/src/extensions/common-api/k8s-api.ts index c24f7d14e3..3150c920f6 100644 --- a/src/extensions/common-api/k8s-api.ts +++ b/src/extensions/common-api/k8s-api.ts @@ -27,6 +27,10 @@ import { getLegacyGlobalDiForExtensionApi } from "../as-legacy-globals-for-exten import maybeKubeApiInjectable from "../../common/k8s-api/maybe-kube-api.injectable"; import { DeploymentApi as InternalDeploymentApi, IngressApi as InternalIngressApi, NodeApi, PersistentVolumeClaimApi, PodApi } from "../../common/k8s-api/endpoints"; import { storesAndApisCanBeCreatedInjectionToken } from "../../common/k8s-api/stores-apis-can-be-created.token"; +import type { JsonApiConfig } from "../../common/k8s-api/json-api"; +import type { KubeJsonApi as InternalKubeJsonApi } from "../../common/k8s-api/kube-json-api"; +import createKubeJsonApiInjectable from "../../common/k8s-api/create-kube-json-api.injectable"; +import type { RequestInit } from "node-fetch"; export const apiManager = asLegacyGlobalForExtensionApi(apiManagerInjectable); export const forCluster = asLegacyGlobalFunctionForExtensionApi(createKubeApiForClusterInjectable); @@ -107,11 +111,24 @@ export { type KubeStatusData, } from "../../common/k8s-api/kube-object"; -export { - KubeJsonApi, - type KubeJsonApiData, +export type { + KubeJsonApiData, } from "../../common/k8s-api/kube-json-api"; +function KubeJsonApiCstr(config: JsonApiConfig, reqInit?: RequestInit) { + const di = getLegacyGlobalDiForExtensionApi(); + const createKubeJsonApi = di.inject(createKubeJsonApiInjectable); + + return createKubeJsonApi(config, reqInit); +} + +export const KubeJsonApi = Object.assign( + KubeJsonApiCstr as unknown as new (config: JsonApiConfig, reqInit?: RequestInit) => InternalKubeJsonApi, + { + forCluster, + }, +); + export abstract class KubeObjectStore< K extends KubeObject = KubeObject, A extends InternalKubeApi = InternalKubeApi>, From 05d3b2efa3c6948f8127f0dacdccf6fc557410da Mon Sep 17 00:00:00 2001 From: Roman Date: Mon, 16 Jan 2023 18:12:10 +0200 Subject: [PATCH 09/37] Improvements and more stability in support HMR/live-reload Signed-off-by: Roman Signed-off-by: Roman --- webpack/dev-server.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/webpack/dev-server.ts b/webpack/dev-server.ts index 68fd72bb35..1f6bc425b4 100644 --- a/webpack/dev-server.ts +++ b/webpack/dev-server.ts @@ -25,19 +25,19 @@ const server = new WebpackDevServer({ host: "localhost", port: webpackDevServerPort, static: buildDir, // aka `devServer.contentBase` in webpack@4 - hot: "only", // use HMR only without errors + hot: true, liveReload: false, + historyApiFallback: true, + compress: true, // enable gzip for everything served devMiddleware: { writeToDisk: false, index: "OpenLensDev.html", publicPath: "/build", }, - proxy: { - "^/$": "/build/", - }, client: { + reconnect: true, overlay: false, // don't show warnings and errors on top of rendered app view - logging: "error", + logging: "info", }, }, compiler); From a95fc7bfbfd4447ee1b3df7e42a28a532f50cf41 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jan 2023 11:20:24 -0500 Subject: [PATCH 10/37] Bump eslint from 8.31.0 to 8.32.0 (#6943) Bumps [eslint](https://github.com/eslint/eslint) from 8.31.0 to 8.32.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.31.0...v8.32.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index ca887d19f6..8854f3fb4f 100644 --- a/package.json +++ b/package.json @@ -389,7 +389,7 @@ "electron-notarize": "^0.3.0", "esbuild": "^0.17.0", "esbuild-loader": "^2.20.0", - "eslint": "^8.31.0", + "eslint": "^8.32.0", "eslint-import-resolver-typescript": "^3.5.3", "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.27.4", diff --git a/yarn.lock b/yarn.lock index 42d3106fed..fd1817b810 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5965,10 +5965,10 @@ eslint-visitor-keys@^3.3.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826" integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA== -eslint@^8.31.0: - version "8.31.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.31.0.tgz#75028e77cbcff102a9feae1d718135931532d524" - integrity sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA== +eslint@^8.32.0: + version "8.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.32.0.tgz#d9690056bb6f1a302bd991e7090f5b68fbaea861" + integrity sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ== dependencies: "@eslint/eslintrc" "^1.4.1" "@humanwhocodes/config-array" "^0.11.8" From ea17df95597ae3a8878413141ad3f5bce2ec0a95 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jan 2023 14:23:40 -0500 Subject: [PATCH 11/37] Bump esbuild-loader from 2.20.0 to 2.21.0 (#6944) Bumps [esbuild-loader](https://github.com/privatenumber/esbuild-loader) from 2.20.0 to 2.21.0. - [Release notes](https://github.com/privatenumber/esbuild-loader/releases) - [Commits](https://github.com/privatenumber/esbuild-loader/compare/v2.20.0...v2.21.0) --- updated-dependencies: - dependency-name: esbuild-loader dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 294 +++++++++++++++++++++++++-------------------------- 2 files changed, 148 insertions(+), 148 deletions(-) diff --git a/package.json b/package.json index 8854f3fb4f..3398b48ade 100644 --- a/package.json +++ b/package.json @@ -388,7 +388,7 @@ "electron-builder": "^23.6.0", "electron-notarize": "^0.3.0", "esbuild": "^0.17.0", - "esbuild-loader": "^2.20.0", + "esbuild-loader": "^2.21.0", "eslint": "^8.32.0", "eslint-import-resolver-typescript": "^3.5.3", "eslint-plugin-header": "^3.1.1", diff --git a/yarn.lock b/yarn.lock index fd1817b810..4b676d2ca1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -598,121 +598,221 @@ resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz#8eed982e2ee6f7f4e44c253e12962980791efd46" integrity sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA== +"@esbuild/android-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz#cf91e86df127aa3d141744edafcba0abdc577d23" + integrity sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg== + "@esbuild/android-arm64@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.0.tgz#dd4c28274f08a16be95430d19fc0dab835fd2eae" integrity sha512-77GVyD7ToESy/7+9eI8z62GGBdS/hsqsrpM+JA4kascky86wHbN29EEFpkVvxajPL7k6mbLJ5VBQABdj7n9FhQ== -"@esbuild/android-arm@0.15.18": - version "0.15.18" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.18.tgz#266d40b8fdcf87962df8af05b76219bc786b4f80" - integrity sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw== +"@esbuild/android-arm@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz#025b6246d3f68b7bbaa97069144fb5fb70f2fff2" + integrity sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw== "@esbuild/android-arm@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.0.tgz#10d289617902f877a28f9f7913f4f54a4e699875" integrity sha512-hlbX5ym1V5kIKvnwFhm6rhar7MNqfJrZyYTNfk6+WS1uQfQmszFgXeyPH2beP3lSCumZyqX0zMBfOqftOpZ7GA== +"@esbuild/android-x64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz#c820e0fef982f99a85c4b8bfdd582835f04cd96e" + integrity sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ== + "@esbuild/android-x64@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.0.tgz#b0c124e434cec1a6551b400850458c860a30ecb4" integrity sha512-TroxZdZhtAz0JyD0yahtjcbKuIXrBEAoAazaYSeR2e2tUtp9uXrcbpwFJF6oxxOiOOne6y7l4hx4YVnMW/tdFw== +"@esbuild/darwin-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz#edef4487af6b21afabba7be5132c26d22379b220" + integrity sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w== + "@esbuild/darwin-arm64@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.0.tgz#4a1b65e756cc29e8d68a5ace0a2eb1c63614a767" integrity sha512-wP/v4cgdWt1m8TS/WmbaBc3NZON10eCbm6XepdVc3zJuqruHCzCKcC9dTSTEk50zX04REcRcbIbdhTMciQoFIg== +"@esbuild/darwin-x64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz#42829168730071c41ef0d028d8319eea0e2904b4" + integrity sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg== + "@esbuild/darwin-x64@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.0.tgz#9a59890391f17cd3998d2c7959ea70a1aad28c93" integrity sha512-R4WB6D6V9KGO/3LVTT8UlwRJO26IBFatOdo/bRXksfJR0vyOi2/lgmAAMBSpgcnnwvts9QsWiyM++mTTlwRseA== +"@esbuild/freebsd-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz#1f4af488bfc7e9ced04207034d398e793b570a27" + integrity sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw== + "@esbuild/freebsd-arm64@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.0.tgz#3412ffa1703c991b4d562176881fb43a9ee6f7e3" integrity sha512-FO7+UEZv79gen2df8StFYFHZPI9ADozpFepLZCxY+O8sYLDa1rirvenmLwJiOHmeQRJ5orYedFeLk1PFlZ6t8Q== +"@esbuild/freebsd-x64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz#636306f19e9bc981e06aa1d777302dad8fddaf72" + integrity sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug== + "@esbuild/freebsd-x64@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.0.tgz#427f2a07c997fb30f1a8906b070e28959f38f1e2" integrity sha512-qCsNRsVTaC3ekwZcb2sa7l1gwCtJK3EqCWyDgpoQocYf3lRpbAzaCvqZSF2+NOO64cV+JbedXPsFiXU1aaVcIg== +"@esbuild/linux-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz#a003f7ff237c501e095d4f3a09e58fc7b25a4aca" + integrity sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g== + "@esbuild/linux-arm64@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.0.tgz#0e32c6a6b290406b1203854c2d594987570dd66c" integrity sha512-js4Vlch5XJQYISbDVJd2hsI/MsfVUz6d/FrclCE73WkQmniH37vFpuQI42ntWAeBghDIfaPZ6f9GilhwGzVFUg== +"@esbuild/linux-arm@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz#b591e6a59d9c4fe0eeadd4874b157ab78cf5f196" + integrity sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ== + "@esbuild/linux-arm@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.0.tgz#5a70a95bf336035884dee123b5453aeab9c608f3" integrity sha512-Y2G2NU6155gcfNKvrakVmZV5xUAEhXjsN/uKtbKKRnvee0mHUuaT3OdQJDJKjHVGr6B0898pc3slRpI1PqspoQ== +"@esbuild/linux-ia32@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz#24333a11027ef46a18f57019450a5188918e2a54" + integrity sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg== + "@esbuild/linux-ia32@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.0.tgz#47baca8e733405a81952bcc475da1b8e5682915f" integrity sha512-7tl/jSPkF59R3zeFDB2/09zLGhcM7DM+tCoOqjJbQjuL6qbMWomGT2RglCqRFpCSdzBx0hukmPPgUAMlmdj0sQ== -"@esbuild/linux-loong64@0.15.18": - version "0.15.18" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz#128b76ecb9be48b60cf5cfc1c63a4f00691a3239" - integrity sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ== +"@esbuild/linux-loong64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz#d5ad459d41ed42bbd4d005256b31882ec52227d8" + integrity sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ== "@esbuild/linux-loong64@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.0.tgz#809398ca125ba3b57d4d12d261f2471ac32b1edb" integrity sha512-OG356F7dIVVF+EXJx5UfzFr1I5l6ES53GlMNSr3U1MhlaVyrP9um5PnrSJ+7TSDAzUC7YGjxb2GQWqHLd5XFoA== +"@esbuild/linux-mips64el@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz#4e5967a665c38360b0a8205594377d4dcf9c3726" + integrity sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw== + "@esbuild/linux-mips64el@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.0.tgz#94b50097a3421ff538eb6a41cd4fb5db4c4993ff" integrity sha512-LWQJgGpxrjh2x08UYf6G5R+Km7zhkpCvKXtFQ6SX0fimDvy1C8kslgFHGxLS0wjGV8C4BNnENW/HNy57+RB7iA== +"@esbuild/linux-ppc64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz#206443a02eb568f9fdf0b438fbd47d26e735afc8" + integrity sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g== + "@esbuild/linux-ppc64@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.0.tgz#3a580bc8b494d3b273cf08a3bb0d893b31b786ae" integrity sha512-f40N8fKiTQslUcUuhof2/syOQ+DC9Mqdnm9d063pew+Ptv9r6dBNLQCz4300MOfCLAbb0SdnrcMSzHbMehXWLw== +"@esbuild/linux-riscv64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz#c351e433d009bf256e798ad048152c8d76da2fc9" + integrity sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw== + "@esbuild/linux-riscv64@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.0.tgz#bf75f769e5fa35d143bc5759520e4277b3a95bcc" integrity sha512-sc/pvLexRvxgEbmeq7LfLGnzUBFi/E2MGbnQj3CG8tnQ90tWPTi+9CbZEgIADhj6CAlCCmqxpUclIV1CRVUOTw== +"@esbuild/linux-s390x@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz#661f271e5d59615b84b6801d1c2123ad13d9bd87" + integrity sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w== + "@esbuild/linux-s390x@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.0.tgz#ad6569476d6751cc9255fe059a5e074a08dd3e27" integrity sha512-7xq9/kY0vunCL2vjHKdHGI+660pCdeEC6K6TWBVvbTGXvT8s/qacfxMgr8PCeQRbNUZLOA13G6/G1+c0lYXO1A== +"@esbuild/linux-x64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz#e4ba18e8b149a89c982351443a377c723762b85f" + integrity sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw== + "@esbuild/linux-x64@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.0.tgz#7e38c248b8c9f39240c0914872f93893bde7182a" integrity sha512-o7FhBLONk1mLT2ytlj/j/WuJcPdhWcVpysSJn1s9+zRdLwLKveipbPi5SIasJIqMq0T4CkQW76pxJYMqz9HrQA== +"@esbuild/netbsd-x64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz#7d4f4041e30c5c07dd24ffa295c73f06038ec775" + integrity sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA== + "@esbuild/netbsd-x64@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.0.tgz#46e770aa6a14dad73d2cdf6a9521585eca1005ef" integrity sha512-V6xXsv71b8vwFCW/ky82Rs//SbyA+ORty6A7Mzkg33/4NbYZ/1Vcbk7qAN5oi0i/gS4Q0+7dYT7NqaiVZ7+Xjw== +"@esbuild/openbsd-x64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz#970fa7f8470681f3e6b1db0cc421a4af8060ec35" + integrity sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg== + "@esbuild/openbsd-x64@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.0.tgz#5d4070663448db20d3de42f7a44a2c2dd0cac847" integrity sha512-StlQor6A0Y9SSDxraytr46Qbz25zsSDmsG3MCaNkBnABKHP3QsngOCfdBikqHVVrXeK0KOTmtX92/ncTGULYgQ== +"@esbuild/sunos-x64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz#abc60e7c4abf8b89fb7a4fe69a1484132238022c" + integrity sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw== + "@esbuild/sunos-x64@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.0.tgz#4a77dbf1691ce2fd9aba69f58248d46f3e28f98b" integrity sha512-K64Wqw57j8KrwjR3QjsuzN/qDGK6Cno6QYtIlWAmGab5iYPBZCWz7HFtF2a86/130LmUsdXqOID7J0SmjjRFIQ== +"@esbuild/win32-arm64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz#7b0ff9e8c3265537a7a7b1fd9a24e7bd39fcd87a" + integrity sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw== + "@esbuild/win32-arm64@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.0.tgz#9b7cb6839240cd4408fbca6565c6a08e277d73bb" integrity sha512-hly6iSWAf0hf3aHD18/qW7iFQbg9KAQ0RFGG9plcxkhL4uGw43O+lETGcSO/PylNleFowP/UztpF6U4oCYgpPw== +"@esbuild/win32-ia32@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz#e90fe5267d71a7b7567afdc403dfd198c292eb09" + integrity sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig== + "@esbuild/win32-ia32@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.0.tgz#059a1651b830bfc188920487badd12a8e1b8f050" integrity sha512-aL4EWPh0nyC5uYRfn+CHkTgawd4DjtmwquthNDmGf6Ht6+mUc+bQXyZNH1QIw8x20hSqFc4Tf36aLLWP/TPR3g== +"@esbuild/win32-x64@0.16.17": + version "0.16.17" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz#c5a1a4bfe1b57f0c3e61b29883525c6da3e5c091" + integrity sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q== + "@esbuild/win32-x64@0.17.0": version "0.17.0" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.0.tgz#d2253fef7e7cd11f010f688fa4f5ebb2875f34c1" @@ -5622,145 +5722,45 @@ es6-error@^4.1.1: resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== -esbuild-android-64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz#20a7ae1416c8eaade917fb2453c1259302c637a5" - integrity sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA== - -esbuild-android-arm64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz#9cc0ec60581d6ad267568f29cf4895ffdd9f2f04" - integrity sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ== - -esbuild-darwin-64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz#428e1730ea819d500808f220fbc5207aea6d4410" - integrity sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg== - -esbuild-darwin-arm64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz#b6dfc7799115a2917f35970bfbc93ae50256b337" - integrity sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA== - -esbuild-freebsd-64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz#4e190d9c2d1e67164619ae30a438be87d5eedaf2" - integrity sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA== - -esbuild-freebsd-arm64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz#18a4c0344ee23bd5a6d06d18c76e2fd6d3f91635" - integrity sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA== - -esbuild-linux-32@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz#9a329731ee079b12262b793fb84eea762e82e0ce" - integrity sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg== - -esbuild-linux-64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz#532738075397b994467b514e524aeb520c191b6c" - integrity sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw== - -esbuild-linux-arm64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz#5372e7993ac2da8f06b2ba313710d722b7a86e5d" - integrity sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug== - -esbuild-linux-arm@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz#e734aaf259a2e3d109d4886c9e81ec0f2fd9a9cc" - integrity sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA== - -esbuild-linux-mips64le@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz#c0487c14a9371a84eb08fab0e1d7b045a77105eb" - integrity sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ== - -esbuild-linux-ppc64le@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz#af048ad94eed0ce32f6d5a873f7abe9115012507" - integrity sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w== - -esbuild-linux-riscv64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz#423ed4e5927bd77f842bd566972178f424d455e6" - integrity sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg== - -esbuild-linux-s390x@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz#21d21eaa962a183bfb76312e5a01cc5ae48ce8eb" - integrity sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ== - -esbuild-loader@^2.20.0: - version "2.20.0" - resolved "https://registry.yarnpkg.com/esbuild-loader/-/esbuild-loader-2.20.0.tgz#28fcff0142fa7bd227512d69f31e9a6e202bb88f" - integrity sha512-dr+j8O4w5RvqZ7I4PPB4EIyVTd679EBQnMm+JBB7av+vu05Zpje2IpK5N3ld1VWa+WxrInIbNFAg093+E1aRsA== +esbuild-loader@^2.21.0: + version "2.21.0" + resolved "https://registry.yarnpkg.com/esbuild-loader/-/esbuild-loader-2.21.0.tgz#2698a3e565b0db2bb19a3dd91c2b6c9aad526c80" + integrity sha512-k7ijTkCT43YBSZ6+fBCW1Gin7s46RrJ0VQaM8qA7lq7W+OLsGgtLyFV8470FzYi/4TeDexniTBTPTwZUnXXR5g== dependencies: - esbuild "^0.15.6" + esbuild "^0.16.17" joycon "^3.0.1" json5 "^2.2.0" loader-utils "^2.0.0" tapable "^2.2.0" - webpack-sources "^2.2.0" + webpack-sources "^1.4.3" -esbuild-netbsd-64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz#ae75682f60d08560b1fe9482bfe0173e5110b998" - integrity sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg== - -esbuild-openbsd-64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz#79591a90aa3b03e4863f93beec0d2bab2853d0a8" - integrity sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ== - -esbuild-sunos-64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz#fd528aa5da5374b7e1e93d36ef9b07c3dfed2971" - integrity sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw== - -esbuild-windows-32@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz#0e92b66ecdf5435a76813c4bc5ccda0696f4efc3" - integrity sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ== - -esbuild-windows-64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz#0fc761d785414284fc408e7914226d33f82420d0" - integrity sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw== - -esbuild-windows-arm64@0.15.18: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz#5b5bdc56d341d0922ee94965c89ee120a6a86eb7" - integrity sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ== - -esbuild@^0.15.6: - version "0.15.18" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.18.tgz#ea894adaf3fbc036d32320a00d4d6e4978a2f36d" - integrity sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q== +esbuild@^0.16.17: + version "0.16.17" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.16.17.tgz#fc2c3914c57ee750635fee71b89f615f25065259" + integrity sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg== optionalDependencies: - "@esbuild/android-arm" "0.15.18" - "@esbuild/linux-loong64" "0.15.18" - esbuild-android-64 "0.15.18" - esbuild-android-arm64 "0.15.18" - esbuild-darwin-64 "0.15.18" - esbuild-darwin-arm64 "0.15.18" - esbuild-freebsd-64 "0.15.18" - esbuild-freebsd-arm64 "0.15.18" - esbuild-linux-32 "0.15.18" - esbuild-linux-64 "0.15.18" - esbuild-linux-arm "0.15.18" - esbuild-linux-arm64 "0.15.18" - esbuild-linux-mips64le "0.15.18" - esbuild-linux-ppc64le "0.15.18" - esbuild-linux-riscv64 "0.15.18" - esbuild-linux-s390x "0.15.18" - esbuild-netbsd-64 "0.15.18" - esbuild-openbsd-64 "0.15.18" - esbuild-sunos-64 "0.15.18" - esbuild-windows-32 "0.15.18" - esbuild-windows-64 "0.15.18" - esbuild-windows-arm64 "0.15.18" + "@esbuild/android-arm" "0.16.17" + "@esbuild/android-arm64" "0.16.17" + "@esbuild/android-x64" "0.16.17" + "@esbuild/darwin-arm64" "0.16.17" + "@esbuild/darwin-x64" "0.16.17" + "@esbuild/freebsd-arm64" "0.16.17" + "@esbuild/freebsd-x64" "0.16.17" + "@esbuild/linux-arm" "0.16.17" + "@esbuild/linux-arm64" "0.16.17" + "@esbuild/linux-ia32" "0.16.17" + "@esbuild/linux-loong64" "0.16.17" + "@esbuild/linux-mips64el" "0.16.17" + "@esbuild/linux-ppc64" "0.16.17" + "@esbuild/linux-riscv64" "0.16.17" + "@esbuild/linux-s390x" "0.16.17" + "@esbuild/linux-x64" "0.16.17" + "@esbuild/netbsd-x64" "0.16.17" + "@esbuild/openbsd-x64" "0.16.17" + "@esbuild/sunos-x64" "0.16.17" + "@esbuild/win32-arm64" "0.16.17" + "@esbuild/win32-ia32" "0.16.17" + "@esbuild/win32-x64" "0.16.17" esbuild@^0.17.0: version "0.17.0" @@ -12145,7 +12145,7 @@ sort-keys@^2.0.0: dependencies: is-plain-obj "^1.0.0" -source-list-map@^2.0.1: +source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== @@ -13581,13 +13581,13 @@ webpack-node-externals@^3.0.0: resolved "https://registry.yarnpkg.com/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz#1a3407c158d547a9feb4229a9e3385b7b60c9917" integrity sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ== -webpack-sources@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd" - integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== +webpack-sources@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== dependencies: - source-list-map "^2.0.1" - source-map "^0.6.1" + source-list-map "^2.0.0" + source-map "~0.6.1" webpack-sources@^3.2.3: version "3.2.3" From 40918cf5828add49220f4243abb1f1cfec7b0ff5 Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Mon, 16 Jan 2023 23:20:30 +0200 Subject: [PATCH 12/37] Move IpcRendererNavigationEvents to common (#6949) Signed-off-by: Jari Kolehmainen Signed-off-by: Jari Kolehmainen --- src/common/catalog-entities/kubernetes-cluster.ts | 2 +- src/common/front-end-routing/app-navigation-channel.ts | 2 +- .../front-end-routing/cluster-frame-navigation-channel.ts | 2 +- .../navigation/events.ts => common/ipc/navigation-events.ts} | 0 .../start-main-application/lens-window/navigate.injectable.ts | 2 +- src/renderer/components/command-palette/command-dialog.tsx | 2 +- src/renderer/components/layout/sidebar-cluster.tsx | 2 +- src/renderer/routes/navigate-to-url.injectable.ts | 2 +- 8 files changed, 7 insertions(+), 7 deletions(-) rename src/{renderer/navigation/events.ts => common/ipc/navigation-events.ts} (100%) diff --git a/src/common/catalog-entities/kubernetes-cluster.ts b/src/common/catalog-entities/kubernetes-cluster.ts index d47ab47831..57cac07122 100644 --- a/src/common/catalog-entities/kubernetes-cluster.ts +++ b/src/common/catalog-entities/kubernetes-cluster.ts @@ -8,7 +8,7 @@ import { CatalogEntity, CatalogCategory, categoryVersion } from "../catalog/cata import { broadcastMessage } from "../ipc"; import { app } from "electron"; import type { CatalogEntityConstructor, CatalogEntitySpec } from "../catalog/catalog-entity"; -import { IpcRendererNavigationEvents } from "../../renderer/navigation/events"; +import { IpcRendererNavigationEvents } from "../ipc/navigation-events"; import { requestClusterActivation, requestClusterDisconnection } from "../../renderer/ipc"; import KubeClusterCategoryIcon from "./icons/kubernetes.svg"; import getClusterByIdInjectable from "../cluster-store/get-by-id.injectable"; diff --git a/src/common/front-end-routing/app-navigation-channel.ts b/src/common/front-end-routing/app-navigation-channel.ts index e0b881eff9..b3d8f02c66 100644 --- a/src/common/front-end-routing/app-navigation-channel.ts +++ b/src/common/front-end-routing/app-navigation-channel.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { IpcRendererNavigationEvents } from "../../renderer/navigation/events"; +import { IpcRendererNavigationEvents } from "../ipc/navigation-events"; import type { MessageChannel } from "../utils/channel/message-channel-listener-injection-token"; export type AppNavigationChannel = MessageChannel; diff --git a/src/common/front-end-routing/cluster-frame-navigation-channel.ts b/src/common/front-end-routing/cluster-frame-navigation-channel.ts index 9d9a1904af..2439f523e2 100644 --- a/src/common/front-end-routing/cluster-frame-navigation-channel.ts +++ b/src/common/front-end-routing/cluster-frame-navigation-channel.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { IpcRendererNavigationEvents } from "../../renderer/navigation/events"; +import { IpcRendererNavigationEvents } from "../ipc/navigation-events"; import type { MessageChannel } from "../utils/channel/message-channel-listener-injection-token"; export type ClusterFrameNavigationChannel = MessageChannel; diff --git a/src/renderer/navigation/events.ts b/src/common/ipc/navigation-events.ts similarity index 100% rename from src/renderer/navigation/events.ts rename to src/common/ipc/navigation-events.ts diff --git a/src/main/start-main-application/lens-window/navigate.injectable.ts b/src/main/start-main-application/lens-window/navigate.injectable.ts index 8b204be9b3..7bcd14072b 100644 --- a/src/main/start-main-application/lens-window/navigate.injectable.ts +++ b/src/main/start-main-application/lens-window/navigate.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { iter } from "../../../common/utils"; import clusterFramesInjectable from "../../../common/cluster-frames.injectable"; -import { IpcRendererNavigationEvents } from "../../../renderer/navigation/events"; +import { IpcRendererNavigationEvents } from "../../../common/ipc/navigation-events"; import showApplicationWindowInjectable from "./show-application-window.injectable"; import getCurrentApplicationWindowInjectable from "./application-window/get-current-application-window.injectable"; import assert from "assert"; diff --git a/src/renderer/components/command-palette/command-dialog.tsx b/src/renderer/components/command-palette/command-dialog.tsx index db33bde1cd..ba4036f4c5 100644 --- a/src/renderer/components/command-palette/command-dialog.tsx +++ b/src/renderer/components/command-palette/command-dialog.tsx @@ -11,7 +11,7 @@ import React, { useState } from "react"; import commandOverlayInjectable from "./command-overlay.injectable"; import type { CatalogEntity } from "../../../common/catalog"; import { broadcastMessage } from "../../../common/ipc"; -import { IpcRendererNavigationEvents } from "../../navigation/events"; +import { IpcRendererNavigationEvents } from "../../../common/ipc/navigation-events"; import type { RegisteredCommand } from "./registered-commands/commands"; import { iter } from "../../utils"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/src/renderer/components/layout/sidebar-cluster.tsx b/src/renderer/components/layout/sidebar-cluster.tsx index 55f3f20ecf..24b0622a85 100644 --- a/src/renderer/components/layout/sidebar-cluster.tsx +++ b/src/renderer/components/layout/sidebar-cluster.tsx @@ -8,7 +8,7 @@ import { observable } from "mobx"; import React, { useState } from "react"; import { broadcastMessage } from "../../../common/ipc"; import type { CatalogEntity, CatalogEntityContextMenu } from "../../api/catalog-entity"; -import { IpcRendererNavigationEvents } from "../../navigation/events"; +import { IpcRendererNavigationEvents } from "../../../common/ipc/navigation-events"; import { Avatar } from "../avatar"; import { Icon } from "../icon"; import { Menu, MenuItem } from "../menu"; diff --git a/src/renderer/routes/navigate-to-url.injectable.ts b/src/renderer/routes/navigate-to-url.injectable.ts index 832080674c..616bfb6431 100644 --- a/src/renderer/routes/navigate-to-url.injectable.ts +++ b/src/renderer/routes/navigate-to-url.injectable.ts @@ -7,7 +7,7 @@ import observableHistoryInjectable from "../navigation/observable-history.inject import { runInAction } from "mobx"; import type { NavigateToUrl } from "../../common/front-end-routing/navigate-to-url-injection-token"; import { navigateToUrlInjectionToken } from "../../common/front-end-routing/navigate-to-url-injection-token"; -import { IpcRendererNavigationEvents } from "../navigation/events"; +import { IpcRendererNavigationEvents } from "../../common/ipc/navigation-events"; import broadcastMessageInjectable from "../../common/ipc/broadcast-message.injectable"; const navigateToUrlInjectable = getInjectable({ From cf27605a21b70d6355348f5109c9d11ffd3c5d07 Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Mon, 16 Jan 2023 23:20:43 +0200 Subject: [PATCH 13/37] Introduce ipcMainInjectionToken (#6950) Signed-off-by: Jari Kolehmainen Signed-off-by: Jari Kolehmainen --- src/common/ipc/ipc-main-injection-token.ts | 12 ++++++++++++ src/common/ipc/ipc.ts | 6 +++--- .../catalog-sync-to-renderer.injectable.ts | 4 ++-- ...until-bundled-extensions-are-loaded.injectable.ts | 4 ++-- .../enlist-message-channel-listener.injectable.ts | 4 ++-- .../enlist-request-channel-listener.injectable.ts | 4 ++-- .../utils/channel/ipc-main/ipc-main.injectable.ts | 2 ++ 7 files changed, 25 insertions(+), 11 deletions(-) create mode 100644 src/common/ipc/ipc-main-injection-token.ts diff --git a/src/common/ipc/ipc-main-injection-token.ts b/src/common/ipc/ipc-main-injection-token.ts new file mode 100644 index 0000000000..932c700c97 --- /dev/null +++ b/src/common/ipc/ipc-main-injection-token.ts @@ -0,0 +1,12 @@ +/** + * 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 { IpcMain } from "electron"; + +const ipcMainInjectionToken = getInjectionToken({ + id: "ipc-main-injection-token", +}); + +export default ipcMainInjectionToken; diff --git a/src/common/ipc/ipc.ts b/src/common/ipc/ipc.ts index f11227d17e..e84fcfec56 100644 --- a/src/common/ipc/ipc.ts +++ b/src/common/ipc/ipc.ts @@ -12,17 +12,17 @@ import { toJS } from "../utils/toJS"; import type { ClusterFrameInfo } from "../cluster-frames"; import { clusterFrameMap } from "../cluster-frames"; import type { Disposer } from "../utils"; -import ipcMainInjectable from "../../main/utils/channel/ipc-main/ipc-main.injectable"; import { getLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import ipcRendererInjectable from "../../renderer/utils/channel/ipc-renderer.injectable"; import loggerInjectable from "../logger.injectable"; +import ipcMainInjectionToken from "./ipc-main-injection-token"; export const broadcastMainChannel = "ipc:broadcast-main"; export function ipcMainHandle(channel: string, listener: (event: Electron.IpcMainInvokeEvent, ...args: any[]) => any) { const di = getLegacyGlobalDiForExtensionApi(); - const ipcMain = di.inject(ipcMainInjectable); + const ipcMain = di.inject(ipcMainInjectionToken); ipcMain.handle(channel, async (event, ...args) => { return sanitizePayload(await listener(event, ...args)); @@ -90,7 +90,7 @@ export async function broadcastMessage(channel: string, ...args: any[]): Promise export function ipcMainOn(channel: string, listener: (event: Electron.IpcMainEvent, ...args: any[]) => any): Disposer { const di = getLegacyGlobalDiForExtensionApi(); - const ipcMain = di.inject(ipcMainInjectable); + const ipcMain = di.inject(ipcMainInjectionToken); ipcMain.on(channel, listener); diff --git a/src/main/catalog-sync-to-renderer/catalog-sync-to-renderer.injectable.ts b/src/main/catalog-sync-to-renderer/catalog-sync-to-renderer.injectable.ts index 6be9826c98..bdcd3034d3 100644 --- a/src/main/catalog-sync-to-renderer/catalog-sync-to-renderer.injectable.ts +++ b/src/main/catalog-sync-to-renderer/catalog-sync-to-renderer.injectable.ts @@ -4,11 +4,11 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { reaction } from "mobx"; +import ipcMainInjectionToken from "../../common/ipc/ipc-main-injection-token"; import { catalogInitChannel } from "../../common/ipc/catalog"; import { disposer, toJS } from "../../common/utils"; import { getStartableStoppable } from "../../common/utils/get-startable-stoppable"; import catalogEntityRegistryInjectable from "../catalog/entity-registry.injectable"; -import ipcMainInjectable from "../utils/channel/ipc-main/ipc-main.injectable"; import catalogSyncBroadcasterInjectable from "./broadcaster.injectable"; const catalogSyncToRendererInjectable = getInjectable({ @@ -16,7 +16,7 @@ const catalogSyncToRendererInjectable = getInjectable({ instantiate: (di) => { const catalogEntityRegistry = di.inject(catalogEntityRegistryInjectable); - const ipcMain = di.inject(ipcMainInjectable); + const ipcMain = di.inject(ipcMainInjectionToken); const catalogSyncBroadcaster = di.inject(catalogSyncBroadcasterInjectable); return getStartableStoppable( diff --git a/src/main/start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable.ts b/src/main/start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable.ts index 2c0f30b83b..4046db5d9d 100644 --- a/src/main/start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable.ts +++ b/src/main/start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable.ts @@ -3,15 +3,15 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; +import ipcMainInjectionToken from "../../../../common/ipc/ipc-main-injection-token"; import { bundledExtensionsLoaded } from "../../../../common/ipc/extension-handling"; import { delay } from "../../../../common/utils"; -import ipcMainInjectable from "../../../utils/channel/ipc-main/ipc-main.injectable"; const waitUntilBundledExtensionsAreLoadedInjectable = getInjectable({ id: "wait-until-bundled-extensions-are-loaded", instantiate: (di) => { - const ipcMain = di.inject(ipcMainInjectable); + const ipcMain = di.inject(ipcMainInjectionToken); return async () => { const viewHasLoaded = new Promise((resolve) => { diff --git a/src/main/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts b/src/main/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts index 6ace54c845..db6435ea56 100644 --- a/src/main/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts +++ b/src/main/utils/channel/channel-listeners/enlist-message-channel-listener.injectable.ts @@ -4,14 +4,14 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import type { IpcMainEvent } from "electron"; -import ipcMainInjectable from "../ipc-main/ipc-main.injectable"; import { enlistMessageChannelListenerInjectionToken } from "../../../../common/utils/channel/enlist-message-channel-listener-injection-token"; +import ipcMainInjectionToken from "../../../../common/ipc/ipc-main-injection-token"; const enlistMessageChannelListenerInjectable = getInjectable({ id: "enlist-message-channel-listener-for-main", instantiate: (di) => { - const ipcMain = di.inject(ipcMainInjectable); + const ipcMain = di.inject(ipcMainInjectionToken); return ({ channel, handler }) => { const nativeOnCallback = (_: IpcMainEvent, message: unknown) => { diff --git a/src/main/utils/channel/channel-listeners/enlist-request-channel-listener.injectable.ts b/src/main/utils/channel/channel-listeners/enlist-request-channel-listener.injectable.ts index d72e4afcaf..1af1b6fb55 100644 --- a/src/main/utils/channel/channel-listeners/enlist-request-channel-listener.injectable.ts +++ b/src/main/utils/channel/channel-listeners/enlist-request-channel-listener.injectable.ts @@ -4,10 +4,10 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import type { IpcMainInvokeEvent } from "electron"; -import ipcMainInjectable from "../ipc-main/ipc-main.injectable"; import type { Disposer } from "../../../../common/utils"; import type { RequestChannel } from "../../../../common/utils/channel/request-channel-listener-injection-token"; import type { RequestChannelListener } from "./listener-tokens"; +import ipcMainInjectionToken from "../../../../common/ipc/ipc-main-injection-token"; export type EnlistRequestChannelListener = >(listener: RequestChannelListener) => Disposer; @@ -15,7 +15,7 @@ const enlistRequestChannelListenerInjectable = getInjectable({ id: "enlist-request-channel-listener-for-main", instantiate: (di): EnlistRequestChannelListener => { - const ipcMain = di.inject(ipcMainInjectable); + const ipcMain = di.inject(ipcMainInjectionToken); return ({ channel, handler }) => { const nativeHandleCallback = (_: IpcMainInvokeEvent, request: unknown) => handler(request); diff --git a/src/main/utils/channel/ipc-main/ipc-main.injectable.ts b/src/main/utils/channel/ipc-main/ipc-main.injectable.ts index 13684bf8ec..b012c5be47 100644 --- a/src/main/utils/channel/ipc-main/ipc-main.injectable.ts +++ b/src/main/utils/channel/ipc-main/ipc-main.injectable.ts @@ -4,11 +4,13 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { ipcMain } from "electron"; +import ipcMainInjectionToken from "../../../../common/ipc/ipc-main-injection-token"; const ipcMainInjectable = getInjectable({ id: "ipc-main", instantiate: () => ipcMain, causesSideEffects: true, + injectionToken: ipcMainInjectionToken, }); export default ipcMainInjectable; From e635d82ea5f955ce4c8f4ccffaf77f0e6c1c7440 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Tue, 17 Jan 2023 05:11:52 -0800 Subject: [PATCH 14/37] Cleanup loading terminal fonts (#6937) * Cleanup loading terminal fonts - Make list of possible fonts fully OCP - Only mark the loading of a font as 'causesSideEffects' - Make a view model for the terminal font preferences component - Move the TTF files next to where they are registered to help with finding them Signed-off-by: Sebastian Malton * Fix tests Signed-off-by: Sebastian Malton * Cleanup formatting and change model to presenter Signed-off-by: Sebastian Malton Signed-off-by: Sebastian Malton --- .../terminal-font-family.tsx | 68 ++++----------- .../terminal-font-options.injectable.tsx | 50 +++++++++++ .../renderer/fonts/AnonymousPro-Regular.ttf | Bin .../renderer/fonts/IBMPlexMono-Regular.ttf | Bin .../renderer/fonts/JetBrainsMono-Regular.ttf | Bin .../renderer/fonts/RedHatMono-Regular.ttf | Bin .../terminal/renderer/fonts/Roboto-Mono.ttf} | Bin .../renderer/fonts/SourceCodePro-Regular.ttf | Bin .../renderer/fonts/SpaceMono-Regular.ttf | Bin .../renderer/fonts/UbuntuMono-Regular.ttf | Bin .../fonts/anonymous-pro.injectable.ts | 18 ++++ .../renderer/fonts/fonts.injectable.ts | 13 +++ .../fonts/ibm-plex-mono.injectable.ts | 18 ++++ .../fonts/jetbrains-mono.injectable.ts | 18 ++++ ...ad-font.global-override-for-injectable.ts} | 13 +-- .../renderer/fonts/load-font.injectable.ts | 27 ++++++ .../fonts/preload-fonts.injectable.ts | 24 ++++++ .../renderer/fonts/red-hat-mono.injectable.ts | 18 ++++ .../renderer/fonts/roboto-mono.injectable.ts | 18 ++++ .../fonts/source-code-pro.injectable.ts | 18 ++++ .../renderer/fonts/space-mono.injectable.ts | 18 ++++ src/features/terminal/renderer/fonts/token.ts | 15 ++++ .../renderer/fonts/ubuntu-mono.injectable.ts | 18 ++++ .../terminal/terminal-fonts.injectable.ts | 78 ------------------ types/mocks.d.ts | 6 +- 25 files changed, 298 insertions(+), 140 deletions(-) create mode 100644 src/features/preferences/renderer/preference-items/terminal/terminal-font-family/terminal-font-options.injectable.tsx rename src/{ => features/terminal}/renderer/fonts/AnonymousPro-Regular.ttf (100%) rename src/{ => features/terminal}/renderer/fonts/IBMPlexMono-Regular.ttf (100%) rename src/{ => features/terminal}/renderer/fonts/JetBrainsMono-Regular.ttf (100%) rename src/{ => features/terminal}/renderer/fonts/RedHatMono-Regular.ttf (100%) rename src/{renderer/fonts/Roboto-Mono-nerd.ttf => features/terminal/renderer/fonts/Roboto-Mono.ttf} (100%) rename src/{ => features/terminal}/renderer/fonts/SourceCodePro-Regular.ttf (100%) rename src/{ => features/terminal}/renderer/fonts/SpaceMono-Regular.ttf (100%) rename src/{ => features/terminal}/renderer/fonts/UbuntuMono-Regular.ttf (100%) create mode 100644 src/features/terminal/renderer/fonts/anonymous-pro.injectable.ts create mode 100644 src/features/terminal/renderer/fonts/fonts.injectable.ts create mode 100644 src/features/terminal/renderer/fonts/ibm-plex-mono.injectable.ts create mode 100644 src/features/terminal/renderer/fonts/jetbrains-mono.injectable.ts rename src/{renderer/components/dock/terminal/terminal-fonts.global-override-for-injectable.ts => features/terminal/renderer/fonts/load-font.global-override-for-injectable.ts} (52%) create mode 100644 src/features/terminal/renderer/fonts/load-font.injectable.ts create mode 100644 src/features/terminal/renderer/fonts/preload-fonts.injectable.ts create mode 100644 src/features/terminal/renderer/fonts/red-hat-mono.injectable.ts create mode 100644 src/features/terminal/renderer/fonts/roboto-mono.injectable.ts create mode 100644 src/features/terminal/renderer/fonts/source-code-pro.injectable.ts create mode 100644 src/features/terminal/renderer/fonts/space-mono.injectable.ts create mode 100644 src/features/terminal/renderer/fonts/token.ts create mode 100644 src/features/terminal/renderer/fonts/ubuntu-mono.injectable.ts delete mode 100644 src/renderer/components/dock/terminal/terminal-fonts.injectable.ts diff --git a/src/features/preferences/renderer/preference-items/terminal/terminal-font-family/terminal-font-family.tsx b/src/features/preferences/renderer/preference-items/terminal/terminal-font-family/terminal-font-family.tsx index 7ff161862e..cdd7a96633 100644 --- a/src/features/preferences/renderer/preference-items/terminal/terminal-font-family/terminal-font-family.tsx +++ b/src/features/preferences/renderer/preference-items/terminal/terminal-font-family/terminal-font-family.tsx @@ -5,66 +5,30 @@ import React from "react"; import { SubTitle } from "../../../../../../renderer/components/layout/sub-title"; import { withInjectables } from "@ogre-tools/injectable-react"; -import type { UserStore } from "../../../../../../common/user-store"; -import userStoreInjectable from "../../../../../../common/user-store/user-store.injectable"; import { observer } from "mobx-react"; -import type { SelectOption } from "../../../../../../renderer/components/select"; import { Select } from "../../../../../../renderer/components/select"; -import type { Logger } from "../../../../../../common/logger"; -import { action } from "mobx"; -import loggerInjectable from "../../../../../../common/logger.injectable"; -import { - terminalFontsInjectable, -} from "../../../../../../renderer/components/dock/terminal/terminal-fonts.injectable"; +import type { TerminalFontPreferencePresenter } from "./terminal-font-options.injectable"; +import terminalFontPreferencePresenterInjectable from "./terminal-font-options.injectable"; interface Dependencies { - userStore: UserStore; - logger: Logger; - terminalFonts: Map; + model: TerminalFontPreferencePresenter; } -const NonInjectedTerminalFontFamily = observer( - ({ userStore, logger, terminalFonts }: Dependencies) => { - const bundledFonts: SelectOption[] = Array.from(terminalFonts.keys()).map(font => { - const { fontFamily, fontSize } = userStore.terminalConfig; - - return { - label: ( - - {font} - - ), - value: font, - isSelected: fontFamily === font, - }; - }); - - const onFontFamilyChange = action(({ value: fontFamily }: SelectOption) => { - logger.info(`setting terminal font to ${fontFamily}`); - - userStore.terminalConfig.fontFamily = fontFamily; // save to external storage - }); - - - return ( -
- - +
+)); export const TerminalFontFamily = withInjectables(NonInjectedTerminalFontFamily, { getProps: (di) => ({ - userStore: di.inject(userStoreInjectable), - logger: di.inject(loggerInjectable), - terminalFonts: di.inject(terminalFontsInjectable), + model: di.inject(terminalFontPreferencePresenterInjectable), }), }); diff --git a/src/features/preferences/renderer/preference-items/terminal/terminal-font-family/terminal-font-options.injectable.tsx b/src/features/preferences/renderer/preference-items/terminal/terminal-font-family/terminal-font-options.injectable.tsx new file mode 100644 index 0000000000..3d6a0d2ae0 --- /dev/null +++ b/src/features/preferences/renderer/preference-items/terminal/terminal-font-family/terminal-font-options.injectable.tsx @@ -0,0 +1,50 @@ +/** + * 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 type { IComputedValue } from "mobx"; +import { action, computed } from "mobx"; +import React from "react"; +import type { SingleValue } from "react-select"; +import userStoreInjectable from "../../../../../../common/user-store/user-store.injectable"; +import { defaultTerminalFontFamily } from "../../../../../../common/vars"; +import type { SelectOption } from "../../../../../../renderer/components/select"; +import { terminalFontInjectionToken } from "../../../../../terminal/renderer/fonts/token"; + +export interface TerminalFontPreferencePresenter { + readonly options: IComputedValue[]>; + readonly current: IComputedValue; + onSelection: (selection: SingleValue>) => void; +} + +const terminalFontPreferencePresenterInjectable = getInjectable({ + id: "terminal-font-preference-presenter", + instantiate: (di): TerminalFontPreferencePresenter => { + const userStore = di.inject(userStoreInjectable); + const terminalFonts = di.injectMany(terminalFontInjectionToken); + + return { + options: computed(() => terminalFonts.map(font => ({ + label: ( + + {font.name} + + ), + value: font.name, + isSelected: userStore.terminalConfig.fontFamily === font.name, + }))), + current: computed(() => userStore.terminalConfig.fontFamily), + onSelection: action(selection => { + userStore.terminalConfig.fontFamily = selection?.value ?? defaultTerminalFontFamily; + }), + }; + }, +}); + +export default terminalFontPreferencePresenterInjectable; diff --git a/src/renderer/fonts/AnonymousPro-Regular.ttf b/src/features/terminal/renderer/fonts/AnonymousPro-Regular.ttf similarity index 100% rename from src/renderer/fonts/AnonymousPro-Regular.ttf rename to src/features/terminal/renderer/fonts/AnonymousPro-Regular.ttf diff --git a/src/renderer/fonts/IBMPlexMono-Regular.ttf b/src/features/terminal/renderer/fonts/IBMPlexMono-Regular.ttf similarity index 100% rename from src/renderer/fonts/IBMPlexMono-Regular.ttf rename to src/features/terminal/renderer/fonts/IBMPlexMono-Regular.ttf diff --git a/src/renderer/fonts/JetBrainsMono-Regular.ttf b/src/features/terminal/renderer/fonts/JetBrainsMono-Regular.ttf similarity index 100% rename from src/renderer/fonts/JetBrainsMono-Regular.ttf rename to src/features/terminal/renderer/fonts/JetBrainsMono-Regular.ttf diff --git a/src/renderer/fonts/RedHatMono-Regular.ttf b/src/features/terminal/renderer/fonts/RedHatMono-Regular.ttf similarity index 100% rename from src/renderer/fonts/RedHatMono-Regular.ttf rename to src/features/terminal/renderer/fonts/RedHatMono-Regular.ttf diff --git a/src/renderer/fonts/Roboto-Mono-nerd.ttf b/src/features/terminal/renderer/fonts/Roboto-Mono.ttf similarity index 100% rename from src/renderer/fonts/Roboto-Mono-nerd.ttf rename to src/features/terminal/renderer/fonts/Roboto-Mono.ttf diff --git a/src/renderer/fonts/SourceCodePro-Regular.ttf b/src/features/terminal/renderer/fonts/SourceCodePro-Regular.ttf similarity index 100% rename from src/renderer/fonts/SourceCodePro-Regular.ttf rename to src/features/terminal/renderer/fonts/SourceCodePro-Regular.ttf diff --git a/src/renderer/fonts/SpaceMono-Regular.ttf b/src/features/terminal/renderer/fonts/SpaceMono-Regular.ttf similarity index 100% rename from src/renderer/fonts/SpaceMono-Regular.ttf rename to src/features/terminal/renderer/fonts/SpaceMono-Regular.ttf diff --git a/src/renderer/fonts/UbuntuMono-Regular.ttf b/src/features/terminal/renderer/fonts/UbuntuMono-Regular.ttf similarity index 100% rename from src/renderer/fonts/UbuntuMono-Regular.ttf rename to src/features/terminal/renderer/fonts/UbuntuMono-Regular.ttf diff --git a/src/features/terminal/renderer/fonts/anonymous-pro.injectable.ts b/src/features/terminal/renderer/fonts/anonymous-pro.injectable.ts new file mode 100644 index 0000000000..d0a671e5bd --- /dev/null +++ b/src/features/terminal/renderer/fonts/anonymous-pro.injectable.ts @@ -0,0 +1,18 @@ +/** + * 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 { terminalFontInjectionToken } from "./token"; +import AnonymousPro from "./AnonymousPro-Regular.ttf"; + +const anonymousProTerminalFontInjectable = getInjectable({ + id: "anonymous-pro-terminal-font", + instantiate: () => ({ + name:"Anonymous Pro", + url: AnonymousPro, + }), + injectionToken: terminalFontInjectionToken, +}); + +export default anonymousProTerminalFontInjectable; diff --git a/src/features/terminal/renderer/fonts/fonts.injectable.ts b/src/features/terminal/renderer/fonts/fonts.injectable.ts new file mode 100644 index 0000000000..2c8dc1d57a --- /dev/null +++ b/src/features/terminal/renderer/fonts/fonts.injectable.ts @@ -0,0 +1,13 @@ +/** + * 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 { terminalFontInjectionToken } from "./token"; + +const terminalFontsInjectable = getInjectable({ + id: "terminal-fonts", + instantiate: (di) => di.injectMany(terminalFontInjectionToken), +}); + +export default terminalFontsInjectable; diff --git a/src/features/terminal/renderer/fonts/ibm-plex-mono.injectable.ts b/src/features/terminal/renderer/fonts/ibm-plex-mono.injectable.ts new file mode 100644 index 0000000000..b75440adbc --- /dev/null +++ b/src/features/terminal/renderer/fonts/ibm-plex-mono.injectable.ts @@ -0,0 +1,18 @@ +/** + * 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 { terminalFontInjectionToken } from "./token"; +import IBMPlexMono from "./IBMPlexMono-Regular.ttf"; + +const ibmPlexMonoTerminalFontInjectable = getInjectable({ + id: "ibm-plex-mono-terminal-font", + instantiate: () => ({ + name: "IBM Plex Mono", + url: IBMPlexMono, + }), + injectionToken: terminalFontInjectionToken, +}); + +export default ibmPlexMonoTerminalFontInjectable; diff --git a/src/features/terminal/renderer/fonts/jetbrains-mono.injectable.ts b/src/features/terminal/renderer/fonts/jetbrains-mono.injectable.ts new file mode 100644 index 0000000000..c86d93d55a --- /dev/null +++ b/src/features/terminal/renderer/fonts/jetbrains-mono.injectable.ts @@ -0,0 +1,18 @@ +/** + * 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 { terminalFontInjectionToken } from "./token"; +import JetBrainsMono from "./JetBrainsMono-Regular.ttf"; + +const jetbrainsMonoTerminalFontInjectable = getInjectable({ + id: "jetbrains-mono-terminal-font", + instantiate: () => ({ + name: "JetBrains Mono", + url: JetBrainsMono, + }), + injectionToken: terminalFontInjectionToken, +}); + +export default jetbrainsMonoTerminalFontInjectable; diff --git a/src/renderer/components/dock/terminal/terminal-fonts.global-override-for-injectable.ts b/src/features/terminal/renderer/fonts/load-font.global-override-for-injectable.ts similarity index 52% rename from src/renderer/components/dock/terminal/terminal-fonts.global-override-for-injectable.ts rename to src/features/terminal/renderer/fonts/load-font.global-override-for-injectable.ts index eb549af384..0d1b23bfde 100644 --- a/src/renderer/components/dock/terminal/terminal-fonts.global-override-for-injectable.ts +++ b/src/features/terminal/renderer/fonts/load-font.global-override-for-injectable.ts @@ -2,13 +2,8 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverride } from "../../../../common/test-utils/get-global-override"; -import { preloadAllTerminalFontsInjectable } from "./terminal-fonts.injectable"; -export default getGlobalOverride(preloadAllTerminalFontsInjectable, () => { - return { - id: "", - async run() { - }, - }; -}); +import { getGlobalOverride } from "../../../../common/test-utils/get-global-override"; +import loadTerminalFontInjectable from "./load-font.injectable"; + +export default getGlobalOverride(loadTerminalFontInjectable, () => async () => {}); diff --git a/src/features/terminal/renderer/fonts/load-font.injectable.ts b/src/features/terminal/renderer/fonts/load-font.injectable.ts new file mode 100644 index 0000000000..920042e5df --- /dev/null +++ b/src/features/terminal/renderer/fonts/load-font.injectable.ts @@ -0,0 +1,27 @@ +/** + * 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 type { TerminalFont } from "./token"; + +export type LoadTerminalFont = (font: TerminalFont) => Promise; + +const loadTerminalFontInjectable = getInjectable({ + id: "load-terminal-font", + instantiate: (): LoadTerminalFont => async (font) => { + const fontLoaded = document.fonts.check(`10px ${font.name}`); + + if (fontLoaded) { + return; + } + + const fontFace = new FontFace(font.name, `url(${font.url})`); + + document.fonts.add(fontFace); + await fontFace.load(); + }, + causesSideEffects: true, +}); + +export default loadTerminalFontInjectable; diff --git a/src/features/terminal/renderer/fonts/preload-fonts.injectable.ts b/src/features/terminal/renderer/fonts/preload-fonts.injectable.ts new file mode 100644 index 0000000000..64c40247b7 --- /dev/null +++ b/src/features/terminal/renderer/fonts/preload-fonts.injectable.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 { getInjectable } from "@ogre-tools/injectable"; +import { beforeFrameStartsFirstInjectionToken } from "../../../../renderer/before-frame-starts/tokens"; +import terminalFontsInjectable from "./fonts.injectable"; +import loadTerminalFontInjectable from "./load-font.injectable"; + +const preloadTerminalFontsInjectable = getInjectable({ + id: "preload-terminal-fonts", + instantiate: (di) => ({ + id: "preload-terminal-fonts", + run: async () => { + const terminalFonts = di.inject(terminalFontsInjectable); + const loadTerminalFont = di.inject(loadTerminalFontInjectable); + + await Promise.allSettled(terminalFonts.map(loadTerminalFont)); + }, + }), + injectionToken: beforeFrameStartsFirstInjectionToken, +}); + +export default preloadTerminalFontsInjectable; diff --git a/src/features/terminal/renderer/fonts/red-hat-mono.injectable.ts b/src/features/terminal/renderer/fonts/red-hat-mono.injectable.ts new file mode 100644 index 0000000000..4229bc8d1d --- /dev/null +++ b/src/features/terminal/renderer/fonts/red-hat-mono.injectable.ts @@ -0,0 +1,18 @@ +/** + * 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 { terminalFontInjectionToken } from "./token"; +import RedHatMono from "./RedHatMono-Regular.ttf"; + +const redHatMonoTerminalFontInjectable = getInjectable({ + id: "red-hat-mono-terminal-font", + instantiate: () => ({ + name: "Red Hat Mono", + url: RedHatMono, + }), + injectionToken: terminalFontInjectionToken, +}); + +export default redHatMonoTerminalFontInjectable; diff --git a/src/features/terminal/renderer/fonts/roboto-mono.injectable.ts b/src/features/terminal/renderer/fonts/roboto-mono.injectable.ts new file mode 100644 index 0000000000..e3aa188486 --- /dev/null +++ b/src/features/terminal/renderer/fonts/roboto-mono.injectable.ts @@ -0,0 +1,18 @@ +/** + * 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 { terminalFontInjectionToken } from "./token"; +import RobotoMono from "./Roboto-Mono.ttf"; // patched font with icons + +const robotoMonoTerminalFontInjectable = getInjectable({ + id: "roboto-mono-terminal-font", + instantiate: () => ({ + name: "RobotoMono", + url: RobotoMono, + }), + injectionToken: terminalFontInjectionToken, +}); + +export default robotoMonoTerminalFontInjectable; diff --git a/src/features/terminal/renderer/fonts/source-code-pro.injectable.ts b/src/features/terminal/renderer/fonts/source-code-pro.injectable.ts new file mode 100644 index 0000000000..8b84a275f3 --- /dev/null +++ b/src/features/terminal/renderer/fonts/source-code-pro.injectable.ts @@ -0,0 +1,18 @@ +/** + * 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 { terminalFontInjectionToken } from "./token"; +import SourceCodePro from "./SourceCodePro-Regular.ttf"; + +const sourceCodeProTerminalFontInjectable = getInjectable({ + id: "source-code-pro-terminal-font", + instantiate: () => ({ + name: "Source Code Pro", + url: SourceCodePro, + }), + injectionToken: terminalFontInjectionToken, +}); + +export default sourceCodeProTerminalFontInjectable; diff --git a/src/features/terminal/renderer/fonts/space-mono.injectable.ts b/src/features/terminal/renderer/fonts/space-mono.injectable.ts new file mode 100644 index 0000000000..ea2df1c72e --- /dev/null +++ b/src/features/terminal/renderer/fonts/space-mono.injectable.ts @@ -0,0 +1,18 @@ +/** + * 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 { terminalFontInjectionToken } from "./token"; +import SpaceMono from "./SpaceMono-Regular.ttf"; + +const spaceMonoTerminalFontInjectable = getInjectable({ + id: "space-mono-terminal-font", + instantiate: () => ({ + name: "Space Mono", + url: SpaceMono, + }), + injectionToken: terminalFontInjectionToken, +}); + +export default spaceMonoTerminalFontInjectable; diff --git a/src/features/terminal/renderer/fonts/token.ts b/src/features/terminal/renderer/fonts/token.ts new file mode 100644 index 0000000000..8f90d400e2 --- /dev/null +++ b/src/features/terminal/renderer/fonts/token.ts @@ -0,0 +1,15 @@ +/** + * 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 interface TerminalFont { + name: string; + url: string; +} + +export const terminalFontInjectionToken = getInjectionToken({ + id: "terminal-font-token", +}); diff --git a/src/features/terminal/renderer/fonts/ubuntu-mono.injectable.ts b/src/features/terminal/renderer/fonts/ubuntu-mono.injectable.ts new file mode 100644 index 0000000000..ab8ffb7b78 --- /dev/null +++ b/src/features/terminal/renderer/fonts/ubuntu-mono.injectable.ts @@ -0,0 +1,18 @@ +/** + * 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 { terminalFontInjectionToken } from "./token"; +import UbuntuMono from "./UbuntuMono-Regular.ttf"; + +const ubunutuMonoTerminalFontInjectable = getInjectable({ + id: "ubunutu-mono-terminal-font", + instantiate: () => ({ + name: "Ubuntu Mono", + url: UbuntuMono, + }), + injectionToken: terminalFontInjectionToken, +}); + +export default ubunutuMonoTerminalFontInjectable; diff --git a/src/renderer/components/dock/terminal/terminal-fonts.injectable.ts b/src/renderer/components/dock/terminal/terminal-fonts.injectable.ts deleted file mode 100644 index 1609f8b411..0000000000 --- a/src/renderer/components/dock/terminal/terminal-fonts.injectable.ts +++ /dev/null @@ -1,78 +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 { beforeFrameStartsFirstInjectionToken } from "../../../before-frame-starts/tokens"; -import RobotoMono from "../../../fonts/Roboto-Mono-nerd.ttf"; // patched font with icons -import AnonymousPro from "../../../fonts/AnonymousPro-Regular.ttf"; -import IBMPlexMono from "../../../fonts/IBMPlexMono-Regular.ttf"; -import JetBrainsMono from "../../../fonts/JetBrainsMono-Regular.ttf"; -import RedHatMono from "../../../fonts/RedHatMono-Regular.ttf"; -import SourceCodePro from "../../../fonts/SourceCodePro-Regular.ttf"; -import SpaceMono from "../../../fonts/SpaceMono-Regular.ttf"; -import UbuntuMono from "../../../fonts/UbuntuMono-Regular.ttf"; - -export const terminalFontsInjectable = getInjectable({ - id: "terminalFontsInjectable", - - instantiate() { - return new Map([ - ["RobotoMono", RobotoMono], - ["Anonymous Pro", AnonymousPro], - ["IBM Plex Mono", IBMPlexMono], - ["JetBrains Mono", JetBrainsMono], - ["Red Hat Mono", RedHatMono], - ["Source Code Pro", SourceCodePro], - ["Space Mono", SpaceMono], - ["Ubuntu Mono", UbuntuMono], - ]); - }, -}); - - -export const preloadTerminalFontInjectable = getInjectable({ - id: "preloadTerminalFontInjectable", - - instantiate(di) { - const terminalFonts = di.inject(terminalFontsInjectable); - - return async function (fontFamily: string): Promise { - const fontBundledPath = terminalFonts.get(fontFamily); - const fontLoaded = document.fonts.check(`10px ${fontFamily}`); - - if (fontLoaded || !fontBundledPath) return; - - const font = new FontFace(fontFamily, `url(${fontBundledPath})`); - - document.fonts.add(font); - await font.load(); - }; - }, - - causesSideEffects: true, -}); - -export const preloadAllTerminalFontsInjectable = getInjectable({ - id: "preloadAllTerminalFontsInjectable", - - instantiate(di) { - const terminalFonts = di.inject(terminalFontsInjectable); - const preloadFont = di.inject(preloadTerminalFontInjectable); - - return { - id: "preload-all-terminal-fonts", - - async run() { - await Promise.allSettled( - Array.from(terminalFonts.keys()).map(preloadFont), - ); - }, - }; - }, - - injectionToken: beforeFrameStartsFirstInjectionToken, - - causesSideEffects: true, -}); diff --git a/types/mocks.d.ts b/types/mocks.d.ts index 3826aac829..1835be0c25 100644 --- a/types/mocks.d.ts +++ b/types/mocks.d.ts @@ -32,4 +32,8 @@ declare module "*.png"; declare module "*.eot"; declare module "*.woff"; declare module "*.woff2"; -declare module "*.ttf"; + +declare module "*.ttf" { + const content: string; + export = content; +} From 9f9570c3e80a625ad427115ad4d443ac59faee48 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Jan 2023 08:13:23 -0500 Subject: [PATCH 15/37] Bump eslint-plugin-import from 2.27.4 to 2.27.5 (#6953) Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.27.4 to 2.27.5. - [Release notes](https://github.com/import-js/eslint-plugin-import/releases) - [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md) - [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.27.4...v2.27.5) --- updated-dependencies: - dependency-name: eslint-plugin-import dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 3398b48ade..c3ef59a3b1 100644 --- a/package.json +++ b/package.json @@ -392,7 +392,7 @@ "eslint": "^8.32.0", "eslint-import-resolver-typescript": "^3.5.3", "eslint-plugin-header": "^3.1.1", - "eslint-plugin-import": "^2.27.4", + "eslint-plugin-import": "^2.27.5", "eslint-plugin-react": "7.32.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-unused-imports": "^2.0.0", diff --git a/yarn.lock b/yarn.lock index 4b676d2ca1..48a826ab86 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3483,7 +3483,7 @@ array.prototype.flat@^1.3.1: es-abstract "^1.20.4" es-shim-unscopables "^1.0.0" -array.prototype.flatmap@^1.3.0, array.prototype.flatmap@^1.3.1: +array.prototype.flatmap@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz#1aae7903c2100433cb8261cd4ed310aab5c4a183" integrity sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ== @@ -5873,14 +5873,14 @@ eslint-plugin-header@^3.1.1: resolved "https://registry.yarnpkg.com/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz#6ce512432d57675265fac47292b50d1eff11acd6" integrity sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg== -eslint-plugin-import@^2.27.4: - version "2.27.4" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.4.tgz#319c2f6f6580e1678d674a258ee5e981c10cc25b" - integrity sha512-Z1jVt1EGKia1X9CnBCkpAOhWy8FgQ7OmJ/IblEkT82yrFU/xJaxwujaTzLWqigewwynRQ9mmHfX9MtAfhxm0sA== +eslint-plugin-import@^2.27.5: + version "2.27.5" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz#876a6d03f52608a3e5bb439c2550588e51dd6c65" + integrity sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow== dependencies: array-includes "^3.1.6" array.prototype.flat "^1.3.1" - array.prototype.flatmap "^1.3.0" + array.prototype.flatmap "^1.3.1" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.7" From d3a3d7234a31e215b58a7ea315b3f64673fa912d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Jan 2023 08:15:07 -0500 Subject: [PATCH 16/37] Bump eslint-plugin-react from 7.32.0 to 7.32.1 (#6956) Bumps [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) from 7.32.0 to 7.32.1. - [Release notes](https://github.com/jsx-eslint/eslint-plugin-react/releases) - [Changelog](https://github.com/jsx-eslint/eslint-plugin-react/blob/master/CHANGELOG.md) - [Commits](https://github.com/jsx-eslint/eslint-plugin-react/compare/v7.32.0...v7.32.1) --- updated-dependencies: - dependency-name: eslint-plugin-react dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Signed-off-by: Sebastian Malton Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sebastian Malton --- yarn.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 48a826ab86..cc60a5fde9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5899,10 +5899,10 @@ eslint-plugin-react-hooks@^4.6.0: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== -eslint-plugin-react@7.32.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.0.tgz#d80f794a638c5770f952ba2ae793f0a516be7c09" - integrity sha512-vSBi1+SrPiLZCGvxpiZIa28fMEUaMjXtCplrvxcIxGzmFiYdsXQDwInEjuv5/i/2CTTxbkS87tE8lsQ0Qxinbw== +eslint-plugin-react@7.32.1: + version "7.32.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.1.tgz#88cdeb4065da8ca0b64e1274404f53a0f9890200" + integrity sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www== dependencies: array-includes "^3.1.6" array.prototype.flatmap "^1.3.1" From 8ace84f7e738a6a8203ef0e0528cfab7fa99bba7 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Tue, 17 Jan 2023 05:55:52 -0800 Subject: [PATCH 17/37] Delay removing iframe to fix renderer crash (#6952) Signed-off-by: Sebastian Malton Signed-off-by: Sebastian Malton --- .../cluster-manager/cluster-frame-handler.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/renderer/components/cluster-manager/cluster-frame-handler.ts b/src/renderer/components/cluster-manager/cluster-frame-handler.ts index cc980eb91d..f1b169915f 100644 --- a/src/renderer/components/cluster-manager/cluster-frame-handler.ts +++ b/src/renderer/components/cluster-manager/cluster-frame-handler.ts @@ -88,7 +88,15 @@ export class ClusterFrameHandler { () => { this.dependencies.logger.info(`[LENS-VIEW]: remove dashboard, clusterId=${clusterId}`); this.views.delete(clusterId); - parentElem.removeChild(iframe); + + // Must only remove iframe from DOM after it unloads old code. Else it crashes + iframe.addEventListener("load", () => parentElem.removeChild(iframe), { + once: true, + }); + + // This causes the old code to be unloaded. + iframe.setAttribute("src", ""); + dispose(); }, ); From 5ca12f41e9b806b09f050f5a872a9a668a83a8f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Jan 2023 08:57:08 -0500 Subject: [PATCH 18/37] Bump immer from 9.0.17 to 9.0.18 (#6955) Bumps [immer](https://github.com/immerjs/immer) from 9.0.17 to 9.0.18. - [Release notes](https://github.com/immerjs/immer/releases) - [Commits](https://github.com/immerjs/immer/compare/v9.0.17...v9.0.18) --- updated-dependencies: - dependency-name: immer dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index c3ef59a3b1..520d54f245 100644 --- a/package.json +++ b/package.json @@ -262,7 +262,7 @@ "history": "^4.10.1", "hpagent": "^1.2.0", "http-proxy": "^1.18.1", - "immer": "^9.0.17", + "immer": "^9.0.18", "joi": "^17.7.0", "js-yaml": "^4.1.0", "jsdom": "^16.7.0", diff --git a/yarn.lock b/yarn.lock index cc60a5fde9..e05990b816 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7454,10 +7454,10 @@ immediate@~3.0.5: resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= -immer@^9.0.17: - version "9.0.17" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.17.tgz#7cfe8fbb8b461096444e9da7a5ec4a67c6c4adf4" - integrity sha512-+hBruaLSQvkPfxRiTLK/mi4vLH+/VQS6z2KJahdoxlleFOI8ARqzOF17uy12eFDlqWmPoygwc5evgwcp+dlHhg== +immer@^9.0.18: + version "9.0.18" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.18.tgz#d2faee58fd0e34f017f329b98cdab37826fa31b8" + integrity sha512-eAPNpsj7Ax1q6Y/3lm2PmlwRcFzpON7HSNQ3ru5WQH1/PSpnyed/HpNOELl2CxLKoj4r+bAHgdyKqW5gc2Se1A== immutable@^4.0.0: version "4.0.0" From b2ac628d054093685c7bc686fb8c9115dd2d49ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Jan 2023 09:00:06 -0500 Subject: [PATCH 19/37] Bump @typescript-eslint/* from 5.48.1 to 5.48.2 (#6954) Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 5.48.1 to 5.48.2. - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v5.48.2/packages/parser) --- updated-dependencies: - dependency-name: "@typescript-eslint/parser" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 4 +-- yarn.lock | 96 ++++++++++++++++++++++++++-------------------------- 2 files changed, 50 insertions(+), 50 deletions(-) diff --git a/package.json b/package.json index 520d54f245..7c736a4c31 100644 --- a/package.json +++ b/package.json @@ -370,8 +370,8 @@ "@types/webpack-dev-server": "^4.7.2", "@types/webpack-env": "^1.18.0", "@types/webpack-node-externals": "^2.5.3", - "@typescript-eslint/eslint-plugin": "^5.48.1", - "@typescript-eslint/parser": "^5.48.1", + "@typescript-eslint/eslint-plugin": "^5.48.2", + "@typescript-eslint/parser": "^5.48.2", "adr": "^1.4.3", "ansi_up": "^5.1.0", "chalk": "^4.1.2", diff --git a/yarn.lock b/yarn.lock index e05990b816..3f4672f51e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2868,14 +2868,14 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.1.tgz#deee67e399f2cb6b4608c935777110e509d8018c" - integrity sha512-9nY5K1Rp2ppmpb9s9S2aBiF3xo5uExCehMDmYmmFqqyxgenbHJ3qbarcLt4ITgaD6r/2ypdlcFRdcuVPnks+fQ== +"@typescript-eslint/eslint-plugin@^5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.48.2.tgz#112e6ae1e23a1dc8333ce82bb9c65c2608b4d8a3" + integrity sha512-sR0Gja9Ky1teIq4qJOl0nC+Tk64/uYdX+mi+5iB//MH8gwyx8e3SOyhEzeLZEFEEfCaLf8KJq+Bd/6je1t+CAg== dependencies: - "@typescript-eslint/scope-manager" "5.48.1" - "@typescript-eslint/type-utils" "5.48.1" - "@typescript-eslint/utils" "5.48.1" + "@typescript-eslint/scope-manager" "5.48.2" + "@typescript-eslint/type-utils" "5.48.2" + "@typescript-eslint/utils" "5.48.2" debug "^4.3.4" ignore "^5.2.0" natural-compare-lite "^1.4.0" @@ -2883,72 +2883,72 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.48.1.tgz#d0125792dab7e232035434ab8ef0658154db2f10" - integrity sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA== +"@typescript-eslint/parser@^5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.48.2.tgz#c9edef2a0922d26a37dba03be20c5fff378313b3" + integrity sha512-38zMsKsG2sIuM5Oi/olurGwYJXzmtdsHhn5mI/pQogP+BjYVkK5iRazCQ8RGS0V+YLk282uWElN70zAAUmaYHw== dependencies: - "@typescript-eslint/scope-manager" "5.48.1" - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/typescript-estree" "5.48.1" + "@typescript-eslint/scope-manager" "5.48.2" + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/typescript-estree" "5.48.2" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.1.tgz#39c71e4de639f5fe08b988005beaaf6d79f9d64d" - integrity sha512-S035ueRrbxRMKvSTv9vJKIWgr86BD8s3RqoRZmsSh/s8HhIs90g6UlK8ZabUSjUZQkhVxt7nmZ63VJ9dcZhtDQ== +"@typescript-eslint/scope-manager@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.48.2.tgz#bb7676cb78f1e94921eaab637a4b5d596f838abc" + integrity sha512-zEUFfonQid5KRDKoI3O+uP1GnrFd4tIHlvs+sTJXiWuypUWMuDaottkJuR612wQfOkjYbsaskSIURV9xo4f+Fw== dependencies: - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/visitor-keys" "5.48.1" + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/visitor-keys" "5.48.2" -"@typescript-eslint/type-utils@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.48.1.tgz#5d94ac0c269a81a91ad77c03407cea2caf481412" - integrity sha512-Hyr8HU8Alcuva1ppmqSYtM/Gp0q4JOp1F+/JH5D1IZm/bUBrV0edoewQZiEc1r6I8L4JL21broddxK8HAcZiqQ== +"@typescript-eslint/type-utils@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.48.2.tgz#7d3aeca9fa37a7ab7e3d9056a99b42f342c48ad7" + integrity sha512-QVWx7J5sPMRiOMJp5dYshPxABRoZV1xbRirqSk8yuIIsu0nvMTZesKErEA3Oix1k+uvsk8Cs8TGJ6kQ0ndAcew== dependencies: - "@typescript-eslint/typescript-estree" "5.48.1" - "@typescript-eslint/utils" "5.48.1" + "@typescript-eslint/typescript-estree" "5.48.2" + "@typescript-eslint/utils" "5.48.2" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.1.tgz#efd1913a9aaf67caf8a6e6779fd53e14e8587e14" - integrity sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg== +"@typescript-eslint/types@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.48.2.tgz#635706abb1ec164137f92148f06f794438c97b8e" + integrity sha512-hE7dA77xxu7ByBc6KCzikgfRyBCTst6dZQpwaTy25iMYOnbNljDT4hjhrGEJJ0QoMjrfqrx+j1l1B9/LtKeuqA== -"@typescript-eslint/typescript-estree@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.1.tgz#9efa8ee2aa471c6ab62e649f6e64d8d121bc2056" - integrity sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA== +"@typescript-eslint/typescript-estree@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.48.2.tgz#6e206b462942b32383582a6c9251c05021cc21b0" + integrity sha512-bibvD3z6ilnoVxUBFEgkO0k0aFvUc4Cttt0dAreEr+nrAHhWzkO83PEVVuieK3DqcgL6VAK5dkzK8XUVja5Zcg== dependencies: - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/visitor-keys" "5.48.1" + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/visitor-keys" "5.48.2" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.48.1.tgz#20f2f4e88e9e2a0961cbebcb47a1f0f7da7ba7f9" - integrity sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA== +"@typescript-eslint/utils@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.48.2.tgz#3777a91dcb22b8499a25519e06eef2e9569295a3" + integrity sha512-2h18c0d7jgkw6tdKTlNaM7wyopbLRBiit8oAxoP89YnuBOzCZ8g8aBCaCqq7h208qUTroL7Whgzam7UY3HVLow== dependencies: "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.48.1" - "@typescript-eslint/types" "5.48.1" - "@typescript-eslint/typescript-estree" "5.48.1" + "@typescript-eslint/scope-manager" "5.48.2" + "@typescript-eslint/types" "5.48.2" + "@typescript-eslint/typescript-estree" "5.48.2" eslint-scope "^5.1.1" eslint-utils "^3.0.0" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.48.1": - version "5.48.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.1.tgz#79fd4fb9996023ef86849bf6f904f33eb6c8fccb" - integrity sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA== +"@typescript-eslint/visitor-keys@5.48.2": + version "5.48.2" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.48.2.tgz#c247582a0bcce467461d7b696513bf9455000060" + integrity sha512-z9njZLSkwmjFWUelGEwEbdf4NwKvfHxvGC0OcGN1Hp/XNDIcJ7D5DpPNPv6x6/mFvc1tQHsaWmpD/a4gOvvCJQ== dependencies: - "@typescript-eslint/types" "5.48.1" + "@typescript-eslint/types" "5.48.2" eslint-visitor-keys "^3.3.0" "@webassemblyjs/ast@1.11.1": From 7c9520181c7c7b069840b1e86f13b9b01816e8e0 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Tue, 17 Jan 2023 08:04:29 -0800 Subject: [PATCH 20/37] Update lockfile (#6965) * Update lockfile Signed-off-by: Sebastian Malton * Update lockfile Signed-off-by: Sebastian Malton Signed-off-by: Sebastian Malton --- package.json | 2 +- yarn.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 7c736a4c31..e05f484da9 100644 --- a/package.json +++ b/package.json @@ -393,7 +393,7 @@ "eslint-import-resolver-typescript": "^3.5.3", "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.27.5", - "eslint-plugin-react": "7.32.0", + "eslint-plugin-react": "^7.32.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-unused-imports": "^2.0.0", "fork-ts-checker-webpack-plugin": "^6.5.2", diff --git a/yarn.lock b/yarn.lock index 3f4672f51e..8962848499 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5899,7 +5899,7 @@ eslint-plugin-react-hooks@^4.6.0: resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" integrity sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g== -eslint-plugin-react@7.32.1: +eslint-plugin-react@^7.32.1: version "7.32.1" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.32.1.tgz#88cdeb4065da8ca0b64e1274404f53a0f9890200" integrity sha512-vOjdgyd0ZHBXNsmvU+785xY8Bfe57EFbTYYk8XrROzWpr9QBvpjITvAXt9xqcE6+8cjR/g1+mfumPToxsl1www== From c0de5fcfcb11896437beb9f767cc33808e175667 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Jan 2023 08:37:29 -0500 Subject: [PATCH 21/37] Bump @swc/core from 1.3.26 to 1.3.27 (#6968) Bumps [@swc/core](https://github.com/swc-project/swc) from 1.3.26 to 1.3.27. - [Release notes](https://github.com/swc-project/swc/releases) - [Changelog](https://github.com/swc-project/swc/blob/main/CHANGELOG.md) - [Commits](https://github.com/swc-project/swc/compare/v1.3.26...v1.3.27) --- updated-dependencies: - dependency-name: "@swc/core" dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 108 +++++++++++++++++++++++++-------------------------- 2 files changed, 55 insertions(+), 55 deletions(-) diff --git a/package.json b/package.json index e05f484da9..6dbdb88fdf 100644 --- a/package.json +++ b/package.json @@ -312,7 +312,7 @@ "@pmmmwh/react-refresh-webpack-plugin": "^0.5.10", "@sentry/types": "^6.19.7", "@swc/cli": "^0.1.59", - "@swc/core": "^1.3.26", + "@swc/core": "^1.3.27", "@swc/jest": "^0.2.24", "@testing-library/dom": "^7.31.2", "@testing-library/jest-dom": "^5.16.5", diff --git a/yarn.lock b/yarn.lock index 8962848499..07f5832640 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1845,71 +1845,71 @@ slash "3.0.0" source-map "^0.7.3" -"@swc/core-darwin-arm64@1.3.26": - version "1.3.26" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.26.tgz#43355315f0668a6a5366208f09678349bc0f44ee" - integrity sha512-FWWflBfKRYrUJtko2xiedC5XCa31O75IZZqnTWuLpe9g3C5tnUuF3M8LSXZS/dn6wprome1MhtG9GMPkSYkhkg== +"@swc/core-darwin-arm64@1.3.27": + version "1.3.27" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.27.tgz#247b275d505c2462ce08cca4e322becbca8e428a" + integrity sha512-IKlxkhEy99CnP9nduaf5IJWIFcr6D5cZCjYmCs7nWkjMV+aAieyDO9AX4LT8AcHy6CF7ByOX7SKoqk+gVMAaKw== -"@swc/core-darwin-x64@1.3.26": - version "1.3.26" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.26.tgz#462fc2e1377437b7c7bbdf5988f51adfeea3efa9" - integrity sha512-0uQeebAtsewqJ2b35aPZstGrylwd6oJjUyAJOfVJNbremFSJ5JzytB3NoDCIw7CT5UQrSRpvD3mU95gfdQjDGA== +"@swc/core-darwin-x64@1.3.27": + version "1.3.27" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.3.27.tgz#11090424c9bfd0d3e799abb06c1fa6a07abf5ed9" + integrity sha512-MtabZIhFf/dL3vs6UMbd+vJsjIkm2NaFqulGV0Jofy2bfVZPTj/b5pXeOlUsTWy7JcH1uixjdx4RvJRyvqJxQA== -"@swc/core-linux-arm-gnueabihf@1.3.26": - version "1.3.26" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.26.tgz#fecd9c2e7d9b69c849907a83a5101a98c047d986" - integrity sha512-06T+LbVFlyciQtwrUB5/a16A1ju1jFoYvd/hq9TWhf7GrtL43U7oJIgqMOPHx2j0+Ps2R3S6R/UUN5YXu618zA== +"@swc/core-linux-arm-gnueabihf@1.3.27": + version "1.3.27" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.27.tgz#a41b40e056ed0887686e04a30b395521fe3f2d47" + integrity sha512-XELMoGcUTAkk+G4buwIIhu6AIr1U418Odt22HUW8+ZvV+Wty2ICgR/myOIhM3xMb6U2L8ay+evMqoVNMQ0RRTg== -"@swc/core-linux-arm64-gnu@1.3.26": - version "1.3.26" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.26.tgz#82a8462212263f4e4f6691473d4c2839b73c2084" - integrity sha512-2NT/0xALPfK+U01qIlHxjkGdIj6F0txhu1U2v6B0YP2+k0whL2gCgYeg9QUvkYEXSD5r1Yx+vcb2R/vaSCSClg== +"@swc/core-linux-arm64-gnu@1.3.27": + version "1.3.27" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.27.tgz#61705b0d534472a9dbde575594c61ef1377d0075" + integrity sha512-O6vtT6bnrVR9PzEIuA5U7tIfYo7bv97H9K9Vqy2oyHNeGN0H36DKwS4UqPreHtziXNF5+7ubdUYUkrG/j8UnUQ== -"@swc/core-linux-arm64-musl@1.3.26": - version "1.3.26" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.26.tgz#050b7c1aa81d6f34769eb556c3a94c61a9b69aaa" - integrity sha512-64KrTay9hC0mTvZ1AmEFmNEwV5QDjw9U7PJU5riotSc28I+Q/ZoM0qcSFW9JRRa6F2Tr+IfMtyv8+eB2//BQ5g== +"@swc/core-linux-arm64-musl@1.3.27": + version "1.3.27" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.27.tgz#4fb86dcf70b7fc1aba51d82bba00bb2c4134a980" + integrity sha512-Oa0E1i7dOTWpaEZumKoNbTE/Ap+da6nlhqKVUdYrFDrOBi25tz76SdxZIyvAszzmgY89b5yd1naourKmkPXpww== -"@swc/core-linux-x64-gnu@1.3.26": - version "1.3.26" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.26.tgz#e306778c2c1838350f588c8ae800e74434dc2b9a" - integrity sha512-Te8G13l3dcRM1Mf3J4JzGUngzNXLKnMYlUmBOYN/ORsx7e+VNelR3zsTLHC0+0jGqELDgqvMyzDfk+dux/C/bQ== +"@swc/core-linux-x64-gnu@1.3.27": + version "1.3.27" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.27.tgz#691cc341f8dd7f93a8e01044a2ad8b0e7111d65c" + integrity sha512-S3v9H8oL2a8Ur6AjQyhkC6HfBVPOxKMdBhcZmdNuVgEUHbHdbf/Lka85F9IOYXEarMn0FtQw3ywowS22O9L5Uw== -"@swc/core-linux-x64-musl@1.3.26": - version "1.3.26" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.26.tgz#531d9ec7c37f56df5c6cc121db5dd6faff5e2c38" - integrity sha512-nqQWuSM6OTKepUiQ9+rXgERq/JiO72RBOpXKO2afYppsL96sngjIRewV74v5f6IAfyzw+k+AhC5pgRA4Xu/Jkg== +"@swc/core-linux-x64-musl@1.3.27": + version "1.3.27" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.27.tgz#a3e1c98513d6e8594c612ab3a671f10e2644dc2e" + integrity sha512-6DDkdXlOADpwICFZTRphCR+cIeS8aEYh4NlyzBito0mOWwIIdfCgALzhkTQOzTOkcD42bP97CIoZ97hqV/puOg== -"@swc/core-win32-arm64-msvc@1.3.26": - version "1.3.26" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.26.tgz#9c7f245903694484bd00c4da5142f24070094d0f" - integrity sha512-xx34mx+9IBV1sun7sxoNFiqNom9wiOuvsQFJUyQptCnZHgYwOr9OI204LBF95dCcBCZsTm2hT1wBnySJOeimYw== +"@swc/core-win32-arm64-msvc@1.3.27": + version "1.3.27" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.27.tgz#70c173f78d3dfd97a0d99374d8f6d55b6fa1c4ef" + integrity sha512-baxfH4AbEcaTNo08wxV0W6hiMXwVCxPS4qc0amHpXPti92unvSqeDR1W3C9GjHqzXlWtmCRsq8Ww1pal6ZVLrw== -"@swc/core-win32-ia32-msvc@1.3.26": - version "1.3.26" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.26.tgz#56d83cc216218d78cc578f01499777cdfc0a4eeb" - integrity sha512-48LZ/HKNuU9zl8c7qG6IQKb5rBCwmJgysGOmEGzTRBYxAf/x6Scmt0aqxCoV4J02HOs2WduCBDnhUKsSQ2kcXQ== +"@swc/core-win32-ia32-msvc@1.3.27": + version "1.3.27" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.27.tgz#f34d40710da7939ea32c9a3a4334581468ae09aa" + integrity sha512-7iLJnH71k5qCwxv9NcM/P7nIEzTsC7r1sIiQW6bu+CpC8qZvwl0PS+XvQRlLly2gCZM+Le98tksYG14MEh+Hrw== -"@swc/core-win32-x64-msvc@1.3.26": - version "1.3.26" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.26.tgz#bb65bc0fff712c8ca3702d9c0adc59894ca54bae" - integrity sha512-UPe7S+MezD/S6cKBIc50TduGzmw6PBz1Ms5p+5wDLOKYNS/LSEM4iRmLwvePzP5X8mOyesXrsbwxLy8KHP65Yw== +"@swc/core-win32-x64-msvc@1.3.27": + version "1.3.27" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.27.tgz#f3b131d952808569d99dd4851e95910667743bd5" + integrity sha512-mFM907PDw/jrQ44+TRjIVGEOy2Mu06mMMz0HPMFuRsBzl5t0Kajp3vmn8FkkpS9wH5982VPi6hPYVTb7QJo5Qg== -"@swc/core@^1.3.26": - version "1.3.26" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.26.tgz#6f7fe6ad54eac7ecffbdfa75d5c4300e2f96b8f6" - integrity sha512-U7vEsaLn3IGg0XCRLJX/GTkK9WIfFHUX5USdrp1L2QD29sWPe25HqNndXmUR9KytzKmpDMNoUuHyiuhpVrnNeQ== +"@swc/core@^1.3.27": + version "1.3.27" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.3.27.tgz#189da5fd132beba28106f5e5fcf43ce127c800dc" + integrity sha512-praRNgpeYGvwDIm/Cl6JU+yHMvwVraL0U6ejMgGyzvpcm1FVsZd1/EYXGqzbBJ0ALv7Gx4eK56h4GnwV6d4L0w== optionalDependencies: - "@swc/core-darwin-arm64" "1.3.26" - "@swc/core-darwin-x64" "1.3.26" - "@swc/core-linux-arm-gnueabihf" "1.3.26" - "@swc/core-linux-arm64-gnu" "1.3.26" - "@swc/core-linux-arm64-musl" "1.3.26" - "@swc/core-linux-x64-gnu" "1.3.26" - "@swc/core-linux-x64-musl" "1.3.26" - "@swc/core-win32-arm64-msvc" "1.3.26" - "@swc/core-win32-ia32-msvc" "1.3.26" - "@swc/core-win32-x64-msvc" "1.3.26" + "@swc/core-darwin-arm64" "1.3.27" + "@swc/core-darwin-x64" "1.3.27" + "@swc/core-linux-arm-gnueabihf" "1.3.27" + "@swc/core-linux-arm64-gnu" "1.3.27" + "@swc/core-linux-arm64-musl" "1.3.27" + "@swc/core-linux-x64-gnu" "1.3.27" + "@swc/core-linux-x64-musl" "1.3.27" + "@swc/core-win32-arm64-msvc" "1.3.27" + "@swc/core-win32-ia32-msvc" "1.3.27" + "@swc/core-win32-x64-msvc" "1.3.27" "@swc/jest@^0.2.24": version "0.2.24" From ec84eeed8b15065feace3ee51ad43c1ed2c18d02 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Jan 2023 08:37:41 -0500 Subject: [PATCH 22/37] Bump esbuild from 0.17.0 to 0.17.2 (#6967) Bumps [esbuild](https://github.com/evanw/esbuild) from 0.17.0 to 0.17.2. - [Release notes](https://github.com/evanw/esbuild/releases) - [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md) - [Commits](https://github.com/evanw/esbuild/compare/v0.17.0...v0.17.2) --- updated-dependencies: - dependency-name: esbuild dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 228 +++++++++++++++++++++++++-------------------------- 2 files changed, 115 insertions(+), 115 deletions(-) diff --git a/package.json b/package.json index 6dbdb88fdf..9a520c79c7 100644 --- a/package.json +++ b/package.json @@ -387,7 +387,7 @@ "electron": "^19.1.9", "electron-builder": "^23.6.0", "electron-notarize": "^0.3.0", - "esbuild": "^0.17.0", + "esbuild": "^0.17.2", "esbuild-loader": "^2.21.0", "eslint": "^8.32.0", "eslint-import-resolver-typescript": "^3.5.3", diff --git a/yarn.lock b/yarn.lock index 07f5832640..8fddc7a474 100644 --- a/yarn.lock +++ b/yarn.lock @@ -603,220 +603,220 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz#cf91e86df127aa3d141744edafcba0abdc577d23" integrity sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg== -"@esbuild/android-arm64@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.0.tgz#dd4c28274f08a16be95430d19fc0dab835fd2eae" - integrity sha512-77GVyD7ToESy/7+9eI8z62GGBdS/hsqsrpM+JA4kascky86wHbN29EEFpkVvxajPL7k6mbLJ5VBQABdj7n9FhQ== +"@esbuild/android-arm64@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.2.tgz#73aa058f1fdc43770afd9a7b39654ce7e1b2e774" + integrity sha512-QSkmYISXr2uFoR+NdmmKyR5svYb0cXDCfzwNblLsrC8wTpx/I1L7u/zrjrf4aLoHoRTycZFIewJwBiUrO5DWtQ== "@esbuild/android-arm@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz#025b6246d3f68b7bbaa97069144fb5fb70f2fff2" integrity sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw== -"@esbuild/android-arm@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.0.tgz#10d289617902f877a28f9f7913f4f54a4e699875" - integrity sha512-hlbX5ym1V5kIKvnwFhm6rhar7MNqfJrZyYTNfk6+WS1uQfQmszFgXeyPH2beP3lSCumZyqX0zMBfOqftOpZ7GA== +"@esbuild/android-arm@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.2.tgz#7cdb67672350177edbaa1de1bedd71b295989fab" + integrity sha512-Art7v3xYfqH1gEMUSP0Nx67pNAlC/Y3qSg3mOw8Wg7MP9bJLXL0DrmJaV1Qz1o4FwagtvDgkVOeBDpZgxdj13Q== "@esbuild/android-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz#c820e0fef982f99a85c4b8bfdd582835f04cd96e" integrity sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ== -"@esbuild/android-x64@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.0.tgz#b0c124e434cec1a6551b400850458c860a30ecb4" - integrity sha512-TroxZdZhtAz0JyD0yahtjcbKuIXrBEAoAazaYSeR2e2tUtp9uXrcbpwFJF6oxxOiOOne6y7l4hx4YVnMW/tdFw== +"@esbuild/android-x64@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.2.tgz#58cb40ea9502a619551dab8145ec19de3192f3d8" + integrity sha512-5VOaFBI0RK8jJVDHdeU1YJmpxXoOf1RPoiOBhk/Tvpulw7R1SwCsxHvC3eDQcoF0gV7YM4V2wJO0PR9tem6gCQ== "@esbuild/darwin-arm64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz#edef4487af6b21afabba7be5132c26d22379b220" integrity sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w== -"@esbuild/darwin-arm64@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.0.tgz#4a1b65e756cc29e8d68a5ace0a2eb1c63614a767" - integrity sha512-wP/v4cgdWt1m8TS/WmbaBc3NZON10eCbm6XepdVc3zJuqruHCzCKcC9dTSTEk50zX04REcRcbIbdhTMciQoFIg== +"@esbuild/darwin-arm64@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.2.tgz#d9d60f704e13611db85acf2cc1ce2ed34fe5e46a" + integrity sha512-iQJu1Zn1Wi91D5x/sslEn/jwae1tgSAEHK0R/kYzIr5jO992IJwDDuWhSGll23jHt18RECxahhGG0BWY/bVUTw== "@esbuild/darwin-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz#42829168730071c41ef0d028d8319eea0e2904b4" integrity sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg== -"@esbuild/darwin-x64@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.0.tgz#9a59890391f17cd3998d2c7959ea70a1aad28c93" - integrity sha512-R4WB6D6V9KGO/3LVTT8UlwRJO26IBFatOdo/bRXksfJR0vyOi2/lgmAAMBSpgcnnwvts9QsWiyM++mTTlwRseA== +"@esbuild/darwin-x64@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.2.tgz#4ae5735e1cd09b584cff4b8066a246cc62b06c97" + integrity sha512-j750nyrwoRZd3VnPo5sd12/5U27TxFGmvmoDv93G2jiaGJPYKJ/+5IfRAvHahGePTUIRPyOlE5YLFw9MlzuBnw== "@esbuild/freebsd-arm64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz#1f4af488bfc7e9ced04207034d398e793b570a27" integrity sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw== -"@esbuild/freebsd-arm64@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.0.tgz#3412ffa1703c991b4d562176881fb43a9ee6f7e3" - integrity sha512-FO7+UEZv79gen2df8StFYFHZPI9ADozpFepLZCxY+O8sYLDa1rirvenmLwJiOHmeQRJ5orYedFeLk1PFlZ6t8Q== +"@esbuild/freebsd-arm64@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.2.tgz#0265bd51eb1951b27eb693fd4989a4154e32bd58" + integrity sha512-ti7GU+/KUQQXEPmSUep7efZpA3KR2SkKsVuSL2FE7Yxka9apuqKfymAgQmVPMxstzAgCRBIu8uEu0KFmTfs3/Q== "@esbuild/freebsd-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz#636306f19e9bc981e06aa1d777302dad8fddaf72" integrity sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug== -"@esbuild/freebsd-x64@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.0.tgz#427f2a07c997fb30f1a8906b070e28959f38f1e2" - integrity sha512-qCsNRsVTaC3ekwZcb2sa7l1gwCtJK3EqCWyDgpoQocYf3lRpbAzaCvqZSF2+NOO64cV+JbedXPsFiXU1aaVcIg== +"@esbuild/freebsd-x64@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.2.tgz#7b29d68def0ab7c5a21e3d8ec67a7a47db5f9993" + integrity sha512-NgooSKWSnrNKRuiumY1dg7KAGpsyXIMcwyOXN9imnqe8VFjqqrEOMqZRik0C1wlfLjiSCuMsj+YUSmBMAJMt0A== "@esbuild/linux-arm64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz#a003f7ff237c501e095d4f3a09e58fc7b25a4aca" integrity sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g== -"@esbuild/linux-arm64@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.0.tgz#0e32c6a6b290406b1203854c2d594987570dd66c" - integrity sha512-js4Vlch5XJQYISbDVJd2hsI/MsfVUz6d/FrclCE73WkQmniH37vFpuQI42ntWAeBghDIfaPZ6f9GilhwGzVFUg== +"@esbuild/linux-arm64@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.2.tgz#4ac9edc5011e0d5e3f8673c3c3b00dc5c9bf4459" + integrity sha512-jcJ4cxwQyqEqgDwkqj7820nKx9cM5WBPCCU4oUXvTeG+DkkJE6/P75od0VPHmItFfEJu+/2vV85ebvFVomZcBg== "@esbuild/linux-arm@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz#b591e6a59d9c4fe0eeadd4874b157ab78cf5f196" integrity sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ== -"@esbuild/linux-arm@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.0.tgz#5a70a95bf336035884dee123b5453aeab9c608f3" - integrity sha512-Y2G2NU6155gcfNKvrakVmZV5xUAEhXjsN/uKtbKKRnvee0mHUuaT3OdQJDJKjHVGr6B0898pc3slRpI1PqspoQ== +"@esbuild/linux-arm@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.2.tgz#5b3f46608b682e32255f6dce10ddcc150826df4d" + integrity sha512-8dfrRTd39n+THdAetwQKNwK6zBPR5oPjMtgRNXvRq8gsn/J5o69zTaOWVi3QO09BljqdShxU2dxDA09lDhdIqQ== "@esbuild/linux-ia32@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz#24333a11027ef46a18f57019450a5188918e2a54" integrity sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg== -"@esbuild/linux-ia32@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.0.tgz#47baca8e733405a81952bcc475da1b8e5682915f" - integrity sha512-7tl/jSPkF59R3zeFDB2/09zLGhcM7DM+tCoOqjJbQjuL6qbMWomGT2RglCqRFpCSdzBx0hukmPPgUAMlmdj0sQ== +"@esbuild/linux-ia32@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.2.tgz#21e123e2557236c847b38c2ea4dac3d8fbd1081c" + integrity sha512-dXZ3m++zaRVD2fqOUPP8QTh1Lfg6WO6uZDo/QJ3KdfnIR7dDToDtaA12AgKYvCed9Nuzf/gpKs/7/f6I02b/sg== "@esbuild/linux-loong64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz#d5ad459d41ed42bbd4d005256b31882ec52227d8" integrity sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ== -"@esbuild/linux-loong64@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.0.tgz#809398ca125ba3b57d4d12d261f2471ac32b1edb" - integrity sha512-OG356F7dIVVF+EXJx5UfzFr1I5l6ES53GlMNSr3U1MhlaVyrP9um5PnrSJ+7TSDAzUC7YGjxb2GQWqHLd5XFoA== +"@esbuild/linux-loong64@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.2.tgz#05e2ca319a925de0a28fe2d8a31e158f8172dac9" + integrity sha512-/vntXkzSe9TUp0Rh35Wgye1EOhDtmIMjwC4rtahHcALmDXL+iuQGvwGFvXrP+sBigia/ltLryMAvCiqGV6plqw== "@esbuild/linux-mips64el@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz#4e5967a665c38360b0a8205594377d4dcf9c3726" integrity sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw== -"@esbuild/linux-mips64el@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.0.tgz#94b50097a3421ff538eb6a41cd4fb5db4c4993ff" - integrity sha512-LWQJgGpxrjh2x08UYf6G5R+Km7zhkpCvKXtFQ6SX0fimDvy1C8kslgFHGxLS0wjGV8C4BNnENW/HNy57+RB7iA== +"@esbuild/linux-mips64el@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.2.tgz#98f0e25b86153d725d4379bc267a2cd4c9bcdd24" + integrity sha512-guYcNHjMRO1BMxWAeb8LDfgQaU8oeUO65xtlclwBD+hX3163KBifEHyao1hK96J10BP9n0UmZug6GhtGZaNm2Q== "@esbuild/linux-ppc64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz#206443a02eb568f9fdf0b438fbd47d26e735afc8" integrity sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g== -"@esbuild/linux-ppc64@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.0.tgz#3a580bc8b494d3b273cf08a3bb0d893b31b786ae" - integrity sha512-f40N8fKiTQslUcUuhof2/syOQ+DC9Mqdnm9d063pew+Ptv9r6dBNLQCz4300MOfCLAbb0SdnrcMSzHbMehXWLw== +"@esbuild/linux-ppc64@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.2.tgz#45252f5343c5178dae93f8f7fc97aa4304cc5cca" + integrity sha512-fzHTnIGIVqgUGZcFnnisguKD4UneF4uwWwkG+i8kBspMDdU1wJ0jha1VdtxWP7Ob1KGxuXcoUlrQkCVO+Z5iOw== "@esbuild/linux-riscv64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz#c351e433d009bf256e798ad048152c8d76da2fc9" integrity sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw== -"@esbuild/linux-riscv64@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.0.tgz#bf75f769e5fa35d143bc5759520e4277b3a95bcc" - integrity sha512-sc/pvLexRvxgEbmeq7LfLGnzUBFi/E2MGbnQj3CG8tnQ90tWPTi+9CbZEgIADhj6CAlCCmqxpUclIV1CRVUOTw== +"@esbuild/linux-riscv64@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.2.tgz#6c4446ad19a4d8b070ea0ddf124b6ea53750d5e2" + integrity sha512-Sa+z7csvNVeAsTD83tVSggOb8CAU7EdDuihC8WhtoJfuDVkF5+Vi0imaiCjXQ7Ci5rz/a8IJ1H1MWX3eI9AmuQ== "@esbuild/linux-s390x@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz#661f271e5d59615b84b6801d1c2123ad13d9bd87" integrity sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w== -"@esbuild/linux-s390x@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.0.tgz#ad6569476d6751cc9255fe059a5e074a08dd3e27" - integrity sha512-7xq9/kY0vunCL2vjHKdHGI+660pCdeEC6K6TWBVvbTGXvT8s/qacfxMgr8PCeQRbNUZLOA13G6/G1+c0lYXO1A== +"@esbuild/linux-s390x@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.2.tgz#5c03feb73b0c3fa80834eb150cd9c14206681b4e" + integrity sha512-jUFCO+/VA1Y/oeauSNBubp2UtGu4xjBUEFVgMPm0qLuw6xw18yOagKwBOPVmyE3ZSFqGd9BAPZM/JrtadgBryA== "@esbuild/linux-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz#e4ba18e8b149a89c982351443a377c723762b85f" integrity sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw== -"@esbuild/linux-x64@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.0.tgz#7e38c248b8c9f39240c0914872f93893bde7182a" - integrity sha512-o7FhBLONk1mLT2ytlj/j/WuJcPdhWcVpysSJn1s9+zRdLwLKveipbPi5SIasJIqMq0T4CkQW76pxJYMqz9HrQA== +"@esbuild/linux-x64@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.2.tgz#60405f2a40fb792557293a11ba0c380cfe744fcc" + integrity sha512-naygxkSmr6x9tuvpa8iGefnXo3Rc3Noz7c4+Dn0MSfSWJwLaN2YR686e7HkI09irfjDdU5UAq9wcxUwjkYQNUA== "@esbuild/netbsd-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz#7d4f4041e30c5c07dd24ffa295c73f06038ec775" integrity sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA== -"@esbuild/netbsd-x64@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.0.tgz#46e770aa6a14dad73d2cdf6a9521585eca1005ef" - integrity sha512-V6xXsv71b8vwFCW/ky82Rs//SbyA+ORty6A7Mzkg33/4NbYZ/1Vcbk7qAN5oi0i/gS4Q0+7dYT7NqaiVZ7+Xjw== +"@esbuild/netbsd-x64@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.2.tgz#be8afb6d91827ecb8a8f42a43c63b528bbdd9c53" + integrity sha512-Hagbdq4EpiG9XXJY6Ozfrl2RN5jkXZXd6BD39f43tWz0d8yyOrRZlofM1eA6JYQbdv6c8BUsUOcgopavIqwx4Q== "@esbuild/openbsd-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz#970fa7f8470681f3e6b1db0cc421a4af8060ec35" integrity sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg== -"@esbuild/openbsd-x64@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.0.tgz#5d4070663448db20d3de42f7a44a2c2dd0cac847" - integrity sha512-StlQor6A0Y9SSDxraytr46Qbz25zsSDmsG3MCaNkBnABKHP3QsngOCfdBikqHVVrXeK0KOTmtX92/ncTGULYgQ== +"@esbuild/openbsd-x64@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.2.tgz#18e9f4c8284ade701039df1de246a35161dd382e" + integrity sha512-Pkby+VEXY7+aWP8J2RUCfqWbbZz2M1GavRGGnE2kEPzwarba/BOk3B45PSaKwc3iKdK2rgCPCTjC/p9JoKNejA== "@esbuild/sunos-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz#abc60e7c4abf8b89fb7a4fe69a1484132238022c" integrity sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw== -"@esbuild/sunos-x64@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.0.tgz#4a77dbf1691ce2fd9aba69f58248d46f3e28f98b" - integrity sha512-K64Wqw57j8KrwjR3QjsuzN/qDGK6Cno6QYtIlWAmGab5iYPBZCWz7HFtF2a86/130LmUsdXqOID7J0SmjjRFIQ== +"@esbuild/sunos-x64@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.2.tgz#c45c5b6fa406af451e3ebe2ba610bfaad106d20b" + integrity sha512-WAyg4dBTUsAPJ9cRnuQ23cwJWYRhP4e4y0M/l2+EpRjWW+g1MNAXKQQNNhRQ71zc8UixRVrqj+43ReHeZC8mJQ== "@esbuild/win32-arm64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz#7b0ff9e8c3265537a7a7b1fd9a24e7bd39fcd87a" integrity sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw== -"@esbuild/win32-arm64@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.0.tgz#9b7cb6839240cd4408fbca6565c6a08e277d73bb" - integrity sha512-hly6iSWAf0hf3aHD18/qW7iFQbg9KAQ0RFGG9plcxkhL4uGw43O+lETGcSO/PylNleFowP/UztpF6U4oCYgpPw== +"@esbuild/win32-arm64@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.2.tgz#6b6d31077cba24bd8bc9e173b9ae052b0bef5b0c" + integrity sha512-rMbO3gPpxuENd+AnZLgo4J/g+BkwxT3NK7nYpSZ0KlYtSdlxYMIMG5pznX7a1ISZKo67aGStne+K41jdkBywpA== "@esbuild/win32-ia32@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz#e90fe5267d71a7b7567afdc403dfd198c292eb09" integrity sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig== -"@esbuild/win32-ia32@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.0.tgz#059a1651b830bfc188920487badd12a8e1b8f050" - integrity sha512-aL4EWPh0nyC5uYRfn+CHkTgawd4DjtmwquthNDmGf6Ht6+mUc+bQXyZNH1QIw8x20hSqFc4Tf36aLLWP/TPR3g== +"@esbuild/win32-ia32@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.2.tgz#88bb3a510006114d8291506b6ec9ff93f66d0d5c" + integrity sha512-73dWKDMhFk+4owS19OjEVbEDGFPRS1fyga3qOu5HPd5eTxJTjtlVTT/fG/S7AchA0vXS7hOqY70AAir1CkmICg== "@esbuild/win32-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz#c5a1a4bfe1b57f0c3e61b29883525c6da3e5c091" integrity sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q== -"@esbuild/win32-x64@0.17.0": - version "0.17.0" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.0.tgz#d2253fef7e7cd11f010f688fa4f5ebb2875f34c1" - integrity sha512-W6IIQ9Rt43I/GqfXeBFLk0TvowKBoirs9sw2LPfhHax6ayMlW5PhFzSJ76I1ac9Pk/aRcSMrHWvVyZs8ZPK2wA== +"@esbuild/win32-x64@0.17.2": + version "0.17.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.2.tgz#a7ce1ae475e14febb80e2690430e399491206a61" + integrity sha512-QFJlhf73HCBjTqAWWSIlD8JQBtmue0Dd6UV+KGccycJ3HKj1dCkXdRKJGwc5bZWiI9hrxcWsVEa1kVFaltC4vQ== "@eslint/eslintrc@^1.4.1": version "1.4.1" @@ -5762,33 +5762,33 @@ esbuild@^0.16.17: "@esbuild/win32-ia32" "0.16.17" "@esbuild/win32-x64" "0.16.17" -esbuild@^0.17.0: - version "0.17.0" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.0.tgz#fcf19373d1d546bdbec1557276284c0e6350380b" - integrity sha512-4yGk3rD95iS/wGzrx0Ji5czZcx1j2wvfF1iAJaX2FIYLB6sU6wYkDeplpZHzfwQw2yXGXsAoxmO6LnMQkl04Kg== +esbuild@^0.17.2: + version "0.17.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.2.tgz#c37ee608434be1c0e79f872c8bd484fb46af59df" + integrity sha512-odaHSgtYafOXt2nSISwdWlfRkb4ceMX3akY1mWspQpT08jsqVYEK1XtVusr250Rmbx8AVNWjMPI/yyvKqxOKMw== optionalDependencies: - "@esbuild/android-arm" "0.17.0" - "@esbuild/android-arm64" "0.17.0" - "@esbuild/android-x64" "0.17.0" - "@esbuild/darwin-arm64" "0.17.0" - "@esbuild/darwin-x64" "0.17.0" - "@esbuild/freebsd-arm64" "0.17.0" - "@esbuild/freebsd-x64" "0.17.0" - "@esbuild/linux-arm" "0.17.0" - "@esbuild/linux-arm64" "0.17.0" - "@esbuild/linux-ia32" "0.17.0" - "@esbuild/linux-loong64" "0.17.0" - "@esbuild/linux-mips64el" "0.17.0" - "@esbuild/linux-ppc64" "0.17.0" - "@esbuild/linux-riscv64" "0.17.0" - "@esbuild/linux-s390x" "0.17.0" - "@esbuild/linux-x64" "0.17.0" - "@esbuild/netbsd-x64" "0.17.0" - "@esbuild/openbsd-x64" "0.17.0" - "@esbuild/sunos-x64" "0.17.0" - "@esbuild/win32-arm64" "0.17.0" - "@esbuild/win32-ia32" "0.17.0" - "@esbuild/win32-x64" "0.17.0" + "@esbuild/android-arm" "0.17.2" + "@esbuild/android-arm64" "0.17.2" + "@esbuild/android-x64" "0.17.2" + "@esbuild/darwin-arm64" "0.17.2" + "@esbuild/darwin-x64" "0.17.2" + "@esbuild/freebsd-arm64" "0.17.2" + "@esbuild/freebsd-x64" "0.17.2" + "@esbuild/linux-arm" "0.17.2" + "@esbuild/linux-arm64" "0.17.2" + "@esbuild/linux-ia32" "0.17.2" + "@esbuild/linux-loong64" "0.17.2" + "@esbuild/linux-mips64el" "0.17.2" + "@esbuild/linux-ppc64" "0.17.2" + "@esbuild/linux-riscv64" "0.17.2" + "@esbuild/linux-s390x" "0.17.2" + "@esbuild/linux-x64" "0.17.2" + "@esbuild/netbsd-x64" "0.17.2" + "@esbuild/openbsd-x64" "0.17.2" + "@esbuild/sunos-x64" "0.17.2" + "@esbuild/win32-arm64" "0.17.2" + "@esbuild/win32-ia32" "0.17.2" + "@esbuild/win32-x64" "0.17.2" escalade@^3.1.1: version "3.1.1" From 5fc8ec610d52b0c35498bc2e8ab2c2630ada8132 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Wed, 18 Jan 2023 06:00:33 -0800 Subject: [PATCH 23/37] Publish to the correct channels instead of always latest (#6963) Signed-off-by: Sebastian Malton Signed-off-by: Sebastian Malton --- .github/workflows/release.yml | 1 + Makefile | 7 ++----- scripts/publish-extensions-npm.sh | 7 +++++++ scripts/publish-library-npm.sh | 7 +++++++ 4 files changed, 17 insertions(+), 5 deletions(-) create mode 100755 scripts/publish-extensions-npm.sh create mode 100755 scripts/publish-library-npm.sh diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4fc05cd5d3..911a103728 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -30,6 +30,7 @@ jobs: commit: master tag: ${{ steps.tagger.outputs.tagname }} body: ${{ github.event.pull_request.body }} + prerelease: ${{ endsWith(steps.tagger.outputs.tagname, '-alpha') || endsWith(steps.tagger.outputs.tagname, '-beta') }} publish-npm: uses: ./.github/workflows/publish-release-npm.yml needs: release diff --git a/Makefile b/Makefile index b6b14141ba..b7c0cd3b8d 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,6 @@ CMD_ARGS = $(filter-out $@,$(MAKECMDGOALS)) %: @: -NPM_RELEASE_TAG ?= latest ELECTRON_BUILDER_EXTRA_ARGS ?= ifeq ($(OS),Windows_NT) @@ -84,13 +83,11 @@ build-extension-types: node_modules packages/extensions/dist .PHONY: publish-extensions-npm publish-extensions-npm: node_modules build-extensions-npm - ./node_modules/.bin/npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}" - cd packages/extensions && npm publish --access=public --tag=$(NPM_RELEASE_TAG) && git restore package.json + ./scripts/publish-extensions-npm.sh .PHONY: publish-library-npm publish-library-npm: node_modules build-library-npm - ./node_modules/.bin/npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}" - npm publish --access=public --tag=$(NPM_RELEASE_TAG) + ./scripts/publish-library-npm.sh .PHONY: build-docs build-docs: diff --git a/scripts/publish-extensions-npm.sh b/scripts/publish-extensions-npm.sh new file mode 100755 index 0000000000..a715bc73d4 --- /dev/null +++ b/scripts/publish-extensions-npm.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +./node_modules/.bin/npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}" + +NPM_RELEASE_TAG=$(cat package.json | jq .version --raw-output | rg '.*-(?P\w+).*' -r '$channel' | cat) + +cd packages/extensions && npm publish --access=public --tag=${NPM_RELEASE_TAG:-latest} && git restore package.json diff --git a/scripts/publish-library-npm.sh b/scripts/publish-library-npm.sh new file mode 100755 index 0000000000..6fdd16e8a8 --- /dev/null +++ b/scripts/publish-library-npm.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +./node_modules/.bin/npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}" + +NPM_RELEASE_TAG=$(cat package.json | jq .version --raw-output | rg '.*-(?P\w+).*' -r '$channel' | cat) + +npm publish --access=public --tag=${NPM_RELEASE_TAG:-latest} From 5b3f11f80a38d9de2e025e30fdf56950d78570ea Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 18 Jan 2023 17:47:14 +0200 Subject: [PATCH 24/37] Better visibility of updating global namespace from resource listing views (#6962) * - new component refactored out from multiple resource views with excessive dependencies (e.g updating global namespace filter) - better UX to and visibility for user on click action (sometimes namespace-filter might not be visible in app/UI) - updated some snapshots with `jest --updateSnapshot src` (somehow affected `helm-charts/releases/*`) --- .../upgrade-chart-new-tab.test.ts.snap | 72 +++-- ...wing-details-for-helm-release.test.ts.snap | 288 +++++++++++++----- .../components/+config-leases/leases.scss | 4 +- .../components/+config-leases/leases.tsx | 15 +- .../components/+config-maps/config-maps.scss | 4 +- .../components/+config-maps/config-maps.tsx | 15 +- .../pod-disruption-budgets.scss | 4 +- .../pod-disruption-budgets.tsx | 15 +- .../resource-quotas.scss | 4 +- .../resource-quotas.tsx | 15 +- .../components/+config-secrets/secrets.scss | 4 +- .../components/+config-secrets/secrets.tsx | 15 +- .../components/+helm-releases/releases.scss | 4 +- .../components/+helm-releases/releases.tsx | 24 +- .../namespace-select-badge.module.scss | 9 + .../+namespaces/namespace-select-badge.tsx | 58 ++++ .../+network-endpoints/endpoints.scss | 4 +- .../+network-endpoints/endpoints.tsx | 15 +- .../+network-ingresses/ingresses.scss | 4 +- .../+network-ingresses/ingresses.tsx | 15 +- .../+network-policies/network-policies.scss | 4 +- .../+network-policies/network-policies.tsx | 15 +- .../+network-port-forwards/port-forwards.scss | 4 +- .../+network-port-forwards/port-forwards.tsx | 15 +- .../+network-services/services.scss | 4 +- .../components/+network-services/services.tsx | 15 +- .../+storage-volume-claims/volume-claims.scss | 4 +- .../+user-management/+role-bindings/view.scss | 4 +- .../+user-management/+role-bindings/view.tsx | 16 +- .../+user-management/+roles/view.scss | 4 +- .../+user-management/+roles/view.tsx | 16 +- .../+service-accounts/view.scss | 4 +- .../+service-accounts/view.tsx | 16 +- .../+workloads-cronjobs/cronjobs.scss | 4 +- .../+workloads-cronjobs/cronjobs.tsx | 16 +- .../+workloads-daemonsets/daemonsets.scss | 4 +- .../+workloads-daemonsets/daemonsets.tsx | 23 +- .../+workloads-deployments/deployments.scss | 4 +- .../+workloads-deployments/deployments.tsx | 38 ++- .../components/+workloads-jobs/jobs.scss | 4 +- .../components/+workloads-jobs/jobs.tsx | 16 +- .../components/+workloads-pods/pods.scss | 4 +- .../components/+workloads-pods/pods.tsx | 50 +-- .../+workloads-replicasets/replicasets.scss | 4 +- .../+workloads-replicasets/replicasets.tsx | 37 ++- .../+workloads-statefulsets/statefulsets.scss | 4 +- .../+workloads-statefulsets/statefulsets.tsx | 30 +- 47 files changed, 525 insertions(+), 422 deletions(-) create mode 100644 src/renderer/components/+namespaces/namespace-select-badge.module.scss create mode 100644 src/renderer/components/+namespaces/namespace-select-badge.tsx diff --git a/src/features/helm-charts/upgrade-chart/__snapshots__/upgrade-chart-new-tab.test.ts.snap b/src/features/helm-charts/upgrade-chart/__snapshots__/upgrade-chart-new-tab.test.ts.snap index 0aaff6db77..9e3eaf6f93 100644 --- a/src/features/helm-charts/upgrade-chart/__snapshots__/upgrade-chart-new-tab.test.ts.snap +++ b/src/features/helm-charts/upgrade-chart/__snapshots__/upgrade-chart-new-tab.test.ts.snap @@ -1375,11 +1375,17 @@ exports[`New Upgrade Helm Chart Dock Tab given a namespace is selected when navi +
+ Set global namespace filter to: + + my-second-namespace + +
+
+ Set global namespace filter to: + + my-second-namespace + +
+
+ Set global namespace filter to: + + my-second-namespace + +
+
+ Set global namespace filter to: + + my-second-namespace + +
+
+ Set global namespace filter to: + + my-second-namespace + +
+
+ Set global namespace filter to: + + my-second-namespace + +
+
+ Set global namespace filter to: + + some-namespace + +
+
+ Set global namespace filter to: + + some-other-namespace + +
+
+ Set global namespace filter to: + + some-namespace + +
+
+ Set global namespace filter to: + + some-other-namespace + +
+
+ Set global namespace filter to: + + some-namespace + +
+
+ Set global namespace filter to: + + some-other-namespace + +
+
+ Set global namespace filter to: + + some-namespace + +
+
+ Set global namespace filter to: + + some-other-namespace + +
+
+ Set global namespace filter to: + + some-namespace + +
+
+ Set global namespace filter to: + + some-other-namespace + +
+
+ Set global namespace filter to: + + some-namespace + +
+
+ Set global namespace filter to: + + some-other-namespace + +
+
+ Set global namespace filter to: + + some-namespace + +
+
+ Set global namespace filter to: + + some-other-namespace + +
+
+ Set global namespace filter to: + + some-namespace + +
+
+ Set global namespace filter to: + + some-other-namespace + +
+
+ Set global namespace filter to: + + some-namespace + +
+
+ Set global namespace filter to: + + some-other-namespace + +
+
+ Set global namespace filter to: + + some-namespace + +
+
+ Set global namespace filter to: + + some-other-namespace + +
+
+ Set global namespace filter to: + + some-namespace + +
+
+ Set global namespace filter to: + + some-other-namespace + +
+
+ Set global namespace filter to: + + some-namespace + +
+
+ Set global namespace filter to: + + some-other-namespace + +
{ interface Dependencies { leaseStore: LeaseStore; - filterByNamespace: FilterByNamespace; } @observer @@ -67,13 +64,10 @@ class NonInjectedLease extends React.Component { renderTableContents={lease => [ lease.getName(), , - this.props.filterByNamespace(lease.getNs()))} - > - {lease.getNs()} - , + namespace={lease.getNs()} + />, lease.getHolderIdentity(), , ]} @@ -87,6 +81,5 @@ export const Leases = withInjectables(NonInjectedLease getProps: (di, props) => ({ ...props, leaseStore: di.inject(leaseStoreInjectable), - filterByNamespace: di.inject(filterByNamespaceInjectable), }), }); diff --git a/src/renderer/components/+config-maps/config-maps.scss b/src/renderer/components/+config-maps/config-maps.scss index 7f8fd61f5c..cf81669f79 100644 --- a/src/renderer/components/+config-maps/config-maps.scss +++ b/src/renderer/components/+config-maps/config-maps.scss @@ -21,8 +21,6 @@ flex: .5; } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+config-maps/config-maps.tsx b/src/renderer/components/+config-maps/config-maps.tsx index 212e8020e0..b422c6e916 100644 --- a/src/renderer/components/+config-maps/config-maps.tsx +++ b/src/renderer/components/+config-maps/config-maps.tsx @@ -11,12 +11,10 @@ import { KubeObjectListLayout } from "../kube-object-list-layout"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; -import { prevDefault } from "../../utils"; import type { ConfigMapStore } from "./store"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; import configMapStoreInjectable from "./store.injectable"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -27,7 +25,6 @@ enum columnId { interface Dependencies { configMapStore: ConfigMapStore; - filterByNamespace: FilterByNamespace; } @observer @@ -61,13 +58,10 @@ class NonInjectedConfigMaps extends React.Component { renderTableContents={configMap => [ configMap.getName(), , - this.props.filterByNamespace(configMap.getNs()))} - > - {configMap.getNs()} - , + namespace={configMap.getNs()} + />, configMap.getKeys().join(", "), , ]} @@ -81,6 +75,5 @@ export const ConfigMaps = withInjectables(NonInjectedConfigMaps, { getProps: (di, props) => ({ ...props, configMapStore: di.inject(configMapStoreInjectable), - filterByNamespace: di.inject(filterByNamespaceInjectable), }), }); diff --git a/src/renderer/components/+config-pod-disruption-budgets/pod-disruption-budgets.scss b/src/renderer/components/+config-pod-disruption-budgets/pod-disruption-budgets.scss index 99f8fedec6..8dc2dfd721 100644 --- a/src/renderer/components/+config-pod-disruption-budgets/pod-disruption-budgets.scss +++ b/src/renderer/components/+config-pod-disruption-budgets/pod-disruption-budgets.scss @@ -21,8 +21,6 @@ flex: .5; } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+config-pod-disruption-budgets/pod-disruption-budgets.tsx b/src/renderer/components/+config-pod-disruption-budgets/pod-disruption-budgets.tsx index f2cfa76090..9a57b972a4 100644 --- a/src/renderer/components/+config-pod-disruption-budgets/pod-disruption-budgets.tsx +++ b/src/renderer/components/+config-pod-disruption-budgets/pod-disruption-budgets.tsx @@ -13,12 +13,10 @@ import type { KubeObjectDetailsProps } from "../kube-object-details"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; -import { prevDefault } from "../../utils"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import type { PodDisruptionBudgetStore } from "./store"; import { withInjectables } from "@ogre-tools/injectable-react"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import podDisruptionBudgetStoreInjectable from "./store.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -34,7 +32,6 @@ export interface PodDisruptionBudgetsProps extends KubeObjectDetailsProps [ pdb.getName(), , - this.props.filterByNamespace(pdb.getNs()))} - > - {pdb.getNs()} - , + namespace={pdb.getNs()} + />, pdb.getMinAvailable(), pdb.getMaxUnavailable(), pdb.getCurrentHealthy(), @@ -96,7 +90,6 @@ class NonInjectedPodDisruptionBudgets extends React.Component(NonInjectedPodDisruptionBudgets, { getProps: (di, props) => ({ ...props, - filterByNamespace: di.inject(filterByNamespaceInjectable), podDisruptionBudgetStore: di.inject(podDisruptionBudgetStoreInjectable), }), }); diff --git a/src/renderer/components/+config-resource-quotas/resource-quotas.scss b/src/renderer/components/+config-resource-quotas/resource-quotas.scss index 5cfef82e92..b0bf869741 100644 --- a/src/renderer/components/+config-resource-quotas/resource-quotas.scss +++ b/src/renderer/components/+config-resource-quotas/resource-quotas.scss @@ -9,8 +9,6 @@ @include table-cell-warning; } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+config-resource-quotas/resource-quotas.tsx b/src/renderer/components/+config-resource-quotas/resource-quotas.tsx index 28c3355b43..d769de7d07 100644 --- a/src/renderer/components/+config-resource-quotas/resource-quotas.tsx +++ b/src/renderer/components/+config-resource-quotas/resource-quotas.tsx @@ -12,13 +12,11 @@ import { AddQuotaDialog } from "./add-dialog/view"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; -import { prevDefault } from "../../utils"; import type { ResourceQuotaStore } from "./store"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import resourceQuotaStoreInjectable from "./store.injectable"; import openAddQuotaDialogInjectable from "./add-dialog/open.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -28,7 +26,6 @@ enum columnId { interface Dependencies { resourceQuotaStore: ResourceQuotaStore; - filterByNamespace: FilterByNamespace; openAddQuotaDialog: () => void; } @@ -61,13 +58,10 @@ class NonInjectedResourceQuotas extends React.Component { renderTableContents={resourceQuota => [ resourceQuota.getName(), , - this.props.filterByNamespace(resourceQuota.getNs()))} - > - {resourceQuota.getNs()} - , + namespace={resourceQuota.getNs()} + />, , ]} addRemoveButtons={{ @@ -84,7 +78,6 @@ class NonInjectedResourceQuotas extends React.Component { export const ResourceQuotas = withInjectables(NonInjectedResourceQuotas, { getProps: (di, props) => ({ ...props, - filterByNamespace: di.inject(filterByNamespaceInjectable), resourceQuotaStore: di.inject(resourceQuotaStoreInjectable), openAddQuotaDialog: di.inject(openAddQuotaDialogInjectable), }), diff --git a/src/renderer/components/+config-secrets/secrets.scss b/src/renderer/components/+config-secrets/secrets.scss index 41dd4ca709..4a533a5f34 100644 --- a/src/renderer/components/+config-secrets/secrets.scss +++ b/src/renderer/components/+config-secrets/secrets.scss @@ -17,8 +17,6 @@ @include table-cell-labels-offsets; } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+config-secrets/secrets.tsx b/src/renderer/components/+config-secrets/secrets.tsx index c58d06ce18..248bfcca85 100644 --- a/src/renderer/components/+config-secrets/secrets.tsx +++ b/src/renderer/components/+config-secrets/secrets.tsx @@ -13,13 +13,11 @@ import { Badge } from "../badge"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; -import { prevDefault } from "../../utils"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import type { SecretStore } from "./store"; import { withInjectables } from "@ogre-tools/injectable-react"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import secretStoreInjectable from "./store.injectable"; import openAddSecretDialogInjectable from "./add-dialog/open.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -31,7 +29,6 @@ enum columnId { } interface Dependencies { - filterByNamespace: FilterByNamespace; secretStore: SecretStore; openAddSecretDialog: () => void; } @@ -71,13 +68,10 @@ class NonInjectedSecrets extends React.Component { renderTableContents={secret => [ secret.getName(), , - this.props.filterByNamespace(secret.getNs()))} - > - {secret.getNs()} - , + namespace={secret.getNs()} + />, secret.getLabels().map(label => ( { export const Secrets = withInjectables(NonInjectedSecrets, { getProps: (di, props) => ({ ...props, - filterByNamespace: di.inject(filterByNamespaceInjectable), secretStore: di.inject(secretStoreInjectable), openAddSecretDialog: di.inject(openAddSecretDialogInjectable), }), diff --git a/src/renderer/components/+helm-releases/releases.scss b/src/renderer/components/+helm-releases/releases.scss index 04955a60eb..1cce1c5358 100644 --- a/src/renderer/components/+helm-releases/releases.scss +++ b/src/renderer/components/+helm-releases/releases.scss @@ -21,8 +21,6 @@ } } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+helm-releases/releases.tsx b/src/renderer/components/+helm-releases/releases.tsx index 5714c92fd1..1a0aded7b0 100644 --- a/src/renderer/components/+helm-releases/releases.tsx +++ b/src/renderer/components/+helm-releases/releases.tsx @@ -23,9 +23,7 @@ import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import helmReleasesRouteParametersInjectable from "./helm-releases-route-parameters.injectable"; import type { NavigateToHelmReleases } from "../../../common/front-end-routing/routes/cluster/helm/releases/navigate-to-helm-releases.injectable"; import navigateToHelmReleasesInjectable from "../../../common/front-end-routing/routes/cluster/helm/releases/navigate-to-helm-releases.injectable"; -import { prevDefault } from "../../utils"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -43,19 +41,9 @@ interface Dependencies { releasesArePending: IComputedValue; namespace: IComputedValue; navigateToHelmReleases: NavigateToHelmReleases; - filterByNamespace: FilterByNamespace; } class NonInjectedHelmReleases extends Component { - // TODO: This side-effect in mount must go. - componentDidMount() { - const namespace = this.props.namespace.get(); - - if (namespace) { - this.props.filterByNamespace(namespace); - } - } - onDetails = (item: HelmRelease) => { this.showDetails(item); }; @@ -188,13 +176,10 @@ class NonInjectedHelmReleases extends Component { ]} renderTableContents={release => [ release.getName(), - this.props.filterByNamespace(release.getNs()))} - > - {release.getNs()} - , + namespace={release.getNs()} + />, release.getChart(), release.getRevision(), release.getVersion(), @@ -226,7 +211,6 @@ export const HelmReleases = withInjectables(NonInjectedHelmRelease releases: di.inject(removableReleasesInjectable), releasesArePending: di.inject(releasesInjectable).pending, navigateToHelmReleases: di.inject(navigateToHelmReleasesInjectable), - filterByNamespace: di.inject(filterByNamespaceInjectable), ...di.inject(helmReleasesRouteParametersInjectable), }), }); diff --git a/src/renderer/components/+namespaces/namespace-select-badge.module.scss b/src/renderer/components/+namespaces/namespace-select-badge.module.scss new file mode 100644 index 0000000000..75bb18bf40 --- /dev/null +++ b/src/renderer/components/+namespaces/namespace-select-badge.module.scss @@ -0,0 +1,9 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +.NamespaceSelectBadge { + @include pseudo-link; + border-bottom: unset; +} \ No newline at end of file diff --git a/src/renderer/components/+namespaces/namespace-select-badge.tsx b/src/renderer/components/+namespaces/namespace-select-badge.tsx new file mode 100644 index 0000000000..9ae46b0342 --- /dev/null +++ b/src/renderer/components/+namespaces/namespace-select-badge.tsx @@ -0,0 +1,58 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import styles from "./namespace-select-badge.module.scss"; +import React from "react"; +import { withInjectables } from "@ogre-tools/injectable-react"; +import type { BadgeProps } from "../badge"; +import { Badge } from "../badge"; +import type { + FilterByNamespace, +} from "./namespace-select-filter-model/filter-by-namespace.injectable"; +import filterByNamespaceInjectable + from "./namespace-select-filter-model/filter-by-namespace.injectable"; +import { prevDefault, cssNames } from "../../utils"; + +export interface NamespaceSelectBadgeProps extends BadgeProps { + namespace: string; +} + +export interface Dependencies { + filterByNamespace: FilterByNamespace; +} + +export function NamespaceSelectBadgeNonInjected( + { + namespace, + label, + filterByNamespace, + ...props + }: NamespaceSelectBadgeProps & Dependencies) { + return ( + + Set global namespace filter to: + {namespace} + + )} + className={cssNames(styles.NamespaceSelectBadge, props.className)} + onClick={prevDefault(() => filterByNamespace(namespace))} + /> + ); +} + +export const NamespaceSelectBadge = withInjectables(NamespaceSelectBadgeNonInjected, { + getProps(di, props) { + return { + ...props, + filterByNamespace: di.inject(filterByNamespaceInjectable), + }; + }, +}); diff --git a/src/renderer/components/+network-endpoints/endpoints.scss b/src/renderer/components/+network-endpoints/endpoints.scss index a79d36ff17..3e4ea7a85c 100644 --- a/src/renderer/components/+network-endpoints/endpoints.scss +++ b/src/renderer/components/+network-endpoints/endpoints.scss @@ -13,8 +13,6 @@ @include table-cell-warning; } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+network-endpoints/endpoints.tsx b/src/renderer/components/+network-endpoints/endpoints.tsx index 4358906a67..55d1551860 100644 --- a/src/renderer/components/+network-endpoints/endpoints.tsx +++ b/src/renderer/components/+network-endpoints/endpoints.tsx @@ -11,12 +11,10 @@ import { KubeObjectListLayout } from "../kube-object-list-layout"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; -import { prevDefault } from "../../utils"; import type { EndpointsStore } from "./store"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; import endpointsStoreInjectable from "./store.injectable"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -27,7 +25,6 @@ enum columnId { interface Dependencies { endpointsStore: EndpointsStore; - filterByNamespace: FilterByNamespace; } @observer @@ -59,13 +56,10 @@ class NonInjectedEndpoints extends React.Component { renderTableContents={endpoint => [ endpoint.getName(), , - this.props.filterByNamespace(endpoint.getNs()))} - > - {endpoint.getNs()} - , + namespace={endpoint.getNs()} + />, endpoint.toString(), , ]} @@ -86,6 +80,5 @@ export const Endpoints = withInjectables(NonInjectedEndpoints, { getProps: (di, props) => ({ ...props, endpointsStore: di.inject(endpointsStoreInjectable), - filterByNamespace: di.inject(filterByNamespaceInjectable), }), }); diff --git a/src/renderer/components/+network-ingresses/ingresses.scss b/src/renderer/components/+network-ingresses/ingresses.scss index fdf0bda6b8..4c6d5a75c1 100644 --- a/src/renderer/components/+network-ingresses/ingresses.scss +++ b/src/renderer/components/+network-ingresses/ingresses.scss @@ -32,8 +32,6 @@ @include table-cell-warning; } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+network-ingresses/ingresses.tsx b/src/renderer/components/+network-ingresses/ingresses.tsx index e8c8745926..6817d967fb 100644 --- a/src/renderer/components/+network-ingresses/ingresses.tsx +++ b/src/renderer/components/+network-ingresses/ingresses.tsx @@ -12,12 +12,10 @@ import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; import { computeRouteDeclarations } from "../../../common/k8s-api/endpoints"; -import { prevDefault } from "../../utils"; import type { IngressStore } from "./ingress-store"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import ingressStoreInjectable from "./ingress-store.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -29,13 +27,11 @@ enum columnId { interface Dependencies { ingressStore: IngressStore; - filterByNamespace: FilterByNamespace; } const NonInjectedIngresses = observer((props: Dependencies) => { const { ingressStore, - filterByNamespace, } = props; return ( @@ -66,13 +62,7 @@ const NonInjectedIngresses = observer((props: Dependencies) => { renderTableContents={ ingress => [ ingress.getName(), , - filterByNamespace(ingress.getNs()))} - > - {ingress.getNs()} - , + , ingress.getLoadBalancers().map(lb =>

{ lb }

), computeRouteDeclarations(ingress).map(decl => ( decl.displayAsLink @@ -112,6 +102,5 @@ export const Ingresses = withInjectables(NonInjectedIngresses, { getProps: (di, props) => ({ ...props, ingressStore: di.inject(ingressStoreInjectable), - filterByNamespace: di.inject(filterByNamespaceInjectable), }), }); diff --git a/src/renderer/components/+network-policies/network-policies.scss b/src/renderer/components/+network-policies/network-policies.scss index d9170a4cb4..38e6cd3d75 100644 --- a/src/renderer/components/+network-policies/network-policies.scss +++ b/src/renderer/components/+network-policies/network-policies.scss @@ -9,8 +9,6 @@ @include table-cell-warning; } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+network-policies/network-policies.tsx b/src/renderer/components/+network-policies/network-policies.tsx index a4aeac21f7..47f8e52776 100644 --- a/src/renderer/components/+network-policies/network-policies.tsx +++ b/src/renderer/components/+network-policies/network-policies.tsx @@ -12,11 +12,9 @@ import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; import type { NetworkPolicyStore } from "./store"; -import { prevDefault } from "../../utils"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import networkPolicyStoreInjectable from "./store.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -27,7 +25,6 @@ enum columnId { interface Dependencies { networkPolicyStore: NetworkPolicyStore; - filterByNamespace: FilterByNamespace; } @observer @@ -59,13 +56,10 @@ class NonInjectedNetworkPolicies extends React.Component { renderTableContents={networkPolicy => [ networkPolicy.getName(), , - this.props.filterByNamespace(networkPolicy.getNs()))} - > - {networkPolicy.getNs()} - , + namespace={networkPolicy.getNs()} + />, networkPolicy.getTypes().join(", "), , ]} @@ -78,7 +72,6 @@ class NonInjectedNetworkPolicies extends React.Component { export const NetworkPolicies = withInjectables(NonInjectedNetworkPolicies, { getProps: (di, props) => ({ ...props, - filterByNamespace: di.inject(filterByNamespaceInjectable), networkPolicyStore: di.inject(networkPolicyStoreInjectable), }), }); diff --git a/src/renderer/components/+network-port-forwards/port-forwards.scss b/src/renderer/components/+network-port-forwards/port-forwards.scss index ede9873736..0da7b0e002 100644 --- a/src/renderer/components/+network-port-forwards/port-forwards.scss +++ b/src/renderer/components/+network-port-forwards/port-forwards.scss @@ -14,8 +14,6 @@ flex: 0.6; } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+network-port-forwards/port-forwards.tsx b/src/renderer/components/+network-port-forwards/port-forwards.tsx index 8010bf9545..97ab37cdd6 100644 --- a/src/renderer/components/+network-port-forwards/port-forwards.tsx +++ b/src/renderer/components/+network-port-forwards/port-forwards.tsx @@ -19,9 +19,7 @@ import { computed, makeObservable } from "mobx"; import portForwardsRouteParametersInjectable from "./port-forwards-route-parameters.injectable"; import type { NavigateToPortForwards } from "../../../common/front-end-routing/routes/cluster/network/port-forwards/navigate-to-port-forwards.injectable"; import navigateToPortForwardsInjectable from "../../../common/front-end-routing/routes/cluster/network/port-forwards/navigate-to-port-forwards.injectable"; -import { prevDefault } from "../../utils"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -37,7 +35,6 @@ interface Dependencies { portForwardStore: PortForwardStore; forwardport: IComputedValue; navigateToPortForwards: NavigateToPortForwards; - filterByNamespace: FilterByNamespace; } @observer @@ -132,13 +129,10 @@ class NonInjectedPortForwards extends React.Component { ]} renderTableContents={item => [ item.getName(), - this.props.filterByNamespace(item.getNs()))} - > - {item.getNs()} - , + namespace={item.getNs()} + />, item.getKind(), item.getPort(), item.getForwardPort(), @@ -173,7 +167,6 @@ export const PortForwards = withInjectables(NonInjectedPortForward portForwardStore: di.inject(portForwardStoreInjectable), ...di.inject(portForwardsRouteParametersInjectable), navigateToPortForwards: di.inject(navigateToPortForwardsInjectable), - filterByNamespace: di.inject(filterByNamespaceInjectable), }), }); diff --git a/src/renderer/components/+network-services/services.scss b/src/renderer/components/+network-services/services.scss index 5136582cf0..dcc8ed9d1d 100644 --- a/src/renderer/components/+network-services/services.scss +++ b/src/renderer/components/+network-services/services.scss @@ -26,8 +26,6 @@ flex: 0.6; } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+network-services/services.tsx b/src/renderer/components/+network-services/services.tsx index 17295b0af8..7d9a7ba7f4 100644 --- a/src/renderer/components/+network-services/services.tsx +++ b/src/renderer/components/+network-services/services.tsx @@ -12,13 +12,11 @@ import { Badge } from "../badge"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; -import { prevDefault } from "../../utils"; import type { ServiceStore } from "./store"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import type { Service } from "../../../common/k8s-api/endpoints"; import { withInjectables } from "@ogre-tools/injectable-react"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import serviceStoreInjectable from "./store.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -48,7 +46,6 @@ const formatExternalIps = (service: Service) => { interface Dependencies { serviceStore: ServiceStore; - filterByNamespace: FilterByNamespace; } @observer @@ -92,13 +89,10 @@ class NonInjectedServices extends React.Component { renderTableContents={service => [ service.getName(), , - this.props.filterByNamespace(service.getNs())) } - > - { service.getNs() } - , + namespace={service.getNs()} + />, service.getType(), service.getClusterIp(), service.getPorts().join(", "), @@ -116,7 +110,6 @@ class NonInjectedServices extends React.Component { export const Services = withInjectables(NonInjectedServices, { getProps: (di, props) => ({ ...props, - filterByNamespace: di.inject(filterByNamespaceInjectable), serviceStore: di.inject(serviceStoreInjectable), }), }); diff --git a/src/renderer/components/+storage-volume-claims/volume-claims.scss b/src/renderer/components/+storage-volume-claims/volume-claims.scss index ac476c595c..f34b575bb3 100644 --- a/src/renderer/components/+storage-volume-claims/volume-claims.scss +++ b/src/renderer/components/+storage-volume-claims/volume-claims.scss @@ -39,8 +39,6 @@ flex: 0.4; } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+user-management/+role-bindings/view.scss b/src/renderer/components/+user-management/+role-bindings/view.scss index d57c5679c3..3c72d3f115 100644 --- a/src/renderer/components/+user-management/+role-bindings/view.scss +++ b/src/renderer/components/+user-management/+role-bindings/view.scss @@ -13,8 +13,6 @@ @include table-cell-warning; } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+user-management/+role-bindings/view.tsx b/src/renderer/components/+user-management/+role-bindings/view.tsx index 3f5e458453..2489d9cfa3 100644 --- a/src/renderer/components/+user-management/+role-bindings/view.tsx +++ b/src/renderer/components/+user-management/+role-bindings/view.tsx @@ -14,17 +14,15 @@ import { KubeObjectAge } from "../../kube-object/age"; import type { RoleStore } from "../+roles/store"; import type { ServiceAccountStore } from "../+service-accounts/store"; import type { RoleBindingStore } from "./store"; -import { prevDefault } from "../../../utils"; import type { ClusterRoleStore } from "../+cluster-roles/store"; -import type { FilterByNamespace } from "../../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; import clusterRoleStoreInjectable from "../+cluster-roles/store.injectable"; -import filterByNamespaceInjectable from "../../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import roleBindingStoreInjectable from "./store.injectable"; import roleStoreInjectable from "../+roles/store.injectable"; import serviceAccountStoreInjectable from "../+service-accounts/store.injectable"; import type { OpenRoleBindingDialog } from "./dialog/open.injectable"; import openRoleBindingDialogInjectable from "./dialog/open.injectable"; +import { NamespaceSelectBadge } from "../../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -38,7 +36,6 @@ interface Dependencies { roleStore: RoleStore; clusterRoleStore: ClusterRoleStore; serviceAccountStore: ServiceAccountStore; - filterByNamespace: FilterByNamespace; openRoleBindingDialog: OpenRoleBindingDialog; } @@ -50,7 +47,6 @@ class NonInjectedRoleBindings extends React.Component { roleBindingStore, roleStore, serviceAccountStore, - filterByNamespace, openRoleBindingDialog, } = this.props; @@ -83,13 +79,10 @@ class NonInjectedRoleBindings extends React.Component { renderTableContents={binding => [ binding.getName(), , - filterByNamespace(binding.getNs()))} - > - {binding.getNs()} - , + namespace={binding.getNs()} + />, binding.getSubjectNames(), , ]} @@ -108,7 +101,6 @@ export const RoleBindings = withInjectables(NonInjectedRoleBinding getProps: (di, props) => ({ ...props, clusterRoleStore: di.inject(clusterRoleStoreInjectable), - filterByNamespace: di.inject(filterByNamespaceInjectable), roleBindingStore: di.inject(roleBindingStoreInjectable), roleStore: di.inject(roleStoreInjectable), serviceAccountStore: di.inject(serviceAccountStoreInjectable), diff --git a/src/renderer/components/+user-management/+roles/view.scss b/src/renderer/components/+user-management/+roles/view.scss index 7ed72f8cc2..6fae603fd3 100644 --- a/src/renderer/components/+user-management/+roles/view.scss +++ b/src/renderer/components/+user-management/+roles/view.scss @@ -13,8 +13,6 @@ @include table-cell-warning; } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+user-management/+roles/view.tsx b/src/renderer/components/+user-management/+roles/view.tsx index bf308b38af..a299ac1085 100644 --- a/src/renderer/components/+user-management/+roles/view.tsx +++ b/src/renderer/components/+user-management/+roles/view.tsx @@ -13,12 +13,10 @@ import { AddRoleDialog } from "./add-dialog/view"; import { SiblingsInTabLayout } from "../../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../../kube-object/age"; import type { RoleStore } from "./store"; -import { prevDefault } from "../../../utils"; -import type { FilterByNamespace } from "../../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; -import filterByNamespaceInjectable from "../../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import roleStoreInjectable from "./store.injectable"; import openAddRoleDialogInjectable from "./add-dialog/open.injectable"; +import { NamespaceSelectBadge } from "../../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -28,7 +26,6 @@ enum columnId { interface Dependencies { roleStore: RoleStore; - filterByNamespace: FilterByNamespace; openAddRoleDialog: () => void; } @@ -36,7 +33,6 @@ interface Dependencies { class NonInjectedRoles extends React.Component { render() { const { - filterByNamespace, roleStore, openAddRoleDialog, } = this.props; @@ -66,13 +62,10 @@ class NonInjectedRoles extends React.Component { renderTableContents={role => [ role.getName(), , - filterByNamespace(role.getNs()))} - > - {role.getNs()} - , + namespace={role.getNs()} + />, , ]} addRemoveButtons={{ @@ -89,7 +82,6 @@ class NonInjectedRoles extends React.Component { export const Roles = withInjectables(NonInjectedRoles, { getProps: (di, props) => ({ ...props, - filterByNamespace: di.inject(filterByNamespaceInjectable), roleStore: di.inject(roleStoreInjectable), openAddRoleDialog: di.inject(openAddRoleDialogInjectable), }), diff --git a/src/renderer/components/+user-management/+service-accounts/view.scss b/src/renderer/components/+user-management/+service-accounts/view.scss index e1fa133b5e..4cc730d949 100644 --- a/src/renderer/components/+user-management/+service-accounts/view.scss +++ b/src/renderer/components/+user-management/+service-accounts/view.scss @@ -9,8 +9,6 @@ @include table-cell-warning; } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+user-management/+service-accounts/view.tsx b/src/renderer/components/+user-management/+service-accounts/view.tsx index 1043250d73..ce7eb4988e 100644 --- a/src/renderer/components/+user-management/+service-accounts/view.tsx +++ b/src/renderer/components/+user-management/+service-accounts/view.tsx @@ -12,14 +12,12 @@ import { KubeObjectStatusIcon } from "../../kube-object-status-icon"; import { CreateServiceAccountDialog } from "./create-dialog/view"; import { SiblingsInTabLayout } from "../../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../../kube-object/age"; -import { prevDefault } from "../../../utils"; import type { ServiceAccountStore } from "./store"; -import type { FilterByNamespace } from "../../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; -import filterByNamespaceInjectable from "../../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import serviceAccountStoreInjectable from "./store.injectable"; import type { OpenCreateServiceAccountDialog } from "./create-dialog/open.injectable"; import openCreateServiceAccountDialogInjectable from "./create-dialog/open.injectable"; +import { NamespaceSelectBadge } from "../../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -29,7 +27,6 @@ enum columnId { interface Dependencies { serviceAccountStore: ServiceAccountStore; - filterByNamespace: FilterByNamespace; openCreateServiceAccountDialog: OpenCreateServiceAccountDialog; } @@ -37,7 +34,6 @@ interface Dependencies { class NonInjectedServiceAccounts extends React.Component { render() { const { - filterByNamespace, serviceAccountStore, openCreateServiceAccountDialog, } = this.props; @@ -67,13 +63,10 @@ class NonInjectedServiceAccounts extends React.Component { renderTableContents={account => [ account.getName(), , - filterByNamespace(account.getNs()))} - > - {account.getNs()} - , + namespace={account.getNs()} + />, , ]} addRemoveButtons={{ @@ -90,7 +83,6 @@ class NonInjectedServiceAccounts extends React.Component { export const ServiceAccounts = withInjectables(NonInjectedServiceAccounts, { getProps: (di, props) => ({ ...props, - filterByNamespace: di.inject(filterByNamespaceInjectable), serviceAccountStore: di.inject(serviceAccountStoreInjectable), openCreateServiceAccountDialog: di.inject(openCreateServiceAccountDialogInjectable), }), diff --git a/src/renderer/components/+workloads-cronjobs/cronjobs.scss b/src/renderer/components/+workloads-cronjobs/cronjobs.scss index 29b9fb18c1..9fc51383b7 100644 --- a/src/renderer/components/+workloads-cronjobs/cronjobs.scss +++ b/src/renderer/components/+workloads-cronjobs/cronjobs.scss @@ -9,8 +9,6 @@ @include table-cell-warning; } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+workloads-cronjobs/cronjobs.tsx b/src/renderer/components/+workloads-cronjobs/cronjobs.tsx index 1dba28c478..365c469917 100644 --- a/src/renderer/components/+workloads-cronjobs/cronjobs.tsx +++ b/src/renderer/components/+workloads-cronjobs/cronjobs.tsx @@ -17,9 +17,7 @@ import type { EventStore } from "../+events/store"; import { withInjectables } from "@ogre-tools/injectable-react"; import cronJobStoreInjectable from "./store.injectable"; import eventStoreInjectable from "../+events/store.injectable"; -import { prevDefault } from "../../utils"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -34,14 +32,12 @@ enum columnId { interface Dependencies { cronJobStore: CronJobStore; eventStore: EventStore; - filterByNamespace: FilterByNamespace; } const NonInjectedCronJobs = observer((props: Dependencies) => { const { cronJobStore, eventStore, - filterByNamespace, } = props; return ( @@ -82,13 +78,10 @@ const NonInjectedCronJobs = observer((props: Dependencies) => { renderTableContents={cronJob => [ cronJob.getName(), , - filterByNamespace(cronJob.getNs()))} - > - {cronJob.getNs()} - , + namespace={cronJob.getNs()} + />, cronJob.isNeverRun() ? "never" : cronJob.getSchedule(), cronJob.getSuspendFlag(), cronJobStore.getActiveJobsNum(cronJob), @@ -105,6 +98,5 @@ export const CronJobs = withInjectables(NonInjectedCronJobs, { ...props, cronJobStore: di.inject(cronJobStoreInjectable), eventStore: di.inject(eventStoreInjectable), - filterByNamespace: di.inject(filterByNamespaceInjectable), }), }); diff --git a/src/renderer/components/+workloads-daemonsets/daemonsets.scss b/src/renderer/components/+workloads-daemonsets/daemonsets.scss index 1500c74d78..a5ea8e74be 100644 --- a/src/renderer/components/+workloads-daemonsets/daemonsets.scss +++ b/src/renderer/components/+workloads-daemonsets/daemonsets.scss @@ -22,8 +22,6 @@ @include table-cell-labels-offsets; } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+workloads-daemonsets/daemonsets.tsx b/src/renderer/components/+workloads-daemonsets/daemonsets.tsx index 5fc4ac6bc8..9760cd2457 100644 --- a/src/renderer/components/+workloads-daemonsets/daemonsets.tsx +++ b/src/renderer/components/+workloads-daemonsets/daemonsets.tsx @@ -15,12 +15,10 @@ import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; import type { DaemonSetStore } from "./store"; import type { EventStore } from "../+events/store"; -import { prevDefault } from "../../utils"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; import daemonSetStoreInjectable from "./store.injectable"; import eventStoreInjectable from "../+events/store.injectable"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -33,14 +31,12 @@ enum columnId { interface Dependencies { daemonSetStore: DaemonSetStore; eventStore: EventStore; - filterByNamespace: FilterByNamespace; } const NonInjectedDaemonSets = observer((props: Dependencies) => { const { daemonSetStore, eventStore, - filterByNamespace, } = props; const getPodsLength = (daemonSet: DaemonSet) => daemonSetStore.getChildPods(daemonSet).length; @@ -66,7 +62,12 @@ const NonInjectedDaemonSets = observer((props: Dependencies) => { renderHeaderTitle="Daemon Sets" renderTableHeader={[ { title: "Name", className: "name", sortBy: columnId.name, id: columnId.name }, - { title: "Namespace", className: "namespace", sortBy: columnId.namespace, id: columnId.namespace }, + { + title: "Namespace", + className: "namespace", + sortBy: columnId.namespace, + id: columnId.namespace, + }, { title: "Pods", className: "pods", sortBy: columnId.pods, id: columnId.pods }, { className: "warning", showWithColumn: columnId.pods }, { title: "Node Selector", className: "labels scrollable", id: columnId.labels }, @@ -74,13 +75,10 @@ const NonInjectedDaemonSets = observer((props: Dependencies) => { ]} renderTableContents={daemonSet => [ daemonSet.getName(), - filterByNamespace(daemonSet.getNs()))} - > - {daemonSet.getNs()} - , + namespace={daemonSet.getNs()} + />, getPodsLength(daemonSet), , daemonSet.getNodeSelectors().map(selector => ( @@ -102,6 +100,5 @@ export const DaemonSets = withInjectables(NonInjectedDaemonSets, { ...props, daemonSetStore: di.inject(daemonSetStoreInjectable), eventStore: di.inject(eventStoreInjectable), - filterByNamespace: di.inject(filterByNamespaceInjectable), }), }); diff --git a/src/renderer/components/+workloads-deployments/deployments.scss b/src/renderer/components/+workloads-deployments/deployments.scss index 322faa6d8d..5d9ed72c03 100644 --- a/src/renderer/components/+workloads-deployments/deployments.scss +++ b/src/renderer/components/+workloads-deployments/deployments.scss @@ -43,8 +43,6 @@ } } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+workloads-deployments/deployments.tsx b/src/renderer/components/+workloads-deployments/deployments.tsx index d069cd73c1..6fa9fff211 100644 --- a/src/renderer/components/+workloads-deployments/deployments.tsx +++ b/src/renderer/components/+workloads-deployments/deployments.tsx @@ -9,7 +9,7 @@ import React from "react"; import { observer } from "mobx-react"; import type { Deployment } from "../../../common/k8s-api/endpoints"; import { KubeObjectListLayout } from "../kube-object-list-layout"; -import { cssNames, prevDefault } from "../../utils"; +import { cssNames } from "../../utils"; import kebabCase from "lodash/kebabCase"; import orderBy from "lodash/orderBy"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; @@ -17,11 +17,10 @@ import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; import type { DeploymentStore } from "./store"; import type { EventStore } from "../+events/store"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; import deploymentStoreInjectable from "./store.injectable"; import eventStoreInjectable from "../+events/store.injectable"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -35,7 +34,6 @@ enum columnId { interface Dependencies { deploymentStore: DeploymentStore; eventStore: EventStore; - filterByNamespace: FilterByNamespace; } @observer @@ -64,7 +62,6 @@ class NonInjectedDeployments extends React.Component { const { deploymentStore, eventStore, - filterByNamespace, } = this.props; return ( @@ -90,22 +87,34 @@ class NonInjectedDeployments extends React.Component { renderTableHeader={[ { title: "Name", className: "name", sortBy: columnId.name, id: columnId.name }, { className: "warning", showWithColumn: columnId.name }, - { title: "Namespace", className: "namespace", sortBy: columnId.namespace, id: columnId.namespace }, + { + title: "Namespace", + className: "namespace", + sortBy: columnId.namespace, + id: columnId.namespace, + }, { title: "Pods", className: "pods", id: columnId.pods }, - { title: "Replicas", className: "replicas", sortBy: columnId.replicas, id: columnId.replicas }, + { + title: "Replicas", + className: "replicas", + sortBy: columnId.replicas, + id: columnId.replicas, + }, { title: "Age", className: "age", sortBy: columnId.age, id: columnId.age }, - { title: "Conditions", className: "conditions", sortBy: columnId.condition, id: columnId.condition }, + { + title: "Conditions", + className: "conditions", + sortBy: columnId.condition, + id: columnId.condition, + }, ]} renderTableContents={deployment => [ deployment.getName(), , - filterByNamespace(deployment.getNs()))} - > - {deployment.getNs()} - , + namespace={deployment.getNs()} + />, this.renderPods(deployment), deployment.getReplicas(), , @@ -122,6 +131,5 @@ export const Deployments = withInjectables(NonInjectedDeployments, ...props, deploymentStore: di.inject(deploymentStoreInjectable), eventStore: di.inject(eventStoreInjectable), - filterByNamespace: di.inject(filterByNamespaceInjectable), }), }); diff --git a/src/renderer/components/+workloads-jobs/jobs.scss b/src/renderer/components/+workloads-jobs/jobs.scss index a24cfc7b06..f293ba5b38 100644 --- a/src/renderer/components/+workloads-jobs/jobs.scss +++ b/src/renderer/components/+workloads-jobs/jobs.scss @@ -19,8 +19,6 @@ @include job-condition-colors; } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+workloads-jobs/jobs.tsx b/src/renderer/components/+workloads-jobs/jobs.tsx index c0bc9e2d66..5893a27708 100644 --- a/src/renderer/components/+workloads-jobs/jobs.tsx +++ b/src/renderer/components/+workloads-jobs/jobs.tsx @@ -14,12 +14,10 @@ import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; import type { JobStore } from "./store"; import type { EventStore } from "../+events/store"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; -import { prevDefault } from "../../utils"; import { withInjectables } from "@ogre-tools/injectable-react"; import eventStoreInjectable from "../+events/store.injectable"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import jobStoreInjectable from "./store.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -32,13 +30,11 @@ enum columnId { interface Dependencies { jobStore: JobStore; eventStore: EventStore; - filterByNamespace: FilterByNamespace; } const NonInjectedJobs = observer((props: Dependencies) => { const { eventStore, - filterByNamespace, jobStore, } = props; @@ -73,13 +69,10 @@ const NonInjectedJobs = observer((props: Dependencies) => { return [ job.getName(), - filterByNamespace(job.getNs()))} - > - {job.getNs()} - , + namespace={job.getNs()} + />, `${job.getCompletions()} / ${job.getDesiredCompletions()}`, , , @@ -98,7 +91,6 @@ export const Jobs = withInjectables(NonInjectedJobs, { getProps: (di, props) => ({ ...props, eventStore: di.inject(eventStoreInjectable), - filterByNamespace: di.inject(filterByNamespaceInjectable), jobStore: di.inject(jobStoreInjectable), }), }); diff --git a/src/renderer/components/+workloads-pods/pods.scss b/src/renderer/components/+workloads-pods/pods.scss index ee606bc762..3555c54701 100644 --- a/src/renderer/components/+workloads-pods/pods.scss +++ b/src/renderer/components/+workloads-pods/pods.scss @@ -38,8 +38,6 @@ flex-grow: 0.7; } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+workloads-pods/pods.tsx b/src/renderer/components/+workloads-pods/pods.tsx index 2e55562154..ab793359b0 100644 --- a/src/renderer/components/+workloads-pods/pods.tsx +++ b/src/renderer/components/+workloads-pods/pods.tsx @@ -11,7 +11,7 @@ import { Link } from "react-router-dom"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import type { NodeApi, Pod } from "../../../common/k8s-api/endpoints"; import { StatusBrick } from "../status-brick"; -import { cssNames, getConvertedParts, object, prevDefault, stopPropagation } from "../../utils"; +import { cssNames, getConvertedParts, object, stopPropagation } from "../../utils"; import startCase from "lodash/startCase"; import kebabCase from "lodash/kebabCase"; import type { ApiManager } from "../../../common/k8s-api/api-manager"; @@ -28,8 +28,7 @@ import type { PodStore } from "./store"; import nodeApiInjectable from "../../../common/k8s-api/endpoints/node.api.injectable"; import eventStoreInjectable from "../+events/store.injectable"; import podStoreInjectable from "./store.injectable"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -45,7 +44,6 @@ enum columnId { interface Dependencies { getDetailsUrl: GetDetailsUrl; - filterByNamespace: FilterByNamespace; apiManager: ApiManager; eventStore: EventStore; podStore: PodStore; @@ -111,7 +109,7 @@ class NonInjectedPods extends React.Component { className="Pods" store={podStore} dependentStores={[eventStore]} // status icon component uses event store - tableId = "workloads_pods" + tableId="workloads_pods" isConfigurable sortingCallbacks={{ [columnId.name]: pod => getConvertedParts(pod.getName()), @@ -134,10 +132,30 @@ class NonInjectedPods extends React.Component { renderTableHeader={[ { title: "Name", className: "name", sortBy: columnId.name, id: columnId.name }, { className: "warning", showWithColumn: columnId.name }, - { title: "Namespace", className: "namespace", sortBy: columnId.namespace, id: columnId.namespace }, - { title: "Containers", className: "containers", sortBy: columnId.containers, id: columnId.containers }, - { title: "Restarts", className: "restarts", sortBy: columnId.restarts, id: columnId.restarts }, - { title: "Controlled By", className: "owners", sortBy: columnId.owners, id: columnId.owners }, + { + title: "Namespace", + className: "namespace", + sortBy: columnId.namespace, + id: columnId.namespace, + }, + { + title: "Containers", + className: "containers", + sortBy: columnId.containers, + id: columnId.containers, + }, + { + title: "Restarts", + className: "restarts", + sortBy: columnId.restarts, + id: columnId.restarts, + }, + { + title: "Controlled By", + className: "owners", + sortBy: columnId.owners, + id: columnId.owners, + }, { title: "Node", className: "node", sortBy: columnId.node, id: columnId.node }, { title: "QoS", className: "qos", sortBy: columnId.qos, id: columnId.qos }, { title: "Age", className: "age", sortBy: columnId.age, id: columnId.age }, @@ -152,13 +170,10 @@ class NonInjectedPods extends React.Component { expandable={false} />, , - this.props.filterByNamespace(pod.getNs()))} - > - {pod.getNs()} - , + namespace={pod.getNs()} + />, this.renderContainersStatus(pod), pod.getRestartsCount(), pod.getOwnerRefs().map(ref => { @@ -186,7 +201,9 @@ class NonInjectedPods extends React.Component { tooltip={pod.getNodeName()} expandable={false} > - + {pod.getNodeName()}
@@ -210,6 +227,5 @@ export const Pods = withInjectables(NonInjectedPods, { nodeApi: di.inject(nodeApiInjectable), eventStore: di.inject(eventStoreInjectable), podStore: di.inject(podStoreInjectable), - filterByNamespace: di.inject(filterByNamespaceInjectable), }), }); diff --git a/src/renderer/components/+workloads-replicasets/replicasets.scss b/src/renderer/components/+workloads-replicasets/replicasets.scss index 07e70c53c1..15274677e2 100644 --- a/src/renderer/components/+workloads-replicasets/replicasets.scss +++ b/src/renderer/components/+workloads-replicasets/replicasets.scss @@ -13,8 +13,6 @@ @include table-cell-warning; } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+workloads-replicasets/replicasets.tsx b/src/renderer/components/+workloads-replicasets/replicasets.tsx index 685315551c..92eb0c45ac 100644 --- a/src/renderer/components/+workloads-replicasets/replicasets.tsx +++ b/src/renderer/components/+workloads-replicasets/replicasets.tsx @@ -13,12 +13,10 @@ import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; import type { ReplicaSetStore } from "./store"; import type { EventStore } from "../+events/store"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; -import { prevDefault } from "../../utils"; import { withInjectables } from "@ogre-tools/injectable-react"; import eventStoreInjectable from "../+events/store.injectable"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import replicaSetStoreInjectable from "./store.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -32,13 +30,11 @@ enum columnId { interface Dependencies { replicaSetStore: ReplicaSetStore; eventStore: EventStore; - filterByNamespace: FilterByNamespace; } const NonInjectedReplicaSets = observer((props: Dependencies) => { const { eventStore, - filterByNamespace, replicaSetStore, } = props; @@ -65,22 +61,34 @@ const NonInjectedReplicaSets = observer((props: Dependencies) => { renderTableHeader={[ { title: "Name", className: "name", sortBy: columnId.name, id: columnId.name }, { className: "warning", showWithColumn: columnId.name }, - { title: "Namespace", className: "namespace", sortBy: columnId.namespace, id: columnId.namespace }, - { title: "Desired", className: "desired", sortBy: columnId.desired, id: columnId.desired }, - { title: "Current", className: "current", sortBy: columnId.current, id: columnId.current }, + { + title: "Namespace", + className: "namespace", + sortBy: columnId.namespace, + id: columnId.namespace, + }, + { + title: "Desired", + className: "desired", + sortBy: columnId.desired, + id: columnId.desired, + }, + { + title: "Current", + className: "current", + sortBy: columnId.current, + id: columnId.current, + }, { title: "Ready", className: "ready", sortBy: columnId.ready, id: columnId.ready }, { title: "Age", className: "age", sortBy: columnId.age, id: columnId.age }, ]} renderTableContents={replicaSet => [ replicaSet.getName(), , - filterByNamespace(replicaSet.getNs()))} - > - {replicaSet.getNs()} - , + namespace={replicaSet.getNs()} + />, replicaSet.getDesired(), replicaSet.getCurrent(), replicaSet.getReady(), @@ -95,7 +103,6 @@ export const ReplicaSets = withInjectables(NonInjectedReplicaSets, getProps: (di, props) => ({ ...props, eventStore: di.inject(eventStoreInjectable), - filterByNamespace: di.inject(filterByNamespaceInjectable), replicaSetStore: di.inject(replicaSetStoreInjectable), }), }); diff --git a/src/renderer/components/+workloads-statefulsets/statefulsets.scss b/src/renderer/components/+workloads-statefulsets/statefulsets.scss index 23b4da9242..ce9277c6bb 100644 --- a/src/renderer/components/+workloads-statefulsets/statefulsets.scss +++ b/src/renderer/components/+workloads-statefulsets/statefulsets.scss @@ -17,8 +17,6 @@ @include table-cell-warning; } - a.filterNamespace { - border-bottom: unset; - } + } } diff --git a/src/renderer/components/+workloads-statefulsets/statefulsets.tsx b/src/renderer/components/+workloads-statefulsets/statefulsets.tsx index 30a3970c69..0e35cd6584 100644 --- a/src/renderer/components/+workloads-statefulsets/statefulsets.tsx +++ b/src/renderer/components/+workloads-statefulsets/statefulsets.tsx @@ -14,12 +14,10 @@ import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; import type { StatefulSetStore } from "./store"; import type { EventStore } from "../+events/store"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; import eventStoreInjectable from "../+events/store.injectable"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import statefulSetStoreInjectable from "./store.injectable"; -import { prevDefault } from "../../utils"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -32,7 +30,6 @@ enum columnId { interface Dependencies { statefulSetStore: StatefulSetStore; eventStore: EventStore; - filterByNamespace: FilterByNamespace; } const renderPodCounts = (statefulSet: StatefulSet) => { @@ -44,7 +41,6 @@ const renderPodCounts = (statefulSet: StatefulSet) => { const NonInjectedStatefulSets = observer((props: Dependencies) => { const { eventStore, - filterByNamespace, statefulSetStore, } = props; @@ -68,21 +64,28 @@ const NonInjectedStatefulSets = observer((props: Dependencies) => { renderHeaderTitle="Stateful Sets" renderTableHeader={[ { title: "Name", className: "name", sortBy: columnId.name, id: columnId.name }, - { title: "Namespace", className: "namespace", sortBy: columnId.namespace, id: columnId.namespace }, + { + title: "Namespace", + className: "namespace", + sortBy: columnId.namespace, + id: columnId.namespace, + }, { title: "Pods", className: "pods", id: columnId.pods }, - { title: "Replicas", className: "replicas", sortBy: columnId.replicas, id: columnId.replicas }, + { + title: "Replicas", + className: "replicas", + sortBy: columnId.replicas, + id: columnId.replicas, + }, { className: "warning", showWithColumn: columnId.replicas }, { title: "Age", className: "age", sortBy: columnId.age, id: columnId.age }, ]} renderTableContents={statefulSet => [ statefulSet.getName(), - filterByNamespace(statefulSet.getNs()))} - > - {statefulSet.getNs()} - , + namespace={statefulSet.getNs()} + />, renderPodCounts(statefulSet), statefulSet.getReplicas(), , @@ -97,7 +100,6 @@ export const StatefulSets = withInjectables(NonInjectedStatefulSet getProps: (di, props) => ({ ...props, eventStore: di.inject(eventStoreInjectable), - filterByNamespace: di.inject(filterByNamespaceInjectable), statefulSetStore: di.inject(statefulSetStoreInjectable), }), }); From d3b1b0e3b68b1c488471d04233de93f6c4164c5d Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Wed, 18 Jan 2023 09:12:21 -0800 Subject: [PATCH 25/37] Fix KubeJsonApi.forCluster as part of extension API (#6973) Signed-off-by: Sebastian Malton Signed-off-by: Sebastian Malton --- src/extensions/common-api/k8s-api.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/extensions/common-api/k8s-api.ts b/src/extensions/common-api/k8s-api.ts index 3150c920f6..5e47da3b33 100644 --- a/src/extensions/common-api/k8s-api.ts +++ b/src/extensions/common-api/k8s-api.ts @@ -31,6 +31,7 @@ import type { JsonApiConfig } from "../../common/k8s-api/json-api"; import type { KubeJsonApi as InternalKubeJsonApi } from "../../common/k8s-api/kube-json-api"; import createKubeJsonApiInjectable from "../../common/k8s-api/create-kube-json-api.injectable"; import type { RequestInit } from "node-fetch"; +import createKubeJsonApiForClusterInjectable from "../../common/k8s-api/create-kube-json-api-for-cluster.injectable"; export const apiManager = asLegacyGlobalForExtensionApi(apiManagerInjectable); export const forCluster = asLegacyGlobalFunctionForExtensionApi(createKubeApiForClusterInjectable); @@ -125,7 +126,7 @@ function KubeJsonApiCstr(config: JsonApiConfig, reqInit?: RequestInit) { export const KubeJsonApi = Object.assign( KubeJsonApiCstr as unknown as new (config: JsonApiConfig, reqInit?: RequestInit) => InternalKubeJsonApi, { - forCluster, + forCluster: asLegacyGlobalForExtensionApi(createKubeJsonApiForClusterInjectable), }, ); From a5c62da002f2418e075f881a7ca901c9fa190434 Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 18 Jan 2023 21:36:48 +0200 Subject: [PATCH 26/37] Finish using NamespaceSelectBadge in all places (#6972) Signed-off-by: Roman Signed-off-by: Roman --- .../components/+config-autoscalers/hpa.tsx | 16 +++++----------- .../+config-limit-ranges/limit-ranges.tsx | 15 ++++----------- .../+custom-resources/crd-resources.scss | 3 --- .../+custom-resources/crd-resources.tsx | 14 ++------------ src/renderer/components/+events/events.tsx | 17 +++-------------- .../+storage-volume-claims/volume-claims.tsx | 17 +++++------------ 6 files changed, 19 insertions(+), 63 deletions(-) diff --git a/src/renderer/components/+config-autoscalers/hpa.tsx b/src/renderer/components/+config-autoscalers/hpa.tsx index 8900d7b73d..efdc7fd48d 100644 --- a/src/renderer/components/+config-autoscalers/hpa.tsx +++ b/src/renderer/components/+config-autoscalers/hpa.tsx @@ -10,15 +10,14 @@ import { observer } from "mobx-react"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import type { HorizontalPodAutoscaler } from "../../../common/k8s-api/endpoints/horizontal-pod-autoscaler.api"; import { Badge } from "../badge"; -import { cssNames, prevDefault } from "../../utils"; +import { cssNames } from "../../utils"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; import type { HorizontalPodAutoscalerStore } from "./store"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import horizontalPodAutoscalerStoreInjectable from "./store.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -33,7 +32,6 @@ enum columnId { interface Dependencies { horizontalPodAutoscalerStore: HorizontalPodAutoscalerStore; - filterByNamespace: FilterByNamespace; } @observer @@ -90,13 +88,10 @@ class NonInjectedHorizontalPodAutoscalers extends React.Component renderTableContents={hpa => [ hpa.getName(), , - this.props.filterByNamespace(hpa.getNs()))} - > - {hpa.getNs()} - , + namespace={hpa.getNs()} + />, this.getTargets(hpa), hpa.getMinPods(), hpa.getMaxPods(), @@ -124,7 +119,6 @@ class NonInjectedHorizontalPodAutoscalers extends React.Component export const HorizontalPodAutoscalers = withInjectables(NonInjectedHorizontalPodAutoscalers, { getProps: (di, props) => ({ ...props, - filterByNamespace: di.inject(filterByNamespaceInjectable), horizontalPodAutoscalerStore: di.inject(horizontalPodAutoscalerStoreInjectable), }), }); diff --git a/src/renderer/components/+config-limit-ranges/limit-ranges.tsx b/src/renderer/components/+config-limit-ranges/limit-ranges.tsx index ed189ed184..b89c7478f9 100644 --- a/src/renderer/components/+config-limit-ranges/limit-ranges.tsx +++ b/src/renderer/components/+config-limit-ranges/limit-ranges.tsx @@ -11,12 +11,10 @@ import React from "react"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; -import { prevDefault } from "../../utils"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import type { LimitRangeStore } from "./store"; import { withInjectables } from "@ogre-tools/injectable-react"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import limitRangeStoreInjectable from "./store.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -25,7 +23,6 @@ enum columnId { } interface Dependencies { - filterByNamespace: FilterByNamespace; limitRangeStore: LimitRangeStore; } @@ -58,13 +55,10 @@ class NonInjectedLimitRanges extends React.Component { renderTableContents={limitRange => [ limitRange.getName(), , - this.props.filterByNamespace(limitRange.getNs()))} - > - {limitRange.getNs()} - , + namespace={limitRange.getNs()} + />, , ]} /> @@ -76,7 +70,6 @@ class NonInjectedLimitRanges extends React.Component { export const LimitRanges = withInjectables(NonInjectedLimitRanges, { getProps: (di, props) => ({ ...props, - filterByNamespace: di.inject(filterByNamespaceInjectable), limitRangeStore: di.inject(limitRangeStoreInjectable), }), }); diff --git a/src/renderer/components/+custom-resources/crd-resources.scss b/src/renderer/components/+custom-resources/crd-resources.scss index 3b217a77bf..0d0ee419d8 100644 --- a/src/renderer/components/+custom-resources/crd-resources.scss +++ b/src/renderer/components/+custom-resources/crd-resources.scss @@ -4,7 +4,4 @@ */ .CrdResources { - a.filterNamespace { - border-bottom: unset; - } } diff --git a/src/renderer/components/+custom-resources/crd-resources.tsx b/src/renderer/components/+custom-resources/crd-resources.tsx index 51ecd656ae..3cd0864c36 100644 --- a/src/renderer/components/+custom-resources/crd-resources.tsx +++ b/src/renderer/components/+custom-resources/crd-resources.tsx @@ -19,9 +19,7 @@ import { KubeObjectAge } from "../kube-object/age"; import type { CustomResourceDefinitionStore } from "./definition.store"; import apiManagerInjectable from "../../../common/k8s-api/api-manager/manager.injectable"; import customResourceDefinitionStoreInjectable from "./definition.store.injectable"; -import { prevDefault } from "../../utils"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -34,7 +32,6 @@ interface Dependencies { name: IComputedValue; apiManager: ApiManager; customResourceDefinitionStore: CustomResourceDefinitionStore; - filterByNamespace: FilterByNamespace; } @observer @@ -107,13 +104,7 @@ class NonInjectedCustomResources extends React.Component { renderTableContents={customResource => [ customResource.getName(), isNamespaced && ( - this.props.filterByNamespace(customResource.getNs() as string))} - > - {customResource.getNs()} - + ), ...extraColumns.map((column) => safeJSONPathValue(customResource, column.jsonPath)), , @@ -141,7 +132,6 @@ export const CustomResources = withInjectables(NonInjectedCustomRe ...di.inject(customResourcesRouteParametersInjectable), apiManager: di.inject(apiManagerInjectable), customResourceDefinitionStore: di.inject(customResourceDefinitionStoreInjectable), - filterByNamespace: di.inject(filterByNamespaceInjectable), }), }); diff --git a/src/renderer/components/+events/events.tsx b/src/renderer/components/+events/events.tsx index e1b9e57bb8..d68bb21a53 100644 --- a/src/renderer/components/+events/events.tsx +++ b/src/renderer/components/+events/events.tsx @@ -19,7 +19,7 @@ import type { HeaderCustomizer } from "../item-object-list"; import { Tooltip } from "../tooltip"; import { Link } from "react-router-dom"; import type { IClassName } from "../../utils"; -import { prevDefault, cssNames, stopPropagation } from "../../utils"; +import { cssNames, stopPropagation } from "../../utils"; import { Icon } from "../icon"; import type { ApiManager } from "../../../common/k8s-api/api-manager"; import { withInjectables } from "@ogre-tools/injectable-react"; @@ -28,10 +28,9 @@ import { KubeObjectAge } from "../kube-object/age"; import { ReactiveDuration } from "../duration/reactive-duration"; import apiManagerInjectable from "../../../common/k8s-api/api-manager/manager.injectable"; import eventStoreInjectable from "./store.injectable"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import type { GetDetailsUrl } from "../kube-detail-params/get-details-url.injectable"; import getDetailsUrlInjectable from "../kube-detail-params/get-details-url.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { message = "message", @@ -58,7 +57,6 @@ interface Dependencies { navigateToEvents: () => void; eventStore: EventStore; apiManager: ApiManager; - filterByNamespace: FilterByNamespace; getDetailsUrl: GetDetailsUrl; } @@ -202,15 +200,7 @@ class NonInjectedEvents extends React.Component { ), }, compact - ? ( - this.props.filterByNamespace(event.getNs()))} - > - {event.getNs()} - - ) + ? : event.getNs(), (NonInjectedEven navigateToEvents: di.inject(navigateToEventsInjectable), apiManager: di.inject(apiManagerInjectable), eventStore: di.inject(eventStoreInjectable), - filterByNamespace: di.inject(filterByNamespaceInjectable), getDetailsUrl: di.inject(getDetailsUrlInjectable), }), }); diff --git a/src/renderer/components/+storage-volume-claims/volume-claims.tsx b/src/renderer/components/+storage-volume-claims/volume-claims.tsx index 31ebee4bc4..39ec81f8de 100644 --- a/src/renderer/components/+storage-volume-claims/volume-claims.tsx +++ b/src/renderer/components/+storage-volume-claims/volume-claims.tsx @@ -10,7 +10,7 @@ import { observer } from "mobx-react"; import { Link } from "react-router-dom"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import { unitsToBytes } from "../../../common/utils/convertMemory"; -import { prevDefault, stopPropagation } from "../../utils"; +import { stopPropagation } from "../../utils"; import type { StorageClassApi } from "../../../common/k8s-api/endpoints"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; @@ -18,13 +18,12 @@ import { KubeObjectAge } from "../kube-object/age"; import type { PersistentVolumeClaimStore } from "./store"; import type { PodStore } from "../+workloads-pods/store"; import type { GetDetailsUrl } from "../kube-detail-params/get-details-url.injectable"; -import type { FilterByNamespace } from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; -import filterByNamespaceInjectable from "../+namespaces/namespace-select-filter-model/filter-by-namespace.injectable"; import getDetailsUrlInjectable from "../kube-detail-params/get-details-url.injectable"; import persistentVolumeClaimStoreInjectable from "./store.injectable"; import podStoreInjectable from "../+workloads-pods/store.injectable"; import storageClassApiInjectable from "../../../common/k8s-api/endpoints/storage-class.api.injectable"; +import { NamespaceSelectBadge } from "../+namespaces/namespace-select-badge"; enum columnId { name = "name", @@ -41,7 +40,6 @@ interface Dependencies { storageClassApi: StorageClassApi; podStore: PodStore; getDetailsUrl: GetDetailsUrl; - filterByNamespace: FilterByNamespace; } @observer @@ -49,7 +47,6 @@ class NonInjectedPersistentVolumeClaims extends React.Component { render() { const { persistentVolumeClaimStore, - filterByNamespace, getDetailsUrl, podStore, storageClassApi, @@ -97,13 +94,10 @@ class NonInjectedPersistentVolumeClaims extends React.Component { return [ pvc.getName(), , - filterByNamespace(pvc.getNs()))} - > - {pvc.getNs()} - , + namespace={pvc.getNs()} + />, { export const PersistentVolumeClaims = withInjectables(NonInjectedPersistentVolumeClaims, { getProps: (di, props) => ({ ...props, - filterByNamespace: di.inject(filterByNamespaceInjectable), getDetailsUrl: di.inject(getDetailsUrlInjectable), persistentVolumeClaimStore: di.inject(persistentVolumeClaimStoreInjectable), podStore: di.inject(podStoreInjectable), From b8d1ef708ef104b55cf9e649397b18597455f9c7 Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Thu, 19 Jan 2023 13:27:33 +0300 Subject: [PATCH 27/37] Add KubeEventDetails empty placeholder (#6978) * KubeEventDetails empty placeholder Signed-off-by: Alex Andreev * Updaing snapshots Signed-off-by: Alex Andreev Signed-off-by: Alex Andreev --- ...when-cluster-is-not-relevant.test.tsx.snap | 21 ++++++++++++++++--- ...hide-kube-object-detail-item.test.tsx.snap | 14 +++++++++++-- ...ls.scss => kube-event-details.module.scss} | 8 +++---- .../components/+events/kube-event-details.tsx | 15 ++++++++----- 4 files changed, 44 insertions(+), 14 deletions(-) rename src/renderer/components/+events/{kube-event-details.scss => kube-event-details.module.scss} (91%) diff --git a/src/features/cluster/kube-object-details/extension-api/__snapshots__/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx.snap b/src/features/cluster/kube-object-details/extension-api/__snapshots__/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx.snap index 5f9f15db46..6a0943b664 100644 --- a/src/features/cluster/kube-object-details/extension-api/__snapshots__/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx.snap +++ b/src/features/cluster/kube-object-details/extension-api/__snapshots__/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx.snap @@ -104,12 +104,17 @@ exports[`disable kube object detail items when cluster is not relevant given ext
Events
+
+ No events found +
@@ -725,12 +730,17 @@ exports[`disable kube object detail items when cluster is not relevant given ext
Events
+
+ No events found +
@@ -1346,12 +1356,17 @@ exports[`disable kube object detail items when cluster is not relevant given not
Events
+
+ No events found +
diff --git a/src/features/cluster/kube-object-details/extension-api/__snapshots__/reactively-hide-kube-object-detail-item.test.tsx.snap b/src/features/cluster/kube-object-details/extension-api/__snapshots__/reactively-hide-kube-object-detail-item.test.tsx.snap index b6c14ca470..578fcae9e9 100644 --- a/src/features/cluster/kube-object-details/extension-api/__snapshots__/reactively-hide-kube-object-detail-item.test.tsx.snap +++ b/src/features/cluster/kube-object-details/extension-api/__snapshots__/reactively-hide-kube-object-detail-item.test.tsx.snap @@ -99,12 +99,17 @@ exports[`reactively hide kube object detail item renders 1`] = `
Events
+
+ No events found +
@@ -725,12 +730,17 @@ exports[`reactively hide kube object detail item when the item is shown renders
Events
+
+ No events found +
diff --git a/src/renderer/components/+events/kube-event-details.scss b/src/renderer/components/+events/kube-event-details.module.scss similarity index 91% rename from src/renderer/components/+events/kube-event-details.scss rename to src/renderer/components/+events/kube-event-details.module.scss index 4e781eaf2e..4e6b9cd5a0 100644 --- a/src/renderer/components/+events/kube-event-details.scss +++ b/src/renderer/components/+events/kube-event-details.module.scss @@ -22,8 +22,8 @@ } } } - - .no-items { - text-align: center; - } +} + +.empty { + opacity: 0.6; } diff --git a/src/renderer/components/+events/kube-event-details.tsx b/src/renderer/components/+events/kube-event-details.tsx index aef3bf7b10..80c6938630 100644 --- a/src/renderer/components/+events/kube-event-details.tsx +++ b/src/renderer/components/+events/kube-event-details.tsx @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import "./kube-event-details.scss"; +import styles from "./kube-event-details.module.scss"; import React from "react"; import { disposeOnUnmount, observer } from "mobx-react"; @@ -57,14 +57,14 @@ class NonInjectedKubeEventDetails extends React.Component - + Events {events.length > 0 && ( -
+
{events.map(event => ( -
-
+
+
{event.message}
@@ -85,6 +85,11 @@ class NonInjectedKubeEventDetails extends React.Component )} + {events.length === 0 && ( +
+ No events found +
+ )}
); } From 943756bad92002a5b72bc5b9155ffd2cb3b4fa5a Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Thu, 19 Jan 2023 13:40:25 +0300 Subject: [PATCH 28/37] Fix KubeObjectDetails light theme table view (#6981) * Add flat TableHead param Signed-off-by: Alex Andreev * Use flat headers across details panel tables Signed-off-by: Alex Andreev Signed-off-by: Alex Andreev --- src/renderer/components/+events/event-details.tsx | 2 +- .../components/+network-ingresses/ingress-details.tsx | 2 +- .../+network-services/service-details-endpoint.tsx | 2 +- src/renderer/components/+nodes/details-resources.tsx | 2 +- .../+workloads-deployments/deployment-replicasets.tsx | 2 +- src/renderer/components/+workloads-pods/pod-details-list.tsx | 2 +- src/renderer/components/drawer/drawer.scss | 4 ---- src/renderer/components/table/table-head.scss | 5 +++++ src/renderer/components/table/table-head.tsx | 4 +++- 9 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/renderer/components/+events/event-details.tsx b/src/renderer/components/+events/event-details.tsx index 07842b6f78..afe2af1dc5 100644 --- a/src/renderer/components/+events/event-details.tsx +++ b/src/renderer/components/+events/event-details.tsx @@ -78,7 +78,7 @@ const NonInjectedEventDetails = observer(({ Involved object - + Name Namespace Kind diff --git a/src/renderer/components/+network-ingresses/ingress-details.tsx b/src/renderer/components/+network-ingresses/ingress-details.tsx index d49d1e49a5..a01ced5b7f 100644 --- a/src/renderer/components/+network-ingresses/ingress-details.tsx +++ b/src/renderer/components/+network-ingresses/ingress-details.tsx @@ -37,7 +37,7 @@ class NonInjectedIngressDetails extends React.Component - + Path Link Backends diff --git a/src/renderer/components/+network-services/service-details-endpoint.tsx b/src/renderer/components/+network-services/service-details-endpoint.tsx index f7dec5077a..7e3eaaf34b 100644 --- a/src/renderer/components/+network-services/service-details-endpoint.tsx +++ b/src/renderer/components/+network-services/service-details-endpoint.tsx @@ -46,7 +46,7 @@ class NonInjectedServiceDetailsEndpoint extends React.Component - + Name Endpoints diff --git a/src/renderer/components/+nodes/details-resources.tsx b/src/renderer/components/+nodes/details-resources.tsx index b8cb2663a1..0ea4e37019 100644 --- a/src/renderer/components/+nodes/details-resources.tsx +++ b/src/renderer/components/+nodes/details-resources.tsx @@ -38,7 +38,7 @@ export function NodeDetailsResources({ type, node: { status = {}}}: NodeDetailsR selectable scrollable={false} > - + CPU Memory Ephemeral Storage diff --git a/src/renderer/components/+workloads-deployments/deployment-replicasets.tsx b/src/renderer/components/+workloads-deployments/deployment-replicasets.tsx index d46e3e7f31..fc334f87f0 100644 --- a/src/renderer/components/+workloads-deployments/deployment-replicasets.tsx +++ b/src/renderer/components/+workloads-deployments/deployment-replicasets.tsx @@ -78,7 +78,7 @@ class NonInjectedDeploymentReplicaSets extends React.Component - + Name Namespace diff --git a/src/renderer/components/+workloads-pods/pod-details-list.tsx b/src/renderer/components/+workloads-pods/pod-details-list.tsx index 37e8dab23f..83e15f794e 100644 --- a/src/renderer/components/+workloads-pods/pod-details-list.tsx +++ b/src/renderer/components/+workloads-pods/pod-details-list.tsx @@ -190,7 +190,7 @@ class NonInjectedPodDetailsList extends React.Component - + Name Node diff --git a/src/renderer/components/drawer/drawer.scss b/src/renderer/components/drawer/drawer.scss index 2ef81a82dc..58bb056f51 100644 --- a/src/renderer/components/drawer/drawer.scss +++ b/src/renderer/components/drawer/drawer.scss @@ -86,9 +86,5 @@ .drawer-content { overflow: auto; padding: var(--spacing); - - .Table .TableHead { - border-bottom: 1px solid var(--borderFaintColor); - } } } diff --git a/src/renderer/components/table/table-head.scss b/src/renderer/components/table/table-head.scss index ff9c6afec7..6df8517389 100644 --- a/src/renderer/components/table/table-head.scss +++ b/src/renderer/components/table/table-head.scss @@ -36,4 +36,9 @@ } } } + + &.flat { + background-color: transparent; + font-weight: 600; + } } diff --git a/src/renderer/components/table/table-head.tsx b/src/renderer/components/table/table-head.tsx index d697d38365..6424d43041 100644 --- a/src/renderer/components/table/table-head.tsx +++ b/src/renderer/components/table/table-head.tsx @@ -15,6 +15,7 @@ export interface TableHeadProps extends React.DOMAttributes { showTopLine?: boolean; // show border line at the top sticky?: boolean; // keep header on top when scrolling nowrap?: boolean; // white-space: nowrap, align inner in one line + flat?: boolean; // no header background } export class TableHead extends React.Component { @@ -23,10 +24,11 @@ export class TableHead extends React.Component { }; render() { - const { className, sticky, nowrap, showTopLine, children, ...headProps } = this.props; + const { className, sticky, nowrap, showTopLine, flat, children, ...headProps } = this.props; const classNames = cssNames("TableHead", className, { sticky, nowrap, topLine: showTopLine, + flat, }); return ( From 4b3fad57cb698bd1295c793edf1eed0e514189c1 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 19 Jan 2023 05:17:50 -0800 Subject: [PATCH 29/37] Fix extension API version being specified by library user (#6974) Signed-off-by: Sebastian Malton Signed-off-by: Sebastian Malton --- ...tension-api-version.global-override-for-injectable.ts | 9 +++++++++ src/common/vars/extension-api-version.injectable.ts | 7 ++++--- 2 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 src/common/vars/extension-api-version.global-override-for-injectable.ts diff --git a/src/common/vars/extension-api-version.global-override-for-injectable.ts b/src/common/vars/extension-api-version.global-override-for-injectable.ts new file mode 100644 index 0000000000..6d473eb1de --- /dev/null +++ b/src/common/vars/extension-api-version.global-override-for-injectable.ts @@ -0,0 +1,9 @@ +/** + * 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 extensionApiVersionInjectable from "./extension-api-version.injectable"; + +export default getGlobalOverride(extensionApiVersionInjectable, () => "6.0.0"); diff --git a/src/common/vars/extension-api-version.injectable.ts b/src/common/vars/extension-api-version.injectable.ts index 9b84cf1177..d4ddb92f00 100644 --- a/src/common/vars/extension-api-version.injectable.ts +++ b/src/common/vars/extension-api-version.injectable.ts @@ -4,15 +4,16 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { SemVer } from "semver"; -import applicationInformationToken from "./application-information-token"; +import packageJson from "../../../package.json"; const extensionApiVersionInjectable = getInjectable({ id: "extension-api-version", - instantiate: (di) => { - const { major, minor, patch } = new SemVer(di.inject(applicationInformationToken).version); + instantiate: () => { + const { major, minor, patch } = new SemVer(packageJson.version); return `${major}.${minor}.${patch}`; }, + causesSideEffects: true, }); export default extensionApiVersionInjectable; From 09e7ec1543438e85908140010a1b0b2f1ecdfaf1 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 19 Jan 2023 05:23:30 -0800 Subject: [PATCH 30/37] Release 6.4.0-alpha.4 (#6975) Signed-off-by: Sebastian Malton Signed-off-by: Sebastian Malton --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9a520c79c7..c386bfe778 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "productName": "OpenLens", "description": "OpenLens - Open Source IDE for Kubernetes", "homepage": "https://github.com/lensapp/lens", - "version": "6.4.0-alpha.3", + "version": "6.4.0-alpha.4", "repository": { "type": "git", "url": "git+https://github.com/lensapp/lens.git" From 2cc7ad111ab63722f3c835fcbbff8fed7b262d35 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Jan 2023 08:23:41 -0500 Subject: [PATCH 31/37] Bump esbuild from 0.17.2 to 0.17.3 (#6977) Bumps [esbuild](https://github.com/evanw/esbuild) from 0.17.2 to 0.17.3. - [Release notes](https://github.com/evanw/esbuild/releases) - [Changelog](https://github.com/evanw/esbuild/blob/main/CHANGELOG.md) - [Commits](https://github.com/evanw/esbuild/compare/v0.17.2...v0.17.3) --- updated-dependencies: - dependency-name: esbuild dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 228 +++++++++++++++++++++++++-------------------------- 2 files changed, 115 insertions(+), 115 deletions(-) diff --git a/package.json b/package.json index c386bfe778..15e9b59c2e 100644 --- a/package.json +++ b/package.json @@ -387,7 +387,7 @@ "electron": "^19.1.9", "electron-builder": "^23.6.0", "electron-notarize": "^0.3.0", - "esbuild": "^0.17.2", + "esbuild": "^0.17.3", "esbuild-loader": "^2.21.0", "eslint": "^8.32.0", "eslint-import-resolver-typescript": "^3.5.3", diff --git a/yarn.lock b/yarn.lock index 8fddc7a474..7b6934699b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -603,220 +603,220 @@ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz#cf91e86df127aa3d141744edafcba0abdc577d23" integrity sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg== -"@esbuild/android-arm64@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.2.tgz#73aa058f1fdc43770afd9a7b39654ce7e1b2e774" - integrity sha512-QSkmYISXr2uFoR+NdmmKyR5svYb0cXDCfzwNblLsrC8wTpx/I1L7u/zrjrf4aLoHoRTycZFIewJwBiUrO5DWtQ== +"@esbuild/android-arm64@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.17.3.tgz#35d045f69c9b4cf3f8efcd1ced24a560213d3346" + integrity sha512-XvJsYo3dO3Pi4kpalkyMvfQsjxPWHYjoX4MDiB/FUM4YMfWcXa5l4VCwFWVYI1+92yxqjuqrhNg0CZg3gSouyQ== "@esbuild/android-arm@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.16.17.tgz#025b6246d3f68b7bbaa97069144fb5fb70f2fff2" integrity sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw== -"@esbuild/android-arm@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.2.tgz#7cdb67672350177edbaa1de1bedd71b295989fab" - integrity sha512-Art7v3xYfqH1gEMUSP0Nx67pNAlC/Y3qSg3mOw8Wg7MP9bJLXL0DrmJaV1Qz1o4FwagtvDgkVOeBDpZgxdj13Q== +"@esbuild/android-arm@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.17.3.tgz#4986d26306a7440078d42b3bf580d186ef714286" + integrity sha512-1Mlz934GvbgdDmt26rTLmf03cAgLg5HyOgJN+ZGCeP3Q9ynYTNMn2/LQxIl7Uy+o4K6Rfi2OuLsr12JQQR8gNg== "@esbuild/android-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.16.17.tgz#c820e0fef982f99a85c4b8bfdd582835f04cd96e" integrity sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ== -"@esbuild/android-x64@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.2.tgz#58cb40ea9502a619551dab8145ec19de3192f3d8" - integrity sha512-5VOaFBI0RK8jJVDHdeU1YJmpxXoOf1RPoiOBhk/Tvpulw7R1SwCsxHvC3eDQcoF0gV7YM4V2wJO0PR9tem6gCQ== +"@esbuild/android-x64@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.17.3.tgz#a1928cd681e4055103384103c8bd34df7b9c7b19" + integrity sha512-nuV2CmLS07Gqh5/GrZLuqkU9Bm6H6vcCspM+zjp9TdQlxJtIe+qqEXQChmfc7nWdyr/yz3h45Utk1tUn8Cz5+A== "@esbuild/darwin-arm64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz#edef4487af6b21afabba7be5132c26d22379b220" integrity sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w== -"@esbuild/darwin-arm64@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.2.tgz#d9d60f704e13611db85acf2cc1ce2ed34fe5e46a" - integrity sha512-iQJu1Zn1Wi91D5x/sslEn/jwae1tgSAEHK0R/kYzIr5jO992IJwDDuWhSGll23jHt18RECxahhGG0BWY/bVUTw== +"@esbuild/darwin-arm64@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.17.3.tgz#e4af2b392e5606a4808d3a78a99d38c27af39f1d" + integrity sha512-01Hxaaat6m0Xp9AXGM8mjFtqqwDjzlMP0eQq9zll9U85ttVALGCGDuEvra5Feu/NbP5AEP1MaopPwzsTcUq1cw== "@esbuild/darwin-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz#42829168730071c41ef0d028d8319eea0e2904b4" integrity sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg== -"@esbuild/darwin-x64@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.2.tgz#4ae5735e1cd09b584cff4b8066a246cc62b06c97" - integrity sha512-j750nyrwoRZd3VnPo5sd12/5U27TxFGmvmoDv93G2jiaGJPYKJ/+5IfRAvHahGePTUIRPyOlE5YLFw9MlzuBnw== +"@esbuild/darwin-x64@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.17.3.tgz#cbcbfb32c8d5c86953f215b48384287530c5a38e" + integrity sha512-Eo2gq0Q/er2muf8Z83X21UFoB7EU6/m3GNKvrhACJkjVThd0uA+8RfKpfNhuMCl1bKRfBzKOk6xaYKQZ4lZqvA== "@esbuild/freebsd-arm64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz#1f4af488bfc7e9ced04207034d398e793b570a27" integrity sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw== -"@esbuild/freebsd-arm64@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.2.tgz#0265bd51eb1951b27eb693fd4989a4154e32bd58" - integrity sha512-ti7GU+/KUQQXEPmSUep7efZpA3KR2SkKsVuSL2FE7Yxka9apuqKfymAgQmVPMxstzAgCRBIu8uEu0KFmTfs3/Q== +"@esbuild/freebsd-arm64@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.3.tgz#90ec1755abca4c3ffe1ad10819cd9d31deddcb89" + integrity sha512-CN62ESxaquP61n1ZjQP/jZte8CE09M6kNn3baos2SeUfdVBkWN5n6vGp2iKyb/bm/x4JQzEvJgRHLGd5F5b81w== "@esbuild/freebsd-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz#636306f19e9bc981e06aa1d777302dad8fddaf72" integrity sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug== -"@esbuild/freebsd-x64@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.2.tgz#7b29d68def0ab7c5a21e3d8ec67a7a47db5f9993" - integrity sha512-NgooSKWSnrNKRuiumY1dg7KAGpsyXIMcwyOXN9imnqe8VFjqqrEOMqZRik0C1wlfLjiSCuMsj+YUSmBMAJMt0A== +"@esbuild/freebsd-x64@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.17.3.tgz#8760eedc466af253c3ed0dfa2940d0e59b8b0895" + integrity sha512-feq+K8TxIznZE+zhdVurF3WNJ/Sa35dQNYbaqM/wsCbWdzXr5lyq+AaTUSER2cUR+SXPnd/EY75EPRjf4s1SLg== "@esbuild/linux-arm64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz#a003f7ff237c501e095d4f3a09e58fc7b25a4aca" integrity sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g== -"@esbuild/linux-arm64@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.2.tgz#4ac9edc5011e0d5e3f8673c3c3b00dc5c9bf4459" - integrity sha512-jcJ4cxwQyqEqgDwkqj7820nKx9cM5WBPCCU4oUXvTeG+DkkJE6/P75od0VPHmItFfEJu+/2vV85ebvFVomZcBg== +"@esbuild/linux-arm64@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.17.3.tgz#13916fc8873115d7d546656e19037267b12d4567" + integrity sha512-JHeZXD4auLYBnrKn6JYJ0o5nWJI9PhChA/Nt0G4MvLaMrvXuWnY93R3a7PiXeJQphpL1nYsaMcoV2QtuvRnF/g== "@esbuild/linux-arm@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz#b591e6a59d9c4fe0eeadd4874b157ab78cf5f196" integrity sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ== -"@esbuild/linux-arm@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.2.tgz#5b3f46608b682e32255f6dce10ddcc150826df4d" - integrity sha512-8dfrRTd39n+THdAetwQKNwK6zBPR5oPjMtgRNXvRq8gsn/J5o69zTaOWVi3QO09BljqdShxU2dxDA09lDhdIqQ== +"@esbuild/linux-arm@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.17.3.tgz#15f876d127b244635ddc09eaaa65ae97bc472a63" + integrity sha512-CLP3EgyNuPcg2cshbwkqYy5bbAgK+VhyfMU7oIYyn+x4Y67xb5C5ylxsNUjRmr8BX+MW3YhVNm6Lq6FKtRTWHQ== "@esbuild/linux-ia32@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz#24333a11027ef46a18f57019450a5188918e2a54" integrity sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg== -"@esbuild/linux-ia32@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.2.tgz#21e123e2557236c847b38c2ea4dac3d8fbd1081c" - integrity sha512-dXZ3m++zaRVD2fqOUPP8QTh1Lfg6WO6uZDo/QJ3KdfnIR7dDToDtaA12AgKYvCed9Nuzf/gpKs/7/f6I02b/sg== +"@esbuild/linux-ia32@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.17.3.tgz#6691f02555d45b698195c81c9070ab4e521ef005" + integrity sha512-FyXlD2ZjZqTFh0sOQxFDiWG1uQUEOLbEh9gKN/7pFxck5Vw0qjWSDqbn6C10GAa1rXJpwsntHcmLqydY9ST9ZA== "@esbuild/linux-loong64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz#d5ad459d41ed42bbd4d005256b31882ec52227d8" integrity sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ== -"@esbuild/linux-loong64@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.2.tgz#05e2ca319a925de0a28fe2d8a31e158f8172dac9" - integrity sha512-/vntXkzSe9TUp0Rh35Wgye1EOhDtmIMjwC4rtahHcALmDXL+iuQGvwGFvXrP+sBigia/ltLryMAvCiqGV6plqw== +"@esbuild/linux-loong64@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.17.3.tgz#f77ef657f222d8b3a8fbd530a09e40976c458d48" + integrity sha512-OrDGMvDBI2g7s04J8dh8/I7eSO+/E7nMDT2Z5IruBfUO/RiigF1OF6xoH33Dn4W/OwAWSUf1s2nXamb28ZklTA== "@esbuild/linux-mips64el@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz#4e5967a665c38360b0a8205594377d4dcf9c3726" integrity sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw== -"@esbuild/linux-mips64el@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.2.tgz#98f0e25b86153d725d4379bc267a2cd4c9bcdd24" - integrity sha512-guYcNHjMRO1BMxWAeb8LDfgQaU8oeUO65xtlclwBD+hX3163KBifEHyao1hK96J10BP9n0UmZug6GhtGZaNm2Q== +"@esbuild/linux-mips64el@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.17.3.tgz#fa38833cfc8bfaadaa12b243257fe6d19d0f6f79" + integrity sha512-DcnUpXnVCJvmv0TzuLwKBC2nsQHle8EIiAJiJ+PipEVC16wHXaPEKP0EqN8WnBe0TPvMITOUlP2aiL5YMld+CQ== "@esbuild/linux-ppc64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz#206443a02eb568f9fdf0b438fbd47d26e735afc8" integrity sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g== -"@esbuild/linux-ppc64@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.2.tgz#45252f5343c5178dae93f8f7fc97aa4304cc5cca" - integrity sha512-fzHTnIGIVqgUGZcFnnisguKD4UneF4uwWwkG+i8kBspMDdU1wJ0jha1VdtxWP7Ob1KGxuXcoUlrQkCVO+Z5iOw== +"@esbuild/linux-ppc64@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.17.3.tgz#c157a602b627c90d174743e4b0dfb7630b101dbf" + integrity sha512-BDYf/l1WVhWE+FHAW3FzZPtVlk9QsrwsxGzABmN4g8bTjmhazsId3h127pliDRRu5674k1Y2RWejbpN46N9ZhQ== "@esbuild/linux-riscv64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz#c351e433d009bf256e798ad048152c8d76da2fc9" integrity sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw== -"@esbuild/linux-riscv64@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.2.tgz#6c4446ad19a4d8b070ea0ddf124b6ea53750d5e2" - integrity sha512-Sa+z7csvNVeAsTD83tVSggOb8CAU7EdDuihC8WhtoJfuDVkF5+Vi0imaiCjXQ7Ci5rz/a8IJ1H1MWX3eI9AmuQ== +"@esbuild/linux-riscv64@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.17.3.tgz#7bf79614bd544bd932839b1fcff6cf1f8f6bdf1a" + integrity sha512-WViAxWYMRIi+prTJTyV1wnqd2mS2cPqJlN85oscVhXdb/ZTFJdrpaqm/uDsZPGKHtbg5TuRX/ymKdOSk41YZow== "@esbuild/linux-s390x@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz#661f271e5d59615b84b6801d1c2123ad13d9bd87" integrity sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w== -"@esbuild/linux-s390x@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.2.tgz#5c03feb73b0c3fa80834eb150cd9c14206681b4e" - integrity sha512-jUFCO+/VA1Y/oeauSNBubp2UtGu4xjBUEFVgMPm0qLuw6xw18yOagKwBOPVmyE3ZSFqGd9BAPZM/JrtadgBryA== +"@esbuild/linux-s390x@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.17.3.tgz#6bb50c5a2613d31ce1137fe5c249ecadbecccdea" + integrity sha512-Iw8lkNHUC4oGP1O/KhumcVy77u2s6+KUjieUqzEU3XuWJqZ+AY7uVMrrCbAiwWTkpQHkr00BuXH5RpC6Sb/7Ug== "@esbuild/linux-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz#e4ba18e8b149a89c982351443a377c723762b85f" integrity sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw== -"@esbuild/linux-x64@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.2.tgz#60405f2a40fb792557293a11ba0c380cfe744fcc" - integrity sha512-naygxkSmr6x9tuvpa8iGefnXo3Rc3Noz7c4+Dn0MSfSWJwLaN2YR686e7HkI09irfjDdU5UAq9wcxUwjkYQNUA== +"@esbuild/linux-x64@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.17.3.tgz#aa140d99f0d9e0af388024823bfe4558d73fbbf9" + integrity sha512-0AGkWQMzeoeAtXQRNB3s4J1/T2XbigM2/Mn2yU1tQSmQRmHIZdkGbVq2A3aDdNslPyhb9/lH0S5GMTZ4xsjBqg== "@esbuild/netbsd-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz#7d4f4041e30c5c07dd24ffa295c73f06038ec775" integrity sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA== -"@esbuild/netbsd-x64@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.2.tgz#be8afb6d91827ecb8a8f42a43c63b528bbdd9c53" - integrity sha512-Hagbdq4EpiG9XXJY6Ozfrl2RN5jkXZXd6BD39f43tWz0d8yyOrRZlofM1eA6JYQbdv6c8BUsUOcgopavIqwx4Q== +"@esbuild/netbsd-x64@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.17.3.tgz#b6ae9948b03e4c95dc581c68358fb61d9d12a625" + integrity sha512-4+rR/WHOxIVh53UIQIICryjdoKdHsFZFD4zLSonJ9RRw7bhKzVyXbnRPsWSfwybYqw9sB7ots/SYyufL1mBpEg== "@esbuild/openbsd-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz#970fa7f8470681f3e6b1db0cc421a4af8060ec35" integrity sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg== -"@esbuild/openbsd-x64@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.2.tgz#18e9f4c8284ade701039df1de246a35161dd382e" - integrity sha512-Pkby+VEXY7+aWP8J2RUCfqWbbZz2M1GavRGGnE2kEPzwarba/BOk3B45PSaKwc3iKdK2rgCPCTjC/p9JoKNejA== +"@esbuild/openbsd-x64@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.17.3.tgz#cda007233e211fc9154324bfa460540cfc469408" + integrity sha512-cVpWnkx9IYg99EjGxa5Gc0XmqumtAwK3aoz7O4Dii2vko+qXbkHoujWA68cqXjhh6TsLaQelfDO4MVnyr+ODeA== "@esbuild/sunos-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz#abc60e7c4abf8b89fb7a4fe69a1484132238022c" integrity sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw== -"@esbuild/sunos-x64@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.2.tgz#c45c5b6fa406af451e3ebe2ba610bfaad106d20b" - integrity sha512-WAyg4dBTUsAPJ9cRnuQ23cwJWYRhP4e4y0M/l2+EpRjWW+g1MNAXKQQNNhRQ71zc8UixRVrqj+43ReHeZC8mJQ== +"@esbuild/sunos-x64@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.17.3.tgz#f1385b092000c662d360775f3fad80943d2169c4" + integrity sha512-RxmhKLbTCDAY2xOfrww6ieIZkZF+KBqG7S2Ako2SljKXRFi+0863PspK74QQ7JpmWwncChY25JTJSbVBYGQk2Q== "@esbuild/win32-arm64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz#7b0ff9e8c3265537a7a7b1fd9a24e7bd39fcd87a" integrity sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw== -"@esbuild/win32-arm64@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.2.tgz#6b6d31077cba24bd8bc9e173b9ae052b0bef5b0c" - integrity sha512-rMbO3gPpxuENd+AnZLgo4J/g+BkwxT3NK7nYpSZ0KlYtSdlxYMIMG5pznX7a1ISZKo67aGStne+K41jdkBywpA== +"@esbuild/win32-arm64@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.17.3.tgz#14e9dd9b1b55aa991f80c120fef0c4492d918801" + integrity sha512-0r36VeEJ4efwmofxVJRXDjVRP2jTmv877zc+i+Pc7MNsIr38NfsjkQj23AfF7l0WbB+RQ7VUb+LDiqC/KY/M/A== "@esbuild/win32-ia32@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz#e90fe5267d71a7b7567afdc403dfd198c292eb09" integrity sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig== -"@esbuild/win32-ia32@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.2.tgz#88bb3a510006114d8291506b6ec9ff93f66d0d5c" - integrity sha512-73dWKDMhFk+4owS19OjEVbEDGFPRS1fyga3qOu5HPd5eTxJTjtlVTT/fG/S7AchA0vXS7hOqY70AAir1CkmICg== +"@esbuild/win32-ia32@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.17.3.tgz#de584423513d13304a6925e01233499a37a4e075" + integrity sha512-wgO6rc7uGStH22nur4aLFcq7Wh86bE9cOFmfTr/yxN3BXvDEdCSXyKkO+U5JIt53eTOgC47v9k/C1bITWL/Teg== "@esbuild/win32-x64@0.16.17": version "0.16.17" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz#c5a1a4bfe1b57f0c3e61b29883525c6da3e5c091" integrity sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q== -"@esbuild/win32-x64@0.17.2": - version "0.17.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.2.tgz#a7ce1ae475e14febb80e2690430e399491206a61" - integrity sha512-QFJlhf73HCBjTqAWWSIlD8JQBtmue0Dd6UV+KGccycJ3HKj1dCkXdRKJGwc5bZWiI9hrxcWsVEa1kVFaltC4vQ== +"@esbuild/win32-x64@0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.17.3.tgz#2f69ea6b37031b0d1715dd2da832a8ae5eb36e74" + integrity sha512-FdVl64OIuiKjgXBjwZaJLKp0eaEckifbhn10dXWhysMJkWblg3OEEGKSIyhiD5RSgAya8WzP3DNkngtIg3Nt7g== "@eslint/eslintrc@^1.4.1": version "1.4.1" @@ -5762,33 +5762,33 @@ esbuild@^0.16.17: "@esbuild/win32-ia32" "0.16.17" "@esbuild/win32-x64" "0.16.17" -esbuild@^0.17.2: - version "0.17.2" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.2.tgz#c37ee608434be1c0e79f872c8bd484fb46af59df" - integrity sha512-odaHSgtYafOXt2nSISwdWlfRkb4ceMX3akY1mWspQpT08jsqVYEK1XtVusr250Rmbx8AVNWjMPI/yyvKqxOKMw== +esbuild@^0.17.3: + version "0.17.3" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.17.3.tgz#d9aa02a3bc441ed35f9569cd9505812ae3fcae61" + integrity sha512-9n3AsBRe6sIyOc6kmoXg2ypCLgf3eZSraWFRpnkto+svt8cZNuKTkb1bhQcitBcvIqjNiK7K0J3KPmwGSfkA8g== optionalDependencies: - "@esbuild/android-arm" "0.17.2" - "@esbuild/android-arm64" "0.17.2" - "@esbuild/android-x64" "0.17.2" - "@esbuild/darwin-arm64" "0.17.2" - "@esbuild/darwin-x64" "0.17.2" - "@esbuild/freebsd-arm64" "0.17.2" - "@esbuild/freebsd-x64" "0.17.2" - "@esbuild/linux-arm" "0.17.2" - "@esbuild/linux-arm64" "0.17.2" - "@esbuild/linux-ia32" "0.17.2" - "@esbuild/linux-loong64" "0.17.2" - "@esbuild/linux-mips64el" "0.17.2" - "@esbuild/linux-ppc64" "0.17.2" - "@esbuild/linux-riscv64" "0.17.2" - "@esbuild/linux-s390x" "0.17.2" - "@esbuild/linux-x64" "0.17.2" - "@esbuild/netbsd-x64" "0.17.2" - "@esbuild/openbsd-x64" "0.17.2" - "@esbuild/sunos-x64" "0.17.2" - "@esbuild/win32-arm64" "0.17.2" - "@esbuild/win32-ia32" "0.17.2" - "@esbuild/win32-x64" "0.17.2" + "@esbuild/android-arm" "0.17.3" + "@esbuild/android-arm64" "0.17.3" + "@esbuild/android-x64" "0.17.3" + "@esbuild/darwin-arm64" "0.17.3" + "@esbuild/darwin-x64" "0.17.3" + "@esbuild/freebsd-arm64" "0.17.3" + "@esbuild/freebsd-x64" "0.17.3" + "@esbuild/linux-arm" "0.17.3" + "@esbuild/linux-arm64" "0.17.3" + "@esbuild/linux-ia32" "0.17.3" + "@esbuild/linux-loong64" "0.17.3" + "@esbuild/linux-mips64el" "0.17.3" + "@esbuild/linux-ppc64" "0.17.3" + "@esbuild/linux-riscv64" "0.17.3" + "@esbuild/linux-s390x" "0.17.3" + "@esbuild/linux-x64" "0.17.3" + "@esbuild/netbsd-x64" "0.17.3" + "@esbuild/openbsd-x64" "0.17.3" + "@esbuild/sunos-x64" "0.17.3" + "@esbuild/win32-arm64" "0.17.3" + "@esbuild/win32-ia32" "0.17.3" + "@esbuild/win32-x64" "0.17.3" escalade@^3.1.1: version "3.1.1" From 8009d96957ea1f2df67a81d2edffccc42d7e06b9 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 19 Jan 2023 05:23:50 -0800 Subject: [PATCH 32/37] Broadcast error messages within Cluster.getConnectionStatus (#6964) Signed-off-by: Sebastian Malton Signed-off-by: Sebastian Malton --- src/common/cluster/cluster.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/common/cluster/cluster.ts b/src/common/cluster/cluster.ts index c8e7e69e90..c68fd41c8a 100644 --- a/src/common/cluster/cluster.ts +++ b/src/common/cluster/cluster.ts @@ -560,6 +560,8 @@ export class Cluster implements ClusterModel { const message = String(error.error || error.message) || String(error); this.broadcastConnectUpdate(message, true); + } else if (error instanceof Error || typeof error === "string") { + this.broadcastConnectUpdate(`${error}`, true); } else { this.broadcastConnectUpdate("Unknown error has occurred", true); } From d059956c1ebec4f809e4fce060900ab599d4fc40 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 19 Jan 2023 05:24:42 -0800 Subject: [PATCH 33/37] Upgrade to codeql@v2 (#6976) Signed-off-by: Sebastian Malton Signed-off-by: Sebastian Malton --- .github/workflows/codeql-analysis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index e764763208..b43814b584 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -43,7 +43,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v1 + uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -54,7 +54,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v1 + uses: github/codeql-action/autobuild@v2 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -68,4 +68,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + uses: github/codeql-action/analyze@v2 From 8e65a0acd616bcf0769109b3b1c6c7e30ace8ab6 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 19 Jan 2023 06:34:31 -0800 Subject: [PATCH 34/37] Improve the injectability of cluster metadata detection (#6910) * Improve the injectability of cluster metadata detection - Remove unnecessary and complex base class Signed-off-by: Sebastian Malton * Remove dead code Signed-off-by: Sebastian Malton * Remove dead code Signed-off-by: Sebastian Malton Signed-off-by: Sebastian Malton --- src/common/cluster/cluster.ts | 92 +++++---- src/common/utils/type-narrowing.ts | 2 +- .../base-cluster-detector.ts | 25 --- ...luster-distribution-detector.injectable.ts | 141 +++++++++++++ .../cluster-id-detector.injectable.ts | 43 ++++ .../cluster-detectors/cluster-id-detector.ts | 31 --- .../cluster-last-seen-detector.injectable.ts | 32 +++ ...cluster-nodes-count-detector.injectable.ts | 40 ++++ .../cluster-version-detector.injectable.ts | 28 +++ .../create-version-detector.injectable.ts | 21 -- .../detect-cluster-metadata.injectable.ts | 51 +++++ .../detector-registry.injectable.ts | 16 -- .../cluster-detectors/detector-registry.ts | 55 ----- .../distribution-detector.ts | 189 ------------------ .../cluster-detectors/last-seen-detector.ts | 19 -- .../cluster-detectors/nodes-count-detector.ts | 24 --- .../request-cluster-version.injectable.ts | 22 ++ src/main/cluster-detectors/token.ts | 26 +++ .../cluster-detectors/version-detector.ts | 23 --- .../create-cluster.injectable.ts | 10 +- .../setup-detector-registry.injectable.ts | 36 ---- .../cluster/create-cluster.injectable.ts | 9 +- 22 files changed, 443 insertions(+), 492 deletions(-) delete mode 100644 src/main/cluster-detectors/base-cluster-detector.ts create mode 100644 src/main/cluster-detectors/cluster-distribution-detector.injectable.ts create mode 100644 src/main/cluster-detectors/cluster-id-detector.injectable.ts delete mode 100644 src/main/cluster-detectors/cluster-id-detector.ts create mode 100644 src/main/cluster-detectors/cluster-last-seen-detector.injectable.ts create mode 100644 src/main/cluster-detectors/cluster-nodes-count-detector.injectable.ts create mode 100644 src/main/cluster-detectors/cluster-version-detector.injectable.ts delete mode 100644 src/main/cluster-detectors/create-version-detector.injectable.ts create mode 100644 src/main/cluster-detectors/detect-cluster-metadata.injectable.ts delete mode 100644 src/main/cluster-detectors/detector-registry.injectable.ts delete mode 100644 src/main/cluster-detectors/detector-registry.ts delete mode 100644 src/main/cluster-detectors/distribution-detector.ts delete mode 100644 src/main/cluster-detectors/last-seen-detector.ts delete mode 100644 src/main/cluster-detectors/nodes-count-detector.ts create mode 100644 src/main/cluster-detectors/request-cluster-version.injectable.ts create mode 100644 src/main/cluster-detectors/token.ts delete mode 100644 src/main/cluster-detectors/version-detector.ts delete mode 100644 src/main/start-main-application/runnables/setup-detector-registry.injectable.ts diff --git a/src/common/cluster/cluster.ts b/src/common/cluster/cluster.ts index c68fd41c8a..c769865086 100644 --- a/src/common/cluster/cluster.ts +++ b/src/common/cluster/cluster.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { action, comparer, computed, makeObservable, observable, reaction, when } from "mobx"; +import { action, comparer, computed, makeObservable, observable, reaction, runInAction, when } from "mobx"; import type { ClusterContextHandler } from "../../main/context-handler/context-handler"; import type { KubeConfig } from "@kubernetes/client-node"; import { HttpError } from "@kubernetes/client-node"; @@ -11,8 +11,6 @@ import type { Kubectl } from "../../main/kubectl/kubectl"; import type { KubeconfigManager } from "../../main/kubeconfig-manager/kubeconfig-manager"; import type { KubeApiResource, KubeApiResourceDescriptor } from "../rbac"; import { formatKubeApiResource } from "../rbac"; -import type { VersionDetector } from "../../main/cluster-detectors/version-detector"; -import type { DetectorRegistry } from "../../main/cluster-detectors/detector-registry"; import plimit from "p-limit"; import type { ClusterState, ClusterMetricsResourceType, ClusterId, ClusterMetadata, ClusterModel, ClusterPreferences, ClusterPrometheusPreferences, UpdateClusterModel, KubeAuthUpdate, ClusterConfigData } from "../cluster-types"; import { ClusterMetadataKey, initialNodeShellImage, ClusterStatus, clusterModelIdChecker, updateClusterModelChecker } from "../cluster-types"; @@ -27,11 +25,14 @@ import type { BroadcastMessage } from "../ipc/broadcast-message.injectable"; import type { LoadConfigfromFile } from "../kube-helpers/load-config-from-file.injectable"; import type { CanListResource, RequestNamespaceListPermissions, RequestNamespaceListPermissionsFor } from "./request-namespace-list-permissions.injectable"; import type { RequestApiResources } from "../../main/cluster/request-api-resources.injectable"; +import type { DetectClusterMetadata } from "../../main/cluster-detectors/detect-cluster-metadata.injectable"; +import type { FalibleOnlyClusterMetadataDetector } from "../../main/cluster-detectors/token"; export interface ClusterDependencies { readonly directoryForKubeConfigs: string; readonly logger: Logger; - readonly detectorRegistry: DetectorRegistry; + readonly clusterVersionDetector: FalibleOnlyClusterMetadataDetector; + detectClusterMetadata: DetectClusterMetadata; createKubeconfigManager: (cluster: Cluster) => KubeconfigManager; createContextHandler: (cluster: Cluster) => ClusterContextHandler; createKubectl: (clusterVersion: string) => Kubectl; @@ -39,7 +40,6 @@ export interface ClusterDependencies { requestApiResources: RequestApiResources; requestNamespaceListPermissionsFor: RequestNamespaceListPermissionsFor; createListNamespaces: (config: KubeConfig) => ListNamespaces; - createVersionDetector: (cluster: Cluster) => VersionDetector; broadcastMessage: BroadcastMessage; loadConfigfromFile: LoadConfigfromFile; } @@ -444,57 +444,62 @@ export class Cluster implements ClusterModel { /** * @internal */ - @action + @action async refreshAccessibilityAndMetadata() { await this.refreshAccessibility(); await this.refreshMetadata(); } - /** - * @internal - */ - async refreshMetadata() { - this.dependencies.logger.info(`[CLUSTER]: refreshMetadata`, this.getMeta()); - const metadata = await this.dependencies.detectorRegistry.detectForCluster(this); - const existingMetadata = this.metadata; + /** + * @internal + */ + async refreshMetadata() { + this.dependencies.logger.info(`[CLUSTER]: refreshMetadata`, this.getMeta()); - this.metadata = Object.assign(existingMetadata, metadata); - } + const newMetadata = await this.dependencies.detectClusterMetadata(this); - /** - * @internal - */ - private async refreshAccessibility(): Promise { - this.dependencies.logger.info(`[CLUSTER]: refreshAccessibility`, this.getMeta()); - const proxyConfig = await this.getProxyKubeconfig(); - const canI = this.dependencies.createAuthorizationReview(proxyConfig); - const requestNamespaceListPermissions = this.dependencies.requestNamespaceListPermissionsFor(proxyConfig); + runInAction(() => { + this.metadata = { + ...this.metadata, + ...newMetadata, + }; + }); + } - this.isAdmin = await canI({ - namespace: "kube-system", - resource: "*", - verb: "create", - }); - this.isGlobalWatchEnabled = await canI({ - verb: "watch", - resource: "*", - }); - this.allowedNamespaces.replace(await this.requestAllowedNamespaces(proxyConfig)); - this.knownResources.replace(await this.dependencies.requestApiResources(this)); - this.allowedResources.replace(await this.getAllowedResources(requestNamespaceListPermissions)); - this.ready = true; - } + /** + * @internal + */ + private async refreshAccessibility(): Promise { + this.dependencies.logger.info(`[CLUSTER]: refreshAccessibility`, this.getMeta()); + const proxyConfig = await this.getProxyKubeconfig(); + const canI = this.dependencies.createAuthorizationReview(proxyConfig); + const requestNamespaceListPermissions = this.dependencies.requestNamespaceListPermissionsFor(proxyConfig); + + this.isAdmin = await canI({ + namespace: "kube-system", + resource: "*", + verb: "create", + }); + this.isGlobalWatchEnabled = await canI({ + verb: "watch", + resource: "*", + }); + this.allowedNamespaces.replace(await this.requestAllowedNamespaces(proxyConfig)); + this.knownResources.replace(await this.dependencies.requestApiResources(this)); + this.allowedResources.replace(await this.getAllowedResources(requestNamespaceListPermissions)); + this.ready = true; + } /** * @internal */ @action - async refreshConnectionStatus() { - const connectionStatus = await this.getConnectionStatus(); + async refreshConnectionStatus() { + const connectionStatus = await this.getConnectionStatus(); - this.online = connectionStatus > ClusterStatus.Offline; - this.accessible = connectionStatus == ClusterStatus.AccessGranted; - } + this.online = connectionStatus > ClusterStatus.Offline; + this.accessible = connectionStatus == ClusterStatus.AccessGranted; + } async getKubeconfig(): Promise { const { config } = await this.dependencies.loadConfigfromFile(this.kubeConfigPath); @@ -521,8 +526,7 @@ export class Cluster implements ClusterModel { protected async getConnectionStatus(): Promise { try { - const versionDetector = this.dependencies.createVersionDetector(this); - const versionData = await versionDetector.detect(); + const versionData = await this.dependencies.clusterVersionDetector.detect(this); this.metadata.version = versionData.value; diff --git a/src/common/utils/type-narrowing.ts b/src/common/utils/type-narrowing.ts index 41552c3136..68d5265237 100644 --- a/src/common/utils/type-narrowing.ts +++ b/src/common/utils/type-narrowing.ts @@ -130,7 +130,7 @@ export function isFunction(val: unknown): val is (...args: unknown[]) => unknown /** * Checks if the value in the second position is non-nullable */ -export function hasDefinedTupleValue(pair: [K, V | undefined | null]): pair is [K, V] { +export function hasDefinedTupleValue(pair: readonly [K, V | undefined | null]): pair is [K, V] { return pair[1] != null; } diff --git a/src/main/cluster-detectors/base-cluster-detector.ts b/src/main/cluster-detectors/base-cluster-detector.ts deleted file mode 100644 index 1aca321dfe..0000000000 --- a/src/main/cluster-detectors/base-cluster-detector.ts +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import type { RequestPromiseOptions } from "request-promise-native"; -import type { Cluster } from "../../common/cluster/cluster"; -import type { K8sRequest } from "../k8s-request.injectable"; - -export interface ClusterDetectionResult { - value: string | number | boolean; - accuracy: number; -} - -export abstract class BaseClusterDetector { - abstract readonly key: string; - - constructor(public readonly cluster: Cluster, private _k8sRequest: K8sRequest) {} - - abstract detect(): Promise; - - protected async k8sRequest(path: string, options: RequestPromiseOptions = {}): Promise { - return this._k8sRequest(this.cluster, path, options); - } -} diff --git a/src/main/cluster-detectors/cluster-distribution-detector.injectable.ts b/src/main/cluster-detectors/cluster-distribution-detector.injectable.ts new file mode 100644 index 0000000000..7a13c62515 --- /dev/null +++ b/src/main/cluster-detectors/cluster-distribution-detector.injectable.ts @@ -0,0 +1,141 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import { clusterMetadataDetectorInjectionToken } from "./token"; +import { ClusterMetadataKey } from "../../common/cluster-types"; +import { getInjectable } from "@ogre-tools/injectable"; +import k8SRequestInjectable from "../k8s-request.injectable"; +import type { Cluster } from "../../common/cluster/cluster"; +import requestClusterVersionInjectable from "./request-cluster-version.injectable"; + +const isGKE = (version: string) => version.includes("gke"); +const isEKS = (version: string) => version.includes("eks"); +const isIKS = (version: string) => version.includes("IKS"); +const isAKS = (cluster: Cluster) => cluster.apiUrl.includes("azmk8s.io"); +const isMirantis = (version: string) => version.includes("-mirantis-") || version.includes("-docker-"); +const isDigitalOcean = (cluster: Cluster) => cluster.apiUrl.endsWith("k8s.ondigitalocean.com"); +const isMinikube = (cluster: Cluster) => cluster.contextName.startsWith("minikube"); +const isMicrok8s = (cluster: Cluster) => cluster.contextName.startsWith("microk8s"); +const isKind = (cluster: Cluster) => cluster.contextName.startsWith("kubernetes-admin@kind-"); +const isDockerDesktop = (cluster: Cluster) => cluster.contextName === "docker-desktop"; +const isTke = (version: string) => version.includes("-tke."); +const isCustom = (version: string) => version.includes("+"); +const isVMWare = (version: string) => version.includes("+vmware"); +const isRke = (version: string) => version.includes("-rancher"); +const isRancherDesktop = (cluster: Cluster) => cluster.contextName === "rancher-desktop"; +const isK3s = (version: string) => version.includes("+k3s"); +const isK0s = (version: string) => version.includes("-k0s") || version.includes("+k0s"); +const isAlibaba = (version: string) => version.includes("-aliyun"); +const isHuawei = (version: string) => version.includes("-CCE"); + +const clusterDistributionDetectorInjectable = getInjectable({ + id: "cluster-distribution-detector", + instantiate: (di) => { + const k8sRequest = di.inject(k8SRequestInjectable); + const requestClusterVersion = di.inject(requestClusterVersionInjectable); + const isOpenshift = async (cluster: Cluster) => { + try { + const { paths = [] } = await k8sRequest(cluster, "") as { paths?: string[] }; + + return paths.includes("/apis/project.openshift.io"); + } catch (e) { + return false; + } + }; + + return { + key: ClusterMetadataKey.DISTRIBUTION, + detect: async (cluster) => { + const version = await requestClusterVersion(cluster); + + if (isRke(version)) { + return { value: "rke", accuracy: 80 }; + } + + if (isRancherDesktop(cluster)) { + return { value: "rancher-desktop", accuracy: 80 }; + } + + if (isK3s(version)) { + return { value: "k3s", accuracy: 80 }; + } + + if (isGKE(version)) { + return { value: "gke", accuracy: 80 }; + } + + if (isEKS(version)) { + return { value: "eks", accuracy: 80 }; + } + + if (isIKS(version)) { + return { value: "iks", accuracy: 80 }; + } + + if (isAKS(cluster)) { + return { value: "aks", accuracy: 80 }; + } + + if (isDigitalOcean(cluster)) { + return { value: "digitalocean", accuracy: 90 }; + } + + if (isK0s(version)) { + return { value: "k0s", accuracy: 80 }; + } + + if (isVMWare(version)) { + return { value: "vmware", accuracy: 90 }; + } + + if (isMirantis(version)) { + return { value: "mirantis", accuracy: 90 }; + } + + if (isAlibaba(version)) { + return { value: "alibaba", accuracy: 90 }; + } + + if (isHuawei(version)) { + return { value: "huawei", accuracy: 90 }; + } + + if (isTke(version)) { + return { value: "tencent", accuracy: 90 }; + } + + if (isMinikube(cluster)) { + return { value: "minikube", accuracy: 80 }; + } + + if (isMicrok8s(cluster)) { + return { value: "microk8s", accuracy: 80 }; + } + + if (isKind(cluster)) { + return { value: "kind", accuracy: 70 }; + } + + if (isDockerDesktop(cluster)) { + return { value: "docker-desktop", accuracy: 80 }; + } + + if (isCustom(version)) { + if (await isOpenshift(cluster)) { + return { value: "openshift", accuracy: 90 }; + } + + return { value: "custom", accuracy: 10 }; + } + + return { value: "unknown", accuracy: 10 }; + }, + }; + }, + injectionToken: clusterMetadataDetectorInjectionToken, +}); + +export default clusterDistributionDetectorInjectable; + diff --git a/src/main/cluster-detectors/cluster-id-detector.injectable.ts b/src/main/cluster-detectors/cluster-id-detector.injectable.ts new file mode 100644 index 0000000000..8d7a90fedc --- /dev/null +++ b/src/main/cluster-detectors/cluster-id-detector.injectable.ts @@ -0,0 +1,43 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import { clusterMetadataDetectorInjectionToken } from "./token"; +import { createHash } from "crypto"; +import { ClusterMetadataKey } from "../../common/cluster-types"; +import { getInjectable } from "@ogre-tools/injectable"; +import k8SRequestInjectable from "../k8s-request.injectable"; +import type { Cluster } from "../../common/cluster/cluster"; + +const clusterIdDetectorFactoryInjectable = getInjectable({ + id: "cluster-id-detector-factory", + instantiate: (di) => { + const k8sRequest = di.inject(k8SRequestInjectable); + const getDefaultNamespaceId = async (cluster: Cluster) => { + const { metadata } = await k8sRequest(cluster, "/api/v1/namespaces/default") as { metadata: { uid: string }}; + + return metadata.uid; + }; + + return { + key: ClusterMetadataKey.CLUSTER_ID, + detect: async (cluster) => { + let id: string; + + try { + id = await getDefaultNamespaceId(cluster); + } catch(_) { + id = cluster.apiUrl; + } + const value = createHash("sha256").update(id).digest("hex"); + + return { value, accuracy: 100 }; + }, + }; + }, + injectionToken: clusterMetadataDetectorInjectionToken, +}); + +export default clusterIdDetectorFactoryInjectable; + diff --git a/src/main/cluster-detectors/cluster-id-detector.ts b/src/main/cluster-detectors/cluster-id-detector.ts deleted file mode 100644 index 8f1486fcb1..0000000000 --- a/src/main/cluster-detectors/cluster-id-detector.ts +++ /dev/null @@ -1,31 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { BaseClusterDetector } from "./base-cluster-detector"; -import { createHash } from "crypto"; -import { ClusterMetadataKey } from "../../common/cluster-types"; - -export class ClusterIdDetector extends BaseClusterDetector { - key = ClusterMetadataKey.CLUSTER_ID; - - public async detect() { - let id: string; - - try { - id = await this.getDefaultNamespaceId(); - } catch(_) { - id = this.cluster.apiUrl; - } - const value = createHash("sha256").update(id).digest("hex"); - - return { value, accuracy: 100 }; - } - - protected async getDefaultNamespaceId() { - const response = await this.k8sRequest("/api/v1/namespaces/default"); - - return response.metadata.uid; - } -} diff --git a/src/main/cluster-detectors/cluster-last-seen-detector.injectable.ts b/src/main/cluster-detectors/cluster-last-seen-detector.injectable.ts new file mode 100644 index 0000000000..64b05b22ab --- /dev/null +++ b/src/main/cluster-detectors/cluster-last-seen-detector.injectable.ts @@ -0,0 +1,32 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import { clusterMetadataDetectorInjectionToken } from "./token"; +import { ClusterMetadataKey } from "../../common/cluster-types"; +import { getInjectable } from "@ogre-tools/injectable"; +import requestClusterVersionInjectable from "./request-cluster-version.injectable"; + +const clusterLastSeenDetectorInjectable = getInjectable({ + id: "cluster-last-seen-detector", + instantiate: (di) => { + const requestClusterVersion = di.inject(requestClusterVersionInjectable); + + return { + key: ClusterMetadataKey.LAST_SEEN, + detect: async (cluster) => { + try { + await requestClusterVersion(cluster); + + return { value: new Date().toJSON(), accuracy: 100 }; + } catch { + return null; + } + }, + }; + }, + injectionToken: clusterMetadataDetectorInjectionToken, +}); + +export default clusterLastSeenDetectorInjectable; diff --git a/src/main/cluster-detectors/cluster-nodes-count-detector.injectable.ts b/src/main/cluster-detectors/cluster-nodes-count-detector.injectable.ts new file mode 100644 index 0000000000..e9f0f91e65 --- /dev/null +++ b/src/main/cluster-detectors/cluster-nodes-count-detector.injectable.ts @@ -0,0 +1,40 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import { clusterMetadataDetectorInjectionToken } from "./token"; +import { ClusterMetadataKey } from "../../common/cluster-types"; +import { getInjectable } from "@ogre-tools/injectable"; +import k8SRequestInjectable from "../k8s-request.injectable"; +import type { Cluster } from "../../common/cluster/cluster"; + +const clusterNodeCountDetectorInjectable = getInjectable({ + id: "cluster-node-count-detector", + instantiate: (di) => { + const k8sRequest = di.inject(k8SRequestInjectable); + const requestNodeCount = async (cluster: Cluster) => { + const { items } = await k8sRequest(cluster, "/api/v1/nodes") as { items: unknown[] }; + + return items.length; + }; + + return { + key: ClusterMetadataKey.NODES_COUNT, + detect: async (cluster) => { + try { + return { + value: await requestNodeCount(cluster), + accuracy: 1000, + }; + } catch { + return null; + } + }, + }; + }, + injectionToken: clusterMetadataDetectorInjectionToken, +}); + +export default clusterNodeCountDetectorInjectable; + diff --git a/src/main/cluster-detectors/cluster-version-detector.injectable.ts b/src/main/cluster-detectors/cluster-version-detector.injectable.ts new file mode 100644 index 0000000000..82d8c18fdc --- /dev/null +++ b/src/main/cluster-detectors/cluster-version-detector.injectable.ts @@ -0,0 +1,28 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import { clusterMetadataDetectorInjectionToken } from "./token"; +import { ClusterMetadataKey } from "../../common/cluster-types"; +import { getInjectable } from "@ogre-tools/injectable"; +import requestClusterVersionInjectable from "./request-cluster-version.injectable"; + +const clusterVersionDetectorInjectable = getInjectable({ + id: "cluster-version-detector", + instantiate: (di) => { + const requestClusterVersion = di.inject(requestClusterVersionInjectable); + + return { + key: ClusterMetadataKey.VERSION, + detect: async (cluster) => ({ + value: await requestClusterVersion(cluster), + accuracy: 100, + }), + }; + }, + injectionToken: clusterMetadataDetectorInjectionToken, +}); + +export default clusterVersionDetectorInjectable; + diff --git a/src/main/cluster-detectors/create-version-detector.injectable.ts b/src/main/cluster-detectors/create-version-detector.injectable.ts deleted file mode 100644 index efd59dcfc3..0000000000 --- a/src/main/cluster-detectors/create-version-detector.injectable.ts +++ /dev/null @@ -1,21 +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 { VersionDetector } from "./version-detector"; -import k8sRequestInjectable from "../k8s-request.injectable"; -import type { Cluster } from "../../common/cluster/cluster"; - -const createVersionDetectorInjectable = getInjectable({ - id: "create-version-detector", - - instantiate: (di) => { - const k8sRequest = di.inject(k8sRequestInjectable); - - return (cluster: Cluster) => - new VersionDetector(cluster, k8sRequest); - }, -}); - -export default createVersionDetectorInjectable; diff --git a/src/main/cluster-detectors/detect-cluster-metadata.injectable.ts b/src/main/cluster-detectors/detect-cluster-metadata.injectable.ts new file mode 100644 index 0000000000..3665f74f52 --- /dev/null +++ b/src/main/cluster-detectors/detect-cluster-metadata.injectable.ts @@ -0,0 +1,51 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { pipeline } from "@ogre-tools/fp"; +import { getInjectable } from "@ogre-tools/injectable"; +import { groupBy, reduce } from "lodash"; +import { filter, map } from "lodash/fp"; +import type { ClusterMetadata } from "../../common/cluster-types"; +import type { Cluster } from "../../common/cluster/cluster"; +import { hasDefinedTupleValue, isDefined, object } from "../../common/utils"; +import type { ClusterDetectionResult, ClusterMetadataDetector } from "./token"; +import { clusterMetadataDetectorInjectionToken } from "./token"; + +export type DetectClusterMetadata = (cluster: Cluster) => Promise; + +const pickHighestAccuracy = (prev: ClusterDetectionResult, curr: ClusterDetectionResult) => ( + prev.accuracy > curr.accuracy + ? prev + : curr +); + +const detectMetadataWithFor = (cluster: Cluster) => async (clusterMetadataDetector: ClusterMetadataDetector) => { + try { + return await clusterMetadataDetector.detect(cluster); + } catch { + return null; + } +}; + +const detectClusterMetadataInjectable = getInjectable({ + id: "detect-cluster-metadata", + instantiate: (di): DetectClusterMetadata => { + const clusterMetadataDetectors = di.injectMany(clusterMetadataDetectorInjectionToken); + + return async (cluster) => { + const entries = pipeline( + await Promise.all(clusterMetadataDetectors.map(detectMetadataWithFor(cluster))), + filter(isDefined), + (arg) => groupBy(arg, "key"), + (arg) => object.entries(arg), + map(([ key, results ]) => [key, reduce(results, pickHighestAccuracy)] as const), + filter(hasDefinedTupleValue), + ); + + return object.fromEntries(entries); + }; + }, +}); + +export default detectClusterMetadataInjectable; diff --git a/src/main/cluster-detectors/detector-registry.injectable.ts b/src/main/cluster-detectors/detector-registry.injectable.ts deleted file mode 100644 index 344e82003f..0000000000 --- a/src/main/cluster-detectors/detector-registry.injectable.ts +++ /dev/null @@ -1,16 +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 { DetectorRegistry } from "./detector-registry"; -import k8sRequestInjectable from "../k8s-request.injectable"; - -const detectorRegistryInjectable = getInjectable({ - id: "detector-registry", - - instantiate: (di) => - new DetectorRegistry({ k8sRequest: di.inject(k8sRequestInjectable) }), -}); - -export default detectorRegistryInjectable; diff --git a/src/main/cluster-detectors/detector-registry.ts b/src/main/cluster-detectors/detector-registry.ts deleted file mode 100644 index 395d819850..0000000000 --- a/src/main/cluster-detectors/detector-registry.ts +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { observable } from "mobx"; -import type { ClusterMetadata } from "../../common/cluster-types"; -import type { Cluster } from "../../common/cluster/cluster"; -import type { BaseClusterDetector, ClusterDetectionResult } from "./base-cluster-detector"; -import type { K8sRequest } from "../k8s-request.injectable"; - -interface Dependencies { - k8sRequest: K8sRequest; -} - -export type DetectorConstructor = new (cluster: Cluster, k8sRequest: K8sRequest) => BaseClusterDetector; - -export class DetectorRegistry { - constructor(private dependencies: Dependencies) {} - - registry = observable.array([], { deep: false }); - - add(detectorClass: DetectorConstructor): this { - this.registry.push(detectorClass); - - return this; - } - - async detectForCluster(cluster: Cluster): Promise { - const results: { [key: string]: ClusterDetectionResult } = {}; - - for (const detectorClass of this.registry) { - const detector = new detectorClass(cluster, this.dependencies.k8sRequest); - - try { - const data = await detector.detect(); - - if (!data) continue; - const existingValue = results[detector.key]; - - if (existingValue && existingValue.accuracy > data.accuracy) continue; // previous value exists and is more accurate - results[detector.key] = data; - } catch (e) { - // detector raised error, do nothing - } - } - const metadata: ClusterMetadata = {}; - - for (const [key, result] of Object.entries(results)) { - metadata[key] = result.value; - } - - return metadata; - } -} diff --git a/src/main/cluster-detectors/distribution-detector.ts b/src/main/cluster-detectors/distribution-detector.ts deleted file mode 100644 index dcdacfb253..0000000000 --- a/src/main/cluster-detectors/distribution-detector.ts +++ /dev/null @@ -1,189 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { BaseClusterDetector } from "./base-cluster-detector"; -import { ClusterMetadataKey } from "../../common/cluster-types"; - -export class DistributionDetector extends BaseClusterDetector { - key = ClusterMetadataKey.DISTRIBUTION; - - public async detect() { - const version = await this.getKubernetesVersion(); - - if (this.isRke(version)) { - return { value: "rke", accuracy: 80 }; - } - - if (this.isRancherDesktop()) { - return { value: "rancher-desktop", accuracy: 80 }; - } - - if (this.isK3s(version)) { - return { value: "k3s", accuracy: 80 }; - } - - if (this.isGKE(version)) { - return { value: "gke", accuracy: 80 }; - } - - if (this.isEKS(version)) { - return { value: "eks", accuracy: 80 }; - } - - if (this.isIKS(version)) { - return { value: "iks", accuracy: 80 }; - } - - if (this.isAKS()) { - return { value: "aks", accuracy: 80 }; - } - - if (this.isDigitalOcean()) { - return { value: "digitalocean", accuracy: 90 }; - } - - if (this.isK0s(version)) { - return { value: "k0s", accuracy: 80 }; - } - - if (this.isVMWare(version)) { - return { value: "vmware", accuracy: 90 }; - } - - if (this.isMirantis(version)) { - return { value: "mirantis", accuracy: 90 }; - } - - if (this.isAlibaba(version)) { - return { value: "alibaba", accuracy: 90 }; - } - - if (this.isHuawei(version)) { - return { value: "huawei", accuracy: 90 }; - } - - if (this.isTke(version)) { - return { value: "tencent", accuracy: 90 }; - } - - if (this.isMinikube()) { - return { value: "minikube", accuracy: 80 }; - } - - if (this.isMicrok8s()) { - return { value: "microk8s", accuracy: 80 }; - } - - if (this.isKind()) { - return { value: "kind", accuracy: 70 }; - } - - if (this.isDockerDesktop()) { - return { value: "docker-desktop", accuracy: 80 }; - } - - if (this.isCustom(version) && await this.isOpenshift()) { - return { value: "openshift", accuracy: 90 }; - } - - if (this.isCustom(version)) { - return { value: "custom", accuracy: 10 }; - } - - return { value: "unknown", accuracy: 10 }; - } - - public async getKubernetesVersion() { - const response = await this.k8sRequest("/version"); - - return response.gitVersion; - } - - protected isGKE(version: string) { - return version.includes("gke"); - } - - protected isEKS(version: string) { - return version.includes("eks"); - } - - protected isIKS(version: string) { - return version.includes("IKS"); - } - - protected isAKS() { - return this.cluster.apiUrl.includes("azmk8s.io"); - } - - protected isMirantis(version: string) { - return version.includes("-mirantis-") || version.includes("-docker-"); - } - - protected isDigitalOcean() { - return this.cluster.apiUrl.endsWith("k8s.ondigitalocean.com"); - } - - protected isMinikube() { - return this.cluster.contextName.startsWith("minikube"); - } - - protected isMicrok8s() { - return this.cluster.contextName.startsWith("microk8s"); - } - - protected isKind() { - return this.cluster.contextName.startsWith("kubernetes-admin@kind-"); - } - - protected isDockerDesktop() { - return this.cluster.contextName === "docker-desktop"; - } - - protected isTke(version: string) { - return version.includes("-tke."); - } - - protected isCustom(version: string) { - return version.includes("+"); - } - - protected isVMWare(version: string) { - return version.includes("+vmware"); - } - - protected isRke(version: string) { - return version.includes("-rancher"); - } - - protected isRancherDesktop() { - return this.cluster.contextName === "rancher-desktop"; - } - - protected isK3s(version: string) { - return version.includes("+k3s"); - } - - protected isK0s(version: string) { - return version.includes("-k0s") || version.includes("+k0s"); - } - - protected isAlibaba(version: string) { - return version.includes("-aliyun"); - } - - protected isHuawei(version: string) { - return version.includes("-CCE"); - } - - protected async isOpenshift() { - try { - const response = await this.k8sRequest(""); - - return response.paths?.includes("/apis/project.openshift.io"); - } catch (e) { - return false; - } - } -} diff --git a/src/main/cluster-detectors/last-seen-detector.ts b/src/main/cluster-detectors/last-seen-detector.ts deleted file mode 100644 index 087557f083..0000000000 --- a/src/main/cluster-detectors/last-seen-detector.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { BaseClusterDetector } from "./base-cluster-detector"; -import { ClusterMetadataKey } from "../../common/cluster-types"; - -export class LastSeenDetector extends BaseClusterDetector { - key = ClusterMetadataKey.LAST_SEEN; - - public async detect() { - if (!this.cluster.accessible) return null; - - await this.k8sRequest("/version"); - - return { value: new Date().toJSON(), accuracy: 100 }; - } -} diff --git a/src/main/cluster-detectors/nodes-count-detector.ts b/src/main/cluster-detectors/nodes-count-detector.ts deleted file mode 100644 index f9b3c02dbf..0000000000 --- a/src/main/cluster-detectors/nodes-count-detector.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 { BaseClusterDetector } from "./base-cluster-detector"; -import { ClusterMetadataKey } from "../../common/cluster-types"; - -export class NodesCountDetector extends BaseClusterDetector { - key = ClusterMetadataKey.NODES_COUNT; - - public async detect() { - if (!this.cluster.accessible) return null; - const nodeCount = await this.getNodeCount(); - - return { value: nodeCount, accuracy: 100 }; - } - - protected async getNodeCount(): Promise { - const response = await this.k8sRequest("/api/v1/nodes"); - - return response.items.length; - } -} diff --git a/src/main/cluster-detectors/request-cluster-version.injectable.ts b/src/main/cluster-detectors/request-cluster-version.injectable.ts new file mode 100644 index 0000000000..3863e75a0c --- /dev/null +++ b/src/main/cluster-detectors/request-cluster-version.injectable.ts @@ -0,0 +1,22 @@ +/** + * 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 type { Cluster } from "../../common/cluster/cluster"; +import k8SRequestInjectable from "../k8s-request.injectable"; + +const requestClusterVersionInjectable = getInjectable({ + id: "request-cluster-version", + instantiate: (di) => { + const k8sRequest = di.inject(k8SRequestInjectable); + + return async (cluster: Cluster) => { + const { gitVersion } = await k8sRequest(cluster, "/version") as { gitVersion: string }; + + return gitVersion; + }; + }, +}); + +export default requestClusterVersionInjectable; diff --git a/src/main/cluster-detectors/token.ts b/src/main/cluster-detectors/token.ts new file mode 100644 index 0000000000..fc9031c815 --- /dev/null +++ b/src/main/cluster-detectors/token.ts @@ -0,0 +1,26 @@ +/** + * 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 { Cluster } from "../../common/cluster/cluster"; + +export interface ClusterDetectionResult { + value: string | number | boolean; + accuracy: number; +} + +export interface FalibleOnlyClusterMetadataDetector { + readonly key: string; + detect(cluster: Cluster): Promise; +} + +export interface ClusterMetadataDetector { + readonly key: string; + detect(cluster: Cluster): Promise; +} + +export const clusterMetadataDetectorInjectionToken = getInjectionToken({ + id: "cluster-metadata-detector-token", +}); diff --git a/src/main/cluster-detectors/version-detector.ts b/src/main/cluster-detectors/version-detector.ts deleted file mode 100644 index cc228734c5..0000000000 --- a/src/main/cluster-detectors/version-detector.ts +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { BaseClusterDetector } from "./base-cluster-detector"; -import { ClusterMetadataKey } from "../../common/cluster-types"; - -export class VersionDetector extends BaseClusterDetector { - key = ClusterMetadataKey.VERSION; - - public async detect() { - const version = await this.getKubernetesVersion(); - - return { value: version, accuracy: 100 }; - } - - public async getKubernetesVersion() { - const response = await this.k8sRequest("/version"); - - return response.gitVersion; - } -} diff --git a/src/main/create-cluster/create-cluster.injectable.ts b/src/main/create-cluster/create-cluster.injectable.ts index 760e8e2e75..79eee5a151 100644 --- a/src/main/create-cluster/create-cluster.injectable.ts +++ b/src/main/create-cluster/create-cluster.injectable.ts @@ -14,11 +14,11 @@ import authorizationReviewInjectable from "../../common/cluster/authorization-re import listNamespacesInjectable from "../../common/cluster/list-namespaces.injectable"; import createListApiResourcesInjectable from "../cluster/request-api-resources.injectable"; import loggerInjectable from "../../common/logger.injectable"; -import detectorRegistryInjectable from "../cluster-detectors/detector-registry.injectable"; -import createVersionDetectorInjectable from "../cluster-detectors/create-version-detector.injectable"; import broadcastMessageInjectable from "../../common/ipc/broadcast-message.injectable"; import loadConfigfromFileInjectable from "../../common/kube-helpers/load-config-from-file.injectable"; import requestNamespaceListPermissionsForInjectable from "../../common/cluster/request-namespace-list-permissions.injectable"; +import detectClusterMetadataInjectable from "../cluster-detectors/detect-cluster-metadata.injectable"; +import clusterVersionDetectorInjectable from "../cluster-detectors/cluster-version-detector.injectable"; const createClusterInjectable = getInjectable({ id: "create-cluster", @@ -26,6 +26,8 @@ const createClusterInjectable = getInjectable({ instantiate: (di) => { const dependencies: ClusterDependencies = { directoryForKubeConfigs: di.inject(directoryForKubeConfigsInjectable), + logger: di.inject(loggerInjectable), + clusterVersionDetector: di.inject(clusterVersionDetectorInjectable), createKubeconfigManager: di.inject(createKubeconfigManagerInjectable), createKubectl: di.inject(createKubectlInjectable), createContextHandler: di.inject(createContextHandlerInjectable), @@ -33,11 +35,9 @@ const createClusterInjectable = getInjectable({ requestNamespaceListPermissionsFor: di.inject(requestNamespaceListPermissionsForInjectable), requestApiResources: di.inject(createListApiResourcesInjectable), createListNamespaces: di.inject(listNamespacesInjectable), - logger: di.inject(loggerInjectable), - detectorRegistry: di.inject(detectorRegistryInjectable), - createVersionDetector: di.inject(createVersionDetectorInjectable), broadcastMessage: di.inject(broadcastMessageInjectable), loadConfigfromFile: di.inject(loadConfigfromFileInjectable), + detectClusterMetadata: di.inject(detectClusterMetadataInjectable), }; return (model, configData) => new Cluster(dependencies, model, configData); diff --git a/src/main/start-main-application/runnables/setup-detector-registry.injectable.ts b/src/main/start-main-application/runnables/setup-detector-registry.injectable.ts deleted file mode 100644 index 0e8b7ffba2..0000000000 --- a/src/main/start-main-application/runnables/setup-detector-registry.injectable.ts +++ /dev/null @@ -1,36 +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 { ClusterIdDetector } from "../../cluster-detectors/cluster-id-detector"; -import { LastSeenDetector } from "../../cluster-detectors/last-seen-detector"; -import { VersionDetector } from "../../cluster-detectors/version-detector"; -import { DistributionDetector } from "../../cluster-detectors/distribution-detector"; -import { NodesCountDetector } from "../../cluster-detectors/nodes-count-detector"; -import detectorRegistryInjectable from "../../cluster-detectors/detector-registry.injectable"; -import { onLoadOfApplicationInjectionToken } from "../runnable-tokens/on-load-of-application-injection-token"; - -const setupDetectorRegistryInjectable = getInjectable({ - id: "setup-detector-registry", - - instantiate: (di) => { - const detectorRegistry = di.inject(detectorRegistryInjectable); - - return { - id: "setup-detector-registry", - run: () => { - detectorRegistry - .add(ClusterIdDetector) - .add(LastSeenDetector) - .add(VersionDetector) - .add(DistributionDetector) - .add(NodesCountDetector); - }, - }; - }, - - injectionToken: onLoadOfApplicationInjectionToken, -}); - -export default setupDetectorRegistryInjectable; diff --git a/src/renderer/cluster/create-cluster.injectable.ts b/src/renderer/cluster/create-cluster.injectable.ts index 385dfe8d66..ff8ea38fff 100644 --- a/src/renderer/cluster/create-cluster.injectable.ts +++ b/src/renderer/cluster/create-cluster.injectable.ts @@ -29,9 +29,12 @@ const createClusterInjectable = getInjectable({ createAuthorizationReview: () => { throw new Error("Tried to access back-end feature in front-end."); }, requestNamespaceListPermissionsFor: () => { throw new Error("Tried to access back-end feature in front-end."); }, createListNamespaces: () => { throw new Error("Tried to access back-end feature in front-end."); }, - requestApiResources: ()=> { throw new Error("Tried to access back-end feature in front-end."); }, - detectorRegistry: undefined as never, - createVersionDetector: () => { throw new Error("Tried to access back-end feature in front-end."); }, + requestApiResources: () => { throw new Error("Tried to access back-end feature in front-end."); }, + detectClusterMetadata: () => { throw new Error("Tried to access back-end feature in front-end."); }, + clusterVersionDetector: { + detect: () => { throw new Error("Tried to access back-end feature in front-end."); }, + key: "irrelavent", + }, }; return (model, configData) => new Cluster(dependencies, model, configData); From 305c4a5573e9e2c8b8768b2515052f54b446061b Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 19 Jan 2023 06:35:33 -0800 Subject: [PATCH 35/37] Remove last usages of request in our code (#6911) * Improve the injectability of cluster metadata detection - Remove unnecessary and complex base class Signed-off-by: Sebastian Malton * Remove dead code Signed-off-by: Sebastian Malton * Remove dead code Signed-off-by: Sebastian Malton * Remove last usages of request in our code Signed-off-by: Sebastian Malton * Remove more deps Signed-off-by: Sebastian Malton * Fix tests Signed-off-by: Sebastian Malton * Fix lensFetch Signed-off-by: Sebastian Malton Signed-off-by: Sebastian Malton --- package.json | 5 -- src/common/cluster/cluster.ts | 3 +- ...ns-fetch.global-override-for-injectable.ts | 9 ++++ src/common/fetch/lens-fetch.injectable.ts | 37 ++++++++++++++ src/main/get-metrics.injectable.ts | 14 ++++-- src/main/k8s-request.injectable.ts | 48 ++++++++++++------- yarn.lock | 48 ++++--------------- 7 files changed, 98 insertions(+), 66 deletions(-) create mode 100644 src/common/fetch/lens-fetch.global-override-for-injectable.ts create mode 100644 src/common/fetch/lens-fetch.injectable.ts diff --git a/package.json b/package.json index 15e9b59c2e..d17c26f248 100644 --- a/package.json +++ b/package.json @@ -287,8 +287,6 @@ "react-router": "^5.3.4", "react-virtualized-auto-sizer": "^1.0.7", "readable-stream": "^3.6.0", - "request": "^2.88.2", - "request-promise-native": "^1.0.9", "rfc6902": "^5.0.1", "selfsigned": "^2.1.1", "semver": "^7.3.8", @@ -355,8 +353,6 @@ "@types/react-virtualized-auto-sizer": "^1.0.1", "@types/react-window": "^1.8.5", "@types/readable-stream": "^2.3.13", - "@types/request": "^2.48.7", - "@types/request-promise-native": "^1.0.18", "@types/semver": "^7.3.13", "@types/sharp": "^0.31.1", "@types/tar": "^6.1.3", @@ -461,7 +457,6 @@ "@types/react-router-dom": "^5.3.3", "@types/react-virtualized-auto-sizer": "^1.0.1", "@types/react-window": "^1.8.5", - "@types/request-promise-native": "^1.0.18", "@types/tar": "^6.1.3", "@types/tcp-port-used": "^1.0.1", "@types/url-parse": "^1.4.8", diff --git a/src/common/cluster/cluster.ts b/src/common/cluster/cluster.ts index c769865086..3f353dfee4 100644 --- a/src/common/cluster/cluster.ts +++ b/src/common/cluster/cluster.ts @@ -15,7 +15,6 @@ import plimit from "p-limit"; import type { ClusterState, ClusterMetricsResourceType, ClusterId, ClusterMetadata, ClusterModel, ClusterPreferences, ClusterPrometheusPreferences, UpdateClusterModel, KubeAuthUpdate, ClusterConfigData } from "../cluster-types"; import { ClusterMetadataKey, initialNodeShellImage, ClusterStatus, clusterModelIdChecker, updateClusterModelChecker } from "../cluster-types"; import { disposer, isDefined, isRequestError, toJS } from "../utils"; -import type { Response } from "request"; import { clusterListNamespaceForbiddenChannel } from "../ipc/cluster"; import type { CanI } from "./authorization-review.injectable"; import type { ListNamespaces } from "./list-namespaces.injectable"; @@ -658,7 +657,7 @@ export class Cluster implements ClusterModel { const namespaceList = [ctx?.namespace].filter(isDefined); if (namespaceList.length === 0 && error instanceof HttpError && error.statusCode === 403) { - const { response } = error as HttpError & { response: Response }; + const { response } = error as HttpError & { response: { body: unknown }}; this.dependencies.logger.info("[CLUSTER]: listing namespaces is forbidden, broadcasting", { clusterId: this.id, error: response.body }); this.dependencies.broadcastMessage(clusterListNamespaceForbiddenChannel, this.id); diff --git a/src/common/fetch/lens-fetch.global-override-for-injectable.ts b/src/common/fetch/lens-fetch.global-override-for-injectable.ts new file mode 100644 index 0000000000..0bc144b1be --- /dev/null +++ b/src/common/fetch/lens-fetch.global-override-for-injectable.ts @@ -0,0 +1,9 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import { getGlobalOverrideForFunction } from "../test-utils/get-global-override-for-function"; +import lensFetchInjectable from "./lens-fetch.injectable"; + +export default getGlobalOverrideForFunction(lensFetchInjectable); diff --git a/src/common/fetch/lens-fetch.injectable.ts b/src/common/fetch/lens-fetch.injectable.ts new file mode 100644 index 0000000000..a90818e6cb --- /dev/null +++ b/src/common/fetch/lens-fetch.injectable.ts @@ -0,0 +1,37 @@ +/** + * 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 { Agent } from "https"; +import type { RequestInit, Response } from "node-fetch"; +import lensProxyPortInjectable from "../../main/lens-proxy/lens-proxy-port.injectable"; +import lensProxyCertificateInjectable from "../certificate/lens-proxy-certificate.injectable"; +import nodeFetchModuleInjectable from "./fetch-module.injectable"; + +export type LensRequestInit = Omit; + +export type LensFetch = (pathnameAndQuery: string, init?: LensRequestInit) => Promise; + +const lensFetchInjectable = getInjectable({ + id: "lens-fetch", + instantiate: (di): LensFetch => { + const { default: fetch } = di.inject(nodeFetchModuleInjectable); + const lensProxyPort = di.inject(lensProxyPortInjectable); + const lensProxyCertificate = di.inject(lensProxyCertificateInjectable); + + return async (pathnameAndQuery, init = {}) => { + const agent = new Agent({ + ca: lensProxyCertificate.get().cert, + }); + + return fetch(`https://127.0.0.1:${lensProxyPort.get()}${pathnameAndQuery}`, { + ...init, + agent, + }); + }; + }, + causesSideEffects: true, +}); + +export default lensFetchInjectable; diff --git a/src/main/get-metrics.injectable.ts b/src/main/get-metrics.injectable.ts index 0ceaf01735..7a17ce3884 100644 --- a/src/main/get-metrics.injectable.ts +++ b/src/main/get-metrics.injectable.ts @@ -4,16 +4,19 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import type { Cluster } from "../common/cluster/cluster"; +import nodeFetchModuleInjectable from "../common/fetch/fetch-module.injectable"; import type { RequestMetricsParams } from "../common/k8s-api/endpoints/metrics.api/request-metrics.injectable"; +import { object } from "../common/utils"; import k8sRequestInjectable from "./k8s-request.injectable"; -export type GetMetrics = (cluster: Cluster, prometheusPath: string, queryParams: RequestMetricsParams & { query: string }) => Promise; +export type GetMetrics = (cluster: Cluster, prometheusPath: string, queryParams: RequestMetricsParams & { query: string }) => Promise; const getMetricsInjectable = getInjectable({ id: "get-metrics", instantiate: (di): GetMetrics => { const k8sRequest = di.inject(k8sRequestInjectable); + const { FormData } = di.inject(nodeFetchModuleInjectable); return async ( cluster, @@ -22,13 +25,16 @@ const getMetricsInjectable = getInjectable({ ) => { const prometheusPrefix = cluster.preferences.prometheus?.prefix || ""; const metricsPath = `/api/v1/namespaces/${prometheusPath}/proxy${prometheusPrefix}/api/v1/query_range`; + const body = new FormData(); + + for (const [key, value] of object.entries(queryParams)) { + body.set(key, value.toString()); + } return k8sRequest(cluster, metricsPath, { timeout: 0, - resolveWithFullResponse: false, - json: true, method: "POST", - form: queryParams, + body, }); }; }, diff --git a/src/main/k8s-request.injectable.ts b/src/main/k8s-request.injectable.ts index c00e70ec3f..b15056b50b 100644 --- a/src/main/k8s-request.injectable.ts +++ b/src/main/k8s-request.injectable.ts @@ -2,35 +2,49 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { RequestPromiseOptions } from "request-promise-native"; -import request from "request-promise-native"; import type { Cluster } from "../common/cluster/cluster"; import { getInjectable } from "@ogre-tools/injectable"; -import lensProxyPortInjectable from "./lens-proxy/lens-proxy-port.injectable"; -import lensProxyCertificateInjectable from "../common/certificate/lens-proxy-certificate.injectable"; +import type { LensRequestInit } from "../common/fetch/lens-fetch.injectable"; +import lensFetchInjectable from "../common/fetch/lens-fetch.injectable"; +import { withTimeout } from "../common/fetch/timeout-controller"; -export type K8sRequest = (cluster: Cluster, path: string, options?: RequestPromiseOptions) => Promise; +export interface K8sRequestInit extends LensRequestInit { + timeout?: number; +} + +export type K8sRequest = (cluster: Cluster, pathnameAndQuery: string, init?: K8sRequestInit) => Promise; const k8sRequestInjectable = getInjectable({ id: "k8s-request", - instantiate: (di) => { - const lensProxyPort = di.inject(lensProxyPortInjectable); - const lensProxyCertificate = di.inject(lensProxyCertificateInjectable); + instantiate: (di): K8sRequest => { + const lensFetch = di.inject(lensFetchInjectable); return async ( - cluster: Cluster, - path: string, - options: RequestPromiseOptions = {}, + cluster, + pathnameAndQuery, + { + timeout = 30_000, + signal, + ...init + } = {}, ) => { - const kubeProxyUrl = `https://127.0.0.1:${lensProxyPort.get()}/${cluster.id}`; + const controller = timeout ? withTimeout(timeout) : undefined; - options.ca = lensProxyCertificate.get().cert; - options.headers ??= {}; - options.json ??= true; - options.timeout ??= 30000; + if (controller) { + signal?.addEventListener("abort", () => controller.abort()); + } - return request(kubeProxyUrl + path, options); + const response = await lensFetch(`/${cluster.id}${pathnameAndQuery}`, { + ...init, + signal: controller?.signal ?? signal, + }); + + if (response.status < 200 || response.status >= 300) { + throw new Error(`Failed to ${init.method ?? "get"} ${pathnameAndQuery} for clusterId=${cluster.id}: ${response.statusText}`, { cause: response }); + } + + return response.json(); }; }, }); diff --git a/yarn.lock b/yarn.lock index 7b6934699b..7a28c3c71b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2619,14 +2619,7 @@ resolved "https://registry.yarnpkg.com/@types/relateurl/-/relateurl-0.2.29.tgz#68ccecec3d4ffdafb9c577fe764f912afc050fe6" integrity sha512-QSvevZ+IRww2ldtfv1QskYsqVVVwCKQf1XbwtcyyoRvLIQzfyPhj/C+3+PKzSDRdiyejaiLgnq//XTkleorpLg== -"@types/request-promise-native@^1.0.18": - version "1.0.18" - resolved "https://registry.yarnpkg.com/@types/request-promise-native/-/request-promise-native-1.0.18.tgz#437ee2d0b772e01c9691a983b558084b4b3efc2c" - integrity sha512-tPnODeISFc/c1LjWyLuZUY+Z0uLB3+IMfNoQyDEi395+j6kTFTTRAqjENjoPJUid4vHRGEozoTrcTrfZM+AcbA== - dependencies: - "@types/request" "*" - -"@types/request@*", "@types/request@^2.47.1", "@types/request@^2.48.7": +"@types/request@^2.47.1": version "2.48.8" resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.8.tgz#0b90fde3b655ab50976cb8c5ac00faca22f5a82c" integrity sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ== @@ -11471,23 +11464,7 @@ repeat-string@^1.5.2, repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== -request-promise-core@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.4.tgz#3eedd4223208d419867b78ce815167d10593a22f" - integrity sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw== - dependencies: - lodash "^4.17.19" - -request-promise-native@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.9.tgz#e407120526a5efdc9a39b28a5679bf47b9d9dc28" - integrity sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g== - dependencies: - request-promise-core "1.1.4" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.88.0, request@^2.88.2: +request@^2.88.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -12346,11 +12323,6 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - stream-buffers@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-3.0.2.tgz#5249005a8d5c2d00b3a32e6e0a6ea209dc4f3521" @@ -12906,14 +12878,6 @@ touch@^3.1.0: dependencies: nopt "~1.0.10" -tough-cookie@^2.3.3, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - tough-cookie@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" @@ -12923,6 +12887,14 @@ tough-cookie@^4.0.0: punycode "^2.1.1" universalify "^0.1.2" +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + tr46@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" From 8634c3b56f9e38703f24aecb325c115140160a55 Mon Sep 17 00:00:00 2001 From: Juho Heikka Date: Thu, 19 Jan 2023 18:47:20 +0200 Subject: [PATCH 36/37] Do not show Created on DetailsPane when there's no timestamp. (#6984) --- ...when-cluster-is-not-relevant.test.tsx.snap | 45 ------------------- ...hide-kube-object-detail-item.test.tsx.snap | 30 ------------- .../kube-object-meta/kube-object-meta.tsx | 2 +- 3 files changed, 1 insertion(+), 76 deletions(-) diff --git a/src/features/cluster/kube-object-details/extension-api/__snapshots__/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx.snap b/src/features/cluster/kube-object-details/extension-api/__snapshots__/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx.snap index 6a0943b664..71d807a43d 100644 --- a/src/features/cluster/kube-object-details/extension-api/__snapshots__/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx.snap +++ b/src/features/cluster/kube-object-details/extension-api/__snapshots__/disable-kube-object-detail-items-when-cluster-is-not-relevant.test.tsx.snap @@ -54,21 +54,6 @@ exports[`disable kube object detail items when cluster is not relevant given ext
-
- - Created - - - <unknown> - ago - -
@@ -685,21 +670,6 @@ exports[`disable kube object detail items when cluster is not relevant given ext
-
- - Created - - - <unknown> - ago - -
@@ -1311,21 +1281,6 @@ exports[`disable kube object detail items when cluster is not relevant given not
-
- - Created - - - <unknown> - ago - -
diff --git a/src/features/cluster/kube-object-details/extension-api/__snapshots__/reactively-hide-kube-object-detail-item.test.tsx.snap b/src/features/cluster/kube-object-details/extension-api/__snapshots__/reactively-hide-kube-object-detail-item.test.tsx.snap index 578fcae9e9..9222e8a538 100644 --- a/src/features/cluster/kube-object-details/extension-api/__snapshots__/reactively-hide-kube-object-detail-item.test.tsx.snap +++ b/src/features/cluster/kube-object-details/extension-api/__snapshots__/reactively-hide-kube-object-detail-item.test.tsx.snap @@ -54,21 +54,6 @@ exports[`reactively hide kube object detail item renders 1`] = `
-
- - Created - - - <unknown> - ago - -
@@ -680,21 +665,6 @@ exports[`reactively hide kube object detail item when the item is shown renders
-
- - Created - - - <unknown> - ago - -
diff --git a/src/renderer/components/kube-object-meta/kube-object-meta.tsx b/src/renderer/components/kube-object-meta/kube-object-meta.tsx index 593f2cb2ae..a61ee7dd60 100644 --- a/src/renderer/components/kube-object-meta/kube-object-meta.tsx +++ b/src/renderer/components/kube-object-meta/kube-object-meta.tsx @@ -62,7 +62,7 @@ const NonInjectedKubeObjectMeta = observer(({ return ( <> -