From 1ebb8eedf769ddcd73144a553201730275d7d5cc Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 16 Sep 2021 09:02:43 -0400 Subject: [PATCH 01/80] Upgrade all testing linux CI machines to Ubuntu-20.04 (#3799) --- .azure-pipelines-k8s-matrix.yml | 4 ++-- .azure-pipelines.yml | 2 +- .github/workflows/test.yml | 14 ++++---------- 3 files changed, 7 insertions(+), 13 deletions(-) diff --git a/.azure-pipelines-k8s-matrix.yml b/.azure-pipelines-k8s-matrix.yml index 77129460a3..9f1f38ec67 100644 --- a/.azure-pipelines-k8s-matrix.yml +++ b/.azure-pipelines-k8s-matrix.yml @@ -15,7 +15,7 @@ trigger: none jobs: - job: Linux pool: - vmImage: ubuntu-16.04 + vmImage: ubuntu-20.04 strategy: matrix: kube_1.16: @@ -46,7 +46,7 @@ jobs: curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube sudo minikube start --driver=none --kubernetes-version $(kubernetes_version) - # Although the kube and minikube config files are in placed $HOME they are owned by root + sudo mv /root/.kube /root/.minikube $HOME sudo chown -R $USER $HOME/.kube $HOME/.minikube displayName: Install integration test dependencies - script: make node_modules diff --git a/.azure-pipelines.yml b/.azure-pipelines.yml index 3e1b43f875..e360a818e6 100644 --- a/.azure-pipelines.yml +++ b/.azure-pipelines.yml @@ -109,7 +109,7 @@ jobs: - job: Linux pool: - vmImage: ubuntu-16.04 + vmImage: ubuntu-20.04 strategy: matrix: node_14.x: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b319c97770..25b3327ac0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,7 +12,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-16.04, macos-11, windows-2019] + os: [ubuntu-20.04, macos-11, windows-2019] node-version: [14.x] steps: - name: Checkout Release from lens @@ -67,15 +67,9 @@ jobs: - run: make test-extensions name: Run In-tree Extension tests - - run: | - sudo apt-get update - sudo apt-get install libgconf-2-4 conntrack -y - curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 - sudo install minikube-linux-amd64 /usr/local/bin/minikube - sudo minikube start --driver=none - # Although the kube and minikube config files are in placed $HOME they are owned by root - sudo chown -R $USER $HOME/.kube $HOME/.minikube - name: Install integration test dependencies + - name: Install integration test dependencies + id: minikube + uses: medyagh/setup-minikube@5a9a7104d7322fa40424de8855c84685e89cefd7 if: runner.os == 'Linux' - run: xvfb-run --auto-servernum --server-args='-screen 0, 1600x900x24' make integration From e5c9c9a4b5e33369a000df3d3fe0a182bca557ff Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 16 Sep 2021 10:38:31 -0400 Subject: [PATCH 02/80] Fix test GH action to run on all branches (#3822) --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 25b3327ac0..4bc748d235 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -2,7 +2,7 @@ name: Test on: pull_request: branches: - - "*" + - "**" push: branches: - master From 53ce818589f394dc131b8787f183b71f98165b13 Mon Sep 17 00:00:00 2001 From: Lauri Nevala Date: Fri, 17 Sep 2021 11:13:04 +0300 Subject: [PATCH 03/80] Revert "Fix check for user exec command (#3664)" (#3827) This reverts commit 056b818cebe42adf997c820803e764e6d01d6b58. Signed-off-by: Lauri Nevala --- package.json | 3 +- src/common/custom-errors.ts | 11 +++--- src/common/kube-helpers.ts | 18 ++++------ .../components/+add-cluster/add-cluster.scss | 7 ---- .../components/+add-cluster/add-cluster.tsx | 36 ++++--------------- yarn.lock | 10 +++--- 6 files changed, 23 insertions(+), 62 deletions(-) diff --git a/package.json b/package.json index 9da0f23cac..141ec3a5a0 100644 --- a/package.json +++ b/package.json @@ -185,7 +185,6 @@ "@kubernetes/client-node": "^0.15.1", "@sentry/electron": "^2.5.0", "@sentry/integrations": "^6.10.0", - "@types/which": "^2.0.1", "abort-controller": "^3.0.0", "array-move": "^3.0.1", "auto-bind": "^4.0.0", @@ -194,6 +193,7 @@ "byline": "^5.0.0", "chalk": "^4.1.0", "chokidar": "^3.4.3", + "command-exists": "1.2.9", "conf": "^7.0.1", "crypto-js": "^4.1.1", "electron-devtools-installer": "^3.2.0", @@ -246,7 +246,6 @@ "tempy": "^0.5.0", "url-parse": "^1.5.1", "uuid": "^8.3.2", - "which": "^2.0.2", "win-ca": "^3.2.0", "winston": "^3.3.3", "winston-console-format": "^1.0.8", diff --git a/src/common/custom-errors.ts b/src/common/custom-errors.ts index 0016af87ca..2cbc75ccf0 100644 --- a/src/common/custom-errors.ts +++ b/src/common/custom-errors.ts @@ -19,18 +19,15 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import path from "path"; - export class ExecValidationNotFoundError extends Error { - constructor(execPath: string) { + constructor(execPath: string, isAbsolute: boolean) { + super(`User Exec command "${execPath}" not found on host.`); let message = `User Exec command "${execPath}" not found on host.`; - if (!path.isAbsolute(execPath)) { + if (!isAbsolute) { message += ` Please ensure binary is found in PATH or use absolute path to binary in Kubeconfig`; } - - super(message); - + this.message = message; this.name = this.constructor.name; Error.captureStackTrace(this, this.constructor); } diff --git a/src/common/kube-helpers.ts b/src/common/kube-helpers.ts index 4bd420e7b2..aff05e68c6 100644 --- a/src/common/kube-helpers.ts +++ b/src/common/kube-helpers.ts @@ -25,11 +25,11 @@ import path from "path"; import os from "os"; import yaml from "js-yaml"; import logger from "../main/logger"; +import commandExists from "command-exists"; import { ExecValidationNotFoundError } from "./custom-errors"; import { Cluster, Context, newClusters, newContexts, newUsers, User } from "@kubernetes/client-node/dist/config_types"; import { resolvePath } from "./utils"; import Joi from "joi"; -import which from "which"; export type KubeConfigValidationOpts = { validateCluster?: boolean; @@ -295,17 +295,13 @@ export function validateKubeConfig(config: KubeConfig, contextName: string, vali // Validate exec command if present if (validateExec && user?.exec) { - try { - which.sync(user.exec.command); + const execCommand = user.exec["command"]; + // check if the command is absolute or not + const isAbsolute = path.isAbsolute(execCommand); - // If this doesn't throw an error it also means that it has found the executable. - } catch (error) { - switch (error?.code) { - case "ENOENT": - return new ExecValidationNotFoundError(user.exec.command); - default: - return error; - } + // validate the exec struct in the user object, start with the command field + if (!commandExists.sync(execCommand)) { + return new ExecValidationNotFoundError(execCommand, isAbsolute); } } diff --git a/src/renderer/components/+add-cluster/add-cluster.scss b/src/renderer/components/+add-cluster/add-cluster.scss index 8abb38e9d0..faac757c40 100644 --- a/src/renderer/components/+add-cluster/add-cluster.scss +++ b/src/renderer/components/+add-cluster/add-cluster.scss @@ -50,11 +50,4 @@ display: block; padding-top: 6px; } - - .actions-panel { - .Spinner { - vertical-align: middle; - margin-left: $spacing; - } - } } diff --git a/src/renderer/components/+add-cluster/add-cluster.tsx b/src/renderer/components/+add-cluster/add-cluster.tsx index 16a6dec19e..e987c1d4bb 100644 --- a/src/renderer/components/+add-cluster/add-cluster.tsx +++ b/src/renderer/components/+add-cluster/add-cluster.tsx @@ -24,7 +24,7 @@ import "./add-cluster.scss"; import type { KubeConfig } from "@kubernetes/client-node"; import fse from "fs-extra"; import { debounce } from "lodash"; -import { action, computed, observable, makeObservable, runInAction } from "mobx"; +import { action, computed, observable, makeObservable } from "mobx"; import { observer } from "mobx-react"; import path from "path"; import React from "react"; @@ -41,7 +41,6 @@ import { SettingLayout } from "../layout/setting-layout"; import MonacoEditor from "react-monaco-editor"; import { ThemeStore } from "../../theme.store"; import { UserStore } from "../../../common/user-store"; -import { Spinner } from "../spinner"; interface Option { config: KubeConfig; @@ -63,7 +62,6 @@ export class AddCluster extends React.Component { @observable kubeContexts = observable.map(); @observable customConfig = ""; @observable isWaiting = false; - @observable isCheckingInput = false; @observable errorText: string; constructor(props: {}) { @@ -82,35 +80,14 @@ export class AddCluster extends React.Component { ].filter(Boolean); } - _refreshContexts = debounce(() => { - runInAction(() => { - try { - const text = this.customConfig.trim(); + @action + refreshContexts = debounce(() => { + const { config, error } = loadConfigFromString(this.customConfig.trim() || "{}"); - if (!text) { - return this.kubeContexts.clear(); - } - - const { config, error } = loadConfigFromString(text); - - this.kubeContexts.replace(getContexts(config)); - this.errorText = error?.toString(); - } catch (error) { - this.kubeContexts.clear(); - this.errorText = error?.toString() || "An error occured"; - } finally { - this.isCheckingInput = false; - } - }); + this.kubeContexts.replace(getContexts(config)); + this.errorText = error?.toString(); }, 500); - refreshContexts = () => { - // Clear the kubeContexts immediately - this.isCheckingInput = true; - this.kubeContexts.clear(); - this._refreshContexts(); - }; - @action addClusters = async () => { this.isWaiting = true; @@ -168,7 +145,6 @@ export class AddCluster extends React.Component { tooltip={this.kubeContexts.size === 0 || "Paste in at least one cluster to add."} tooltipOverrideDisabled /> - {this.isCheckingInput && } ); diff --git a/yarn.lock b/yarn.lock index ce76e9ac72..87a86e853b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2184,11 +2184,6 @@ anymatch "^3.0.0" source-map "^0.6.0" -"@types/which@^2.0.1": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/which/-/which-2.0.1.tgz#27ecd67f915b7c3d6ba552135bb1eecd66e63501" - integrity sha512-Jjakcv8Roqtio6w1gr0D7y6twbhx6gGgFGF5BLwajPpnOIOxFkakFhCq+LmyyeAz7BX6ULrjBOxdKaCDy+4+dQ== - "@types/ws@^6.0.1": version "6.0.4" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-6.0.4.tgz#7797707c8acce8f76d8c34b370d4645b70421ff1" @@ -4115,6 +4110,11 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +command-exists@1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + commander@2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" From 8b3d237f3b50f07509e6d1d7eaeb4d42bb670c88 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Sep 2021 11:41:10 +0300 Subject: [PATCH 04/80] Bump sass from 1.39.0 to 1.41.1 (#3825) Bumps [sass](https://github.com/sass/dart-sass) from 1.39.0 to 1.41.1. - [Release notes](https://github.com/sass/dart-sass/releases) - [Changelog](https://github.com/sass/dart-sass/blob/main/CHANGELOG.md) - [Commits](https://github.com/sass/dart-sass/compare/1.39.0...1.41.1) --- updated-dependencies: - dependency-name: sass dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 15 ++++----------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 141ec3a5a0..f9652a5cac 100644 --- a/package.json +++ b/package.json @@ -367,7 +367,7 @@ "react-select-event": "^5.1.0", "react-table": "^7.7.0", "react-window": "^1.8.5", - "sass": "^1.39.0", + "sass": "^1.41.1", "sass-loader": "^8.0.2", "sharp": "^0.29.0", "style-loader": "^2.0.0", diff --git a/yarn.lock b/yarn.lock index 87a86e853b..46af019646 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12418,17 +12418,10 @@ sass-loader@^8.0.2: schema-utils "^2.6.1" semver "^6.3.0" -sass@^1.32.13: - version "1.35.2" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.35.2.tgz#b732314fcdaf7ef8d0f1698698adc378043cb821" - integrity sha512-jhO5KAR+AMxCEwIH3v+4zbB2WB0z67V1X0jbapfVwQQdjHZUGUyukpnoM6+iCMfsIUC016w9OPKQ5jrNOS9uXw== - dependencies: - chokidar ">=3.0.0 <4.0.0" - -sass@^1.39.0: - version "1.39.0" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.39.0.tgz#6c64695d1c437767c8f1a4e471288e831f81d035" - integrity sha512-F4o+RhJkNOIG0b6QudYU8c78ZADKZjKDk5cyrf8XTKWfrgbtyVVXImFstJrc+1pkQDCggyidIOytq6gS4gCCZg== +sass@^1.32.13, sass@^1.41.1: + version "1.41.1" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.41.1.tgz#bca5bed2154192779c29f48fca9c644c60c38d98" + integrity sha512-vIjX7izRxw3Wsiez7SX7D+j76v7tenfO18P59nonjr/nzCkZuoHuF7I/Fo0ZRZPKr88v29ivIdE9BqGDgQD/Nw== dependencies: chokidar ">=3.0.0 <4.0.0" From e251194cb511685371dba026c410e1273b3ad28a Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Mon, 20 Sep 2021 06:01:05 -0400 Subject: [PATCH 05/80] Fix reference error when opening cluster view (#3824) Signed-off-by: Sebastian Malton --- src/renderer/api/catalog-entity-registry.ts | 18 +++++++++++++++++- src/renderer/components/app.tsx | 10 ++-------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/renderer/api/catalog-entity-registry.ts b/src/renderer/api/catalog-entity-registry.ts index 7b09ff273b..d731e2562a 100644 --- a/src/renderer/api/catalog-entity-registry.ts +++ b/src/renderer/api/catalog-entity-registry.ts @@ -31,7 +31,7 @@ import { once } from "lodash"; export type EntityFilter = (entity: CatalogEntity) => any; export class CatalogEntityRegistry { - @observable.ref activeEntity: CatalogEntity; + @observable protected activeEntityId: string | undefined = undefined; protected _entities = observable.map([], { deep: true }); protected filters = observable.set([], { deep: false, @@ -46,6 +46,22 @@ export class CatalogEntityRegistry { makeObservable(this); } + get activeEntity(): CatalogEntity | null { + return this._entities.get(this.activeEntityId) || null; + } + + set activeEntity(raw: CatalogEntity | string | null) { + if (raw) { + const id = typeof raw === "string" + ? raw + : raw.getId(); + + this.activeEntityId = id; + } else { + this.activeEntityId = undefined; + } + } + init() { ipcRendererOn("catalog:items", (event, items: (CatalogEntityData & CatalogEntityKindData)[]) => { this.updateItems(items); diff --git a/src/renderer/components/app.tsx b/src/renderer/components/app.tsx index 3f8dbf7d8b..c7d60f3b4f 100755 --- a/src/renderer/components/app.tsx +++ b/src/renderer/components/app.tsx @@ -19,7 +19,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ import React from "react"; -import { observable, makeObservable, reaction } from "mobx"; +import { observable, makeObservable } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; import { Redirect, Route, Router, Switch } from "react-router"; import { history } from "../navigation"; @@ -97,13 +97,7 @@ export class App extends React.Component { await cluster.whenReady; // cluster.activate() is done at this point - const activeEntityDisposer = reaction(() => catalogEntityRegistry.getById(App.clusterId), (entity) => { - if (!entity) { - return; - } - catalogEntityRegistry.activeEntity = entity; - activeEntityDisposer(); - }, {fireImmediately: true}); + catalogEntityRegistry.activeEntity = App.clusterId; ExtensionLoader.getInstance().loadOnClusterRenderer(); setTimeout(() => { From d448017f334a39b0ee9d974d867e236b4e0104e2 Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Mon, 20 Sep 2021 15:15:26 +0300 Subject: [PATCH 06/80] Fix node-fetch load on renderer (#3836) * fix node-fetch load on renderer Signed-off-by: Jari Kolehmainen * cleanup Signed-off-by: Jari Kolehmainen * cleanup Signed-off-by: Jari Kolehmainen --- src/main/window-manager.ts | 2 -- webpack.main.ts | 39 +------------------------------------- webpack.renderer.ts | 3 +++ 3 files changed, 4 insertions(+), 40 deletions(-) diff --git a/src/main/window-manager.ts b/src/main/window-manager.ts index be6d71498e..80e3224fd4 100644 --- a/src/main/window-manager.ts +++ b/src/main/window-manager.ts @@ -31,7 +31,6 @@ import { IpcRendererNavigationEvents } from "../renderer/navigation/events"; import logger from "./logger"; import { productName } from "../common/vars"; import { LensProxy } from "./lens-proxy"; -import * as path from "path"; function isHideable(window: BrowserWindow | null): boolean { return Boolean(window && !window.isDestroyed()); @@ -85,7 +84,6 @@ export class WindowManager extends Singleton { titleBarStyle: "hiddenInset", backgroundColor: "#1e2124", webPreferences: { - preload: path.join(__static, "build", "preload.js"), nodeIntegration: true, nodeIntegrationInSubFrames: true, enableRemoteModule: true, diff --git a/webpack.main.ts b/webpack.main.ts index 33d9daf6af..62e51bf4a2 100755 --- a/webpack.main.ts +++ b/webpack.main.ts @@ -22,7 +22,7 @@ import path from "path"; import type webpack from "webpack"; import ForkTsCheckerPlugin from "fork-ts-checker-webpack-plugin"; -import { isProduction, mainDir, buildDir, isDevelopment, preloadEntrypoint } from "./src/common/vars"; +import { isProduction, mainDir, buildDir, isDevelopment } from "./src/common/vars"; import nodeExternals from "webpack-node-externals"; import ProgressBarPlugin from "progress-bar-webpack-plugin"; import * as vars from "./src/common/vars"; @@ -68,41 +68,4 @@ configs.push((): webpack.Configuration => { }; }); -configs.push((): webpack.Configuration => { - console.info("WEBPACK:preload", vars); - - return { - context: __dirname, - target: "electron-main", - mode: isProduction ? "production" : "development", - devtool: isProduction ? "source-map" : "cheap-eval-source-map", - cache: isDevelopment, - entry: { - main: path.resolve(preloadEntrypoint), - }, - output: { - libraryTarget: "global", - path: buildDir, - filename: "preload.js" - }, - resolve: { - extensions: [".json", ".js", ".ts"], - mainFields: ["main"] - }, - module: { - rules: [ - { - test: /\.node$/, - use: "node-loader" - }, - getTSLoader(/\.ts$/) - ] - }, - plugins: [ - new ProgressBarPlugin(), - new ForkTsCheckerPlugin(), - ].filter(Boolean) - }; -}); - export default configs; diff --git a/webpack.renderer.ts b/webpack.renderer.ts index 5be6ba09dc..5e43213bd0 100755 --- a/webpack.renderer.ts +++ b/webpack.renderer.ts @@ -79,6 +79,9 @@ export function webpackLensRenderer({ showVars = true } = {}): webpack.Configura ".ts", ".tsx", ] }, + externals: { + "node-fetch": "commonjs node-fetch" + }, optimization: { minimize: false }, From dfa0a35695d09c9fffc2e291550d65bec8ba4c31 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Mon, 20 Sep 2021 09:54:12 -0400 Subject: [PATCH 07/80] Fix error due to async validators for (#3823) Signed-off-by: Sebastian Malton --- src/renderer/components/input/input.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/renderer/components/input/input.tsx b/src/renderer/components/input/input.tsx index e5276ffcb5..f9054ceeb8 100644 --- a/src/renderer/components/input/input.tsx +++ b/src/renderer/components/input/input.tsx @@ -91,7 +91,7 @@ const defaultProps: Partial = { export class Input extends React.Component { static defaultProps = defaultProps as object; - public input: InputElement; + public input: InputElement | null = null; public validators: InputValidator[] = []; public state: State = { @@ -191,7 +191,7 @@ export class Input extends React.Component { } } - this.input.setCustomValidity(errors.length ? errors[0].toString() : ""); + this.input?.setCustomValidity(errors.length ? errors[0].toString() : ""); } setValidation(errors: React.ReactNode[]) { From 429418a1e2b4f17d50bef4140560e1566abdda6e Mon Sep 17 00:00:00 2001 From: Panu Horsmalahti Date: Mon, 20 Sep 2021 17:09:51 +0300 Subject: [PATCH 08/80] Emit contextMenuOpen for WebLink CatalogEntity (#3842) Signed-off-by: Panu Horsmalahti --- src/common/catalog-entities/web-link.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/common/catalog-entities/web-link.ts b/src/common/catalog-entities/web-link.ts index d54aa8533a..8309945f24 100644 --- a/src/common/catalog-entities/web-link.ts +++ b/src/common/catalog-entities/web-link.ts @@ -57,6 +57,10 @@ export class WebLink extends CatalogEntity(this) + ?.emit("contextMenuOpen", this, context); } } From 070fc1bb443d5b0e3eee02989b98549d0b91e647 Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Wed, 22 Sep 2021 07:42:05 +0300 Subject: [PATCH 09/80] Fix long name layout in Cluster Settings (#3854) * Fix long name layout in Cluster Settings Signed-off-by: Alex Andreev * Clean up Signed-off-by: Alex Andreev --- ...ttings.scss => entity-settings.module.css} | 32 ++++++------------- .../+entity-settings/entity-settings.tsx | 7 ++-- 2 files changed, 13 insertions(+), 26 deletions(-) rename src/renderer/components/+entity-settings/{entity-settings.scss => entity-settings.module.css} (76%) diff --git a/src/renderer/components/+entity-settings/entity-settings.scss b/src/renderer/components/+entity-settings/entity-settings.module.css similarity index 76% rename from src/renderer/components/+entity-settings/entity-settings.scss rename to src/renderer/components/+entity-settings/entity-settings.module.css index 30c01b8a67..604ecd5c5b 100644 --- a/src/renderer/components/+entity-settings/entity-settings.scss +++ b/src/renderer/components/+entity-settings/entity-settings.module.css @@ -19,26 +19,12 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -.EntitySettings { - $spacing: $padding * 3; - - - // TODO: move sub-component styles to separate files - .admin-note { - font-size: small; - opacity: 0.5; - margin-left: $margin; - } - - .button-area { - margin-top: $margin * 2; - } - - .file-loader { - margin-top: $margin * 2; - } - - .Input, .Select { - margin-top: $padding; - } -} +.entityName { + @apply font-bold overflow-hidden; + word-break: break-word; + color: var(--textColorAccent); + display: -webkit-box; + /* Simulate text-overflow:ellipsis styles but for multiple text lines */ + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; +} \ No newline at end of file diff --git a/src/renderer/components/+entity-settings/entity-settings.tsx b/src/renderer/components/+entity-settings/entity-settings.tsx index f656b6fa9d..bcb5895413 100644 --- a/src/renderer/components/+entity-settings/entity-settings.tsx +++ b/src/renderer/components/+entity-settings/entity-settings.tsx @@ -19,7 +19,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import "./entity-settings.scss"; +import styles from "./entity-settings.module.css"; import React from "react"; import { observable, makeObservable } from "mobx"; @@ -98,7 +98,9 @@ export class EntitySettings extends React.Component { source={this.entity.metadata.source} src={this.entity.spec.icon?.src} /> -

{this.entity.metadata.name}

+
+ {this.entity.metadata.name} +
{ groups.map((group, groupIndex) => ( @@ -138,7 +140,6 @@ export class EntitySettings extends React.Component { return ( From eb789a0ab15cffa83c6585011ddf27aa79ad8c60 Mon Sep 17 00:00:00 2001 From: Juho Heikka Date: Tue, 21 Sep 2021 23:53:11 +0300 Subject: [PATCH 10/80] Fix menu rendering on when slightly off screen Menu would bounce around in some cases because the refreshPosition() would calculate different results based on different state of the component and previous render cycle CSS classes. Also I found that the render function calls causes in an infinite loop while open because of refreshPosition will cause a state change which will rerender the function. Fixed that with the shouldComponentUpdate which checks if state has actually changed in between renders. Signed-off-by: Juho Heikka --- src/renderer/components/menu/menu.scss | 8 ---- src/renderer/components/menu/menu.tsx | 54 +++++++++++++++----------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/renderer/components/menu/menu.scss b/src/renderer/components/menu/menu.scss index d94cbff63e..0db62e278a 100644 --- a/src/renderer/components/menu/menu.scss +++ b/src/renderer/components/menu/menu.scss @@ -35,14 +35,6 @@ &.portal { left: -1000px; top: -1000px; - - &.top { - margin-top: -$margin; - } - - &.bottom { - margin-top: $margin; - } } &:not(.portal) { diff --git a/src/renderer/components/menu/menu.tsx b/src/renderer/components/menu/menu.tsx index 30780e7ac4..8ceef6bf8e 100644 --- a/src/renderer/components/menu/menu.tsx +++ b/src/renderer/components/menu/menu.tsx @@ -26,6 +26,7 @@ import { createPortal } from "react-dom"; import { autoBind, cssNames, noop } from "../../utils"; import { Animate } from "../animate"; import { Icon, IconProps } from "../icon"; +import isEqual from "lodash/isEqual"; export const MenuContext = React.createContext(null); export type MenuContextValue = Menu; @@ -85,6 +86,10 @@ export class Menu extends React.Component { return !!this.props.isOpen; } + shouldComponentUpdate(nextProps: MenuProps, nextState: State) { + return !isEqual(nextState, this.state) || !isEqual(nextProps, this.props); + } + componentDidMount() { if (!this.props.usePortal) { const parent = this.elem.parentElement; @@ -150,39 +155,42 @@ export class Menu extends React.Component { return; } - const { width, height } = this.opener.getBoundingClientRect(); - let { left, top, bottom, right } = this.opener.getBoundingClientRect(); + const openerClientRect = this.opener.getBoundingClientRect(); + let { left: openerLeft, top: openerTop, bottom: openerBottom, right: openerRight } = this.opener.getBoundingClientRect(); const withScroll = window.getComputedStyle(this.elem).position !== "fixed"; // window global scroll corrections if (withScroll) { - left += window.pageXOffset; - top += window.pageYOffset; - right = left + width; - bottom = top + height; + openerLeft += window.pageXOffset; + openerTop += window.pageYOffset; + openerRight = openerLeft + openerClientRect.width; + openerBottom = openerTop + openerClientRect.height; } - // setup initial position - const position: MenuPosition = { left: true, bottom: true }; + const extraMargin = this.props.usePortal ? 8 : 0; - this.elem.style.left = `${left}px`; - this.elem.style.top = `${bottom}px`; + const { width: menuWidth, height: menuHeight } = this.elem.getBoundingClientRect(); - // correct position if menu doesn't fit to viewport - const menuPos = this.elem.getBoundingClientRect(); + const rightSideOfMenu = openerLeft + menuWidth; + const renderMenuLeft = rightSideOfMenu > window.innerWidth; + const menuOnLeftSidePosition = `${openerRight - this.elem.offsetWidth}px`; + const menuOnRightSidePosition = `${openerLeft}px`; - if (menuPos.right > window.innerWidth) { - this.elem.style.left = `${right - this.elem.offsetWidth}px`; - position.right = true; - delete position.left; - } + this.elem.style.left = renderMenuLeft ? menuOnLeftSidePosition : menuOnRightSidePosition; - if (menuPos.bottom > window.innerHeight) { - this.elem.style.top = `${top - this.elem.offsetHeight}px`; - position.top = true; - delete position.bottom; - } - this.setState({ position }); + const bottomOfMenu = openerBottom + extraMargin + menuHeight; + const renderMenuOnTop = bottomOfMenu > window.innerHeight; + const menuOnTopPosition = `${openerTop - this.elem.offsetHeight - extraMargin}px`; + const menuOnBottomPosition = `${openerBottom + extraMargin}px`; + + this.elem.style.top = renderMenuOnTop ? menuOnTopPosition : menuOnBottomPosition; + + this.setState({ position: { + top: renderMenuOnTop, + bottom: !renderMenuOnTop, + left: renderMenuLeft, + right: !renderMenuLeft + } }); }; open() { From e2a9d5213e2201cb6a00a51ec5481a5464916a1e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Sep 2021 08:50:38 -0400 Subject: [PATCH 11/80] Bump tmpl from 1.0.4 to 1.0.5 in /extensions/pod-menu (#3862) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- extensions/pod-menu/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions/pod-menu/package-lock.json b/extensions/pod-menu/package-lock.json index 3abe5a107f..b2c2e736fe 100644 --- a/extensions/pod-menu/package-lock.json +++ b/extensions/pod-menu/package-lock.json @@ -6561,9 +6561,9 @@ } }, "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, "to-arraybuffer": { From 963d801cf75bd0a08947c46149db40ab5e100cdf Mon Sep 17 00:00:00 2001 From: Roman Date: Wed, 22 Sep 2021 16:42:16 +0300 Subject: [PATCH 12/80] [UX]: navigation to cluster overview from sidebar's top icon (#3867) * UX: navigate to "/cluster" overview page from sidebar's top icon * highlight hotbar-icon border on click --- .../components/hotbar/hotbar-icon.scss | 35 +++++++------------ src/renderer/components/layout/sidebar.tsx | 5 +-- 2 files changed, 16 insertions(+), 24 deletions(-) diff --git a/src/renderer/components/hotbar/hotbar-icon.scss b/src/renderer/components/hotbar/hotbar-icon.scss index 2f9ad6a696..e713b20432 100644 --- a/src/renderer/components/hotbar/hotbar-icon.scss +++ b/src/renderer/components/hotbar/hotbar-icon.scss @@ -31,12 +31,20 @@ } .HotbarIcon { + --iconActiveShadow: 0 0 0px 3px var(--clusterMenuBackground), 0 0 0px 6px var(--textColorAccent); + --iconHoverShadow: 0 0 0px 3px var(--clusterMenuBackground), 0 0 0px 6px #ffffff50; + border-radius: 6px; user-select: none; cursor: pointer; transition: none; text-shadow: 0 0 4px #0000008f; position: relative; + z-index: 0; // allows to catch state of :active pseudo-selector + + &:active .MuiAvatar-root { + box-shadow: var(--iconActiveShadow) !important; + } div.MuiAvatar-colorDefault { font-weight:500; @@ -64,20 +72,17 @@ box-shadow: none; } - div.MuiAvatar-root { + .MuiAvatar-root { width: var(--size); height: var(--size); + border-radius: 6px; &.active { - box-shadow: 0 0 0px 3px var(--clusterMenuBackground), 0 0 0px 6px var(--textColorAccent); + box-shadow: var(--iconActiveShadow); } - &.interactive { - &:hover { - &:not(.active) { - box-shadow: 0 0 0px 3px var(--clusterMenuBackground), 0 0 0px 6px #ffffff50; - } - } + &.interactive:not(.active):hover { + box-shadow: var(--iconHoverShadow); } } @@ -117,20 +122,6 @@ } } - img { - border-radius: 6px; - - &.active { - box-shadow: 0 0 0px 3px var(--clusterMenuBackground), 0 0 0px 6px var(--textColorAccent); - } - - &:hover { - &:not(.active) { - box-shadow: 0 0 0px 3px var(--clusterMenuBackground), 0 0 0px 6px #ffffff50; - } - } - } - .materialIcon { margin-left: 1px; margin-top: 1px; diff --git a/src/renderer/components/layout/sidebar.tsx b/src/renderer/components/layout/sidebar.tsx index 92dd03f311..66860fa399 100644 --- a/src/renderer/components/layout/sidebar.tsx +++ b/src/renderer/components/layout/sidebar.tsx @@ -32,7 +32,7 @@ import { Storage } from "../+storage"; import { Network } from "../+network"; import { crdStore } from "../+custom-resources/crd.store"; import { CustomResources } from "../+custom-resources/custom-resources"; -import { isActiveRoute } from "../../navigation"; +import { isActiveRoute, navigate } from "../../navigation"; import { isAllowedResource } from "../../../common/utils/allowed-resource"; import { Spinner } from "../spinner"; import { ClusterPageMenuRegistration, ClusterPageMenuRegistry, ClusterPageRegistry, getExtensionPageUrl } from "../../../extensions/registries"; @@ -110,7 +110,7 @@ export class Sidebar extends React.Component { const routes: TabLayoutRoute[] = []; const subMenus = ClusterPageMenuRegistry.getInstance().getSubItems(menu); - const clusterPageRegistry= ClusterPageRegistry.getInstance(); + const clusterPageRegistry = ClusterPageRegistry.getInstance(); for (const subMenu of subMenus) { const page = clusterPageRegistry.getByPageTarget(subMenu.target); @@ -193,6 +193,7 @@ export class Sidebar extends React.Component { source={metadata.source} src={spec.icon?.src} className="mr-5" + onClick={() => navigate(routes.clusterURL())} />
{metadata.name} From e2a85031b60c8b5c059bddbaeaf90e326e1625cc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Sep 2021 09:43:20 -0400 Subject: [PATCH 13/80] Bump tmpl from 1.0.4 to 1.0.5 in /extensions/metrics-cluster-feature (#3863) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- extensions/metrics-cluster-feature/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions/metrics-cluster-feature/package-lock.json b/extensions/metrics-cluster-feature/package-lock.json index 981cb43dff..1d2e2217cb 100644 --- a/extensions/metrics-cluster-feature/package-lock.json +++ b/extensions/metrics-cluster-feature/package-lock.json @@ -6645,9 +6645,9 @@ } }, "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, "to-arraybuffer": { From 39e2fce47350a4328417a8ec9a5b598a89b9f434 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Sep 2021 09:43:27 -0400 Subject: [PATCH 14/80] Bump tmpl from 1.0.4 to 1.0.5 in /extensions/node-menu (#3864) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- extensions/node-menu/package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/extensions/node-menu/package-lock.json b/extensions/node-menu/package-lock.json index 02d953b830..88ada2da7e 100644 --- a/extensions/node-menu/package-lock.json +++ b/extensions/node-menu/package-lock.json @@ -6608,9 +6608,9 @@ } }, "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, "to-arraybuffer": { From 3a989bbb364ef9cf7cec9fbaf8f00ababcff49c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Sep 2021 09:43:33 -0400 Subject: [PATCH 15/80] Bump tmpl from 1.0.4 to 1.0.5 (#3860) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 46af019646..d132c386e8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13680,9 +13680,9 @@ tmp@^0.2.0, tmp@^0.2.1: rimraf "^3.0.0" tmpl@1.0.x: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" - integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== to-arraybuffer@^1.0.0: version "1.0.1" From 49e8b9cc0a46047be470ac500d9d9c9fab78a5b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Sep 2021 09:43:49 -0400 Subject: [PATCH 16/80] Bump npm from 6.14.13 to 6.14.15 (#3838) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 95 +++++++++++++++++++++++++++++++++++----------------- 2 files changed, 66 insertions(+), 31 deletions(-) diff --git a/package.json b/package.json index f9652a5cac..64f4476423 100644 --- a/package.json +++ b/package.json @@ -223,7 +223,7 @@ "monaco-editor": "^0.26.1", "node-fetch": "^2.6.1", "node-pty": "^0.10.1", - "npm": "^6.14.8", + "npm": "^6.14.15", "openid-client": "^3.15.2", "p-limit": "^3.1.0", "path-to-regexp": "^6.1.0", diff --git a/yarn.lock b/yarn.lock index d132c386e8..e5ea295dd7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4683,7 +4683,7 @@ debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.6: dependencies: ms "^2.1.1" -debuglog@^1.0.1: +debuglog@*, debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= @@ -6411,7 +6411,7 @@ fs-extra@^9.0.0, fs-extra@^9.0.1: jsonfile "^6.0.1" universalify "^2.0.0" -fs-minipass@^1.2.5: +fs-minipass@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== @@ -6823,12 +6823,7 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.2.2, graceful-fs@^4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3: +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2, graceful-fs@^4.2.3, graceful-fs@^4.2.4: version "4.2.8" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== @@ -7397,7 +7392,7 @@ import-local@^3.0.2: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" -imurmurhash@^0.1.4: +imurmurhash@*, imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= @@ -9165,6 +9160,11 @@ lodash-es@^4.17.20: resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== +lodash._baseindexof@*: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" + integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw= + lodash._baseuniq@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" @@ -9173,11 +9173,33 @@ lodash._baseuniq@~4.6.0: lodash._createset "~4.0.0" lodash._root "~3.0.0" +lodash._bindcallback@*: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= + +lodash._cacheindexof@*: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" + integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI= + +lodash._createcache@*: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" + integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM= + dependencies: + lodash._getnative "^3.0.0" + lodash._createset@~4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= +lodash._getnative@*, lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= + lodash._root@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" @@ -9203,6 +9225,11 @@ lodash.isequal@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= +lodash.restparam@*: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= + lodash.toarray@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" @@ -9622,7 +9649,7 @@ minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: +minipass@^2.3.5, minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== @@ -9637,7 +9664,7 @@ minipass@^3.0.0: dependencies: yallist "^4.0.0" -minizlib@^1.2.1: +minizlib@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== @@ -9686,7 +9713,7 @@ mkdirp@1.x, mkdirp@^1.0.3, mkdirp@~1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp@^0.5.5, mkdirp@~0.5.0: +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.4, mkdirp@^0.5.5, mkdirp@~0.5.0: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -10214,10 +10241,10 @@ npm-user-validate@^1.0.1: resolved "https://registry.yarnpkg.com/npm-user-validate/-/npm-user-validate-1.0.1.tgz#31428fc5475fe8416023f178c0ab47935ad8c561" integrity sha512-uQwcd/tY+h1jnEaze6cdX/LrhWhoBxfSknxentoqmIuStxUExxjWd3ULMLFPiFUrZKbOVMowH6Jq2FRWfmhcEw== -npm@^6.14.8: - version "6.14.13" - resolved "https://registry.yarnpkg.com/npm/-/npm-6.14.13.tgz#e88bcb6c48209869c40b5cedad8a1508e58e6f30" - integrity sha512-SRl4jJi0EBHY2xKuu98FLRMo3VhYQSA6otyLnjSEiHoSG/9shXCFNJy9tivpUJvtkN9s6VDdItHa5Rn+fNBzag== +npm@^6.14.15: + version "6.14.15" + resolved "https://registry.yarnpkg.com/npm/-/npm-6.14.15.tgz#97dd51af5b5d6225b611b40c5cb4d31da1d467fe" + integrity sha512-dkcQc4n+DiJAMYG2haNAMyJbmuvevjXz+WC9dCUzodw8EovwTIc6CATSsTEplCY6c0jG4OshxFGFJsrnKJguWA== dependencies: JSONStream "^1.3.5" abbrev "~1.1.1" @@ -10237,6 +10264,7 @@ npm@^6.14.8: cmd-shim "^3.0.3" columnify "~1.5.4" config-chain "^1.1.12" + debuglog "*" detect-indent "~5.0.0" detect-newline "^2.1.0" dezalgo "~1.0.3" @@ -10251,6 +10279,7 @@ npm@^6.14.8: has-unicode "~2.0.1" hosted-git-info "^2.8.9" iferr "^1.0.2" + imurmurhash "*" infer-owner "^1.0.4" inflight "~1.0.6" inherits "^2.0.4" @@ -10269,8 +10298,14 @@ npm@^6.14.8: libnpx "^10.2.4" lock-verify "^2.1.0" lockfile "^1.0.4" + lodash._baseindexof "*" lodash._baseuniq "~4.6.0" + lodash._bindcallback "*" + lodash._cacheindexof "*" + lodash._createcache "*" + lodash._getnative "*" lodash.clonedeep "~4.5.0" + lodash.restparam "*" lodash.union "~4.6.0" lodash.uniq "~4.5.0" lodash.without "~4.4.0" @@ -10320,7 +10355,7 @@ npm@^6.14.8: sorted-union-stream "~2.1.3" ssri "^6.0.2" stringify-package "^1.0.1" - tar "^4.4.13" + tar "^4.4.19" text-table "~0.2.0" tiny-relative-date "^1.3.0" uid-number "0.0.6" @@ -12363,7 +12398,7 @@ rxjs@^6.5.2: dependencies: tslib "^1.9.0" -safe-buffer@*, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@*, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -13496,18 +13531,18 @@ tar-stream@^2.1.4: inherits "^2.0.3" readable-stream "^3.1.1" -tar@^4.4.10, tar@^4.4.12, tar@^4.4.13: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== +tar@^4.4.10, tar@^4.4.12, tar@^4.4.19: + version "4.4.19" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" tar@^6.0.2, tar@^6.1.10: version "6.1.10" @@ -14899,7 +14934,7 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== From 3fc5b83461d3dcf94eccc055c63954e6b842ba8e Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Wed, 22 Sep 2021 07:25:48 -0700 Subject: [PATCH 17/80] Add error message for no contexts in add cluster page (#3868) --- .../components/+add-cluster/add-cluster.tsx | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/renderer/components/+add-cluster/add-cluster.tsx b/src/renderer/components/+add-cluster/add-cluster.tsx index e987c1d4bb..81a75019fa 100644 --- a/src/renderer/components/+add-cluster/add-cluster.tsx +++ b/src/renderer/components/+add-cluster/add-cluster.tsx @@ -62,7 +62,7 @@ export class AddCluster extends React.Component { @observable kubeContexts = observable.map(); @observable customConfig = ""; @observable isWaiting = false; - @observable errorText: string; + @observable errors: string[] = []; constructor(props: {}) { super(props); @@ -75,7 +75,7 @@ export class AddCluster extends React.Component { @computed get allErrors(): string[] { return [ - this.errorText, + ...this.errors, ...iter.map(this.kubeContexts.values(), ({ error }) => error) ].filter(Boolean); } @@ -85,7 +85,14 @@ export class AddCluster extends React.Component { const { config, error } = loadConfigFromString(this.customConfig.trim() || "{}"); this.kubeContexts.replace(getContexts(config)); - this.errorText = error?.toString(); + + if (error) { + this.errors.push(error.toString()); + } + + if (config.contexts.length === 0) { + this.errors.push('No contexts defined, either missing the "contexts" field, or it is empty.'); + } }, 500); @action @@ -124,7 +131,7 @@ export class AddCluster extends React.Component { value={this.customConfig} onChange={value => { this.customConfig = value; - this.errorText = ""; + this.errors.length = 0; this.refreshContexts(); }} /> From 02c90c760d667a085f9b82664324a0c07ecde329 Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Thu, 23 Sep 2021 12:23:00 +0300 Subject: [PATCH 18/80] fix missing query parameter (#3875) Signed-off-by: Jari Kolehmainen --- src/common/k8s-api/kube-object.store.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/k8s-api/kube-object.store.ts b/src/common/k8s-api/kube-object.store.ts index dc428eb08b..f90eaab8e5 100644 --- a/src/common/k8s-api/kube-object.store.ts +++ b/src/common/k8s-api/kube-object.store.ts @@ -159,7 +159,7 @@ export abstract class KubeObjectStore extends ItemStore this.loadedNamespaces = namespaces; return Promise // load resources per namespace - .all(namespaces.map(namespace => api.list({ namespace, reqInit }))) + .all(namespaces.map(namespace => api.list({ namespace, reqInit }, this.query))) .then(items => items.flat().filter(Boolean)); } } From 06854b4cac2b54b41099c4795db497088df0322d Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Thu, 23 Sep 2021 12:36:53 +0300 Subject: [PATCH 19/80] Disable log file writing on renderer (#3874) Signed-off-by: Jari Kolehmainen --- src/common/logger.ts | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/common/logger.ts b/src/common/logger.ts index 825fa2493b..ca975871b8 100644 --- a/src/common/logger.ts +++ b/src/common/logger.ts @@ -59,24 +59,24 @@ if (ipcMain) { ), }) ); + + if (!isTestEnv) { + transports.push( + new winston.transports.File({ + handleExceptions: false, + level: logLevel, + filename: "lens.log", + dirname: getPath("logs"), + maxsize: 16 * 1024, + maxFiles: 16, + tailable: true, + }) + ); + } } else { transports.push(new BrowserConsole()); } -if (!isTestEnv) { - transports.push( - new winston.transports.File({ - handleExceptions: false, - level: logLevel, - filename: "lens.log", - dirname: getPath("logs"), - maxsize: 16 * 1024, - maxFiles: 16, - tailable: true, - }) - ); -} - export default winston.createLogger({ format: format.simple(), transports, From 3c55cba40db33c975f3f704c48294588229f9148 Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Thu, 23 Sep 2021 15:14:24 +0300 Subject: [PATCH 20/80] use ubuntu 18.04 for builds (#3877) Signed-off-by: Jari Kolehmainen --- .azure-pipelines-k8s-matrix.yml | 2 +- .azure-pipelines.yml | 2 +- .github/workflows/test.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.azure-pipelines-k8s-matrix.yml b/.azure-pipelines-k8s-matrix.yml index 9f1f38ec67..cdcc18b740 100644 --- a/.azure-pipelines-k8s-matrix.yml +++ b/.azure-pipelines-k8s-matrix.yml @@ -15,7 +15,7 @@ trigger: none jobs: - job: Linux pool: - vmImage: ubuntu-20.04 + vmImage: ubuntu-18.04 strategy: matrix: kube_1.16: diff --git a/.azure-pipelines.yml b/.azure-pipelines.yml index e360a818e6..3c928430ed 100644 --- a/.azure-pipelines.yml +++ b/.azure-pipelines.yml @@ -109,7 +109,7 @@ jobs: - job: Linux pool: - vmImage: ubuntu-20.04 + vmImage: ubuntu-18.04 strategy: matrix: node_14.x: diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4bc748d235..7590f42289 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,7 +12,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [ubuntu-20.04, macos-11, windows-2019] + os: [ubuntu-18.04, macos-11, windows-2019] node-version: [14.x] steps: - name: Checkout Release from lens From 3c77c06519c2d9b72eb23946d2f2f7ddd1eaf938 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 23 Sep 2021 13:18:31 -0400 Subject: [PATCH 21/80] Add ability to search and activate entities via the command dialog (#3692) --- src/extensions/registries/base-registry.ts | 2 +- src/extensions/registries/command-registry.ts | 4 +- .../activate-entity-command.tsx | 58 +++++++++++++++++++ .../activate-entity-command/index.ts | 22 +++++++ .../initializers/command-registry.tsx | 7 +++ 5 files changed, 90 insertions(+), 3 deletions(-) create mode 100644 src/renderer/components/activate-entity-command/activate-entity-command.tsx create mode 100644 src/renderer/components/activate-entity-command/index.ts diff --git a/src/extensions/registries/base-registry.ts b/src/extensions/registries/base-registry.ts index af00fb48fd..9b596172c9 100644 --- a/src/extensions/registries/base-registry.ts +++ b/src/extensions/registries/base-registry.ts @@ -25,7 +25,7 @@ import { Singleton } from "../../common/utils"; import { LensExtension } from "../lens-extension"; export class BaseRegistry extends Singleton { - private items = observable.map([], {deep: false}); + private items = observable.map([], { deep: false }); constructor() { super(); diff --git a/src/extensions/registries/command-registry.ts b/src/extensions/registries/command-registry.ts index 5c38e32c71..3916b0f721 100644 --- a/src/extensions/registries/command-registry.ts +++ b/src/extensions/registries/command-registry.ts @@ -25,9 +25,9 @@ import { BaseRegistry } from "./base-registry"; import type { LensExtension } from "../lens-extension"; import type { CatalogEntity } from "../../common/catalog"; -export type CommandContext = { +export interface CommandContext { entity?: CatalogEntity; -}; +} export interface CommandRegistration { id: string; diff --git a/src/renderer/components/activate-entity-command/activate-entity-command.tsx b/src/renderer/components/activate-entity-command/activate-entity-command.tsx new file mode 100644 index 0000000000..110afd6b3c --- /dev/null +++ b/src/renderer/components/activate-entity-command/activate-entity-command.tsx @@ -0,0 +1,58 @@ +/** + * Copyright (c) 2021 OpenLens Authors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +import { computed } from "mobx"; +import { observer } from "mobx-react"; +import React from "react"; +import { CatalogEntity, catalogEntityRunContext } from "../../api/catalog-entity"; +import { catalogEntityRegistry } from "../../api/catalog-entity-registry"; +import { CommandOverlay } from "../command-palette"; +import { Select } from "../select"; + +@observer +export class ActivateEntityCommand extends React.Component { + @computed get options() { + return catalogEntityRegistry.items.map(entity => ({ + label: `${entity.kind}: ${entity.getName()}`, + value: entity, + })); + } + + onSelect(entity: CatalogEntity): void { + entity.onRun?.(catalogEntityRunContext); + CommandOverlay.close(); + } + + render() { + return ( + +
+ + + ); + } + + render() { + const { className, ...dialogProps } = this.props; + const resourceName = this.portForward?.name ?? ""; + const header = ( +
+ Port Forwarding for {resourceName} +
+ ); + + return ( + + + + {this.renderContents()} + + + + ); + } +} diff --git a/src/renderer/port-forward/port-forward-item.ts b/src/renderer/port-forward/port-forward-item.ts new file mode 100644 index 0000000000..9251b0fcef --- /dev/null +++ b/src/renderer/port-forward/port-forward-item.ts @@ -0,0 +1,91 @@ +/** + * Copyright (c) 2021 OpenLens Authors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +import type { ItemObject } from "../../common/item.store"; +import { autoBind } from "../../common/utils"; + +export interface ForwardedPort { + clusterId?: string; + kind: string; + namespace: string; + name: string; + port: number; + forwardPort: number; +} + +export class PortForwardItem implements ItemObject { + clusterId: string; + kind: string; + namespace: string; + name: string; + port: number; + forwardPort: number; + + constructor(pf: ForwardedPort) { + this.clusterId = pf.clusterId; + this.kind = pf.kind; + this.namespace = pf.namespace; + this.name = pf.name; + this.port = pf.port; + this.forwardPort = pf.forwardPort; + + autoBind(this); + } + + getName() { + return this.name; + } + + getNs() { + return this.namespace; + } + + get id() { + return this.forwardPort; + } + + getId() { + return String(this.forwardPort); + } + + getKind() { + return this.kind; + } + + getPort() { + return this.port; + } + + getForwardPort() { + return this.forwardPort; + } + + getSearchFields() { + return [ + this.name, + this.id, + this.kind, + this.port, + this.forwardPort, + ]; + } +} diff --git a/src/renderer/port-forward/port-forward.store.ts b/src/renderer/port-forward/port-forward.store.ts new file mode 100644 index 0000000000..49ebee61d4 --- /dev/null +++ b/src/renderer/port-forward/port-forward.store.ts @@ -0,0 +1,179 @@ +/** + * Copyright (c) 2021 OpenLens Authors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + + +import { makeObservable, observable, reaction } from "mobx"; +import { ItemStore } from "../../common/item.store"; +import { autoBind, createStorage, disposer, getHostedClusterId, openExternal } from "../utils"; +import { ForwardedPort, PortForwardItem } from "./port-forward-item"; +import { apiBase } from "../api"; +import { waitUntilFree } from "tcp-port-used"; +import { Notifications } from "../components/notifications"; +import logger from "../../common/logger"; + +export class PortForwardStore extends ItemStore { + private storage = createStorage("port_forwards", undefined); + + @observable portForwards: PortForwardItem[]; + + constructor() { + super(); + makeObservable(this); + autoBind(this); + + this.init(); + } + + private async init() { + await this.storage.whenReady; + + const savedPortForwards = this.storage.get(); // undefined on first load + + if (Array.isArray(savedPortForwards)) { + logger.info("[PORT_FORWARD] starting saved port-forwards"); + await Promise.all(savedPortForwards.map(addPortForward)); + } + } + + watch() { + return disposer( + reaction(() => this.portForwards, () => this.loadAll()), + ); + } + + loadAll() { + return this.loadItems(async () => { + let portForwards = await getPortForwards(); + + // filter out any not for this cluster + portForwards = portForwards.filter(pf => pf.clusterId == getHostedClusterId()); + this.storage.set(portForwards); + + this.reset(); + portForwards.map(pf => this.portForwards.push(new PortForwardItem(pf))); + + return this.portForwards; + }); + } + + reset() { + this.portForwards = []; + } + + async removeSelectedItems() { + return Promise.all(this.selectedItems.map(removePortForward)); + } +} + +interface PortForwardResult { + port: number; +} + +interface PortForwardsResult { + portForwards: ForwardedPort[]; +} + +export async function addPortForward(portForward: ForwardedPort): Promise { + let response: PortForwardResult; + + try { + response = await apiBase.post(`/pods/port-forward/${portForward.namespace}/${portForward.kind}/${portForward.name}?port=${portForward.port}&forwardPort=${portForward.forwardPort}`); + + if (response?.port && response.port != +portForward.forwardPort) { + logger.warn(`specified ${portForward.forwardPort} got ${response.port}`); + } + } catch (error) { + logger.warn(error); // don't care, caller must check + } + portForwardStore.reset(); + + return response?.port; +} + +export async function getPortForward(portForward: ForwardedPort): Promise { + let response: PortForwardResult; + + try { + response = await apiBase.get(`/pods/port-forward/${portForward.namespace}/${portForward.kind}/${portForward.name}?port=${portForward.port}&forwardPort=${portForward.forwardPort}`); + } catch (error) { + logger.warn(error); // don't care, caller must check + } + + return response?.port; +} + +export async function modifyPortForward(portForward: ForwardedPort, desiredPort: number): Promise { + let port = 0; + + try { + await removePortForward(portForward); + portForward.forwardPort = desiredPort; + port = await addPortForward(portForward); + } catch (error) { + logger.warn(error); // don't care, caller must check + } + portForwardStore.reset(); + + return port; +} + + +export async function removePortForward(portForward: ForwardedPort) { + try { + await apiBase.del(`/pods/port-forward/${portForward.namespace}/${portForward.kind}/${portForward.name}?port=${portForward.port}&forwardPort=${portForward.forwardPort}`); + await waitUntilFree(+portForward.forwardPort, 200, 1000); + } catch (error) { + logger.warn(error); // don't care, caller must check + } + portForwardStore.reset(); +} + +export async function getPortForwards(): Promise { + try { + const response = await apiBase.get(`/pods/port-forwards`); + + return response.portForwards; + } catch (error) { + logger.warn(error); // don't care, caller must check + + return []; + } +} + +export function openPortForward(portForward: ForwardedPort) { + const browseTo = `http://localhost:${portForward.forwardPort}`; + + openExternal(browseTo) + .catch(error => { + logger.error(`failed to open in browser: ${error}`, { + clusterId: portForward.clusterId, + port: portForward.port, + kind: portForward.kind, + namespace: portForward.namespace, + name: portForward.name, + }); + Notifications.error(`Failed to open ${browseTo} in browser`); + } + ); + +} + +export const portForwardStore = new PortForwardStore(); From cdb57f4c974ba5f9bd132df992e72d541dc9adce Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Fri, 8 Oct 2021 09:02:32 -0400 Subject: [PATCH 75/80] Remove directly depending on openid-client (#3935) --- package.json | 2 +- yarn.lock | 68 +--------------------------------------------------- 2 files changed, 2 insertions(+), 68 deletions(-) diff --git a/package.json b/package.json index a5677e0154..b0760c50eb 100644 --- a/package.json +++ b/package.json @@ -202,6 +202,7 @@ "filehound": "^1.17.4", "fs-extra": "^9.0.1", "glob-to-regexp": "^0.4.1", + "got": "^11.8.2", "grapheme-splitter": "^1.0.4", "handlebars": "^4.7.7", "http-proxy": "^1.18.1", @@ -224,7 +225,6 @@ "node-fetch": "^2.6.1", "node-pty": "^0.10.1", "npm": "^6.14.15", - "openid-client": "^3.15.2", "p-limit": "^3.1.0", "path-to-regexp": "^6.2.0", "proper-lockfile": "^4.1.2", diff --git a/yarn.lock b/yarn.lock index be0a206792..6a6f10a18c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1503,15 +1503,6 @@ "@types/minimatch" "*" "@types/node" "*" -"@types/got@^9.6.9": - version "9.6.11" - resolved "https://registry.yarnpkg.com/@types/got/-/got-9.6.11.tgz#482b402cc5ee459481aeeadb08142ebb1a9afb26" - integrity sha512-dr3IiDNg5TDesGyuwTrN77E1Cd7DCdmCFtEfSGqr83jMMtcwhf/SGPbN2goY4JUWQfvxwY56+e5tjfi+oXeSdA== - dependencies: - "@types/node" "*" - "@types/tough-cookie" "*" - form-data "^2.5.0" - "@types/graceful-fs@^4.1.2": version "4.1.3" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.3.tgz#039af35fe26bec35003e8d86d2ee9c586354348f" @@ -2554,14 +2545,6 @@ agentkeepalive@^3.4.1: dependencies: humanize-ms "^1.2.1" -aggregate-error@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" - integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - aggregate-error@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -3109,11 +3092,6 @@ base64-js@^1.5.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -base64url@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" - integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== - base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -6708,7 +6686,7 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -got@^11.8.0: +got@^11.8.0, got@^11.8.2: version "11.8.2" resolved "https://registry.yarnpkg.com/got/-/got-11.8.2.tgz#7abb3959ea28c31f3576f1576c1effce23f33599" integrity sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ== @@ -8412,13 +8390,6 @@ joi@^17.3.0, joi@^17.4.2: "@sideway/formula" "^3.0.0" "@sideway/pinpoint" "^2.0.0" -jose@^1.27.1: - version "1.27.1" - resolved "https://registry.yarnpkg.com/jose/-/jose-1.27.1.tgz#a1de2ecb5b3ae1ae28f0d9d0cc536349ada27ec8" - integrity sha512-VyHM6IJPw0TTGqHVNlPWg16/ASDPAmcChcLqSb3WNBvwWFoWPeFqlmAUCm8/oIG1GjZwAlUDuRKFfycowarcVA== - dependencies: - "@panva/asn1.js" "^1.0.0" - jose@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/jose/-/jose-2.0.5.tgz#29746a18d9fff7dcf9d5d2a6f62cb0c7cd27abd3" @@ -10430,11 +10401,6 @@ obuf@^1.0.0, obuf@^1.1.2: resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -oidc-token-hash@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/oidc-token-hash/-/oidc-token-hash-5.0.0.tgz#acdfb1f4310f58e64d5d74a4e8671a426986e888" - integrity sha512-8Yr4CZSv+Tn8ZkN3iN2i2w2G92mUKClp4z7EGUfdsERiYSbj7P4i/NHm72ft+aUdsiFx9UdIPSTwbyzQ6C4URg== - oidc-token-hash@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/oidc-token-hash/-/oidc-token-hash-5.0.1.tgz#ae6beec3ec20f0fd885e5400d175191d6e2f10c6" @@ -10492,22 +10458,6 @@ opener@^1.5.2: resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== -openid-client@^3.15.2: - version "3.15.2" - resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-3.15.2.tgz#d48a6d7991d5d6117f4598bb1d19399262164128" - integrity sha512-50aBsfiSZds48ec/VvUZ3hwtpEW0L5s7gGxlsJSvo5mAeK4TG3gv0VRWI+SvCAae4MEwRegLJD3YjpkJMLi2GQ== - dependencies: - "@types/got" "^9.6.9" - base64url "^3.0.1" - got "^9.6.0" - jose "^1.27.1" - lodash "^4.17.15" - lru-cache "^5.1.1" - make-error "^1.3.6" - object-hash "^2.0.1" - oidc-token-hash "^5.0.0" - p-any "^3.0.0" - openid-client@^4.1.1: version "4.7.4" resolved "https://registry.yarnpkg.com/openid-client/-/openid-client-4.7.4.tgz#bd9978456d53d38adb89856b14a8fbd094f7732e" @@ -10591,14 +10541,6 @@ osenv@^0.1.4, osenv@^0.1.5: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -p-any@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-any/-/p-any-3.0.0.tgz#79847aeed70b5d3a10ea625296c0c3d2e90a87b9" - integrity sha512-5rqbqfsRWNb0sukt0awwgJMlaep+8jV45S15SKKB34z4UuzjcofIfnriCBhWjZP2jbVtjt9yRl7buB6RlKsu9w== - dependencies: - p-cancelable "^2.0.0" - p-some "^5.0.0" - p-cancelable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" @@ -10680,14 +10622,6 @@ p-retry@^3.0.1: dependencies: retry "^0.12.0" -p-some@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-some/-/p-some-5.0.0.tgz#8b730c74b4fe5169d7264a240ad010b6ebc686a4" - integrity sha512-Js5XZxo6vHjB9NOYAzWDYAIyyiPvva0DWESAIWIK7uhSpGsyg5FwUPxipU/SOQx5x9EqhOh545d1jo6cVkitig== - dependencies: - aggregate-error "^3.0.0" - p-cancelable "^2.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" From a5b432bff08b2af1b33fad01e8551e3d6f8a6e45 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Oct 2021 09:10:24 -0400 Subject: [PATCH 76/80] Bump tcp-port-used from 1.0.1 to 1.0.2 (#3992) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 41 +++++++++++++++++++++++------------------ 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index b0760c50eb..bbd212e02e 100644 --- a/package.json +++ b/package.json @@ -243,7 +243,7 @@ "shell-env": "^3.0.1", "spdy": "^4.0.2", "tar": "^6.1.10", - "tcp-port-used": "^1.0.1", + "tcp-port-used": "^1.0.2", "tempy": "1.0.1", "url-parse": "^1.5.3", "uuid": "^8.3.2", diff --git a/yarn.lock b/yarn.lock index 6a6f10a18c..9aab21279b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4626,12 +4626,12 @@ debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: dependencies: ms "2.1.2" -debug@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" - integrity sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg== +debug@4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: - ms "^2.1.1" + ms "2.1.2" debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.6: version "3.2.7" @@ -7412,6 +7412,11 @@ ip-regex@^2.1.0: resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= +ip-regex@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5" + integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q== + ip@1.1.5, ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" @@ -7842,7 +7847,7 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-url@^1.2.2: +is-url@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== @@ -7874,14 +7879,14 @@ is-yarn-global@^0.3.0: resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== -is2@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is2/-/is2-2.0.1.tgz#8ac355644840921ce435d94f05d3a94634d3481a" - integrity sha512-+WaJvnaA7aJySz2q/8sLjMb2Mw14KTplHmSwcSpZ/fWJPkUmqw3YTzSWbPJ7OAwRvdYTWF2Wg+yYJ1AdP5Z8CA== +is2@^2.0.6: + version "2.0.7" + resolved "https://registry.yarnpkg.com/is2/-/is2-2.0.7.tgz#d084e10cab3bd45d6c9dfde7a48599fcbb93fcac" + integrity sha512-4vBQoURAXC6hnLFxD4VW7uc04XiwTTl/8ydYJxKvPwkWQrSjInkuM5VZVg6BGr1/natq69zDuvO9lGpLClJqvA== dependencies: deep-is "^0.1.3" - ip-regex "^2.1.0" - is-url "^1.2.2" + ip-regex "^4.1.0" + is-url "^1.2.4" isarray@0.0.1: version "0.0.1" @@ -13403,13 +13408,13 @@ tar@^6.0.2, tar@^6.1.10: mkdirp "^1.0.3" yallist "^4.0.0" -tcp-port-used@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tcp-port-used/-/tcp-port-used-1.0.1.tgz#46061078e2d38c73979a2c2c12b5a674e6689d70" - integrity sha512-rwi5xJeU6utXoEIiMvVBMc9eJ2/ofzB+7nLOdnZuFTmNCLqRiQh2sMG9MqCxHU/69VC/Fwp5dV9306Qd54ll1Q== +tcp-port-used@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/tcp-port-used/-/tcp-port-used-1.0.2.tgz#9652b7436eb1f4cfae111c79b558a25769f6faea" + integrity sha512-l7ar8lLUD3XS1V2lfoJlCBaeoaWo/2xfYt81hM7VlvR4RrMVFqfmzfhLVk40hAb368uitje5gPtBRL1m/DGvLA== dependencies: - debug "4.1.0" - is2 "2.0.1" + debug "4.3.1" + is2 "^2.0.6" temp-dir@^2.0.0: version "2.0.0" From 40835ae3a23a3cc0e7b832c08eca08dcc22a6bfc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Oct 2021 09:10:44 -0400 Subject: [PATCH 77/80] Bump @types/proper-lockfile from 4.1.1 to 4.1.2 (#3991) 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 bbd212e02e..4a80f58d98 100644 --- a/package.json +++ b/package.json @@ -291,7 +291,7 @@ "@types/node-fetch": "^2.5.12", "@types/npm": "^2.0.32", "@types/progress-bar-webpack-plugin": "^2.1.2", - "@types/proper-lockfile": "^4.1.1", + "@types/proper-lockfile": "^4.1.2", "@types/randomcolor": "^0.5.6", "@types/react": "^17.0.0", "@types/react-beautiful-dnd": "^13.1.1", diff --git a/yarn.lock b/yarn.lock index 9aab21279b..00f0b29fae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1798,10 +1798,10 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== -"@types/proper-lockfile@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@types/proper-lockfile/-/proper-lockfile-4.1.1.tgz#99f026cbfdbe6305bdd454ffd5fefc1bd064beb1" - integrity sha512-HAjVfDa73pFgivViHyDu8HHHcds+W4MgOuZZAdyFJrHS8ngtCXmhl4hc2YXqSOwO6Bsa+iF2Sgxb2+gv874VOQ== +"@types/proper-lockfile@^4.1.2": + version "4.1.2" + resolved "https://registry.yarnpkg.com/@types/proper-lockfile/-/proper-lockfile-4.1.2.tgz#49537cee7134055ee13a1833b76a1c298f39bb26" + integrity sha512-kd4LMvcnpYkspDcp7rmXKedn8iJSCoa331zRRamUp5oanKt/CefbEGPQP7G89enz7sKD4bvsr8mHSsC8j5WOvA== dependencies: "@types/retry" "*" From 0cd3931d671dfceaa5834db12d3b96b942f955be Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Fri, 8 Oct 2021 09:15:40 -0400 Subject: [PATCH 78/80] Don't run store migrations on renderer (#3968) --- src/common/base-store.ts | 4 ++++ src/common/user-store/user-store.ts | 8 ++++++-- src/migrations/user-store/file-name-migration.ts | 4 ++-- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/common/base-store.ts b/src/common/base-store.ts index 54f6d2a5a2..c5fc7383b1 100644 --- a/src/common/base-store.ts +++ b/src/common/base-store.ts @@ -46,6 +46,10 @@ export abstract class BaseStore extends Singleton { protected constructor(protected params: BaseStoreParams) { super(); makeObservable(this); + + if (ipcRenderer) { + params.migrations = undefined; // don't run migrations on renderer + } } /** diff --git a/src/common/user-store/user-store.ts b/src/common/user-store/user-store.ts index 8cababf3c6..1bd18e06e8 100644 --- a/src/common/user-store/user-store.ts +++ b/src/common/user-store/user-store.ts @@ -19,7 +19,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import { app } from "electron"; +import { app, ipcMain } from "electron"; import semver from "semver"; import { action, computed, observable, reaction, makeObservable } from "mobx"; import { BaseStore } from "../base-store"; @@ -48,7 +48,11 @@ export class UserStore extends BaseStore /* implements UserStore }); makeObservable(this); - fileNameMigration(); + + if (ipcMain) { + fileNameMigration(); + } + this.load(); } diff --git a/src/migrations/user-store/file-name-migration.ts b/src/migrations/user-store/file-name-migration.ts index 10d7a7c99b..932e542642 100644 --- a/src/migrations/user-store/file-name-migration.ts +++ b/src/migrations/user-store/file-name-migration.ts @@ -19,12 +19,12 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +import { app } from "electron"; import fse from "fs-extra"; import path from "path"; -import { getPath } from "../../common/utils/getPath"; export function fileNameMigration() { - const userDataPath = getPath("userData"); + const userDataPath = app.getPath("userData"); const configJsonPath = path.join(userDataPath, "config.json"); const lensUserStoreJsonPath = path.join(userDataPath, "lens-user-store.json"); From 7193231422aaffd8ea1f16c5aadf757490fd5ad1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Oct 2021 09:47:43 -0400 Subject: [PATCH 79/80] Bump typescript from 4.3.2 to 4.4.3 (#3993) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 13 ++++--------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 4a80f58d98..76f572cde7 100644 --- a/package.json +++ b/package.json @@ -382,7 +382,7 @@ "typedoc": "0.22.5", "typedoc-plugin-markdown": "^3.9.0", "typeface-roboto": "^1.1.13", - "typescript": "^4.3.2", + "typescript": "^4.4.3", "typescript-plugin-css-modules": "^3.4.0", "url-loader": "^4.1.1", "webpack": "^4.46.0", diff --git a/yarn.lock b/yarn.lock index 00f0b29fae..a47235cad4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13901,15 +13901,10 @@ typescript-plugin-css-modules@^3.4.0: stylus "^0.54.8" tsconfig-paths "^3.9.0" -typescript@^4.0.3: - version "4.1.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.2.tgz#6369ef22516fe5e10304aae5a5c4862db55380e9" - integrity sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ== - -typescript@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.2.tgz#399ab18aac45802d6f2498de5054fcbbe716a805" - integrity sha512-zZ4hShnmnoVnAHpVHWpTcxdv7dWP60S2FsydQLV8V5PbS3FifjWFFRiHSWpDJahly88PRyV5teTSLoq4eG7mKw== +typescript@^4.0.3, typescript@^4.4.3: + version "4.4.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.3.tgz#bdc5407caa2b109efd4f82fe130656f977a29324" + integrity sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA== uglify-js@^3.1.4: version "3.9.4" From a3765211de7817923326f9db4eca585b4b514537 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Oct 2021 12:26:54 -0400 Subject: [PATCH 80/80] Bump ts-node from 10.1.0 to 10.2.1 (#3994) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 48 +++++++++++++++++++++++++++++++----------------- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index 76f572cde7..e8288fde7b 100644 --- a/package.json +++ b/package.json @@ -376,7 +376,7 @@ "tailwindcss": "^2.2.4", "ts-jest": "26.5.6", "ts-loader": "^7.0.5", - "ts-node": "^10.1.0", + "ts-node": "^10.2.1", "type-fest": "^1.0.2", "typed-emitter": "^1.3.1", "typedoc": "0.22.5", diff --git a/yarn.lock b/yarn.lock index a47235cad4..02d9b55fff 100644 --- a/yarn.lock +++ b/yarn.lock @@ -325,6 +325,18 @@ exec-sh "^0.3.2" minimist "^1.2.0" +"@cspotcode/source-map-consumer@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b" + integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg== + +"@cspotcode/source-map-support@0.6.1": + version "0.6.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.6.1.tgz#118511f316e2e87ee4294761868e254d3da47960" + integrity sha512-DX3Z+T5dt1ockmPdobJS/FAsQPW4V4SrWEhD2iYQT2Cb2tQsiMnYxrcUH9By/Z3B+v0S5LMBkQtV/XOBbpLEOg== + dependencies: + "@cspotcode/source-map-consumer" "0.8.0" + "@dabh/diagnostics@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.2.tgz#290d08f7b381b8f94607dc8f471a12c675f9db31" @@ -1284,7 +1296,7 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== -"@tsconfig/node16@^1.0.1": +"@tsconfig/node16@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e" integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA== @@ -2492,15 +2504,15 @@ acorn-node@^1.6.1: acorn-walk "^7.0.0" xtend "^4.0.2" -acorn-walk@^7.0.0: +acorn-walk@^7.0.0, acorn-walk@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn-walk@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e" - integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ== +acorn-walk@^8.1.1: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== acorn@^6.4.1: version "6.4.1" @@ -2512,10 +2524,10 @@ acorn@^7.0.0, acorn@^7.1.1, acorn@^7.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== -acorn@^8.2.4: - version "8.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.4.1.tgz#56c36251fc7cabc7096adc18f05afe814321a28c" - integrity sha512-asabaBSkEKosYKMITunzX177CXxQ4Q8BSSzMTKD+FefUhipQC70gfW5SiUDhYQ3vk8G+81HqQk7Fv9OXwwn9KA== +acorn@^8.2.4, acorn@^8.4.1: + version "8.5.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" + integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== agent-base@4, agent-base@^4.3.0: version "4.3.0" @@ -12777,7 +12789,7 @@ source-map-resolve@^0.6.0: atob "^2.1.2" decode-uri-component "^0.2.0" -source-map-support@^0.5.17, source-map-support@^0.5.19, source-map-support@^0.5.6, source-map-support@~0.5.12: +source-map-support@^0.5.19, source-map-support@^0.5.6, source-map-support@~0.5.12: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -13715,20 +13727,22 @@ ts-loader@^7.0.5: micromatch "^4.0.0" semver "^6.0.0" -ts-node@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.1.0.tgz#e656d8ad3b61106938a867f69c39a8ba6efc966e" - integrity sha512-6szn3+J9WyG2hE+5W8e0ruZrzyk1uFLYye6IGMBadnOzDh8aP7t8CbFpsfCiEx2+wMixAhjFt7lOZC4+l+WbEA== +ts-node@^10.2.1: + version "10.2.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.2.1.tgz#4cc93bea0a7aba2179497e65bb08ddfc198b3ab5" + integrity sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw== dependencies: + "@cspotcode/source-map-support" "0.6.1" "@tsconfig/node10" "^1.0.7" "@tsconfig/node12" "^1.0.7" "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.1" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" arg "^4.1.0" create-require "^1.1.0" diff "^4.0.1" make-error "^1.1.1" - source-map-support "^0.5.17" yn "3.1.1" tsconfig-paths@^3.9.0: