From 666d90dd3c53208b50c9c717b9fb49825d7a63db Mon Sep 17 00:00:00 2001 From: Lauri Nevala Date: Tue, 21 Jun 2022 18:24:02 +0300 Subject: [PATCH 001/248] Do not crash if ingress is missing status.loadbalancer.ingress property (#5665) --- .../{ingress.api.ts => ingress.api.test.ts} | 47 +++++++++++++++++++ src/common/k8s-api/endpoints/ingress.api.ts | 4 +- 2 files changed, 49 insertions(+), 2 deletions(-) rename src/common/k8s-api/__tests__/{ingress.api.ts => ingress.api.test.ts} (68%) diff --git a/src/common/k8s-api/__tests__/ingress.api.ts b/src/common/k8s-api/__tests__/ingress.api.test.ts similarity index 68% rename from src/common/k8s-api/__tests__/ingress.api.ts rename to src/common/k8s-api/__tests__/ingress.api.test.ts index d5e4d323ad..acb2a59a68 100644 --- a/src/common/k8s-api/__tests__/ingress.api.ts +++ b/src/common/k8s-api/__tests__/ingress.api.test.ts @@ -5,6 +5,53 @@ import { computeRuleDeclarations, Ingress } from "../endpoints"; +describe("Ingress", () => { + it("given no loadbalancer ingresses in status property, loadbalancers should be an empty array", () => { + const ingress = new Ingress({ + apiVersion: "networking.k8s.io/v1", + kind: "Ingress", + metadata: { + name: "foo", + resourceVersion: "1", + uid: "bar", + namespace: "default", + selfLink: "/apis/networking.k8s.io/v1/ingresses/default/foo", + }, + status: { + loadBalancer: {}, + }, + }); + + expect(ingress.getLoadBalancers()).toEqual([]); + }); + + it("given loadbalancer ingresses in status property, loadbalancers should be flat array of ip adresses and hostnames", () => { + const ingress = new Ingress({ + apiVersion: "networking.k8s.io/v1", + kind: "Ingress", + metadata: { + name: "foo", + resourceVersion: "1", + uid: "bar", + namespace: "default", + selfLink: "/apis/networking.k8s.io/v1/ingresses/default/foo", + }, + status: { + loadBalancer: { + ingress: [{ + ip: "10.0.0.27", + }, + { + hostname: "localhost", + }], + }, + }, + }); + + expect(ingress.getLoadBalancers()).toEqual(["10.0.0.27", "localhost"]); + }); +}); + describe("computeRuleDeclarations", () => { it("given no tls field, should format links as http://", () => { const ingress = new Ingress({ diff --git a/src/common/k8s-api/endpoints/ingress.api.ts b/src/common/k8s-api/endpoints/ingress.api.ts index 4b9c044b0a..0391171e3a 100644 --- a/src/common/k8s-api/endpoints/ingress.api.ts +++ b/src/common/k8s-api/endpoints/ingress.api.ts @@ -136,7 +136,7 @@ export interface IngressSpec { export interface IngressStatus { loadBalancer: { - ingress: ILoadBalancerIngress[]; + ingress?: ILoadBalancerIngress[]; }; } @@ -199,7 +199,7 @@ export class Ingress extends KubeObject ( + return this.status?.loadBalancer?.ingress?.map(address => ( address.hostname || address.ip )) ?? []; } From fa23b5cd3f53e462718dc6045ca4645adf4f4f8d Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Wed, 22 Jun 2022 15:37:13 +0300 Subject: [PATCH 002/248] Fix download percentages not updating in tray (#5697) Co-authored-by: Mikko Aspiala Signed-off-by: Janne Savolainen --- .../installing-update-using-tray.test.ts | 31 ++++++++----------- .../electron-tray/electron-tray.injectable.ts | 13 ++++++-- .../reactive-tray-menu-items/converters.ts | 10 +++--- .../reactive-tray-menu-items.injectable.ts | 26 ++++++++++++---- .../test-utils/get-application-builder.tsx | 26 ++++++++++------ 5 files changed, 66 insertions(+), 40 deletions(-) diff --git a/src/behaviours/application-update/installing-update-using-tray.test.ts b/src/behaviours/application-update/installing-update-using-tray.test.ts index 0cf326d79d..f0e46b448f 100644 --- a/src/behaviours/application-update/installing-update-using-tray.test.ts +++ b/src/behaviours/application-update/installing-update-using-tray.test.ts @@ -14,7 +14,6 @@ import asyncFn from "@async-fn/jest"; import type { DownloadPlatformUpdate } from "../../main/application-update/download-platform-update/download-platform-update.injectable"; import downloadPlatformUpdateInjectable from "../../main/application-update/download-platform-update/download-platform-update.injectable"; import showApplicationWindowInjectable from "../../main/start-main-application/lens-window/show-application-window.injectable"; -import progressOfUpdateDownloadInjectable from "../../common/application-update/progress-of-update-download/progress-of-update-download.injectable"; import type { TrayIconPaths } from "../../main/tray/tray-icon-path.injectable"; import trayIconPathsInjectable from "../../main/tray/tray-icon-path.injectable"; @@ -87,13 +86,13 @@ describe("installing update using tray", () => { it("user cannot check for updates again", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.enabled.get(), + applicationBuilder.tray.get("check-for-updates")?.enabled, ).toBe(false); }); it("name of tray item for checking updates indicates that checking is happening", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.label?.get(), + applicationBuilder.tray.get("check-for-updates")?.label, ).toBe("Checking for updates..."); }); @@ -128,13 +127,13 @@ describe("installing update using tray", () => { it("user can check for updates again", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.enabled.get(), + applicationBuilder.tray.get("check-for-updates")?.enabled, ).toBe(true); }); it("name of tray item for checking updates no longer indicates that checking is happening", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.label?.get(), + applicationBuilder.tray.get("check-for-updates")?.label, ).toBe("Check for updates"); }); @@ -163,25 +162,21 @@ describe("installing update using tray", () => { it("user cannot check for updates again yet", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.enabled.get(), + applicationBuilder.tray.get("check-for-updates")?.enabled, ).toBe(false); }); it("name of tray item for checking updates indicates that downloading is happening", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.label?.get(), + applicationBuilder.tray.get("check-for-updates")?.label, ).toBe("Downloading update some-version (0%)..."); }); it("when download progresses with decimals, percentage increases as integers", () => { - const progressOfUpdateDownload = applicationBuilder.dis.mainDi.inject( - progressOfUpdateDownloadInjectable, - ); - - progressOfUpdateDownload.set({ percentage: 42.424242 }); + downloadPlatformUpdateMock.mock.calls[0][0]({ percentage: 42.424242 }); expect( - applicationBuilder.tray.get("check-for-updates")?.label?.get(), + applicationBuilder.tray.get("check-for-updates")?.label, ).toBe("Downloading update some-version (42%)..."); }); @@ -210,13 +205,13 @@ describe("installing update using tray", () => { it("user can check for updates again", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.enabled.get(), + applicationBuilder.tray.get("check-for-updates")?.enabled, ).toBe(true); }); it("name of tray item for checking updates no longer indicates that downloading is happening", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.label?.get(), + applicationBuilder.tray.get("check-for-updates")?.label, ).toBe("Check for updates"); }); @@ -232,7 +227,7 @@ describe("installing update using tray", () => { it("user can install update", () => { expect( - applicationBuilder.tray.get("install-update")?.label?.get(), + applicationBuilder.tray.get("install-update")?.label, ).toBe("Install update some-version"); }); @@ -242,13 +237,13 @@ describe("installing update using tray", () => { it("user can check for updates again", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.enabled.get(), + applicationBuilder.tray.get("check-for-updates")?.enabled, ).toBe(true); }); it("name of tray item for checking updates no longer indicates that downloading is happening", () => { expect( - applicationBuilder.tray.get("check-for-updates")?.label?.get(), + applicationBuilder.tray.get("check-for-updates")?.label, ).toBe("Check for updates"); }); diff --git a/src/main/tray/electron-tray/electron-tray.injectable.ts b/src/main/tray/electron-tray/electron-tray.injectable.ts index a96104f047..d7547ca57a 100644 --- a/src/main/tray/electron-tray/electron-tray.injectable.ts +++ b/src/main/tray/electron-tray/electron-tray.injectable.ts @@ -9,15 +9,24 @@ import showApplicationWindowInjectable from "../../start-main-application/lens-w import isWindowsInjectable from "../../../common/vars/is-windows.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import trayIconPathsInjectable from "../tray-icon-path.injectable"; -import type { TrayMenuItem } from "../tray-menu-item/tray-menu-item-injection-token"; import { convertToElectronMenuTemplate } from "../reactive-tray-menu-items/converters"; const TRAY_LOG_PREFIX = "[TRAY]"; +export interface MinimalTrayMenuItem { + id: string; + parentId: string | null; + enabled: boolean; + label?: string; + click?: () => Promise | void; + tooltip?: string; + separator?: boolean; +} + export interface ElectronTray { start(): void; stop(): void; - setMenuItems(menuItems: TrayMenuItem[]): void; + setMenuItems(menuItems: MinimalTrayMenuItem[]): void; setIconPath(iconPath: string): void; } diff --git a/src/main/tray/reactive-tray-menu-items/converters.ts b/src/main/tray/reactive-tray-menu-items/converters.ts index 42add7481e..a3007ee045 100644 --- a/src/main/tray/reactive-tray-menu-items/converters.ts +++ b/src/main/tray/reactive-tray-menu-items/converters.ts @@ -2,13 +2,13 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { TrayMenuItem } from "../tray-menu-item/tray-menu-item-injection-token"; +import type { MinimalTrayMenuItem } from "../electron-tray/electron-tray.injectable"; -export function convertToElectronMenuTemplate(trayMenuItems: TrayMenuItem[]): Electron.MenuItemConstructorOptions[] { +export function convertToElectronMenuTemplate(trayMenuItems: MinimalTrayMenuItem[]): Electron.MenuItemConstructorOptions[] { const toTrayMenuOptions = (parentId: string | null) => ( trayMenuItems .filter((item) => item.parentId === parentId) - .map((trayMenuItem: TrayMenuItem): Electron.MenuItemConstructorOptions => { + .map((trayMenuItem): Electron.MenuItemConstructorOptions => { if (trayMenuItem.separator) { return { id: trayMenuItem.id, type: "separator" }; } @@ -17,8 +17,8 @@ export function convertToElectronMenuTemplate(trayMenuItems: TrayMenuItem[]): El return { id: trayMenuItem.id, - label: trayMenuItem.label?.get(), - enabled: trayMenuItem.enabled.get(), + label: trayMenuItem.label, + enabled: trayMenuItem.enabled, toolTip: trayMenuItem.tooltip, ...(childItems.length === 0 diff --git a/src/main/tray/reactive-tray-menu-items/reactive-tray-menu-items.injectable.ts b/src/main/tray/reactive-tray-menu-items/reactive-tray-menu-items.injectable.ts index 22c3d29399..145cc1e870 100644 --- a/src/main/tray/reactive-tray-menu-items/reactive-tray-menu-items.injectable.ts +++ b/src/main/tray/reactive-tray-menu-items/reactive-tray-menu-items.injectable.ts @@ -5,26 +5,40 @@ import { getInjectable } from "@ogre-tools/injectable"; import { getStartableStoppable } from "../../../common/utils/get-startable-stoppable"; import { reaction } from "mobx"; +import type { MinimalTrayMenuItem } from "../electron-tray/electron-tray.injectable"; import electronTrayInjectable from "../electron-tray/electron-tray.injectable"; import trayMenuItemsInjectable from "../tray-menu-item/tray-menu-items.injectable"; +import type { TrayMenuItem } from "../tray-menu-item/tray-menu-item-injection-token"; const reactiveTrayMenuItemsInjectable = getInjectable({ id: "reactive-tray-menu-items", instantiate: (di) => { const electronTray = di.inject(electronTrayInjectable); - const trayMenuItems = di.inject(trayMenuItemsInjectable); + const reactiveItems = di.inject(trayMenuItemsInjectable); - return getStartableStoppable("reactive-tray-menu-items", () => ( + return getStartableStoppable("reactive-tray-menu-items", () => reaction( - () => trayMenuItems.get(), - electronTray.setMenuItems, + (): MinimalTrayMenuItem[] => reactiveItems.get().map(toNonReactiveItem), + + (nonReactiveItems) => electronTray.setMenuItems(nonReactiveItems), + { fireImmediately: true, }, - ) - )); + ), + ); }, }); export default reactiveTrayMenuItemsInjectable; + +const toNonReactiveItem = (item: TrayMenuItem): MinimalTrayMenuItem => ({ + id: item.id, + parentId: item.parentId, + click: item.click, + tooltip: item.tooltip, + separator: item.separator, + enabled: item.enabled.get(), + label: item.label?.get(), +}); diff --git a/src/renderer/components/test-utils/get-application-builder.tsx b/src/renderer/components/test-utils/get-application-builder.tsx index 42401e1288..0274bb7d6d 100644 --- a/src/renderer/components/test-utils/get-application-builder.tsx +++ b/src/renderer/components/test-utils/get-application-builder.tsx @@ -23,7 +23,7 @@ import type { ClusterStore } from "../../../common/cluster-store/cluster-store"; import mainExtensionsInjectable from "../../../extensions/main-extensions.injectable"; import currentRouteComponentInjectable from "../../routes/current-route-component.injectable"; import { pipeline } from "@ogre-tools/fp"; -import { flatMap, compact, join, get, filter, map, matches } from "lodash/fp"; +import { flatMap, compact, join, get, filter, map, matches, last } from "lodash/fp"; import preferenceNavigationItemsInjectable from "../+preferences/preferences-navigation/preference-navigation-items.injectable"; import navigateToPreferencesInjectable from "../../../common/front-end-routing/routes/preferences/navigate-to-preferences.injectable"; import type { MenuItemOpts } from "../../../main/menu/application-menu-items.injectable"; @@ -41,6 +41,7 @@ import startFrameInjectable from "../../start-frame/start-frame.injectable"; import type { NamespaceStore } from "../+namespaces/store"; import namespaceStoreInjectable from "../+namespaces/store.injectable"; import historyInjectable from "../../navigation/history.injectable"; +import type { MinimalTrayMenuItem } from "../../../main/tray/electron-tray/electron-tray.injectable"; import electronTrayInjectable from "../../../main/tray/electron-tray/electron-tray.injectable"; import applicationWindowInjectable from "../../../main/start-main-application/lens-window/application-window/application-window.injectable"; import { Notifications } from "../notifications/notifications"; @@ -48,7 +49,6 @@ import broadcastThatRootFrameIsRenderedInjectable from "../../frames/root-frame/ import { getDiForUnitTesting as getRendererDi } from "../../getDiForUnitTesting"; import { getDiForUnitTesting as getMainDi } from "../../../main/getDiForUnitTesting"; import { overrideChannels } from "../../../test-utils/channel-fakes/override-channels"; -import type { TrayMenuItem } from "../../../main/tray/tray-menu-item/tray-menu-item-injection-token"; import trayIconPathsInjectable from "../../../main/tray/tray-icon-path.injectable"; import assert from "assert"; import { openMenu } from "react-select-event"; @@ -59,7 +59,6 @@ import type { Route } from "../../../common/front-end-routing/front-end-route-in import type { NavigateToRouteOptions } from "../../../common/front-end-routing/navigate-to-route-injection-token"; import { navigateToRouteInjectionToken } from "../../../common/front-end-routing/navigate-to-route-injection-token"; import type { LensMainExtension } from "../../../extensions/lens-main-extension"; -import trayMenuItemsInjectable from "../../../main/tray/tray-menu-item/tray-menu-items.injectable"; import type { LensExtension } from "../../../extensions/lens-extension"; import extensionInjectable from "../../../extensions/extension-loader/extension/extension.injectable"; @@ -92,7 +91,7 @@ export interface ApplicationBuilder { tray: { click: (id: string) => Promise; - get: (id: string) => TrayMenuItem | null; + get: (id: string) => MinimalTrayMenuItem | null; getIconPath: () => string; }; @@ -207,6 +206,8 @@ export const getApplicationBuilder = () => { let trayMenuIconPath: string; + const traySetMenuItemsMock = jest.fn(); + mainDi.override(electronTrayInjectable, () => ({ start: () => { const iconPaths = mainDi.inject(trayIconPathsInjectable); @@ -214,7 +215,7 @@ export const getApplicationBuilder = () => { trayMenuIconPath = iconPaths.normal; }, stop: () => {}, - setMenuItems: () => {}, + setMenuItems: traySetMenuItemsMock, setIconPath: (path) => { trayMenuIconPath = path; }, @@ -293,14 +294,21 @@ export const getApplicationBuilder = () => { tray: { get: (id: string) => { - const trayMenuItems = mainDi.inject(trayMenuItemsInjectable).get(); + const lastCall = last(traySetMenuItemsMock.mock.calls); - return trayMenuItems.find(matches({ id })) ?? null; + assert(lastCall); + + return lastCall[0].find(matches({ id })) ?? null; }, + getIconPath: () => trayMenuIconPath, click: async (id: string) => { - const trayMenuItems = mainDi.inject(trayMenuItemsInjectable).get(); + const lastCall = last(traySetMenuItemsMock.mock.calls); + + assert(lastCall); + + const trayMenuItems = lastCall[0]; const menuItem = trayMenuItems.find(matches({ id })) ?? null; @@ -315,7 +323,7 @@ export const getApplicationBuilder = () => { throw new Error(`Tried to click tray menu item with ID ${id} which does not exist. Available IDs are: "${availableIds}"`); } - if (!menuItem.enabled.get()) { + if (!menuItem.enabled) { throw new Error(`Tried to click tray menu item with ID ${id} which is disabled.`); } From 71427da02db2e8445675a865e37d7fefa37263ca Mon Sep 17 00:00:00 2001 From: Iku-turso Date: Wed, 22 Jun 2022 16:09:24 +0300 Subject: [PATCH 003/248] Helper to resolve proxy from URL in any environment, or using extension-API (#5690) * Permit modular directory structures for behaviours in spirit of "Screaming Architecture" Co-authored-by: Janne Savolainen Signed-off-by: Iku-turso * Implement env-agnostic helper to resolve proxy from URL Co-authored-by: Janne Savolainen Signed-off-by: Iku-turso * Implement way to resolve a proxy, that is not reliant on existing windows Co-authored-by: Janne Savolainen Signed-off-by: Iku-turso * Restore reliancy on existing windows for resolving proxy for fears of Electron events misbehaving because of a temp-window used in case no windows are open Co-authored-by: Janne Savolainen Signed-off-by: Iku-turso * Make resolving a proxy throw if no browser window is available Co-authored-by: Janne Savolainen Signed-off-by: Iku-turso * Extract minimal abstraction for specifically logging error instead of also warn, info, etc. Co-authored-by: Janne Savolainen Signed-off-by: Iku-turso * Make decorator for error logging not create orphan promise for easier controllability Co-authored-by: Janne Savolainen Signed-off-by: Iku-turso * Add error logging to resolving of proxy Co-authored-by: Janne Savolainen Signed-off-by: Iku-turso * Expose resolving of proxy in extension-API Co-authored-by: Janne Savolainen Signed-off-by: Iku-turso * Add missing general override Co-authored-by: Janne Savolainen Signed-off-by: Iku-turso * Add test to add documentation Co-authored-by: Janne Savolainen Signed-off-by: Iku-turso * Disperse implementation of resolve-proxy back to conventional directory structure instead of an experimental one Co-authored-by: Janne Savolainen Signed-off-by: Iku-turso * Revert "Permit modular directory structures for behaviours in spirit of "Screaming Architecture"" This reverts commit 75e1231b0e61b74d030d12365352226e7f1ce500. Co-authored-by: Janne Savolainen Signed-off-by: Iku-turso * Rename a helper for less ambiguity Co-authored-by: Janne Savolainen Signed-off-by: Iku-turso * Add tsdoc for "resolveSystemProxy" exposed in Extension-API Co-authored-by: Janne Savolainen Signed-off-by: Iku-turso --- .../resolve-system-proxy.test.ts | 85 +++++++++++ src/common/log-error.injectable.ts | 13 ++ ...resolve-system-proxy-channel.injectable.ts | 21 +++ .../resolve-system-proxy-injection-token.ts | 12 ++ .../with-error-logging.injectable.ts | 32 ++-- .../with-error-logging.test.ts | 28 ++-- src/extensions/common-api/index.ts | 3 + src/extensions/common-api/proxy.ts | 14 ++ src/main/getDiForUnitTesting.ts | 2 + .../electron.injectable.ts | 14 ++ ...stem-proxy-channel-responder.injectable.ts | 21 +++ ...e-system-proxy-from-electron.injectable.ts | 32 ++++ ...resolve-system-proxy-from-electron.test.ts | 138 ++++++++++++++++++ .../resolve-system-proxy.injectable.ts | 21 +++ .../resolve-system-proxy.injectable.ts | 23 +++ 15 files changed, 432 insertions(+), 27 deletions(-) create mode 100644 src/behaviours/resolve-system-proxy/resolve-system-proxy.test.ts create mode 100644 src/common/log-error.injectable.ts create mode 100644 src/common/utils/resolve-system-proxy/resolve-system-proxy-channel.injectable.ts create mode 100644 src/common/utils/resolve-system-proxy/resolve-system-proxy-injection-token.ts create mode 100644 src/extensions/common-api/proxy.ts create mode 100644 src/main/utils/resolve-system-proxy/electron.injectable.ts create mode 100644 src/main/utils/resolve-system-proxy/resolve-system-proxy-channel-responder.injectable.ts create mode 100644 src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.injectable.ts create mode 100644 src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.test.ts create mode 100644 src/main/utils/resolve-system-proxy/resolve-system-proxy.injectable.ts create mode 100644 src/renderer/utils/resolve-proxy/resolve-system-proxy.injectable.ts diff --git a/src/behaviours/resolve-system-proxy/resolve-system-proxy.test.ts b/src/behaviours/resolve-system-proxy/resolve-system-proxy.test.ts new file mode 100644 index 0000000000..a78aa0dd68 --- /dev/null +++ b/src/behaviours/resolve-system-proxy/resolve-system-proxy.test.ts @@ -0,0 +1,85 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import type { AsyncFnMock } from "@async-fn/jest"; +import asyncFn from "@async-fn/jest"; +import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; +import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; +import type { ResolveSystemProxy } from "../../common/utils/resolve-system-proxy/resolve-system-proxy-injection-token"; +import { resolveSystemProxyInjectionToken } from "../../common/utils/resolve-system-proxy/resolve-system-proxy-injection-token"; +import resolveSystemProxyFromElectronInjectable from "../../main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.injectable"; +import { getPromiseStatus } from "../../common/test-utils/get-promise-status"; + +describe("resolve-system-proxy", () => { + let applicationBuilder: ApplicationBuilder; + let actualPromise: Promise; + let resolveSystemProxyFromElectronMock: AsyncFnMock; + + beforeEach(async () => { + applicationBuilder = getApplicationBuilder(); + + resolveSystemProxyFromElectronMock = asyncFn(); + + applicationBuilder.beforeApplicationStart(({ mainDi }) => { + mainDi.override( + resolveSystemProxyFromElectronInjectable, + () => resolveSystemProxyFromElectronMock, + ); + }); + + await applicationBuilder.render(); + }); + + describe("given in main, when called with URL", () => { + beforeEach(async () => { + const resolveSystemProxyInMain = applicationBuilder.dis.mainDi.inject( + resolveSystemProxyInjectionToken, + ); + + actualPromise = resolveSystemProxyInMain("some-url"); + }); + + it("calls for proxy of the URL from Electron", () => { + expect(resolveSystemProxyFromElectronMock).toHaveBeenCalledWith("some-url"); + }); + + it("does not resolve yet", async () => { + const promiseStatus = await getPromiseStatus(actualPromise); + + expect(promiseStatus.fulfilled).toBe(false); + }); + + it("when the call for proxy resolves, resolves with the proxy", async () => { + resolveSystemProxyFromElectronMock.resolve("some-proxy"); + + expect(await actualPromise).toBe("some-proxy"); + }); + }); + + describe("given in renderer, when called with URL", () => { + beforeEach(async () => { + const resolveSystemProxyInRenderer = applicationBuilder.dis.rendererDi.inject( + resolveSystemProxyInjectionToken, + ); + + actualPromise = resolveSystemProxyInRenderer("some-url"); + }); + + it("calls for proxy of the URL from Electron", () => { + expect(resolveSystemProxyFromElectronMock).toHaveBeenCalledWith("some-url"); + }); + + it("does not resolve yet", async () => { + const promiseStatus = await getPromiseStatus(actualPromise); + + expect(promiseStatus.fulfilled).toBe(false); + }); + + it("when the call for proxy resolves, resolves with the proxy", async () => { + resolveSystemProxyFromElectronMock.resolve("some-proxy"); + + expect(await actualPromise).toBe("some-proxy"); + }); + }); +}); diff --git a/src/common/log-error.injectable.ts b/src/common/log-error.injectable.ts new file mode 100644 index 0000000000..4fab2cd546 --- /dev/null +++ b/src/common/log-error.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 loggerInjectable from "./logger.injectable"; + +const logErrorInjectable = getInjectable({ + id: "log-error", + instantiate: (di) => di.inject(loggerInjectable).error, +}); + +export default logErrorInjectable; diff --git a/src/common/utils/resolve-system-proxy/resolve-system-proxy-channel.injectable.ts b/src/common/utils/resolve-system-proxy/resolve-system-proxy-channel.injectable.ts new file mode 100644 index 0000000000..5dd17ddc6a --- /dev/null +++ b/src/common/utils/resolve-system-proxy/resolve-system-proxy-channel.injectable.ts @@ -0,0 +1,21 @@ +/** + * 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 { RequestChannel } from "../channel/request-channel-injection-token"; +import { requestChannelInjectionToken } from "../channel/request-channel-injection-token"; + +export type ResolveSystemProxyChannel = RequestChannel; + +const resolveSystemProxyChannelInjectable = getInjectable({ + id: "resolve-system-proxy-channel", + + instantiate: (): ResolveSystemProxyChannel => ({ + id: "resolve-system-proxy-channel", + }), + + injectionToken: requestChannelInjectionToken, +}); + +export default resolveSystemProxyChannelInjectable; diff --git a/src/common/utils/resolve-system-proxy/resolve-system-proxy-injection-token.ts b/src/common/utils/resolve-system-proxy/resolve-system-proxy-injection-token.ts new file mode 100644 index 0000000000..616718ea98 --- /dev/null +++ b/src/common/utils/resolve-system-proxy/resolve-system-proxy-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"; + +export type ResolveSystemProxy = (url: string) => Promise; + +export const resolveSystemProxyInjectionToken = getInjectionToken({ + id: "resolve-system-proxy", +}); diff --git a/src/common/utils/with-error-logging/with-error-logging.injectable.ts b/src/common/utils/with-error-logging/with-error-logging.injectable.ts index 12b48c6204..0aaca9f97d 100644 --- a/src/common/utils/with-error-logging/with-error-logging.injectable.ts +++ b/src/common/utils/with-error-logging/with-error-logging.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import loggerInjectable from "../../logger.injectable"; +import logErrorInjectable from "../../log-error.injectable"; import { isPromise } from "../is-promise/is-promise"; export type WithErrorLoggingFor = ( @@ -16,30 +16,34 @@ const withErrorLoggingInjectable = getInjectable({ id: "with-error-logging", instantiate: (di): WithErrorLoggingFor => { - const logger = di.inject(loggerInjectable); + const logError = di.inject(logErrorInjectable); return (getErrorMessage) => (toBeDecorated) => (...args) => { + let returnValue: ReturnType; + try { - const returnValue = toBeDecorated(...args); - - if (isPromise(returnValue)) { - returnValue.catch((e) => { - const errorMessage = getErrorMessage(e); - - logger.error(errorMessage, e); - }); - } - - return returnValue; + returnValue = toBeDecorated(...args); } catch (e) { const errorMessage = getErrorMessage(e); - logger.error(errorMessage, e); + logError(errorMessage, e); throw e; } + + if (isPromise(returnValue)) { + return returnValue.catch((e: unknown) => { + const errorMessage = getErrorMessage(e); + + logError(errorMessage, e); + + throw e; + }); + } + + return returnValue; }; }, }); diff --git a/src/common/utils/with-error-logging/with-error-logging.test.ts b/src/common/utils/with-error-logging/with-error-logging.test.ts index 533374d9ad..05526c64c9 100644 --- a/src/common/utils/with-error-logging/with-error-logging.test.ts +++ b/src/common/utils/with-error-logging/with-error-logging.test.ts @@ -163,23 +163,24 @@ describe("with-error-logging", () => { }); describe("when call rejects with error instance", () => { - let error: Error; - - beforeEach(async () => { - try { - await toBeDecorated.reject(new Error("some-error")); - await returnValuePromise; - } catch (e) { - error = e as Error; - } + beforeEach(() => { + toBeDecorated.reject(new Error("some-error")); }); - it("logs the error", () => { + it("logs the error", async () => { + let error: unknown; + + try { + await returnValuePromise; + } catch (e) { + error = e; + } + expect(loggerStub.error).toHaveBeenCalledWith("some-error-message-for-some-error", error); }); it("rejects", () => { - return expect(() => returnValuePromise).rejects.toThrow("some-error"); + return expect(returnValuePromise).rejects.toThrow("some-error"); }); }); @@ -187,8 +188,9 @@ describe("with-error-logging", () => { let error: unknown; beforeEach(async () => { + toBeDecorated.reject({ someProperty: "some-rejection" }); + try { - await toBeDecorated.reject({ someProperty: "some-rejection" }); await returnValuePromise; } catch (e) { error = e; @@ -203,7 +205,7 @@ describe("with-error-logging", () => { }); it("rejects", () => { - return expect(() => returnValuePromise).rejects.toEqual({ someProperty: "some-rejection" }); + return expect(returnValuePromise).rejects.toEqual({ someProperty: "some-rejection" }); }); }); diff --git a/src/extensions/common-api/index.ts b/src/extensions/common-api/index.ts index e3c789c864..0d07220d1d 100644 --- a/src/extensions/common-api/index.ts +++ b/src/extensions/common-api/index.ts @@ -10,6 +10,8 @@ import * as Store from "./stores"; import * as Util from "./utils"; import * as Catalog from "./catalog"; import * as Types from "./types"; +import * as Proxy from "./proxy"; + import logger from "../../common/logger"; export { @@ -20,4 +22,5 @@ export { Types, Util, logger, + Proxy, }; diff --git a/src/extensions/common-api/proxy.ts b/src/extensions/common-api/proxy.ts new file mode 100644 index 0000000000..bf0cd8e626 --- /dev/null +++ b/src/extensions/common-api/proxy.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 { asLegacyGlobalFunctionForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-function-for-extension-api"; +import { resolveSystemProxyInjectionToken } from "../../common/utils/resolve-system-proxy/resolve-system-proxy-injection-token"; + +/** + * Resolves URL-specific proxy information from system. See more here: https://www.electronjs.org/docs/latest/api/session#sesresolveproxyurl + * @param url - The URL for proxy information + * @returns Promise for proxy information as string + */ +export const resolveSystemProxy = asLegacyGlobalFunctionForExtensionApi(resolveSystemProxyInjectionToken); diff --git a/src/main/getDiForUnitTesting.ts b/src/main/getDiForUnitTesting.ts index f17a4e6217..36713d852d 100644 --- a/src/main/getDiForUnitTesting.ts +++ b/src/main/getDiForUnitTesting.ts @@ -99,6 +99,7 @@ import rollbackHelmReleaseInjectable from "./helm/helm-service/rollback-helm-rel import updateHelmReleaseInjectable from "./helm/helm-service/update-helm-release.injectable"; import waitUntilBundledExtensionsAreLoadedInjectable from "./start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable"; import { registerMobX } from "@ogre-tools/injectable-extension-for-mobx"; +import electronInjectable from "./utils/resolve-system-proxy/electron.injectable"; export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {}) { const { @@ -124,6 +125,7 @@ export function getDiForUnitTesting(opts: { doGeneralOverrides?: boolean } = {}) di.preventSideEffects(); if (doGeneralOverrides) { + di.override(electronInjectable, () => ({})); di.override(waitUntilBundledExtensionsAreLoadedInjectable, () => async () => {}); di.override(getRandomIdInjectable, () => () => "some-irrelevant-random-id"); di.override(hotbarStoreInjectable, () => ({ load: () => {} })); diff --git a/src/main/utils/resolve-system-proxy/electron.injectable.ts b/src/main/utils/resolve-system-proxy/electron.injectable.ts new file mode 100644 index 0000000000..a5999c9e59 --- /dev/null +++ b/src/main/utils/resolve-system-proxy/electron.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 { getInjectable } from "@ogre-tools/injectable"; +import electron from "electron"; + +const electronInjectable = getInjectable({ + id: "electron", + instantiate: () => electron, + causesSideEffects: true, +}); + +export default electronInjectable; diff --git a/src/main/utils/resolve-system-proxy/resolve-system-proxy-channel-responder.injectable.ts b/src/main/utils/resolve-system-proxy/resolve-system-proxy-channel-responder.injectable.ts new file mode 100644 index 0000000000..c7a1747770 --- /dev/null +++ b/src/main/utils/resolve-system-proxy/resolve-system-proxy-channel-responder.injectable.ts @@ -0,0 +1,21 @@ +/** + * 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 resolveSystemProxyChannelInjectable from "../../../common/utils/resolve-system-proxy/resolve-system-proxy-channel.injectable"; +import resolveSystemProxyInjectable from "./resolve-system-proxy.injectable"; +import { requestChannelListenerInjectionToken } from "../../../common/utils/channel/request-channel-listener-injection-token"; + +const resolveSystemProxyChannelResponderInjectable = getInjectable({ + id: "resolve-system-proxy-channel-responder", + + instantiate: (di) => ({ + channel: di.inject(resolveSystemProxyChannelInjectable), + handler: di.inject(resolveSystemProxyInjectable), + }), + + injectionToken: requestChannelListenerInjectionToken, +}); + +export default resolveSystemProxyChannelResponderInjectable; diff --git a/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.injectable.ts b/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.injectable.ts new file mode 100644 index 0000000000..c663d59fde --- /dev/null +++ b/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.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 { getInjectable } from "@ogre-tools/injectable"; +import electronInjectable from "./electron.injectable"; +import withErrorLoggingInjectable from "../../../common/utils/with-error-logging/with-error-logging.injectable"; + +const resolveSystemProxyFromElectronInjectable = getInjectable({ + id: "resolve-system-proxy-from-electron", + + instantiate: (di) => { + const electron = di.inject(electronInjectable); + const withErrorLoggingFor = di.inject(withErrorLoggingInjectable); + + const withErrorLogging = withErrorLoggingFor(() => "Error resolving proxy"); + + return withErrorLogging(async (url: string) => { + const webContent = electron.webContents + .getAllWebContents() + .find((x) => !x.isDestroyed()); + + if (!webContent) { + throw new Error(`Tried to resolve proxy for "${url}", but no browser window was available`); + } + + return await webContent.session.resolveProxy(url); + }); + }, +}); + +export default resolveSystemProxyFromElectronInjectable; diff --git a/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.test.ts b/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.test.ts new file mode 100644 index 0000000000..9c395dca5b --- /dev/null +++ b/src/main/utils/resolve-system-proxy/resolve-system-proxy-from-electron.test.ts @@ -0,0 +1,138 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import { getDiForUnitTesting } from "../../getDiForUnitTesting"; +import resolveSystemProxyFromElectronInjectable from "./resolve-system-proxy-from-electron.injectable"; +import electronInjectable from "./electron.injectable"; +import type { AsyncFnMock } from "@async-fn/jest"; +import asyncFn from "@async-fn/jest"; +import type electron from "electron"; +import { getPromiseStatus } from "../../../common/test-utils/get-promise-status"; +import logErrorInjectable from "../../../common/log-error.injectable"; +import type { DiContainer } from "@ogre-tools/injectable"; + +describe("technical: resolve-system-proxy-from-electron", () => { + let resolveSystemProxyMock: AsyncFnMock<(url: string) => Promise>; + let logErrorMock: jest.Mock; + let di: DiContainer; + let actualPromise: Promise; + + beforeEach(() => { + di = getDiForUnitTesting(); + + logErrorMock = jest.fn(); + di.override(logErrorInjectable, () => logErrorMock); + }); + + describe("given there are non-destroyed Lens windows, when called with URL", () => { + beforeEach(() => { + resolveSystemProxyMock = asyncFn(); + + di.override( + electronInjectable, + + () => + ({ + webContents: { + getAllWebContents: () => [ + { + isDestroyed: () => true, + + session: { + resolveProxy: () => { + throw new Error("should never come here"); + }, + }, + }, + + { + isDestroyed: () => false, + session: { resolveProxy: resolveSystemProxyMock }, + }, + + { + isDestroyed: () => false, + + session: { + resolveProxy: () => { + throw new Error("should never come here"); + }, + }, + }, + ], + }, + } as unknown as typeof electron), + ); + + const resolveSystemProxyFromElectron = di.inject( + resolveSystemProxyFromElectronInjectable, + ); + + actualPromise = resolveSystemProxyFromElectron("some-url"); + }); + + it("calls to resolve proxy from the first window", () => { + expect(resolveSystemProxyMock).toHaveBeenCalledWith("some-url"); + }); + + it("does not resolve yet", async () => { + const promiseStatus = await getPromiseStatus(actualPromise); + + expect(promiseStatus.fulfilled).toBe(false); + }); + + it("when call for proxy, resolves with the proxy", async () => { + resolveSystemProxyMock.resolve("some-proxy"); + + expect(await actualPromise).toBe("some-proxy"); + }); + }); + + describe("given there are only destroyed Lens windows, when called with URL", () => { + let error: any; + + beforeEach(async () => { + di.override( + electronInjectable, + () => + ({ + webContents: { + getAllWebContents: () => [ + { + isDestroyed: () => true, + + session: { + resolveProxy: () => { + throw new Error("should never come here"); + }, + }, + }, + ], + }, + } as unknown as typeof electron), + ); + + resolveSystemProxyMock = asyncFn(); + + const resolveSystemProxyFromElectron = di.inject( + resolveSystemProxyFromElectronInjectable, + ); + + try { + await resolveSystemProxyFromElectron("some-url"); + } catch (e) { + error = e; + } + }); + + it("throws error", () => { + expect(error.message).toBe('Tried to resolve proxy for "some-url", but no browser window was available'); + }); + + it("logs error", () => { + expect(logErrorMock).toHaveBeenCalledWith("Error resolving proxy", error); + }); + }); +}); diff --git a/src/main/utils/resolve-system-proxy/resolve-system-proxy.injectable.ts b/src/main/utils/resolve-system-proxy/resolve-system-proxy.injectable.ts new file mode 100644 index 0000000000..c683217916 --- /dev/null +++ b/src/main/utils/resolve-system-proxy/resolve-system-proxy.injectable.ts @@ -0,0 +1,21 @@ +/** + * 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 { resolveSystemProxyInjectionToken } from "../../../common/utils/resolve-system-proxy/resolve-system-proxy-injection-token"; +import resolveSystemProxyFromElectronInjectable from "./resolve-system-proxy-from-electron.injectable"; + +const resolveSystemProxyInjectable = getInjectable({ + id: "resolve-system-proxy-for-main", + + instantiate: (di) => { + const resolveSystemProxyFromElectron = di.inject(resolveSystemProxyFromElectronInjectable); + + return (url) => resolveSystemProxyFromElectron(url); + }, + + injectionToken: resolveSystemProxyInjectionToken, +}); + +export default resolveSystemProxyInjectable; diff --git a/src/renderer/utils/resolve-proxy/resolve-system-proxy.injectable.ts b/src/renderer/utils/resolve-proxy/resolve-system-proxy.injectable.ts new file mode 100644 index 0000000000..8fcb9063d0 --- /dev/null +++ b/src/renderer/utils/resolve-proxy/resolve-system-proxy.injectable.ts @@ -0,0 +1,23 @@ +/** + * 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 { resolveSystemProxyInjectionToken } from "../../../common/utils/resolve-system-proxy/resolve-system-proxy-injection-token"; +import requestFromChannelInjectable from "../channel/request-from-channel.injectable"; +import resolveSystemProxyChannelInjectable from "../../../common/utils/resolve-system-proxy/resolve-system-proxy-channel.injectable"; + +const resolveSystemProxyInjectable = getInjectable({ + id: "resolve-system-proxy-for-renderer", + + instantiate: (di) => { + const requestFromChannel = di.inject(requestFromChannelInjectable); + const resolveSystemProxyChannel = di.inject(resolveSystemProxyChannelInjectable); + + return async (url) => requestFromChannel(resolveSystemProxyChannel, url); + }, + + injectionToken: resolveSystemProxyInjectionToken, +}); + +export default resolveSystemProxyInjectable; From fc770b4b44fbd11d37733a8d4a8e47e287c31d09 Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Wed, 22 Jun 2022 16:48:09 +0300 Subject: [PATCH 004/248] Revert accidental breaking change (#5703) --- src/extensions/renderer-api/components.ts | 3 +++ src/renderer/components/notifications/index.ts | 1 - src/renderer/port-forward/port-forward-notify.tsx | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/extensions/renderer-api/components.ts b/src/extensions/renderer-api/components.ts index 6946a8aa66..83188c7d39 100644 --- a/src/extensions/renderer-api/components.ts +++ b/src/extensions/renderer-api/components.ts @@ -19,6 +19,7 @@ import { ConfirmDialog as _ConfirmDialog } from "../../renderer/components/confi import type { ConfirmDialogBooleanParams, ConfirmDialogParams, ConfirmDialogProps } from "../../renderer/components/confirm-dialog"; import openConfirmDialogInjectable from "../../renderer/components/confirm-dialog/open.injectable"; import confirmInjectable from "../../renderer/components/confirm-dialog/confirm.injectable"; +import notificationsStoreInjectable from "../../renderer/components/notifications/notifications-store.injectable"; // layouts export * from "../../renderer/components/layout/main-layout"; @@ -133,3 +134,5 @@ export class TerminalStore { console.warn("TerminalStore.resetInstance() does nothing"); } } + +export const notificationsStore = asLegacyGlobalForExtensionApi(notificationsStoreInjectable); diff --git a/src/renderer/components/notifications/index.ts b/src/renderer/components/notifications/index.ts index 9ae9345244..75f37ed5cf 100644 --- a/src/renderer/components/notifications/index.ts +++ b/src/renderer/components/notifications/index.ts @@ -4,4 +4,3 @@ */ export * from "./notifications"; -export * from "./notifications.store"; diff --git a/src/renderer/port-forward/port-forward-notify.tsx b/src/renderer/port-forward/port-forward-notify.tsx index 40dc295602..ed768ca13e 100644 --- a/src/renderer/port-forward/port-forward-notify.tsx +++ b/src/renderer/port-forward/port-forward-notify.tsx @@ -5,9 +5,9 @@ import React from "react"; import { Button } from "../components/button"; -import type { NotificationsStore } from "../components/notifications"; import { Notifications } from "../components/notifications"; import type { NavigateToPortForwards } from "../../common/front-end-routing/routes/cluster/network/port-forwards/navigate-to-port-forwards.injectable"; +import type { NotificationsStore } from "../components/notifications/notifications.store"; interface AboutPortForwardingDependencies { navigateToPortForwards: NavigateToPortForwards; From ab2f367fdd1b2061a33ea052fe097080ba52f23d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Jun 2022 15:43:05 -0400 Subject: [PATCH 005/248] Bump eslint from 8.17.0 to 8.18.0 (#5696) 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 75074300bb..3dfd913cd0 100644 --- a/package.json +++ b/package.json @@ -367,7 +367,7 @@ "electron-notarize": "^0.3.0", "esbuild": "^0.14.43", "esbuild-loader": "^2.19.0", - "eslint": "^8.17.0", + "eslint": "^8.18.0", "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.26.0", "eslint-plugin-react": "^7.30.0", diff --git a/yarn.lock b/yarn.lock index d8ee6d4e89..4353e5d694 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5558,10 +5558,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.17.0: - version "8.17.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.17.0.tgz#1cfc4b6b6912f77d24b874ca1506b0fe09328c21" - integrity sha512-gq0m0BTJfci60Fz4nczYxNAlED+sMcihltndR8t9t1evnU/azx53x3t2UHXC/uRjcbvRw/XctpaNygSTcQD+Iw== +eslint@^8.18.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.18.0.tgz#78d565d16c993d0b73968c523c0446b13da784fd" + integrity sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA== dependencies: "@eslint/eslintrc" "^1.3.0" "@humanwhocodes/config-array" "^0.9.2" From cdd511123b2f6059d2045bbdbc0d15abffd52fde Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Jun 2022 15:43:15 -0400 Subject: [PATCH 006/248] Bump tailwindcss from 3.1.3 to 3.1.4 (#5694) 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 3dfd913cd0..a5fb81feec 100644 --- a/package.json +++ b/package.json @@ -407,7 +407,7 @@ "sass-loader": "^12.6.0", "sharp": "^0.30.6", "style-loader": "^3.3.1", - "tailwindcss": "^3.1.3", + "tailwindcss": "^3.1.4", "tar-stream": "^2.2.0", "ts-loader": "^9.2.8", "ts-node": "^10.8.1", diff --git a/yarn.lock b/yarn.lock index 4353e5d694..60111d83eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12149,10 +12149,10 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -tailwindcss@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.1.3.tgz#b9ef2c1ae537c339679e8e89635af8e143d1c7eb" - integrity sha512-PRJNYdSIthrb8hjmAyymEyEN8Yo61TMXpzyFUpxULeeyRn3Y3gpvuw6FlRTKrJvK7thSGKRnhT36VovVx4WeMA== +tailwindcss@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.1.4.tgz#64b09059805505902139fa805d97046080bd90b9" + integrity sha512-NrxbFV4tYsga/hpWbRyUfIaBrNMXDxx5BsHgBS4v5tlyjf+sDsgBg5m9OxjrXIqAS/uR9kicxLKP+bEHI7BSeQ== dependencies: arg "^5.0.2" chokidar "^3.5.3" From b95ab425ba4b32c15e1a683fa77970e5ead6aa41 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Jun 2022 15:43:26 -0400 Subject: [PATCH 007/248] Bump @types/semver from 7.3.9 to 7.3.10 (#5693) 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 a5fb81feec..39688c6d1d 100644 --- a/package.json +++ b/package.json @@ -336,7 +336,7 @@ "@types/readable-stream": "^2.3.13", "@types/request": "^2.48.7", "@types/request-promise-native": "^1.0.18", - "@types/semver": "^7.3.9", + "@types/semver": "^7.3.10", "@types/sharp": "^0.30.4", "@types/spdy": "^3.4.5", "@types/tar": "^4.0.5", diff --git a/yarn.lock b/yarn.lock index 60111d83eb..104b4cf74f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2277,10 +2277,10 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.2.tgz#1a62f89525723dde24ba1b01b092bf5df8ad4d39" integrity sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew== -"@types/semver@^7.3.6", "@types/semver@^7.3.9": - version "7.3.9" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.9.tgz#152c6c20a7688c30b967ec1841d31ace569863fc" - integrity sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ== +"@types/semver@^7.3.10", "@types/semver@^7.3.6": + version "7.3.10" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.10.tgz#5f19ee40cbeff87d916eedc8c2bfe2305d957f73" + integrity sha512-zsv3fsC7S84NN6nPK06u79oWgrPVd0NvOyqgghV1haPaFcVxIrP4DLomRwGAXk0ui4HZA7mOcSFL98sMVW9viw== "@types/serve-index@^1.9.1": version "1.9.1" From 3e363d402f7476f30016a7faf4e7d0057825a445 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Jun 2022 14:52:13 -0400 Subject: [PATCH 008/248] Bump @typescript-eslint/parser from 5.28.0 to 5.29.0 (#5708) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 48 +++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 39688c6d1d..9b2150bcef 100644 --- a/package.json +++ b/package.json @@ -351,7 +351,7 @@ "@types/webpack-env": "^1.17.0", "@types/webpack-node-externals": "^2.5.3", "@typescript-eslint/eslint-plugin": "^5.28.0", - "@typescript-eslint/parser": "^5.28.0", + "@typescript-eslint/parser": "^5.29.0", "ansi_up": "^5.1.0", "chart.js": "^2.9.4", "circular-dependency-plugin": "^5.2.2", diff --git a/yarn.lock b/yarn.lock index 104b4cf74f..9c2ebf7b6a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2521,14 +2521,14 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/parser@^5.28.0": - version "5.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.28.0.tgz#639b101cad2bfb7ae16e69710ac95c42bd4eae33" - integrity sha512-ekqoNRNK1lAcKhZESN/PdpVsWbP9jtiNqzFWkp/yAUdZvJalw2heCYuqRmM5eUJSIYEkgq5sGOjq+ZqsLMjtRA== +"@typescript-eslint/parser@^5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.29.0.tgz#41314b195b34d44ff38220caa55f3f93cfca43cf" + integrity sha512-ruKWTv+x0OOxbzIw9nW5oWlUopvP/IQDjB5ZqmTglLIoDTctLlAJpAQFpNPJP/ZI7hTT9sARBosEfaKbcFuECw== dependencies: - "@typescript-eslint/scope-manager" "5.28.0" - "@typescript-eslint/types" "5.28.0" - "@typescript-eslint/typescript-estree" "5.28.0" + "@typescript-eslint/scope-manager" "5.29.0" + "@typescript-eslint/types" "5.29.0" + "@typescript-eslint/typescript-estree" "5.29.0" debug "^4.3.4" "@typescript-eslint/scope-manager@5.28.0": @@ -2539,6 +2539,14 @@ "@typescript-eslint/types" "5.28.0" "@typescript-eslint/visitor-keys" "5.28.0" +"@typescript-eslint/scope-manager@5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz#2a6a32e3416cb133e9af8dcf54bf077a916aeed3" + integrity sha512-etbXUT0FygFi2ihcxDZjz21LtC+Eps9V2xVx09zFoN44RRHPrkMflidGMI+2dUs821zR1tDS6Oc9IXxIjOUZwA== + dependencies: + "@typescript-eslint/types" "5.29.0" + "@typescript-eslint/visitor-keys" "5.29.0" + "@typescript-eslint/type-utils@5.28.0": version "5.28.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.28.0.tgz#53ccc78fdcf0205ef544d843b84104c0e9c7ca8e" @@ -2553,6 +2561,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.28.0.tgz#cffd9bcdce28db6daaa146e48a0be4387a6f4e9d" integrity sha512-2OOm8ZTOQxqkPbf+DAo8oc16sDlVR5owgJfKheBkxBKg1vAfw2JsSofH9+16VPlN9PWtv8Wzhklkqw3k/zCVxA== +"@typescript-eslint/types@5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.29.0.tgz#7861d3d288c031703b2d97bc113696b4d8c19aab" + integrity sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg== + "@typescript-eslint/typescript-estree@5.28.0": version "5.28.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.28.0.tgz#3487d158d091ca2772b285e67412ff6d9797d863" @@ -2566,6 +2579,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz#e83d19aa7fd2e74616aab2f25dfbe4de4f0b5577" + integrity sha512-mQvSUJ/JjGBdvo+1LwC+GY2XmSYjK1nAaVw2emp/E61wEVYEyibRHCqm1I1vEKbXCpUKuW4G7u9ZCaZhJbLoNQ== + dependencies: + "@typescript-eslint/types" "5.29.0" + "@typescript-eslint/visitor-keys" "5.29.0" + 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.28.0": version "5.28.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.28.0.tgz#b27a136eac300a48160b36d2aad0da44a1341b99" @@ -2586,6 +2612,14 @@ "@typescript-eslint/types" "5.28.0" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz#7a4749fa7ef5160c44a451bf060ac1dc6dfb77ee" + integrity sha512-Hpb/mCWsjILvikMQoZIE3voc9wtQcS0A9FUw3h8bhr9UxBdtI/tw1ZDZUOXHXLOVMedKCH5NxyzATwnU78bWCQ== + dependencies: + "@typescript-eslint/types" "5.29.0" + eslint-visitor-keys "^3.3.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From cdbd19ce04a01ca0ef5e758ab3b24085ea541692 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Jun 2022 14:52:55 -0400 Subject: [PATCH 009/248] Bump ts-loader from 9.3.0 to 9.3.1 (#5709) Bumps [ts-loader](https://github.com/TypeStrong/ts-loader) from 9.3.0 to 9.3.1. - [Release notes](https://github.com/TypeStrong/ts-loader/releases) - [Changelog](https://github.com/TypeStrong/ts-loader/blob/main/CHANGELOG.md) - [Commits](https://github.com/TypeStrong/ts-loader/compare/v9.3.0...v9.3.1) --- updated-dependencies: - dependency-name: ts-loader dependency-type: direct:development update-type: version-update:semver-patch ... 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 9b2150bcef..f215077104 100644 --- a/package.json +++ b/package.json @@ -409,7 +409,7 @@ "style-loader": "^3.3.1", "tailwindcss": "^3.1.4", "tar-stream": "^2.2.0", - "ts-loader": "^9.2.8", + "ts-loader": "^9.3.1", "ts-node": "^10.8.1", "type-fest": "^2.13.1", "typed-emitter": "^1.4.0", diff --git a/yarn.lock b/yarn.lock index 9c2ebf7b6a..e5bae04a03 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12520,10 +12520,10 @@ ts-essentials@^7.0.3: resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== -ts-loader@^9.2.8: - version "9.3.0" - resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.3.0.tgz#980f4dbfb60e517179e15e10ed98e454b132159f" - integrity sha512-2kLLAdAD+FCKijvGKi9sS0OzoqxLCF3CxHpok7rVgCZ5UldRzH0TkbwG9XECKjBzHsAewntC5oDaI/FwKzEUog== +ts-loader@^9.3.1: + version "9.3.1" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.3.1.tgz#fe25cca56e3e71c1087fe48dc67f4df8c59b22d4" + integrity sha512-OkyShkcZTsTwyS3Kt7a4rsT/t2qvEVQuKCTg4LJmpj9fhFR7ukGdZwV6Qq3tRUkqcXtfGpPR7+hFKHCG/0d3Lw== dependencies: chalk "^4.1.0" enhanced-resolve "^5.0.0" From 49e0a0286deeed426ecf2eb3cbd8249410a7ff1b Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Thu, 23 Jun 2022 22:14:26 +0300 Subject: [PATCH 010/248] release 5.6.0-alpha.4 (#5701) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f215077104..076ac4691a 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": "5.6.0-alpha.3", + "version": "5.6.0-alpha.4", "main": "static/build/main.js", "copyright": "© 2022 OpenLens Authors", "license": "MIT", From e7e3c3820ca15076441dd51cf61cc3b6347ed19b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Jun 2022 16:10:16 -0400 Subject: [PATCH 011/248] Bump esbuild from 0.14.43 to 0.14.47 (#5718) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 208 +++++++++++++++++++++++++-------------------------- 2 files changed, 105 insertions(+), 105 deletions(-) diff --git a/package.json b/package.json index 076ac4691a..d8887d9ba2 100644 --- a/package.json +++ b/package.json @@ -365,7 +365,7 @@ "electron": "^15.5.7", "electron-builder": "^23.0.3", "electron-notarize": "^0.3.0", - "esbuild": "^0.14.43", + "esbuild": "^0.14.47", "esbuild-loader": "^2.19.0", "eslint": "^8.18.0", "eslint-plugin-header": "^3.1.1", diff --git a/yarn.lock b/yarn.lock index e5bae04a03..1923749593 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5290,75 +5290,75 @@ es6-promisify@^5.0.0: dependencies: es6-promise "^4.0.3" -esbuild-android-64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.43.tgz#59bf3edad6863c27aa92bbb5c1d83a9a5c981495" - integrity sha512-kqFXAS72K6cNrB6RiM7YJ5lNvmWRDSlpi7ZuRZ1hu1S3w0zlwcoCxWAyM23LQUyZSs1PbjHgdbbfYAN8IGh6xg== +esbuild-android-64@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz#ef95b42c67bcf4268c869153fa3ad1466c4cea6b" + integrity sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g== -esbuild-android-arm64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.43.tgz#0258704edf92ce2463af6d2900b844b5423bed63" - integrity sha512-bKS2BBFh+7XZY9rpjiHGRNA7LvWYbZWP87pLehggTG7tTaCDvj8qQGOU/OZSjCSKDYbgY7Q+oDw8RlYQ2Jt2BA== +esbuild-android-arm64@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz#4ebd7ce9fb250b4695faa3ee46fd3b0754ecd9e6" + integrity sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ== -esbuild-darwin-64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.43.tgz#72a47295678d4aa0656979baa8cf6d5c8c92656f" - integrity sha512-/3PSilx011ttoieRGkSZ0XV8zjBf2C9enV4ScMMbCT4dpx0mFhMOpFnCHkOK0pWGB8LklykFyHrWk2z6DENVUg== +esbuild-darwin-64@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz#e0da6c244f497192f951807f003f6a423ed23188" + integrity sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA== -esbuild-darwin-arm64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.43.tgz#5f5823170b8d85b888957f0794e186caac447aca" - integrity sha512-1HyFUKs8DMCBOvw1Qxpr5Vv/ThNcVIFb5xgXWK3pyT40WPvgYIiRTwJCvNs4l8i5qWF8/CK5bQxJVDjQvtv0Yw== +esbuild-darwin-arm64@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz#cd40fd49a672fca581ed202834239dfe540a9028" + integrity sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw== -esbuild-freebsd-64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.43.tgz#e4a48b08181053837e6cd9bda19ae0af94d493b0" - integrity sha512-FNWc05TPHYgaXjbPZO5/rJKSBslfG6BeMSs8GhwnqAKP56eEhvmzwnIz1QcC9cRVyO+IKqWNfmHFkCa1WJTULA== +esbuild-freebsd-64@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz#8da6a14c095b29c01fc8087a16cb7906debc2d67" + integrity sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ== -esbuild-freebsd-arm64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.43.tgz#386e780d36c1dedf3a1cdab79e0bbacd873274e6" - integrity sha512-amrYopclz3VohqisOPR6hA3GOWA3LZC1WDLnp21RhNmoERmJ/vLnOpnrG2P/Zao+/erKTCUqmrCIPVtj58DRoA== +esbuild-freebsd-arm64@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz#ad31f9c92817ff8f33fd253af7ab5122dc1b83f6" + integrity sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ== -esbuild-linux-32@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.43.tgz#040ed6b9ebf06d73acdf2acce7f1cd0c12fbc6a5" - integrity sha512-KoxoEra+9O3AKVvgDFvDkiuddCds6q71owSQEYwjtqRV7RwbPzKxJa6+uyzUulHcyGVq0g15K0oKG5CFBcvYDw== +esbuild-linux-32@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz#de085e4db2e692ea30c71208ccc23fdcf5196c58" + integrity sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw== -esbuild-linux-64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.43.tgz#8abbb7594ab6a008f2aae72d95d8a4fdc59d9000" - integrity sha512-EwINwGMyiJMgBby5/SbMqKcUhS5AYAZ2CpEBzSowsJPNBJEdhkCTtEjk757TN/wxgbu3QklqDM6KghY660QCUw== +esbuild-linux-64@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz#2a9321bbccb01f01b04cebfcfccbabeba3658ba1" + integrity sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw== -esbuild-linux-arm64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.43.tgz#4e8e9ce77cbf7efec65e79e512b3d2fbd2da398f" - integrity sha512-UlSpjMWllAc70zYbHxWuDS3FJytyuR/gHJYBr8BICcTNb/TSOYVBg6U7b3jZ3mILTrgzwJUHwhEwK18FZDouUQ== +esbuild-linux-arm64@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz#b9da7b6fc4b0ca7a13363a0c5b7bb927e4bc535a" + integrity sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw== -esbuild-linux-arm@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.43.tgz#9e41ee5e099c0ffdfd150da154330c2c0226cc96" - integrity sha512-e6YzQUoDxxtyamuF12eVzzRC7bbEFSZohJ6igQB9tBqnNmIQY3fI6Cns3z2wxtbZ3f2o6idkD2fQnlvs2902Dg== +esbuild-linux-arm@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz#56fec2a09b9561c337059d4af53625142aded853" + integrity sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA== -esbuild-linux-mips64le@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.43.tgz#4b41f465a787f91cc4fe7dffa0dcabf655935a1a" - integrity sha512-f+v8cInPEL1/SDP//CfSYzcDNgE4CY3xgDV81DWm3KAPWzhvxARrKxB1Pstf5mB56yAslJDxu7ryBUPX207EZA== +esbuild-linux-mips64le@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz#9db21561f8f22ed79ef2aedb7bbef082b46cf823" + integrity sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg== -esbuild-linux-ppc64le@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.43.tgz#ca15934f5b46728dd9ac05270e783e7feaca9eaf" - integrity sha512-5wZYMDGAL/K2pqkdIsW+I4IR41kyfHr/QshJcNpUfK3RjB3VQcPWOaZmc+74rm4ZjVirYrtz+jWw0SgxtxRanA== +esbuild-linux-ppc64le@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz#dc3a3da321222b11e96e50efafec9d2de408198b" + integrity sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w== -esbuild-linux-riscv64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.43.tgz#70fce2b5a0605a67e58b5a357b0e00be1029836d" - integrity sha512-lYcAOUxp85hC7lSjycJUVSmj4/9oEfSyXjb/ua9bNl8afonaduuqtw7hvKMoKuYnVwOCDw4RSfKpcnIRDWq+Bw== +esbuild-linux-riscv64@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz#9bd6dcd3dca6c0357084ecd06e1d2d4bf105335f" + integrity sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g== -esbuild-linux-s390x@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.43.tgz#318d03b4f4ccc7fa44ac7562121cf4a4529e477a" - integrity sha512-27e43ZhHvhFE4nM7HqtUbMRu37I/4eNSUbb8FGZWszV+uLzMIsHDwLoBiJmw7G9N+hrehNPeQ4F5Ujad0DrUKQ== +esbuild-linux-s390x@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz#a458af939b52f2cd32fc561410d441a51f69d41f" + integrity sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw== esbuild-loader@^2.19.0: version "2.19.0" @@ -5372,61 +5372,61 @@ esbuild-loader@^2.19.0: tapable "^2.2.0" webpack-sources "^2.2.0" -esbuild-netbsd-64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.43.tgz#86130ce204ef0162a96e863b55851efecc92f423" - integrity sha512-2mH4QF6hHBn5zzAfxEI/2eBC0mspVsZ6UVo821LpAJKMvLJPBk3XJO5xwg7paDqSqpl7p6IRrAenW999AEfJhQ== +esbuild-netbsd-64@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz#6388e785d7e7e4420cb01348d7483ab511b16aa8" + integrity sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ== -esbuild-openbsd-64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.43.tgz#0229dc2db2ded97b03bb93bba7646b30ffdf5d0d" - integrity sha512-ZhQpiZjvqCqO8jKdGp9+8k9E/EHSA+zIWOg+grwZasI9RoblqJ1QiZqqi7jfd6ZrrG1UFBNGe4m0NFxCFbMVbg== +esbuild-openbsd-64@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz#309af806db561aa886c445344d1aacab850dbdc5" + integrity sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw== -esbuild-sunos-64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.43.tgz#17e316216eb9f1de25d52a9000356ae5b869e736" - integrity sha512-DgxSi9DaHReL9gYuul2rrQCAapgnCJkh3LSHPKsY26zytYppG0HgkgVF80zjIlvEsUbGBP/GHQzBtrezj/Zq1Q== +esbuild-sunos-64@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz#3f19612dcdb89ba6c65283a7ff6e16f8afbf8aaa" + integrity sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ== -esbuild-windows-32@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.43.tgz#a173757bc6dfd0f2656ff40b64f7f9290745778e" - integrity sha512-Ih3+2O5oExiqm0mY6YYE5dR0o8+AspccQ3vIAtRodwFvhuyGLjb0Hbmzun/F3Lw19nuhPMu3sW2fqIJ5xBxByw== +esbuild-windows-32@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz#a92d279c8458d5dc319abcfeb30aa49e8f2e6f7f" + integrity sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ== -esbuild-windows-64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.43.tgz#c447b23126aad158c4fe6a394342cafd97926ed1" - integrity sha512-8NsuNfI8xwFuJbrCuI+aBqNTYkrWErejFO5aYM+yHqyHuL8mmepLS9EPzAzk8rvfaJrhN0+RvKWAcymViHOKEw== +esbuild-windows-64@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz#2564c3fcf0c23d701edb71af8c52d3be4cec5f8a" + integrity sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ== -esbuild-windows-arm64@0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.43.tgz#3caed1b430d394d7a7836407b9d36c4750246e76" - integrity sha512-7ZlD7bo++kVRblJEoG+cepljkfP8bfuTPz5fIXzptwnPaFwGS6ahvfoYzY7WCf5v/1nX2X02HDraVItTgbHnKw== +esbuild-windows-arm64@0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz#86d9db1a22d83360f726ac5fba41c2f625db6878" + integrity sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ== -esbuild@^0.14.39, esbuild@^0.14.43: - version "0.14.43" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.43.tgz#c227d585c512d3e0f23b88f50b8e16501147f647" - integrity sha512-Uf94+kQmy/5jsFwKWiQB4hfo/RkM9Dh7b79p8yqd1tshULdr25G2szLz631NoH3s2ujnKEKVD16RmOxvCNKRFA== +esbuild@^0.14.39, esbuild@^0.14.47: + version "0.14.47" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.47.tgz#0d6415f6bd8eb9e73a58f7f9ae04c5276cda0e4d" + integrity sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA== optionalDependencies: - esbuild-android-64 "0.14.43" - esbuild-android-arm64 "0.14.43" - esbuild-darwin-64 "0.14.43" - esbuild-darwin-arm64 "0.14.43" - esbuild-freebsd-64 "0.14.43" - esbuild-freebsd-arm64 "0.14.43" - esbuild-linux-32 "0.14.43" - esbuild-linux-64 "0.14.43" - esbuild-linux-arm "0.14.43" - esbuild-linux-arm64 "0.14.43" - esbuild-linux-mips64le "0.14.43" - esbuild-linux-ppc64le "0.14.43" - esbuild-linux-riscv64 "0.14.43" - esbuild-linux-s390x "0.14.43" - esbuild-netbsd-64 "0.14.43" - esbuild-openbsd-64 "0.14.43" - esbuild-sunos-64 "0.14.43" - esbuild-windows-32 "0.14.43" - esbuild-windows-64 "0.14.43" - esbuild-windows-arm64 "0.14.43" + esbuild-android-64 "0.14.47" + esbuild-android-arm64 "0.14.47" + esbuild-darwin-64 "0.14.47" + esbuild-darwin-arm64 "0.14.47" + esbuild-freebsd-64 "0.14.47" + esbuild-freebsd-arm64 "0.14.47" + esbuild-linux-32 "0.14.47" + esbuild-linux-64 "0.14.47" + esbuild-linux-arm "0.14.47" + esbuild-linux-arm64 "0.14.47" + esbuild-linux-mips64le "0.14.47" + esbuild-linux-ppc64le "0.14.47" + esbuild-linux-riscv64 "0.14.47" + esbuild-linux-s390x "0.14.47" + esbuild-netbsd-64 "0.14.47" + esbuild-openbsd-64 "0.14.47" + esbuild-sunos-64 "0.14.47" + esbuild-windows-32 "0.14.47" + esbuild-windows-64 "0.14.47" + esbuild-windows-arm64 "0.14.47" escalade@^3.1.1: version "3.1.1" From d5ee13c9930f6ce94857851ba5623d1b8275061c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Jun 2022 16:10:30 -0400 Subject: [PATCH 012/248] Bump @typescript-eslint/eslint-plugin from 5.28.0 to 5.29.0 (#5710) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 72 ++++++++++++++-------------------------------------- 2 files changed, 20 insertions(+), 54 deletions(-) diff --git a/package.json b/package.json index d8887d9ba2..605894b68d 100644 --- a/package.json +++ b/package.json @@ -350,7 +350,7 @@ "@types/webpack-dev-server": "^4.7.2", "@types/webpack-env": "^1.17.0", "@types/webpack-node-externals": "^2.5.3", - "@typescript-eslint/eslint-plugin": "^5.28.0", + "@typescript-eslint/eslint-plugin": "^5.29.0", "@typescript-eslint/parser": "^5.29.0", "ansi_up": "^5.1.0", "chart.js": "^2.9.4", diff --git a/yarn.lock b/yarn.lock index 1923749593..4182fcaa37 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2506,14 +2506,14 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^5.28.0": - version "5.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.28.0.tgz#6204ac33bdd05ab27c7f77960f1023951115d403" - integrity sha512-DXVU6Cg29H2M6EybqSg2A+x8DgO9TCUBRp4QEXQHJceLS7ogVDP0g3Lkg/SZCqcvkAP/RruuQqK0gdlkgmhSUA== +"@typescript-eslint/eslint-plugin@^5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.29.0.tgz#c67794d2b0fd0b4a47f50266088acdc52a08aab6" + integrity sha512-kgTsISt9pM53yRFQmLZ4npj99yGl3x3Pl7z4eA66OuTzAGC4bQB5H5fuLwPnqTKU3yyrrg4MIhjF17UYnL4c0w== dependencies: - "@typescript-eslint/scope-manager" "5.28.0" - "@typescript-eslint/type-utils" "5.28.0" - "@typescript-eslint/utils" "5.28.0" + "@typescript-eslint/scope-manager" "5.29.0" + "@typescript-eslint/type-utils" "5.29.0" + "@typescript-eslint/utils" "5.29.0" debug "^4.3.4" functional-red-black-tree "^1.0.1" ignore "^5.2.0" @@ -2531,14 +2531,6 @@ "@typescript-eslint/typescript-estree" "5.29.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.28.0": - version "5.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.28.0.tgz#ef9a5c68fecde72fd2ff8a84b9c120324826c1b9" - integrity sha512-LeBLTqF/he1Z+boRhSqnso6YrzcKMTQ8bO/YKEe+6+O/JGof9M0g3IJlIsqfrK/6K03MlFIlycbf1uQR1IjE+w== - dependencies: - "@typescript-eslint/types" "5.28.0" - "@typescript-eslint/visitor-keys" "5.28.0" - "@typescript-eslint/scope-manager@5.29.0": version "5.29.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.29.0.tgz#2a6a32e3416cb133e9af8dcf54bf077a916aeed3" @@ -2547,38 +2539,20 @@ "@typescript-eslint/types" "5.29.0" "@typescript-eslint/visitor-keys" "5.29.0" -"@typescript-eslint/type-utils@5.28.0": - version "5.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.28.0.tgz#53ccc78fdcf0205ef544d843b84104c0e9c7ca8e" - integrity sha512-SyKjKh4CXPglueyC6ceAFytjYWMoPHMswPQae236zqe1YbhvCVQyIawesYywGiu98L9DwrxsBN69vGIVxJ4mQQ== +"@typescript-eslint/type-utils@5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.29.0.tgz#241918001d164044020b37d26d5b9f4e37cc3d5d" + integrity sha512-JK6bAaaiJozbox3K220VRfCzLa9n0ib/J+FHIwnaV3Enw/TO267qe0pM1b1QrrEuy6xun374XEAsRlA86JJnyg== dependencies: - "@typescript-eslint/utils" "5.28.0" + "@typescript-eslint/utils" "5.29.0" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.28.0": - version "5.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.28.0.tgz#cffd9bcdce28db6daaa146e48a0be4387a6f4e9d" - integrity sha512-2OOm8ZTOQxqkPbf+DAo8oc16sDlVR5owgJfKheBkxBKg1vAfw2JsSofH9+16VPlN9PWtv8Wzhklkqw3k/zCVxA== - "@typescript-eslint/types@5.29.0": version "5.29.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.29.0.tgz#7861d3d288c031703b2d97bc113696b4d8c19aab" integrity sha512-X99VbqvAXOMdVyfFmksMy3u8p8yoRGITgU1joBJPzeYa0rhdf5ok9S56/itRoUSh99fiDoMtarSIJXo7H/SnOg== -"@typescript-eslint/typescript-estree@5.28.0": - version "5.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.28.0.tgz#3487d158d091ca2772b285e67412ff6d9797d863" - integrity sha512-9GX+GfpV+F4hdTtYc6OV9ZkyYilGXPmQpm6AThInpBmKJEyRSIjORJd1G9+bknb7OTFYL+Vd4FBJAO6T78OVqA== - dependencies: - "@typescript-eslint/types" "5.28.0" - "@typescript-eslint/visitor-keys" "5.28.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - "@typescript-eslint/typescript-estree@5.29.0": version "5.29.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.29.0.tgz#e83d19aa7fd2e74616aab2f25dfbe4de4f0b5577" @@ -2592,26 +2566,18 @@ semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.28.0": - version "5.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.28.0.tgz#b27a136eac300a48160b36d2aad0da44a1341b99" - integrity sha512-E60N5L0fjv7iPJV3UGc4EC+A3Lcj4jle9zzR0gW7vXhflO7/J29kwiTGITA2RlrmPokKiZbBy2DgaclCaEUs6g== +"@typescript-eslint/utils@5.29.0": + version "5.29.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.29.0.tgz#775046effd5019667bd086bcf326acbe32cd0082" + integrity sha512-3Eos6uP1nyLOBayc/VUdKZikV90HahXE5Dx9L5YlSd/7ylQPXhLk1BYb29SDgnBnTp+jmSZUU0QxUiyHgW4p7A== dependencies: "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.28.0" - "@typescript-eslint/types" "5.28.0" - "@typescript-eslint/typescript-estree" "5.28.0" + "@typescript-eslint/scope-manager" "5.29.0" + "@typescript-eslint/types" "5.29.0" + "@typescript-eslint/typescript-estree" "5.29.0" eslint-scope "^5.1.1" eslint-utils "^3.0.0" -"@typescript-eslint/visitor-keys@5.28.0": - version "5.28.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.28.0.tgz#982bb226b763c48fc1859a60de33fbf939d40a0f" - integrity sha512-BtfP1vCor8cWacovzzPFOoeW4kBQxzmhxGoOpt0v1SFvG+nJ0cWaVdJk7cky1ArTcFHHKNIxyo2LLr3oNkSuXA== - dependencies: - "@typescript-eslint/types" "5.28.0" - eslint-visitor-keys "^3.3.0" - "@typescript-eslint/visitor-keys@5.29.0": version "5.29.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.29.0.tgz#7a4749fa7ef5160c44a451bf060ac1dc6dfb77ee" From 08e8bc39ae8ff3d7f035c89bb1d9055b1d0331b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Jun 2022 08:32:02 -0400 Subject: [PATCH 013/248] Bump sass from 1.52.3 to 1.53.0 (#5721) 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 605894b68d..9fc07a787a 100644 --- a/package.json +++ b/package.json @@ -403,7 +403,7 @@ "react-select-event": "^5.5.0", "react-table": "^7.8.0", "react-window": "^1.8.7", - "sass": "^1.52.3", + "sass": "^1.53.0", "sass-loader": "^12.6.0", "sharp": "^0.30.6", "style-loader": "^3.3.1", diff --git a/yarn.lock b/yarn.lock index 4182fcaa37..79b83ecffe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11303,10 +11303,10 @@ sass-loader@^12.6.0: klona "^2.0.4" neo-async "^2.6.2" -sass@^1.32.13, sass@^1.52.3: - version "1.52.3" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.52.3.tgz#b7cc7ffea2341ccc9a0c4fd372bf1b3f9be1b6cb" - integrity sha512-LNNPJ9lafx+j1ArtA7GyEJm9eawXN8KlA1+5dF6IZyoONg1Tyo/g+muOsENWJH/2Q1FHbbV4UwliU0cXMa/VIA== +sass@^1.32.13, sass@^1.53.0: + version "1.53.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.53.0.tgz#eab73a7baac045cc57ddc1d1ff501ad2659952eb" + integrity sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ== dependencies: chokidar ">=3.0.0 <4.0.0" immutable "^4.0.0" From ed41ea4372fe0e15022393efe97562b77b383b02 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Jun 2022 08:32:16 -0400 Subject: [PATCH 014/248] Bump eslint-plugin-react from 7.30.0 to 7.30.1 (#5720) 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 9fc07a787a..81a8b43100 100644 --- a/package.json +++ b/package.json @@ -370,7 +370,7 @@ "eslint": "^8.18.0", "eslint-plugin-header": "^3.1.1", "eslint-plugin-import": "^2.26.0", - "eslint-plugin-react": "^7.30.0", + "eslint-plugin-react": "^7.30.1", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-unused-imports": "^2.0.0", "flex.box": "^3.4.4", diff --git a/yarn.lock b/yarn.lock index 79b83ecffe..608eb88fdb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5493,10 +5493,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.30.0: - version "7.30.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.30.0.tgz#8e7b1b2934b8426ac067a0febade1b13bd7064e3" - integrity sha512-RgwH7hjW48BleKsYyHK5vUAvxtE9SMPDKmcPRQgtRCYaZA0XQPt5FSkrU3nhz5ifzMZcA8opwmRJ2cmOO8tr5A== +eslint-plugin-react@^7.30.1: + version "7.30.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz#2be4ab23ce09b5949c6631413ba64b2810fd3e22" + integrity sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg== dependencies: array-includes "^3.1.5" array.prototype.flatmap "^1.3.0" From 959db793221667dd2b0ed0aa4f37cf670a9b487c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Jun 2022 08:32:36 -0400 Subject: [PATCH 015/248] Bump electron-builder from 23.0.3 to 23.1.0 (#5719) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 121 ++++++++++++++++++++++++++------------------------- 2 files changed, 62 insertions(+), 61 deletions(-) diff --git a/package.json b/package.json index 81a8b43100..a964729ddf 100644 --- a/package.json +++ b/package.json @@ -363,7 +363,7 @@ "deepdash": "^5.3.9", "dompurify": "^2.3.8", "electron": "^15.5.7", - "electron-builder": "^23.0.3", + "electron-builder": "^23.1.0", "electron-notarize": "^0.3.0", "esbuild": "^0.14.47", "esbuild-loader": "^2.19.0", diff --git a/yarn.lock b/yarn.lock index 608eb88fdb..6db066def1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -497,10 +497,10 @@ global-agent "^3.0.0" global-tunnel-ng "^2.7.1" -"@electron/universal@1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.2.0.tgz#518cac72bccd79c00bf41345119e6fdbabdb871d" - integrity sha512-eu20BwNsrMPKoe2bZ3/l9c78LclDvxg3PlVXrQf3L50NaUuW5M59gbPytI+V4z7/QMrohUHetQaU0ou+p1UG9Q== +"@electron/universal@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@electron/universal/-/universal-1.2.1.tgz#3c2c4ff37063a4e9ab1e6ff57db0bc619bc82339" + integrity sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ== dependencies: "@malept/cross-spawn-promise" "^1.1.0" asar "^3.1.0" @@ -2982,35 +2982,36 @@ app-builder-bin@4.0.0: resolved "https://registry.yarnpkg.com/app-builder-bin/-/app-builder-bin-4.0.0.tgz#1df8e654bd1395e4a319d82545c98667d7eed2f0" integrity sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA== -app-builder-lib@23.0.3: - version "23.0.3" - resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-23.0.3.tgz#44c90237abdc4ad9b34a24658bee022828ad6205" - integrity sha512-1qrtXYHXJfXhzJnMtVGjIva3067F1qYQubl2oBjI61gCBoCHvhghdYJ57XxXTQQ0VxnUhg1/Iaez87uXp8mD8w== +app-builder-lib@23.1.0: + version "23.1.0" + resolved "https://registry.yarnpkg.com/app-builder-lib/-/app-builder-lib-23.1.0.tgz#39bab8eb445d06ad9168eb2513c7f267923df2ba" + integrity sha512-aZpKjBBLzyxtr4Cmbyi3dl8uRO8SI2PG2MYEKYRZL6pl7IsKP2hJkCYzlD6NjLJlRIAZcFPFjFbJliO74DFf7w== dependencies: "7zip-bin" "~5.1.1" "@develar/schema-utils" "~2.6.5" - "@electron/universal" "1.2.0" + "@electron/universal" "1.2.1" "@malept/flatpak-bundler" "^0.4.0" async-exit-hook "^2.0.1" bluebird-lst "^1.0.9" - builder-util "23.0.2" - builder-util-runtime "9.0.0" + builder-util "23.0.9" + builder-util-runtime "9.0.2" chromium-pickle-js "^0.2.0" - debug "^4.3.2" - ejs "^3.1.6" + debug "^4.3.4" + ejs "^3.1.7" electron-osx-sign "^0.6.0" - electron-publish "23.0.2" + electron-publish "23.0.9" form-data "^4.0.0" - fs-extra "^10.0.0" - hosted-git-info "^4.0.2" + fs-extra "^10.1.0" + hosted-git-info "^4.1.0" is-ci "^3.0.0" - isbinaryfile "^4.0.8" + isbinaryfile "^4.0.10" js-yaml "^4.1.0" lazy-val "^1.0.5" - minimatch "^3.0.4" + minimatch "^3.1.2" read-config-file "6.2.0" sanitize-filename "^1.6.3" - semver "^7.3.5" + semver "^7.3.7" + tar "^6.1.11" temp-file "^3.4.0" aproba@^1.0.3, aproba@^1.1.1, aproba@^1.1.2: @@ -3518,28 +3519,28 @@ builder-util-runtime@8.9.2: debug "^4.3.2" sax "^1.2.4" -builder-util-runtime@9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.0.0.tgz#3a40ba7382712ccdb24471567f91d7c167e00830" - integrity sha512-SkpEtSmTkREDHRJnxKEv43aAYp8sYWY8fxYBhGLBLOBIRXeaIp6Kv3lBgSD7uR8jQtC7CA659sqJrpSV6zNvSA== +builder-util-runtime@9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-9.0.2.tgz#dc54f8581bbcf1e0428da4483fa46d09524be857" + integrity sha512-xF55W/8mgfT6+sMbX0TeiJkTusA5GMOzckM4rajN4KirFcUIuLTH8oEaTYmM86YwVCZaTwa/7GyFhauXaEICwA== dependencies: - debug "^4.3.2" + debug "^4.3.4" sax "^1.2.4" -builder-util@23.0.2: - version "23.0.2" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-23.0.2.tgz#da84a971076397e3a671726f4bb96f0c2214fea7" - integrity sha512-HaNHL3axNW/Ms8O1mDx3I07G+ZnZ/TKSWWvorOAPau128cdt9S+lNx5ocbx8deSaHHX4WFXSZVHh3mxlaKJNgg== +builder-util@23.0.9: + version "23.0.9" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-23.0.9.tgz#8b1aeeeee679060e39ad2bd0f50f5b3f3cb53a59" + integrity sha512-ccPFwI1Sex4yLt8R3LI+H07p2jHICKwEWtxkFkb6jiU/g/VJnF1wazW7I1oMcCFcPTEl30GhqoRv9rfDD9VAiQ== dependencies: "7zip-bin" "~5.1.1" "@types/debug" "^4.1.6" "@types/fs-extra" "^9.0.11" app-builder-bin "4.0.0" bluebird-lst "^1.0.9" - builder-util-runtime "9.0.0" + builder-util-runtime "9.0.2" chalk "^4.1.1" cross-spawn "^7.0.3" - debug "^4.3.2" + debug "^4.3.4" fs-extra "^10.0.0" http-proxy-agent "^5.0.0" https-proxy-agent "^5.0.0" @@ -4789,21 +4790,21 @@ dlv@^1.1.3: resolved "https://registry.yarnpkg.com/dlv/-/dlv-1.1.3.tgz#5c198a8a11453596e751494d49874bc7732f2e79" integrity sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA== -dmg-builder@23.0.3: - version "23.0.3" - resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-23.0.3.tgz#ea94bc76fcd94612641580f3c6ae42c3f07f3fee" - integrity sha512-mBYrHHnSM5PC656TDE+xTGmXIuWHAGmmRfyM+dV0kP+AxtwPof4pAXNQ8COd0/exZQ4dqf72FiPS3B9G9aB5IA== +dmg-builder@23.1.0: + version "23.1.0" + resolved "https://registry.yarnpkg.com/dmg-builder/-/dmg-builder-23.1.0.tgz#94426db22b762e7ffc61f0da1f68d385059a20ed" + integrity sha512-CzhPk/k12nJ2KqTbePkIwHOLiaWneQu2cgXCT9Hb5FhwI1vxTPalLsg8OZ57wKCrkL8AEftqqSff8gB5yWY/xw== dependencies: - app-builder-lib "23.0.3" - builder-util "23.0.2" - builder-util-runtime "9.0.0" + app-builder-lib "23.1.0" + builder-util "23.0.9" + builder-util-runtime "9.0.2" fs-extra "^10.0.0" iconv-lite "^0.6.2" js-yaml "^4.1.0" optionalDependencies: - dmg-license "^1.0.9" + dmg-license "^1.0.11" -dmg-license@^1.0.9: +dmg-license@^1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/dmg-license/-/dmg-license-1.0.11.tgz#7b3bc3745d1b52be7506b4ee80cb61df6e4cd79a" integrity sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q== @@ -4987,24 +4988,24 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -ejs@^3.1.6: - version "3.1.7" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.7.tgz#c544d9c7f715783dd92f0bddcf73a59e6962d006" - integrity sha512-BIar7R6abbUxDA3bfXrO4DSgwo8I+fB5/1zgujl3HLLjwd6+9iOnrT+t3grn2qbk9vOgBubXOFwX2m9axoFaGw== +ejs@^3.1.7: + version "3.1.8" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.8.tgz#758d32910c78047585c7ef1f92f9ee041c1c190b" + integrity sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ== dependencies: jake "^10.8.5" -electron-builder@^23.0.3: - version "23.0.3" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-23.0.3.tgz#16264a0d8e3d40da1467bcc8ef7917538b54a3bc" - integrity sha512-0lnTsljAgcOMuIiOjPcoFf+WxOOe/O04hZPgIvvUBXIbz3kolbNu0Xdch1f5WuQ40NdeZI7oqs8Eo395PcuGHQ== +electron-builder@^23.1.0: + version "23.1.0" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-23.1.0.tgz#fdd213387008e44ab7dcabe53b84dbd969c1a7cc" + integrity sha512-UEblaQY8N9m8/HriOwl7jgFJ4olpWDXwdDBqwUkQiRHVNRnCfrA0u8LV03li5ZYhma6zFWzfIZbHd+uk8y//lQ== dependencies: "@types/yargs" "^17.0.1" - app-builder-lib "23.0.3" - builder-util "23.0.2" - builder-util-runtime "9.0.0" + app-builder-lib "23.1.0" + builder-util "23.0.9" + builder-util-runtime "9.0.2" chalk "^4.1.1" - dmg-builder "23.0.3" + dmg-builder "23.1.0" fs-extra "^10.0.0" is-ci "^3.0.0" lazy-val "^1.0.5" @@ -5042,14 +5043,14 @@ electron-osx-sign@^0.6.0: minimist "^1.2.0" plist "^3.0.1" -electron-publish@23.0.2: - version "23.0.2" - resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-23.0.2.tgz#aa11419ae57b847df4beb63b95e2b2a43161957c" - integrity sha512-8gMYgWqv96lc83FCm85wd+tEyxNTJQK7WKyPkNkO8GxModZqt1GO8S+/vAnFGxilS/7vsrVRXFfqiCDUCSuxEg== +electron-publish@23.0.9: + version "23.0.9" + resolved "https://registry.yarnpkg.com/electron-publish/-/electron-publish-23.0.9.tgz#5b098dafab5d830b7c8bcd18b5a499164c51fa6b" + integrity sha512-afr2z6L07/elgDX+6I/G/0vzXOP6xYUd/aXx9tnTPSVZ/3AuvCegHrKiuh8sKYHmzoAcNGXe3ikISYIu961IfA== dependencies: "@types/fs-extra" "^9.0.11" - builder-util "23.0.2" - builder-util-runtime "9.0.0" + builder-util "23.0.9" + builder-util-runtime "9.0.2" chalk "^4.1.1" fs-extra "^10.0.0" lazy-val "^1.0.5" @@ -6114,7 +6115,7 @@ fs-constants@^1.0.0: resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== -fs-extra@^10.0.0: +fs-extra@^10.0.0, fs-extra@^10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== @@ -6640,7 +6641,7 @@ hosted-git-info@^2.1.4, hosted-git-info@^2.7.1, hosted-git-info@^2.8.9: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== -hosted-git-info@^4.0.2: +hosted-git-info@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== @@ -7421,7 +7422,7 @@ isbinaryfile@^3.0.2: dependencies: buffer-alloc "^1.2.0" -isbinaryfile@^4.0.8: +isbinaryfile@^4.0.10: version "4.0.10" resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.10.tgz#0c5b5e30c2557a2f06febd37b7322946aaee42b3" integrity sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw== From 85781cfeaca18fc8e731f508d0987a01573a5c0f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Jun 2022 15:06:53 -0400 Subject: [PATCH 016/248] Bump type-fest from 2.13.1 to 2.14.0 (#5726) 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 a964729ddf..c933fa8ff5 100644 --- a/package.json +++ b/package.json @@ -411,7 +411,7 @@ "tar-stream": "^2.2.0", "ts-loader": "^9.3.1", "ts-node": "^10.8.1", - "type-fest": "^2.13.1", + "type-fest": "^2.14.0", "typed-emitter": "^1.4.0", "typedoc": "0.22.17", "typedoc-plugin-markdown": "^3.11.12", diff --git a/yarn.lock b/yarn.lock index 6db066def1..5b30fa8273 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12604,10 +12604,10 @@ type-fest@^1.0.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-1.4.0.tgz#e9fb813fe3bf1744ec359d55d1affefa76f14be1" integrity sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA== -type-fest@^2.12.2, type-fest@^2.13.1: - version "2.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.13.1.tgz#621c84220df0e01a8469002594fc005714f0cfba" - integrity sha512-hXYyrPFwETT2swFLHeoKtJrvSF/ftG/sA15/8nGaLuaDGfVAaq8DYFpu4yOyV4tzp082WqnTEoMsm3flKMI2FQ== +type-fest@^2.12.2, type-fest@^2.14.0: + version "2.14.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.14.0.tgz#f990e19169517d689c98e16d128b231022b27e12" + integrity sha512-hQnTQkFjL5ik6HF2fTAM8ycbr94UbQXK364wF930VHb0dfBJ5JBP8qwrR8TaK9zwUEk7meruo2JAUDMwvuxd/w== type-is@~1.6.18: version "1.6.18" From 2b9c2ad69e3dd360c03a01ff57af324cc259ed9d Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Mon, 27 Jun 2022 09:06:02 +0300 Subject: [PATCH 017/248] =?UTF-8?q?Re-export=20types=20for=20notifications?= =?UTF-8?q?=20store=20to=20revert=20accidental=20breaking=E2=80=A6=20(#571?= =?UTF-8?q?5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Re-export types for notifications store to revert accidental breaking change Signed-off-by: Janne Savolainen * Tweak exports for notifications to provide same API contract Signed-off-by: Janne Savolainen --- src/renderer/components/notifications/index.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/renderer/components/notifications/index.ts b/src/renderer/components/notifications/index.ts index 75f37ed5cf..9ae9345244 100644 --- a/src/renderer/components/notifications/index.ts +++ b/src/renderer/components/notifications/index.ts @@ -4,3 +4,4 @@ */ export * from "./notifications"; +export * from "./notifications.store"; From 895008adbc83606c9a14cfdebc2121352e8ff027 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jun 2022 08:32:37 -0400 Subject: [PATCH 018/248] Bump sharp from 0.30.6 to 0.30.7 (#5732) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 21 ++++++++++----------- 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index c933fa8ff5..6e485bf1cf 100644 --- a/package.json +++ b/package.json @@ -405,7 +405,7 @@ "react-window": "^1.8.7", "sass": "^1.53.0", "sass-loader": "^12.6.0", - "sharp": "^0.30.6", + "sharp": "^0.30.7", "style-loader": "^3.3.1", "tailwindcss": "^3.1.4", "tar-stream": "^2.2.0", diff --git a/yarn.lock b/yarn.lock index 5b30fa8273..3cd4e006c0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9624,7 +9624,7 @@ npm@^6.14.17: worker-farm "^1.7.0" write-file-atomic "^2.4.3" -npmlog@^4.0.1, npmlog@^4.1.2, npmlog@~4.1.2: +npmlog@^4.1.2, npmlog@~4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -10358,10 +10358,10 @@ postcss@^8.3.0, postcss@^8.4.14, postcss@^8.4.7: picocolors "^1.0.0" source-map-js "^1.0.2" -prebuild-install@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.0.tgz#991b6ac16c81591ba40a6d5de93fb33673ac1370" - integrity sha512-CNcMgI1xBypOyGqjp3wOc8AAo1nMhZS3Cwd3iHIxOdAUbb+YxdNuM4Z5iIrZ8RLvOsf3F3bl7b7xGq6DjQoNYA== +prebuild-install@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" + integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== dependencies: detect-libc "^2.0.0" expand-template "^2.0.3" @@ -10370,7 +10370,6 @@ prebuild-install@^7.1.0: mkdirp-classic "^0.5.3" napi-build-utils "^1.0.1" node-abi "^3.3.0" - npmlog "^4.0.1" pump "^3.0.0" rc "^1.2.7" simple-get "^4.0.0" @@ -11499,15 +11498,15 @@ shallow-clone@^3.0.0: dependencies: kind-of "^6.0.2" -sharp@^0.30.6: - version "0.30.6" - resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.30.6.tgz#02264e9826b5f1577509f70bb627716099778873" - integrity sha512-lSdVxFxcndzcXggDrak6ozdGJgmIgES9YVZWtAFrwi+a/H5vModaf51TghBtMPw+71sLxUsTy2j+aB7qLIODQg== +sharp@^0.30.7: + version "0.30.7" + resolved "https://registry.yarnpkg.com/sharp/-/sharp-0.30.7.tgz#7862bda98804fdd1f0d5659c85e3324b90d94c7c" + integrity sha512-G+MY2YW33jgflKPTXXptVO28HvNOo9G3j0MybYAHeEmby+QuD2U98dT6ueht9cv/XDqZspSpIhoSW+BAKJ7Hig== dependencies: color "^4.2.3" detect-libc "^2.0.1" node-addon-api "^5.0.0" - prebuild-install "^7.1.0" + prebuild-install "^7.1.1" semver "^7.3.7" simple-get "^4.0.1" tar-fs "^2.1.1" From 20d36a31ace3c32ba81ba19b18906dd629cb770e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jun 2022 10:20:16 -0400 Subject: [PATCH 019/248] Bump @types/jest from 28.1.1 to 28.1.3 (#5734) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 56 +++++++++------------------------------------------- 2 files changed, 10 insertions(+), 48 deletions(-) diff --git a/package.json b/package.json index 6e485bf1cf..c34a717bf5 100644 --- a/package.json +++ b/package.json @@ -312,7 +312,7 @@ "@types/hapi__subtext": "^7.0.0", "@types/html-webpack-plugin": "^3.2.6", "@types/http-proxy": "^1.17.9", - "@types/jest": "^28.1.1", + "@types/jest": "^28.1.3", "@types/js-yaml": "^4.0.5", "@types/jsdom": "^16.2.14", "@types/lodash": "^4.14.181", diff --git a/yarn.lock b/yarn.lock index 3cd4e006c0..80e7787e13 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1935,21 +1935,13 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@*": - version "27.5.0" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.5.0.tgz#e04ed1824ca6b1dd0438997ba60f99a7405d4c7b" - integrity sha512-9RBFx7r4k+msyj/arpfaa0WOOEcaAZNmN+j80KFbFCoSqCJGHTz7YMAMGQW9Xmqm5w6l5c25vbSjMwlikJi5+g== +"@types/jest@*", "@types/jest@^28.1.3": + version "28.1.3" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.3.tgz#52f3f3e50ce59191ff5fbb1084896cc0cf30c9ce" + integrity sha512-Tsbjk8Y2hkBaY/gJsataeb4q9Mubw9EOz7+4RjPkzD5KjTvHHs7cpws22InaoXxAVAhF5HfFbzJjo6oKWqSZLw== dependencies: - jest-matcher-utils "^27.0.0" - pretty-format "^27.0.0" - -"@types/jest@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.1.tgz#8c9ba63702a11f8c386ee211280e8b68cb093cd1" - integrity sha512-C2p7yqleUKtCkVjlOur9BWVA4HgUQmEj/HWCt5WzZ5mLXrWnyIfl0wGuArc+kBXsy0ZZfLp+7dywB4HtSVYGVA== - dependencies: - jest-matcher-utils "^27.0.0" - pretty-format "^27.0.0" + jest-matcher-utils "^28.0.0" + pretty-format "^28.0.0" "@types/js-yaml@^4.0.1", "@types/js-yaml@^4.0.5": version "4.0.5" @@ -4753,11 +4745,6 @@ didyoumean@^1.2.2: resolved "https://registry.yarnpkg.com/didyoumean/-/didyoumean-1.2.2.tgz#989346ffe9e839b4555ecf5666edea0d3e8ad037" integrity sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw== -diff-sequences@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327" - integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ== - diff-sequences@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" @@ -7586,16 +7573,6 @@ jest-config@^28.1.1: slash "^3.0.0" strip-json-comments "^3.1.1" -jest-diff@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.5.1.tgz#a07f5011ac9e6643cf8a95a462b7b1ecf6680def" - integrity sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw== - dependencies: - chalk "^4.0.0" - diff-sequences "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - jest-diff@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-28.1.1.tgz#1a3eedfd81ae79810931c63a1d0f201b9120106c" @@ -7658,11 +7635,6 @@ jest-fetch-mock@^3.0.3: cross-fetch "^3.0.4" promise-polyfill "^8.1.3" -jest-get-type@^27.5.1: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.5.1.tgz#3cd613c507b0f7ace013df407a1c1cd578bcb4f1" - integrity sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw== - jest-get-type@^28.0.2: version "28.0.2" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-28.0.2.tgz#34622e628e4fdcd793d46db8a242227901fcf203" @@ -7695,17 +7667,7 @@ jest-leak-detector@^28.1.1: jest-get-type "^28.0.2" pretty-format "^28.1.1" -jest-matcher-utils@^27.0.0: - version "27.5.1" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab" - integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw== - dependencies: - chalk "^4.0.0" - jest-diff "^27.5.1" - jest-get-type "^27.5.1" - pretty-format "^27.5.1" - -jest-matcher-utils@^28.1.1: +jest-matcher-utils@^28.0.0, jest-matcher-utils@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz#a7c4653c2b782ec96796eb3088060720f1e29304" integrity sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw== @@ -10414,7 +10376,7 @@ pretty-format@^26.6.2: ansi-styles "^4.0.0" react-is "^17.0.1" -pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.5.1: +pretty-format@^27.0.2: version "27.5.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== @@ -10423,7 +10385,7 @@ pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.5.1: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^28.1.1: +pretty-format@^28.0.0, pretty-format@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.1.tgz#f731530394e0f7fcd95aba6b43c50e02d86b95cb" integrity sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw== From de8cc559cd6e638c0ccffd161cfb644504a895c0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jun 2022 10:25:32 -0400 Subject: [PATCH 020/248] Bump winston from 3.7.2 to 3.8.0 (#5733) 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 c34a717bf5..3ef2466822 100644 --- a/package.json +++ b/package.json @@ -278,7 +278,7 @@ "url-parse": "^1.5.10", "uuid": "^8.3.2", "win-ca": "^3.5.0", - "winston": "^3.7.2", + "winston": "^3.8.0", "winston-console-format": "^1.0.8", "winston-transport-browserconsole": "^1.0.5", "ws": "^8.8.0" diff --git a/yarn.lock b/yarn.lock index 80e7787e13..7ec057c323 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13314,10 +13314,10 @@ winston-transport@^4.3.0, winston-transport@^4.5.0: readable-stream "^3.6.0" triple-beam "^1.3.0" -winston@^3.2.1, winston@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/winston/-/winston-3.7.2.tgz#95b4eeddbec902b3db1424932ac634f887c400b1" - integrity sha512-QziIqtojHBoyzUOdQvQiar1DH0Xp9nF1A1y7NVy2DGEsz82SBDtOalS0ulTRGVT14xPX3WRWkCsdcJKqNflKng== +winston@^3.2.1, winston@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/winston/-/winston-3.8.0.tgz#4fc8656829dcfdab3c38f558eab785eea38a5328" + integrity sha512-Iix1w8rIq2kBDkGvclO0db2CVOHYVamCIkVWcUbs567G9i2pdB+gvqLgDgxx4B4HXHYD6U4Zybh6ojepUOqcFQ== dependencies: "@dabh/diagnostics" "^2.0.2" async "^3.2.3" From 0e1c507ce1a8648e378323f516577e52f4f8a1a1 Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Tue, 28 Jun 2022 13:47:55 +0300 Subject: [PATCH 021/248] Do not affect history while navigating (#5741) to Preferences extensions tabs Signed-off-by: Alex Andreev --- .../navigate-to-extension-preferences.injectable.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/common/front-end-routing/routes/preferences/extension/navigate-to-extension-preferences.injectable.ts b/src/common/front-end-routing/routes/preferences/extension/navigate-to-extension-preferences.injectable.ts index c51c45ed28..085694a578 100644 --- a/src/common/front-end-routing/routes/preferences/extension/navigate-to-extension-preferences.injectable.ts +++ b/src/common/front-end-routing/routes/preferences/extension/navigate-to-extension-preferences.injectable.ts @@ -13,10 +13,13 @@ const navigateToExtensionPreferencesInjectable = getInjectable({ const navigateToRoute = di.inject(navigateToRouteInjectionToken); const route = di.inject(extensionPreferencesRouteInjectable); - return (extensionId: string, tabId?: string) => navigateToRoute(route, { parameters: { - extensionId, - tabId, - }}); + return (extensionId: string, tabId?: string) => navigateToRoute(route, { + parameters: { + extensionId, + tabId, + }, + withoutAffectingBackButton: true, + }); }, }); From 9a77c4f0e6d338ff1b509b593c5413e8ea0cf553 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Jun 2022 09:26:24 -0400 Subject: [PATCH 022/248] Bump mobx from 6.6.0 to 6.6.1 (#5744) 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 3ef2466822..f53e3f80e2 100644 --- a/package.json +++ b/package.json @@ -243,7 +243,7 @@ "mac-ca": "^1.0.6", "marked": "^4.0.17", "md5-file": "^5.0.0", - "mobx": "^6.6.0", + "mobx": "^6.6.1", "mobx-observable-history": "^2.0.3", "mobx-react": "^7.5.0", "mobx-utils": "^6.0.4", diff --git a/yarn.lock b/yarn.lock index 7ec057c323..8deb07db3b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9028,10 +9028,10 @@ mobx-utils@^6.0.4: resolved "https://registry.yarnpkg.com/mobx-utils/-/mobx-utils-6.0.5.tgz#0cce9afb07fbba1fb559f959f8cea1f44baa7252" integrity sha512-QOduwicYedD4mwYZRl8+c3BalljFDcubg+PUGqBkn8tOuBoj2q7GhjXBP6JXM9J+Zh+2mePK8IoToeLfqr3Z/w== -mobx@^6.3.0, mobx@^6.6.0: - version "6.6.0" - resolved "https://registry.yarnpkg.com/mobx/-/mobx-6.6.0.tgz#617ca1f3b745a781fa89c5eb94a773e3cbeff8ae" - integrity sha512-MNTKevLH/6DShLZcmSL351+JgiJPO56A4GUpoiDQ3/yZ0mAtclNLdHK9q4BcQhibx8/JSDupfTpbX2NZPemlRg== +mobx@^6.3.0, mobx@^6.6.1: + version "6.6.1" + resolved "https://registry.yarnpkg.com/mobx/-/mobx-6.6.1.tgz#70ee6aa82f25aeb7e7d522bd621207434e509318" + integrity sha512-7su3UZv5JF+ohLr2opabjbUAERfXstMY+wiBtey8yNAPoB8H187RaQXuhFjNkH8aE4iHbDWnhDFZw0+5ic4nGQ== mock-fs@^5.1.2: version "5.1.2" From 1e8ba07cc370f0e96ac5f368f9c14b227a4ff7b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Jun 2022 09:26:40 -0400 Subject: [PATCH 023/248] Bump nodemon from 2.0.16 to 2.0.18 (#5745) 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 f53e3f80e2..fc9c8d7227 100644 --- a/package.json +++ b/package.json @@ -390,7 +390,7 @@ "mock-http": "^1.1.0", "node-gyp": "7.1.2", "node-loader": "^2.0.0", - "nodemon": "^2.0.16", + "nodemon": "^2.0.18", "playwright": "^1.22.2", "postcss": "^8.4.14", "postcss-loader": "^6.2.1", diff --git a/yarn.lock b/yarn.lock index 8deb07db3b..23aa7b788a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9274,10 +9274,10 @@ node-releases@^2.0.3: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.4.tgz#f38252370c43854dc48aa431c766c6c398f40476" integrity sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ== -nodemon@^2.0.16: - version "2.0.16" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.16.tgz#d71b31bfdb226c25de34afea53486c8ef225fdef" - integrity sha512-zsrcaOfTWRuUzBn3P44RDliLlp263Z/76FPoHFr3cFFkOz0lTPAcIw8dCzfdVIx/t3AtDYCZRCDkoCojJqaG3w== +nodemon@^2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.18.tgz#0f5a3aa7b4587f2626e6f01369deba89cb0462a2" + integrity sha512-uAvrKipi2zAz8E7nkSz4qW4F4zd5fs2wNGsTx+xXlP8KXqd9ucE0vY9wankOsPboeDyuUGN9vsXGV1pLn80l/A== dependencies: chokidar "^3.5.2" debug "^3.2.7" From 3084b7b8d9f1240d73f09bc645729822873c96ea Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Tue, 28 Jun 2022 16:27:19 +0300 Subject: [PATCH 024/248] Change update warning level over time (#5445) * Give an UpdateButton injectables Signed-off-by: Alex Andreev * AppUpdateWarning class and injectable Signed-off-by: Alex Andreev * Rename folder to app-update-warning Signed-off-by: Alex Andreev * Add appPublishDateInjectable Signed-off-by: Alex Andreev * Inject ipcRenderer into app-update-warning Signed-off-by: Alex Andreev * Add setter for downloadedUpdateDate Signed-off-by: Alex Andreev * Add tests for AppUpdateWarning Signed-off-by: Alex Andreev * appPublishDate initial test Signed-off-by: Alex Andreev * Parsing app release date from the package version Signed-off-by: Alex Andreev * Introduce appUpdateWarningLevelInjectable Signed-off-by: Alex Andreev * Fix withInjectables props Signed-off-by: Alex Andreev * Determine warning from days passed after update available Signed-off-by: Alex Andreev * Save update available date in session storage Signed-off-by: Alex Andreev * Move quitAndInstall() to separate function Signed-off-by: Alex Andreev * Register quit-and-install ipc channel Signed-off-by: Alex Andreev * Make update function injectable for button Signed-off-by: Alex Andreev * Update tests Signed-off-by: Alex Andreev * Set proper timeframes Signed-off-by: Alex Andreev * Setting global UTC timezone for tests Signed-off-by: Alex Andreev * Refresh tests Signed-off-by: Alex Andreev * Testing warning level changes over time Signed-off-by: Alex Andreev * Remove unused app-publish-date files Signed-off-by: Alex Andreev * Make linter happy Signed-off-by: Alex Andreev * Pass quitAndInstallUpdateInjectable to UpdateButton Signed-off-by: Alex Andreev * Remove updateAppInjectable Signed-off-by: Alex Andreev * Initial tests for installing update using topbar button Signed-off-by: Alex Andreev * Refactor AppUpdateWarning class using injectables Signed-off-by: Alex Andreev * Permit side effects in injectable periodicalCheckForUpdateWarningInjectable Signed-off-by: Alex Andreev * Temporarily set noop for UpdateButton update() Signed-off-by: Alex Andreev * Remove previous implementation files Signed-off-by: Alex Andreev * Unoverriding topbar injectables Signed-off-by: Alex Andreev * Render TopBar inside ApplicationBuilder Signed-off-by: Alex Andreev * Move updateWarningLevelInjectable to /common subfolders from /main Signed-off-by: Alex Andreev * Make UpdateButton warning prop observable by using computed() structure Signed-off-by: Alex Andreev * Updating snapshots Signed-off-by: Alex Andreev * Add sync box files allowing to restart & install update from renderer process Signed-off-by: Alex Andreev * Add Update button dropdown tests Signed-off-by: Alex Andreev * Fix jest.advanceTimersByTime usage Signed-off-by: Alex Andreev * Check for severe warning level Signed-off-by: Alex Andreev * Linter fixes Signed-off-by: Alex Andreev * Remove usage of legacy global causing trouble in unit tests Co-authored-by: Alex Andreev Signed-off-by: Janne Savolainen * Make update warning level completely reactive and responsibility of a renderer Co-authored-by: Alex Andreev Signed-off-by: Janne Savolainen * Remove dead code Co-authored-by: Alex Andreev Signed-off-by: Janne Savolainen * Remove tests that are covered by behaviour Co-authored-by: Alex Andreev Signed-off-by: Janne Savolainen * Fix restarting and installing update when pressing update button Co-authored-by: Alex Andreev Signed-off-by: Janne Savolainen * Update snapshots Co-authored-by: Alex Andreev Signed-off-by: Janne Savolainen * Remove dead code Co-authored-by: Alex Andreev Signed-off-by: Janne Savolainen * Update more snapshots Signed-off-by: Janne Savolainen * Remove duplication from behavioural unit test Signed-off-by: Janne Savolainen * Reducing too large MenuItems height Signed-off-by: Alex Andreev * Reduce too large UpdateButton paddings Signed-off-by: Alex Andreev * Add jest globalSetup into package.json to fix timezone test Signed-off-by: Alex Andreev * Do not triggering computed value every time it is being used Signed-off-by: Alex Andreev Co-authored-by: Janne Savolainen --- package.json | 1 + ...acters-in-page-registrations.test.tsx.snap | 90 +++ .../navigate-to-extension-page.test.tsx.snap | 225 ++++++++ .../navigating-between-routes.test.tsx.snap | 90 +++ ...ation-using-application-menu.test.tsx.snap | 90 +++ ...g-update-using-topbar-button.test.tsx.snap | 66 +++ .../installing-update-using-tray.test.ts.snap | 326 ++++++++++- .../installing-update.test.ts.snap | 432 ++++++++++++++ ...eriodical-checking-of-updates.test.ts.snap | 45 ++ ...selection-of-update-stability.test.ts.snap | 45 ++ ...alling-update-using-topbar-button.test.tsx | 144 +++++ ...gation-using-application-menu.test.ts.snap | 90 +++ ...elm-repository-in-preferences.test.ts.snap | 540 ++++++++++++++++++ ...tory-from-list-in-preferences.test.ts.snap | 450 +++++++++++++++ ...m-repositories-in-preferences.test.ts.snap | 450 +++++++++++++++ ...ive-repository-in-preferences.test.ts.snap | 180 ++++++ .../closing-preferences.test.tsx.snap | 360 ++++++++++++ ...on-to-application-preferences.test.ts.snap | 90 +++ ...igation-to-editor-preferences.test.ts.snap | 90 +++ ...tension-specific-preferences.test.tsx.snap | 450 +++++++++++++++ ...ion-to-kubernetes-preferences.test.ts.snap | 90 +++ ...vigation-to-proxy-preferences.test.ts.snap | 90 +++ ...ion-to-telemetry-preferences.test.tsx.snap | 225 ++++++++ ...ation-to-terminal-preferences.test.ts.snap | 90 +++ ...gation-using-application-menu.test.ts.snap | 90 +++ .../navigation-using-tray.test.ts.snap | 90 +++ ...gation-using-application-menu.test.ts.snap | 90 +++ src/common/__tests__/timezones.test.ts | 12 + ...t-and-install-update-channel.injectable.ts | 21 + .../update-downloaded-date-time.injectable.ts | 24 + src/jest.timezone.ts | 11 + .../download-update.injectable.ts | 7 + ...-and-install-update-listener.injectable.ts | 26 + .../__snapshots__/ask-boolean.test.ts.snap | 270 +++++++++ .../components/layout/top-bar/top-bar.tsx | 9 +- src/renderer/components/menu/menu.scss | 2 +- .../test-utils/get-application-builder.tsx | 6 + .../__snapshots__/update-button.test.tsx.snap | 22 - .../__tests__/update-button.test.tsx | 87 --- .../restart-and-install-update.injectable.ts | 22 + .../update-button/styles.module.scss | 2 +- .../update-button/update-button.tsx | 35 +- .../update-warning-level.injectable.ts | 45 ++ .../frames/cluster-frame/cluster-frame.tsx | 5 +- src/renderer/getDiForUnitTesting.tsx | 16 + .../remote-helpers/history-updater.ts | 12 - .../watch-history-state.injectable.ts | 26 + 47 files changed, 5534 insertions(+), 145 deletions(-) create mode 100644 src/behaviours/application-update/__snapshots__/installing-update-using-topbar-button.test.tsx.snap create mode 100644 src/behaviours/application-update/installing-update-using-topbar-button.test.tsx create mode 100644 src/common/__tests__/timezones.test.ts create mode 100644 src/common/application-update/restart-and-install-update-channel/restart-and-install-update-channel.injectable.ts create mode 100644 src/common/application-update/update-downloaded-date-time/update-downloaded-date-time.injectable.ts create mode 100644 src/jest.timezone.ts create mode 100644 src/main/application-update/restart-and-install-update/restart-and-install-update-listener.injectable.ts delete mode 100644 src/renderer/components/update-button/__tests__/__snapshots__/update-button.test.tsx.snap delete mode 100644 src/renderer/components/update-button/__tests__/update-button.test.tsx create mode 100644 src/renderer/components/update-button/restart-and-install-update.injectable.ts create mode 100644 src/renderer/components/update-button/update-warning-level.injectable.ts delete mode 100644 src/renderer/remote-helpers/history-updater.ts create mode 100644 src/renderer/remote-helpers/watch-history-state.injectable.ts diff --git a/package.json b/package.json index fc9c8d7227..1fbd3f535c 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,7 @@ "/src/jest.setup.ts", "jest-canvas-mock" ], + "globalSetup": "/src/jest.timezone.ts", "setupFilesAfterEnv": [ "/src/jest-after-env.setup.ts" ], diff --git a/src/behaviours/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap b/src/behaviours/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap index 5a952f701b..3a3d32317c 100644 --- a/src/behaviours/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap +++ b/src/behaviours/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap @@ -2,6 +2,51 @@ exports[`extension special characters in page registrations renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -20,6 +65,51 @@ exports[`extension special characters in page registrations renders 1`] = ` exports[`extension special characters in page registrations when navigating to route with ID having special characters renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/__snapshots__/navigate-to-extension-page.test.tsx.snap b/src/behaviours/__snapshots__/navigate-to-extension-page.test.tsx.snap index f73444ff0e..c99c770ef1 100644 --- a/src/behaviours/__snapshots__/navigate-to-extension-page.test.tsx.snap +++ b/src/behaviours/__snapshots__/navigate-to-extension-page.test.tsx.snap @@ -2,6 +2,51 @@ exports[`navigate to extension page renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -20,6 +65,51 @@ exports[`navigate to extension page renders 1`] = ` exports[`navigate to extension page when extension navigates to child route renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -41,6 +131,51 @@ exports[`navigate to extension page when extension navigates to child route rend exports[`navigate to extension page when extension navigates to route with parameters renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -78,6 +213,51 @@ exports[`navigate to extension page when extension navigates to route with param exports[`navigate to extension page when extension navigates to route without parameters renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -115,6 +295,51 @@ exports[`navigate to extension page when extension navigates to route without pa exports[`navigate to extension page when extension navigates to route without parameters when changing page parameters renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/__snapshots__/navigating-between-routes.test.tsx.snap b/src/behaviours/__snapshots__/navigating-between-routes.test.tsx.snap index bd3c3f51e7..921adfec18 100644 --- a/src/behaviours/__snapshots__/navigating-between-routes.test.tsx.snap +++ b/src/behaviours/__snapshots__/navigating-between-routes.test.tsx.snap @@ -2,6 +2,51 @@ exports[`navigating between routes given route with optional path parameters when navigating to route with path parameters renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -26,6 +71,51 @@ exports[`navigating between routes given route with optional path parameters whe exports[`navigating between routes given route without path parameters when navigating to route renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap b/src/behaviours/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap index f6067dec05..1da17bdc47 100644 --- a/src/behaviours/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap +++ b/src/behaviours/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap @@ -2,6 +2,51 @@ exports[`add-cluster - navigation using application menu renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -20,6 +65,51 @@ exports[`add-cluster - navigation using application menu renders 1`] = ` exports[`add-cluster - navigation using application menu when navigating to add cluster using application menu renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/application-update/__snapshots__/installing-update-using-topbar-button.test.tsx.snap b/src/behaviours/application-update/__snapshots__/installing-update-using-topbar-button.test.tsx.snap new file mode 100644 index 0000000000..de3b14e3d2 --- /dev/null +++ b/src/behaviours/application-update/__snapshots__/installing-update-using-topbar-button.test.tsx.snap @@ -0,0 +1,66 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`encourage user to update when sufficient time passed since update was downloaded when started renders 1`] = ` + +
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
+
+
+
+ +`; diff --git a/src/behaviours/application-update/__snapshots__/installing-update-using-tray.test.ts.snap b/src/behaviours/application-update/__snapshots__/installing-update-using-tray.test.ts.snap index dd45d690c5..34fbe7daca 100644 --- a/src/behaviours/application-update/__snapshots__/installing-update-using-tray.test.ts.snap +++ b/src/behaviours/application-update/__snapshots__/installing-update-using-tray.test.ts.snap @@ -3,6 +3,51 @@ exports[`installing update using tray when started renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -23,6 +68,51 @@ exports[`installing update using tray when started renders 1`] = ` exports[`installing update using tray when started when user checks for updates using tray renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -64,7 +154,7 @@ exports[`installing update using tray when started when user checks for updates >
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -125,7 +260,7 @@ exports[`installing update using tray when started when user checks for updates >
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + + +
+
+
@@ -226,7 +424,7 @@ exports[`installing update using tray when started when user checks for updates >
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + + +
+
+
@@ -367,7 +628,7 @@ exports[`installing update using tray when started when user checks for updates >
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -538,7 +844,7 @@ exports[`installing update using tray when started when user checks for updates >
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -23,6 +68,51 @@ exports[`installing update when started renders 1`] = ` exports[`installing update when started when user checks for updates renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -43,6 +133,51 @@ exports[`installing update when started when user checks for updates renders 1`] exports[`installing update when started when user checks for updates when new update is discovered renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -63,6 +198,69 @@ exports[`installing update when started when user checks for updates when new up exports[`installing update when started when user checks for updates when new update is discovered when download fails renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + + +
+
+
@@ -83,6 +281,69 @@ exports[`installing update when started when user checks for updates when new up exports[`installing update when started when user checks for updates when new update is discovered when download succeeds renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + + +
+
+
@@ -103,6 +364,69 @@ exports[`installing update when started when user checks for updates when new up exports[`installing update when started when user checks for updates when new update is discovered when download succeeds when user answers not to install the update renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + + +
+
+
@@ -123,6 +447,69 @@ exports[`installing update when started when user checks for updates when new up exports[`installing update when started when user checks for updates when new update is discovered when download succeeds when user answers to install the update renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + + +
+
+
@@ -143,6 +530,51 @@ exports[`installing update when started when user checks for updates when new up exports[`installing update when started when user checks for updates when no new update is discovered renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/application-update/__snapshots__/periodical-checking-of-updates.test.ts.snap b/src/behaviours/application-update/__snapshots__/periodical-checking-of-updates.test.ts.snap index 744a9dfb7e..84259158ef 100644 --- a/src/behaviours/application-update/__snapshots__/periodical-checking-of-updates.test.ts.snap +++ b/src/behaviours/application-update/__snapshots__/periodical-checking-of-updates.test.ts.snap @@ -3,6 +3,51 @@ exports[`periodical checking of updates given updater is enabled and configuration exists, when started renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/application-update/__snapshots__/selection-of-update-stability.test.ts.snap b/src/behaviours/application-update/__snapshots__/selection-of-update-stability.test.ts.snap index ea700234da..c0ffb43590 100644 --- a/src/behaviours/application-update/__snapshots__/selection-of-update-stability.test.ts.snap +++ b/src/behaviours/application-update/__snapshots__/selection-of-update-stability.test.ts.snap @@ -3,6 +3,51 @@ exports[`selection of update stability when started renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/application-update/installing-update-using-topbar-button.test.tsx b/src/behaviours/application-update/installing-update-using-topbar-button.test.tsx new file mode 100644 index 0000000000..f2b9a58dd1 --- /dev/null +++ b/src/behaviours/application-update/installing-update-using-topbar-button.test.tsx @@ -0,0 +1,144 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import type { AsyncFnMock } from "@async-fn/jest"; +import asyncFn from "@async-fn/jest"; +import type { RenderResult } from "@testing-library/react"; +import { act } from "@testing-library/react"; +import type { CheckForPlatformUpdates } from "../../main/application-update/check-for-platform-updates/check-for-platform-updates.injectable"; +import checkForPlatformUpdatesInjectable from "../../main/application-update/check-for-platform-updates/check-for-platform-updates.injectable"; +import type { DownloadPlatformUpdate } from "../../main/application-update/download-platform-update/download-platform-update.injectable"; +import downloadPlatformUpdateInjectable from "../../main/application-update/download-platform-update/download-platform-update.injectable"; +import publishIsConfiguredInjectable from "../../main/application-update/publish-is-configured.injectable"; +import electronUpdaterIsActiveInjectable from "../../main/electron-app/features/electron-updater-is-active.injectable"; +import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; +import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; +import processCheckingForUpdatesInjectable from "../../main/application-update/check-for-updates/process-checking-for-updates.injectable"; +import quitAndInstallUpdateInjectable from "../../main/application-update/quit-and-install-update.injectable"; + +function daysToMilliseconds(days: number) { + return Math.round(days * 24 * 60 * 60 * 1000); +} + +describe("encourage user to update when sufficient time passed since update was downloaded", () => { + let applicationBuilder: ApplicationBuilder; + let checkForPlatformUpdatesMock: AsyncFnMock; + let downloadPlatformUpdateMock: AsyncFnMock; + let quitAndInstallUpdateMock: jest.MockedFunction<() => void>; + + beforeEach(() => { + jest.useFakeTimers(); + + applicationBuilder = getApplicationBuilder(); + + applicationBuilder.beforeApplicationStart(({ mainDi }) => { + checkForPlatformUpdatesMock = asyncFn(); + downloadPlatformUpdateMock = asyncFn(); + + mainDi.override( + checkForPlatformUpdatesInjectable, + () => checkForPlatformUpdatesMock, + ); + + mainDi.override( + downloadPlatformUpdateInjectable, + () => downloadPlatformUpdateMock, + ); + + mainDi.override(electronUpdaterIsActiveInjectable, () => true); + mainDi.override(publishIsConfiguredInjectable, () => true); + + quitAndInstallUpdateMock = jest.fn(); + mainDi.override(quitAndInstallUpdateInjectable, () => quitAndInstallUpdateMock); + }); + }); + + describe("when started", () => { + let rendered: RenderResult; + + beforeEach(async () => { + rendered = await applicationBuilder.render(); + }); + + it("renders", () => { + expect(rendered.baseElement).toMatchSnapshot(); + }); + + it("does not show update button yet", () => { + const button = rendered.queryByTestId("update-button"); + + expect(button).toBeNull(); + }); + + describe("given the update check", () => { + let processCheckingForUpdatesPromise: Promise; + + beforeEach(async () => { + const processCheckingForUpdates = applicationBuilder.dis.mainDi.inject(processCheckingForUpdatesInjectable); + + processCheckingForUpdatesPromise = processCheckingForUpdates("irrelevant"); + }); + + describe("when update downloaded", () => { + let button: HTMLElement; + + beforeEach(async () => { + await checkForPlatformUpdatesMock.resolve({ + updateWasDiscovered: true, + version: "some-version", + }); + + await downloadPlatformUpdateMock.resolve({ downloadWasSuccessful: true }); + await processCheckingForUpdatesPromise; + + button = rendered.getByTestId("update-button"); + }); + + it("shows update button to help user to update", () => { + expect(button).toBeInTheDocument(); + }); + + it("has soft emotional indication in the button", () => { + expect(button).toHaveAttribute("data-warning-level", "light"); + }); + + describe("when button is clicked", () => { + beforeEach(() => { + act(() => button.click()); + }); + + it("shows dropdown with update item", () => { + expect(rendered.getByTestId("update-lens-menu-item")).toBeInTheDocument(); + }); + + it("when selected update now, restarts the application to update", () => { + const updateMenuItem = rendered.getByTestId("update-lens-menu-item"); + + act(() => updateMenuItem.click()); + + expect(quitAndInstallUpdateMock).toBeCalled(); + }); + + it("when dropdown closed without clicking update item, does not restart the application to update", () => { + act(() => button.click()); + + expect(quitAndInstallUpdateMock).not.toBeCalled(); + }); + }); + + it("given just enough time passes for medium update encouragement, has medium emotional indication in the button", () => { + jest.advanceTimersByTime(daysToMilliseconds(22)); + + expect(button).toHaveAttribute("data-warning-level", "medium"); + }); + + it("given just enough time passes for severe update encouragement, has severe emotional indication in the button", () => { + jest.advanceTimersByTime(daysToMilliseconds(26)); + + expect(button).toHaveAttribute("data-warning-level", "high"); + }); + }); + }); + }); +}); diff --git a/src/behaviours/extensions/__snapshots__/navigation-using-application-menu.test.ts.snap b/src/behaviours/extensions/__snapshots__/navigation-using-application-menu.test.ts.snap index 8dd45c656a..b8c6804f4d 100644 --- a/src/behaviours/extensions/__snapshots__/navigation-using-application-menu.test.ts.snap +++ b/src/behaviours/extensions/__snapshots__/navigation-using-application-menu.test.ts.snap @@ -2,6 +2,51 @@ exports[`extensions - navigation using application menu renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -20,6 +65,51 @@ exports[`extensions - navigation using application menu renders 1`] = ` exports[`extensions - navigation using application menu when navigating to extensions using application menu renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/helm-charts/__snapshots__/add-custom-helm-repository-in-preferences.test.ts.snap b/src/behaviours/helm-charts/__snapshots__/add-custom-helm-repository-in-preferences.test.ts.snap index 21803cf04a..ff6be7d818 100644 --- a/src/behaviours/helm-charts/__snapshots__/add-custom-helm-repository-in-preferences.test.ts.snap +++ b/src/behaviours/helm-charts/__snapshots__/add-custom-helm-repository-in-preferences.test.ts.snap @@ -3,6 +3,51 @@ exports[`add custom helm repository in preferences when navigating to preferences containing helm repositories renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -482,6 +527,51 @@ exports[`add custom helm repository in preferences when navigating to preference exports[`add custom helm repository in preferences when navigating to preferences containing helm repositories when active repositories resolve renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -968,6 +1058,51 @@ exports[`add custom helm repository in preferences when navigating to preference exports[`add custom helm repository in preferences when navigating to preferences containing helm repositories when active repositories resolve when selecting to add custom repository renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -1563,6 +1698,51 @@ exports[`add custom helm repository in preferences when navigating to preference exports[`add custom helm repository in preferences when navigating to preferences containing helm repositories when active repositories resolve when selecting to add custom repository when closing the dialog by clicking cancel renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -2057,6 +2237,51 @@ exports[`add custom helm repository in preferences when navigating to preference exports[`add custom helm repository in preferences when navigating to preferences containing helm repositories when active repositories resolve when selecting to add custom repository when inputted minimal options for the repository renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -2652,6 +2877,51 @@ exports[`add custom helm repository in preferences when navigating to preference exports[`add custom helm repository in preferences when navigating to preferences containing helm repositories when active repositories resolve when selecting to add custom repository when inputted minimal options for the repository when showing the maximal options renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -3423,6 +3693,51 @@ exports[`add custom helm repository in preferences when navigating to preference exports[`add custom helm repository in preferences when navigating to preferences containing helm repositories when active repositories resolve when selecting to add custom repository when inputted minimal options for the repository when showing the maximal options when hiding maximal options renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -4018,6 +4333,51 @@ exports[`add custom helm repository in preferences when navigating to preference exports[`add custom helm repository in preferences when navigating to preferences containing helm repositories when active repositories resolve when selecting to add custom repository when inputted minimal options for the repository when showing the maximal options when inputted maximal options renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -4789,6 +5149,51 @@ exports[`add custom helm repository in preferences when navigating to preference exports[`add custom helm repository in preferences when navigating to preferences containing helm repositories when active repositories resolve when selecting to add custom repository when inputted minimal options for the repository when submitted and some time passes renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -5384,6 +5789,51 @@ exports[`add custom helm repository in preferences when navigating to preference exports[`add custom helm repository in preferences when navigating to preferences containing helm repositories when active repositories resolve when selecting to add custom repository when inputted minimal options for the repository when submitted and some time passes when activation rejects renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -5878,6 +6328,51 @@ exports[`add custom helm repository in preferences when navigating to preference exports[`add custom helm repository in preferences when navigating to preferences containing helm repositories when active repositories resolve when selecting to add custom repository when inputted minimal options for the repository when submitted and some time passes when activation resolves with success renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -6365,6 +6860,51 @@ exports[`add custom helm repository in preferences when navigating to preference exports[`add custom helm repository in preferences when navigating to preferences containing helm repositories when active repositories resolve when selecting to add custom repository when inputted minimal options for the repository when submitted and some time passes when activation resolves with success when adding custom repository again renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/helm-charts/__snapshots__/add-helm-repository-from-list-in-preferences.test.ts.snap b/src/behaviours/helm-charts/__snapshots__/add-helm-repository-from-list-in-preferences.test.ts.snap index 82c9bfb7e4..776755635f 100644 --- a/src/behaviours/helm-charts/__snapshots__/add-helm-repository-from-list-in-preferences.test.ts.snap +++ b/src/behaviours/helm-charts/__snapshots__/add-helm-repository-from-list-in-preferences.test.ts.snap @@ -3,6 +3,51 @@ exports[`add helm repository from list in preferences when navigating to preferences containing helm repositories renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -482,6 +527,51 @@ exports[`add helm repository from list in preferences when navigating to prefere exports[`add helm repository from list in preferences when navigating to preferences containing helm repositories when both active and public repositories resolve renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -968,6 +1058,51 @@ exports[`add helm repository from list in preferences when navigating to prefere exports[`add helm repository from list in preferences when navigating to preferences containing helm repositories when both active and public repositories resolve when select for adding public repositories is clicked renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -1507,6 +1642,51 @@ exports[`add helm repository from list in preferences when navigating to prefere exports[`add helm repository from list in preferences when navigating to preferences containing helm repositories when both active and public repositories resolve when select for adding public repositories is clicked when deactive public repository is selected renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -1993,6 +2173,51 @@ exports[`add helm repository from list in preferences when navigating to prefere exports[`add helm repository from list in preferences when navigating to preferences containing helm repositories when both active and public repositories resolve when select for adding public repositories is clicked when deactive public repository is selected when adding rejects renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -2479,6 +2704,51 @@ exports[`add helm repository from list in preferences when navigating to prefere exports[`add helm repository from list in preferences when navigating to preferences containing helm repositories when both active and public repositories resolve when select for adding public repositories is clicked when deactive public repository is selected when adding resolves renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -2958,6 +3228,51 @@ exports[`add helm repository from list in preferences when navigating to prefere exports[`add helm repository from list in preferences when navigating to preferences containing helm repositories when both active and public repositories resolve when select for adding public repositories is clicked when deactive public repository is selected when adding resolves when active repositories resolve again renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -3474,6 +3789,51 @@ exports[`add helm repository from list in preferences when navigating to prefere exports[`add helm repository from list in preferences when navigating to preferences containing helm repositories when both active and public repositories resolve when select for adding public repositories is clicked when deactive public repository is selected when adding resolves when active repositories resolve again when select for selecting active repositories is clicked renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -4053,6 +4413,51 @@ exports[`add helm repository from list in preferences when navigating to prefere exports[`add helm repository from list in preferences when navigating to preferences containing helm repositories when both active and public repositories resolve when select for adding public repositories is clicked when deactive public repository is selected when adding resolves when active repositories resolve again when select for selecting active repositories is clicked when active repository is selected renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -4569,6 +4974,51 @@ exports[`add helm repository from list in preferences when navigating to prefere exports[`add helm repository from list in preferences when navigating to preferences containing helm repositories when both active and public repositories resolve when select for adding public repositories is clicked when deactive public repository is selected when adding resolves when active repositories resolve again when select for selecting active repositories is clicked when active repository is selected when removing resolves renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/helm-charts/__snapshots__/listing-active-helm-repositories-in-preferences.test.ts.snap b/src/behaviours/helm-charts/__snapshots__/listing-active-helm-repositories-in-preferences.test.ts.snap index d350470ef4..83666bdfcc 100644 --- a/src/behaviours/helm-charts/__snapshots__/listing-active-helm-repositories-in-preferences.test.ts.snap +++ b/src/behaviours/helm-charts/__snapshots__/listing-active-helm-repositories-in-preferences.test.ts.snap @@ -3,6 +3,51 @@ exports[`listing active helm repositories in preferences when navigating to preferences containing helm repositories renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -482,6 +527,51 @@ exports[`listing active helm repositories in preferences when navigating to pref exports[`listing active helm repositories in preferences when navigating to preferences containing helm repositories when configuration resolves renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -961,6 +1051,51 @@ exports[`listing active helm repositories in preferences when navigating to pref exports[`listing active helm repositories in preferences when navigating to preferences containing helm repositories when configuration resolves when updating repositories reject with any other error renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -1332,6 +1467,51 @@ exports[`listing active helm repositories in preferences when navigating to pref exports[`listing active helm repositories in preferences when navigating to preferences containing helm repositories when configuration resolves when updating repositories reject with error about no existing repositories renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -1811,6 +1991,51 @@ exports[`listing active helm repositories in preferences when navigating to pref exports[`listing active helm repositories in preferences when navigating to preferences containing helm repositories when configuration resolves when updating repositories reject with error about no existing repositories when adding default repository reject renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -2182,6 +2407,51 @@ exports[`listing active helm repositories in preferences when navigating to pref exports[`listing active helm repositories in preferences when navigating to preferences containing helm repositories when configuration resolves when updating repositories reject with error about no existing repositories when adding of default repository resolves renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -2661,6 +2931,51 @@ exports[`listing active helm repositories in preferences when navigating to pref exports[`listing active helm repositories in preferences when navigating to preferences containing helm repositories when configuration resolves when updating repositories resolve when repositories resolves renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -3177,6 +3492,51 @@ exports[`listing active helm repositories in preferences when navigating to pref exports[`listing active helm repositories in preferences when navigating to preferences containing helm repositories when configuration resolves without path to repository cache directory renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -3548,6 +3908,51 @@ exports[`listing active helm repositories in preferences when navigating to pref exports[`listing active helm repositories in preferences when navigating to preferences containing helm repositories when configuration resolves without path to repository config file renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -3919,6 +4324,51 @@ exports[`listing active helm repositories in preferences when navigating to pref exports[`listing active helm repositories in preferences when navigating to preferences containing helm repositories when getting configuration rejects renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/helm-charts/__snapshots__/remove-helm-repository-from-list-of-active-repository-in-preferences.test.ts.snap b/src/behaviours/helm-charts/__snapshots__/remove-helm-repository-from-list-of-active-repository-in-preferences.test.ts.snap index c913123fe3..0823b7d1f1 100644 --- a/src/behaviours/helm-charts/__snapshots__/remove-helm-repository-from-list-of-active-repository-in-preferences.test.ts.snap +++ b/src/behaviours/helm-charts/__snapshots__/remove-helm-repository-from-list-of-active-repository-in-preferences.test.ts.snap @@ -3,6 +3,51 @@ exports[`remove helm repository from list of active repositories in preferences when navigating to preferences containing helm repositories renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -482,6 +527,51 @@ exports[`remove helm repository from list of active repositories in preferences exports[`remove helm repository from list of active repositories in preferences when navigating to preferences containing helm repositories when active repositories resolve renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -968,6 +1058,51 @@ exports[`remove helm repository from list of active repositories in preferences exports[`remove helm repository from list of active repositories in preferences when navigating to preferences containing helm repositories when active repositories resolve when removing repository renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -1454,6 +1589,51 @@ exports[`remove helm repository from list of active repositories in preferences exports[`remove helm repository from list of active repositories in preferences when navigating to preferences containing helm repositories when active repositories resolve when removing repository when removing resolves renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/preferences/__snapshots__/closing-preferences.test.tsx.snap b/src/behaviours/preferences/__snapshots__/closing-preferences.test.tsx.snap index 13c0967f4d..b84f16d647 100644 --- a/src/behaviours/preferences/__snapshots__/closing-preferences.test.tsx.snap +++ b/src/behaviours/preferences/__snapshots__/closing-preferences.test.tsx.snap @@ -2,6 +2,51 @@ exports[`preferences - closing-preferences given accessing preferences directly renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -553,6 +598,51 @@ exports[`preferences - closing-preferences given accessing preferences directly exports[`preferences - closing-preferences given accessing preferences directly when navigating to a tab in preferences renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -708,6 +798,51 @@ exports[`preferences - closing-preferences given accessing preferences directly exports[`preferences - closing-preferences given accessing preferences directly when navigating to a tab in preferences when preferences are closed renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -729,6 +864,51 @@ exports[`preferences - closing-preferences given accessing preferences directly exports[`preferences - closing-preferences given accessing preferences directly when preferences are closed renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -750,6 +930,51 @@ exports[`preferences - closing-preferences given accessing preferences directly exports[`preferences - closing-preferences given already in a page and then navigated to preferences renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -1301,6 +1526,51 @@ exports[`preferences - closing-preferences given already in a page and then navi exports[`preferences - closing-preferences given already in a page and then navigated to preferences when navigating to a tab in preferences renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -1456,6 +1726,51 @@ exports[`preferences - closing-preferences given already in a page and then navi exports[`preferences - closing-preferences given already in a page and then navigated to preferences when navigating to a tab in preferences when preferences are closed renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -1611,6 +1926,51 @@ exports[`preferences - closing-preferences given already in a page and then navi exports[`preferences - closing-preferences given already in a page and then navigated to preferences when preferences are closed renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/preferences/__snapshots__/navigation-to-application-preferences.test.ts.snap b/src/behaviours/preferences/__snapshots__/navigation-to-application-preferences.test.ts.snap index 44dd4be6ca..b4b2807e5c 100644 --- a/src/behaviours/preferences/__snapshots__/navigation-to-application-preferences.test.ts.snap +++ b/src/behaviours/preferences/__snapshots__/navigation-to-application-preferences.test.ts.snap @@ -2,6 +2,51 @@ exports[`preferences - navigation to application preferences given in some child page of preferences, when rendered renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -217,6 +262,51 @@ exports[`preferences - navigation to application preferences given in some child exports[`preferences - navigation to application preferences given in some child page of preferences, when rendered when navigating to application preferences using navigation renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/preferences/__snapshots__/navigation-to-editor-preferences.test.ts.snap b/src/behaviours/preferences/__snapshots__/navigation-to-editor-preferences.test.ts.snap index c36139e3a7..d40c0086d6 100644 --- a/src/behaviours/preferences/__snapshots__/navigation-to-editor-preferences.test.ts.snap +++ b/src/behaviours/preferences/__snapshots__/navigation-to-editor-preferences.test.ts.snap @@ -2,6 +2,51 @@ exports[`preferences - navigation to editor preferences given in preferences, when rendered renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -541,6 +586,51 @@ exports[`preferences - navigation to editor preferences given in preferences, wh exports[`preferences - navigation to editor preferences given in preferences, when rendered when navigating to editor preferences using navigation renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/preferences/__snapshots__/navigation-to-extension-specific-preferences.test.tsx.snap b/src/behaviours/preferences/__snapshots__/navigation-to-extension-specific-preferences.test.tsx.snap index 79787b5d8d..41039b5881 100644 --- a/src/behaviours/preferences/__snapshots__/navigation-to-extension-specific-preferences.test.tsx.snap +++ b/src/behaviours/preferences/__snapshots__/navigation-to-extension-specific-preferences.test.tsx.snap @@ -17,6 +17,51 @@ exports[`preferences - navigation to extension specific preferences given in pre exports[`preferences - navigation to extension specific preferences given in preferences, when rendered given extension with registered tab when navigating to specific extension tab renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -206,6 +251,51 @@ exports[`preferences - navigation to extension specific preferences given in pre exports[`preferences - navigation to extension specific preferences given in preferences, when rendered given extensions with tabs having same id when navigating to first extension tab renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -407,6 +497,51 @@ exports[`preferences - navigation to extension specific preferences given in pre exports[`preferences - navigation to extension specific preferences given in preferences, when rendered given extensions with tabs having same id when navigating to second extension tab renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -608,6 +743,51 @@ exports[`preferences - navigation to extension specific preferences given in pre exports[`preferences - navigation to extension specific preferences given in preferences, when rendered given multiple extensions with specific preferences, when navigating to extension specific preferences page renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -832,6 +1012,51 @@ exports[`preferences - navigation to extension specific preferences given in pre exports[`preferences - navigation to extension specific preferences given in preferences, when rendered renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -1371,6 +1596,51 @@ exports[`preferences - navigation to extension specific preferences given in pre exports[`preferences - navigation to extension specific preferences given in preferences, when rendered when extension with specific preferences is enabled renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -1945,6 +2215,51 @@ exports[`preferences - navigation to extension specific preferences given in pre exports[`preferences - navigation to extension specific preferences given in preferences, when rendered when extension with specific preferences is enabled when navigating to extension preferences using navigation renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -2158,6 +2473,51 @@ exports[`preferences - navigation to extension specific preferences given in pre exports[`preferences - navigation to extension specific preferences given in preferences, when rendered when extension with specific preferences is enabled when navigating to extension preferences using navigation when extension is disabled renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -2316,6 +2676,51 @@ exports[`preferences - navigation to extension specific preferences given in pre exports[`preferences - navigation to extension specific preferences when navigating to extension specific tab renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -2505,6 +2910,51 @@ exports[`preferences - navigation to extension specific preferences when navigat exports[`preferences - navigation to extension specific preferences when navigating to someone else extension specific tab renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/preferences/__snapshots__/navigation-to-kubernetes-preferences.test.ts.snap b/src/behaviours/preferences/__snapshots__/navigation-to-kubernetes-preferences.test.ts.snap index 2c169f3a13..67796e88af 100644 --- a/src/behaviours/preferences/__snapshots__/navigation-to-kubernetes-preferences.test.ts.snap +++ b/src/behaviours/preferences/__snapshots__/navigation-to-kubernetes-preferences.test.ts.snap @@ -2,6 +2,51 @@ exports[`preferences - navigation to kubernetes preferences given in preferences, when rendered renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -541,6 +586,51 @@ exports[`preferences - navigation to kubernetes preferences given in preferences exports[`preferences - navigation to kubernetes preferences given in preferences, when rendered when navigating to kubernetes preferences using navigation renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/preferences/__snapshots__/navigation-to-proxy-preferences.test.ts.snap b/src/behaviours/preferences/__snapshots__/navigation-to-proxy-preferences.test.ts.snap index d89450a19d..0ee9cc76b1 100644 --- a/src/behaviours/preferences/__snapshots__/navigation-to-proxy-preferences.test.ts.snap +++ b/src/behaviours/preferences/__snapshots__/navigation-to-proxy-preferences.test.ts.snap @@ -2,6 +2,51 @@ exports[`preferences - navigation to proxy preferences given in preferences, when rendered renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -541,6 +586,51 @@ exports[`preferences - navigation to proxy preferences given in preferences, whe exports[`preferences - navigation to proxy preferences given in preferences, when rendered when navigating to proxy preferences using navigation renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/preferences/__snapshots__/navigation-to-telemetry-preferences.test.tsx.snap b/src/behaviours/preferences/__snapshots__/navigation-to-telemetry-preferences.test.tsx.snap index 9b7cb95ae7..5915f12efd 100644 --- a/src/behaviours/preferences/__snapshots__/navigation-to-telemetry-preferences.test.tsx.snap +++ b/src/behaviours/preferences/__snapshots__/navigation-to-telemetry-preferences.test.tsx.snap @@ -2,6 +2,51 @@ exports[`preferences - navigation to telemetry preferences given URL for Sentry DNS, when navigating to preferences when navigating to telemetry preferences renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -203,6 +248,51 @@ exports[`preferences - navigation to telemetry preferences given URL for Sentry exports[`preferences - navigation to telemetry preferences given in preferences, when rendered renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -742,6 +832,51 @@ exports[`preferences - navigation to telemetry preferences given in preferences, exports[`preferences - navigation to telemetry preferences given in preferences, when rendered when extension with telemetry preference items gets enabled renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -1293,6 +1428,51 @@ exports[`preferences - navigation to telemetry preferences given in preferences, exports[`preferences - navigation to telemetry preferences given in preferences, when rendered when extension with telemetry preference items gets enabled when clicking link to telemetry preferences from navigation renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -1482,6 +1662,51 @@ exports[`preferences - navigation to telemetry preferences given in preferences, exports[`preferences - navigation to telemetry preferences given no URL for Sentry DNS, when navigating to telemetry preferences renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/preferences/__snapshots__/navigation-to-terminal-preferences.test.ts.snap b/src/behaviours/preferences/__snapshots__/navigation-to-terminal-preferences.test.ts.snap index 075f780cde..3d1b26f668 100644 --- a/src/behaviours/preferences/__snapshots__/navigation-to-terminal-preferences.test.ts.snap +++ b/src/behaviours/preferences/__snapshots__/navigation-to-terminal-preferences.test.ts.snap @@ -2,6 +2,51 @@ exports[`preferences - navigation to terminal preferences given in preferences, when rendered renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -541,6 +586,51 @@ exports[`preferences - navigation to terminal preferences given in preferences, exports[`preferences - navigation to terminal preferences given in preferences, when rendered when navigating to terminal preferences using navigation renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/preferences/__snapshots__/navigation-using-application-menu.test.ts.snap b/src/behaviours/preferences/__snapshots__/navigation-using-application-menu.test.ts.snap index 212a225aba..339e746af6 100644 --- a/src/behaviours/preferences/__snapshots__/navigation-using-application-menu.test.ts.snap +++ b/src/behaviours/preferences/__snapshots__/navigation-using-application-menu.test.ts.snap @@ -2,6 +2,51 @@ exports[`preferences - navigation using application menu renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -20,6 +65,51 @@ exports[`preferences - navigation using application menu renders 1`] = ` exports[`preferences - navigation using application menu when navigating to preferences using application menu renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/preferences/__snapshots__/navigation-using-tray.test.ts.snap b/src/behaviours/preferences/__snapshots__/navigation-using-tray.test.ts.snap index a53948c022..c395fb5a18 100644 --- a/src/behaviours/preferences/__snapshots__/navigation-using-tray.test.ts.snap +++ b/src/behaviours/preferences/__snapshots__/navigation-using-tray.test.ts.snap @@ -3,6 +3,51 @@ exports[`show-about-using-tray renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -23,6 +68,51 @@ exports[`show-about-using-tray renders 1`] = ` exports[`show-about-using-tray when navigating using tray renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/behaviours/welcome/__snapshots__/navigation-using-application-menu.test.ts.snap b/src/behaviours/welcome/__snapshots__/navigation-using-application-menu.test.ts.snap index 1f1426e962..47b75b4303 100644 --- a/src/behaviours/welcome/__snapshots__/navigation-using-application-menu.test.ts.snap +++ b/src/behaviours/welcome/__snapshots__/navigation-using-application-menu.test.ts.snap @@ -2,6 +2,51 @@ exports[`welcome - navigation using application menu renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -20,6 +65,51 @@ exports[`welcome - navigation using application menu renders 1`] = ` exports[`welcome - navigation using application menu when navigating to welcome using application menu renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/common/__tests__/timezones.test.ts b/src/common/__tests__/timezones.test.ts new file mode 100644 index 0000000000..e7fa68e87c --- /dev/null +++ b/src/common/__tests__/timezones.test.ts @@ -0,0 +1,12 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +describe("Timezones", () => { + it("should always be UTC", () => { + expect(new Date().getTimezoneOffset()).toBe(0); + }); +}); + +export {}; diff --git a/src/common/application-update/restart-and-install-update-channel/restart-and-install-update-channel.injectable.ts b/src/common/application-update/restart-and-install-update-channel/restart-and-install-update-channel.injectable.ts new file mode 100644 index 0000000000..b6d811e101 --- /dev/null +++ b/src/common/application-update/restart-and-install-update-channel/restart-and-install-update-channel.injectable.ts @@ -0,0 +1,21 @@ +/** + * 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 { MessageChannel } from "../../utils/channel/message-channel-injection-token"; +import { messageChannelInjectionToken } from "../../utils/channel/message-channel-injection-token"; + +export type RestartAndInstallUpdateChannel = MessageChannel; + +const restartAndInstallUpdateChannel = getInjectable({ + id: "restart-and-install-update-channel", + + instantiate: (): RestartAndInstallUpdateChannel => ({ + id: "restart-and-install-update-channel", + }), + + injectionToken: messageChannelInjectionToken, +}); + +export default restartAndInstallUpdateChannel; diff --git a/src/common/application-update/update-downloaded-date-time/update-downloaded-date-time.injectable.ts b/src/common/application-update/update-downloaded-date-time/update-downloaded-date-time.injectable.ts new file mode 100644 index 0000000000..32a15d310a --- /dev/null +++ b/src/common/application-update/update-downloaded-date-time/update-downloaded-date-time.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 createSyncBoxInjectable from "../../utils/sync-box/create-sync-box.injectable"; +import { syncBoxInjectionToken } from "../../utils/sync-box/sync-box-injection-token"; + +const updateDownloadedDateTimeInjectable = getInjectable({ + id: "update-downloaded-date-time", + + instantiate: (di) => { + const createSyncBox = di.inject(createSyncBoxInjectable); + + return createSyncBox( + "update-downloaded-date-time", + null, + ); + }, + + injectionToken: syncBoxInjectionToken, +}); + +export default updateDownloadedDateTimeInjectable; diff --git a/src/jest.timezone.ts b/src/jest.timezone.ts new file mode 100644 index 0000000000..ec39a810e3 --- /dev/null +++ b/src/jest.timezone.ts @@ -0,0 +1,11 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +// Setting the timezone to UTC to ensure same timezone for CI and local environments +module.exports = async () => { + process.env.TZ = "UTC"; +}; + +export {}; diff --git a/src/main/application-update/download-update/download-update.injectable.ts b/src/main/application-update/download-update/download-update.injectable.ts index d0ac141b9c..f68b5166c0 100644 --- a/src/main/application-update/download-update/download-update.injectable.ts +++ b/src/main/application-update/download-update/download-update.injectable.ts @@ -9,6 +9,8 @@ import discoveredUpdateVersionInjectable from "../../../common/application-updat import { action, runInAction } from "mobx"; import type { ProgressOfDownload } from "../../../common/application-update/progress-of-update-download/progress-of-update-download.injectable"; import progressOfUpdateDownloadInjectable from "../../../common/application-update/progress-of-update-download/progress-of-update-download.injectable"; +import { getCurrentDateTime } from "../../../common/utils/date/get-current-date-time"; +import updateDownloadedDateTimeInjectable from "../../../common/application-update/update-downloaded-date-time/update-downloaded-date-time.injectable"; const downloadUpdateInjectable = getInjectable({ id: "download-update", @@ -18,6 +20,7 @@ const downloadUpdateInjectable = getInjectable({ const downloadingUpdateState = di.inject(updateIsBeingDownloadedInjectable); const discoveredVersionState = di.inject(discoveredUpdateVersionInjectable); const progressOfUpdateDownload = di.inject(progressOfUpdateDownloadInjectable); + const updateDownloadedDate = di.inject(updateDownloadedDateTimeInjectable); const updateDownloadProgress = action((progressOfDownload: ProgressOfDownload) => { progressOfUpdateDownload.set(progressOfDownload); @@ -38,6 +41,10 @@ const downloadUpdateInjectable = getInjectable({ discoveredVersionState.set(null); } + const currentDateTime = getCurrentDateTime(); + + updateDownloadedDate.set(currentDateTime); + downloadingUpdateState.set(false); }); diff --git a/src/main/application-update/restart-and-install-update/restart-and-install-update-listener.injectable.ts b/src/main/application-update/restart-and-install-update/restart-and-install-update-listener.injectable.ts new file mode 100644 index 0000000000..0580114885 --- /dev/null +++ b/src/main/application-update/restart-and-install-update/restart-and-install-update-listener.injectable.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 { getInjectable } from "@ogre-tools/injectable"; +import restartAndInstallUpdateChannel from "../../../common/application-update/restart-and-install-update-channel/restart-and-install-update-channel.injectable"; +import { messageChannelListenerInjectionToken } from "../../../common/utils/channel/message-channel-listener-injection-token"; +import quitAndInstallUpdateInjectable from "../quit-and-install-update.injectable"; + +const restartAndInstallUpdateListenerInjectable = getInjectable({ + id: "restart-and-install-update-listener", + + instantiate: (di) => { + const quitAndInstall = di.inject(quitAndInstallUpdateInjectable); + const channel = di.inject(restartAndInstallUpdateChannel); + + return { + channel, + handler: quitAndInstall, + }; + }, + + injectionToken: messageChannelListenerInjectionToken, +}); + +export default restartAndInstallUpdateListenerInjectable; diff --git a/src/main/ask-boolean/__snapshots__/ask-boolean.test.ts.snap b/src/main/ask-boolean/__snapshots__/ask-boolean.test.ts.snap index fca2c12cb9..33b2ec4033 100644 --- a/src/main/ask-boolean/__snapshots__/ask-boolean.test.ts.snap +++ b/src/main/ask-boolean/__snapshots__/ask-boolean.test.ts.snap @@ -3,6 +3,51 @@ exports[`ask-boolean given started when asking multiple questions renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -160,6 +205,51 @@ exports[`ask-boolean given started when asking multiple questions renders 1`] = exports[`ask-boolean given started when asking multiple questions when answering to first question renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -249,6 +339,51 @@ exports[`ask-boolean given started when asking multiple questions when answering exports[`ask-boolean given started when asking question renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -338,6 +473,51 @@ exports[`ask-boolean given started when asking question renders 1`] = ` exports[`ask-boolean given started when asking question when user answers "no" renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -358,6 +538,51 @@ exports[`ask-boolean given started when asking question when user answers "no" r exports[`ask-boolean given started when asking question when user answers "yes" renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
@@ -378,6 +603,51 @@ exports[`ask-boolean given started when asking question when user answers "yes" exports[`ask-boolean given started when asking question when user closes notification without answering the question renders 1`] = `
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
diff --git a/src/renderer/components/layout/top-bar/top-bar.tsx b/src/renderer/components/layout/top-bar/top-bar.tsx index 50b3c84f1c..59382d56f0 100644 --- a/src/renderer/components/layout/top-bar/top-bar.tsx +++ b/src/renderer/components/layout/top-bar/top-bar.tsx @@ -8,8 +8,7 @@ import React, { useEffect, useRef } from "react"; import { observer } from "mobx-react"; import type { IComputedValue } from "mobx"; import { Icon } from "../../icon"; -import { watchHistoryState } from "../../../remote-helpers/history-updater"; -import { cssNames, noop } from "../../../utils"; +import { cssNames } from "../../../utils"; import topBarItemsInjectable from "./top-bar-items/top-bar-items.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { TopBarRegistration } from "./top-bar-registration"; @@ -28,6 +27,7 @@ import goForwardInjectable from "./go-forward.injectable"; import closeWindowInjectable from "./close-window.injectable"; import maximizeWindowInjectable from "./maximize-window.injectable"; import toggleMaximizeWindowInjectable from "./toggle-maximize-window.injectable"; +import watchHistoryStateInjectable from "../../../remote-helpers/watch-history-state.injectable"; interface Dependencies { navigateToCatalog: NavigateToCatalog; @@ -43,6 +43,7 @@ interface Dependencies { minimizeWindow: () => void; toggleMaximizeWindow: () => void; closeWindow: () => void; + watchHistoryState: () => () => void; } const NonInjectedTopBar = observer(({ @@ -59,6 +60,7 @@ const NonInjectedTopBar = observer(({ closeWindow, minimizeWindow, toggleMaximizeWindow, + watchHistoryState, }: Dependencies) => { const elem = useRef(null); @@ -115,7 +117,7 @@ const NonInjectedTopBar = observer(({ onClick={goForward} disabled={!nextEnabled.get()} /> - +
{renderRegisteredItems(items.get())} @@ -196,5 +198,6 @@ export const TopBar = withInjectables(NonInjectedTopBar, { closeWindow: di.inject(closeWindowInjectable), minimizeWindow: di.inject(maximizeWindowInjectable), toggleMaximizeWindow: di.inject(toggleMaximizeWindowInjectable), + watchHistoryState: di.inject(watchHistoryStateInjectable), }), }); diff --git a/src/renderer/components/menu/menu.scss b/src/renderer/components/menu/menu.scss index 943fed026b..30e92d2a75 100644 --- a/src/renderer/components/menu/menu.scss +++ b/src/renderer/components/menu/menu.scss @@ -55,7 +55,7 @@ display: flex; align-items: center; color: var(--color); - padding: 6px var(--padding); + padding: calc(var(--padding) / 2) var(--padding); margin-bottom: -3px; white-space: nowrap; text-decoration: none; diff --git a/src/renderer/components/test-utils/get-application-builder.tsx b/src/renderer/components/test-utils/get-application-builder.tsx index 0274bb7d6d..25101ae634 100644 --- a/src/renderer/components/test-utils/get-application-builder.tsx +++ b/src/renderer/components/test-utils/get-application-builder.tsx @@ -62,6 +62,7 @@ import type { LensMainExtension } from "../../../extensions/lens-main-extension" import type { LensExtension } from "../../../extensions/lens-extension"; import extensionInjectable from "../../../extensions/extension-loader/extension/extension.injectable"; +import { TopBar } from "../layout/top-bar/top-bar"; type Callback = (dis: DiContainers) => void | Promise; @@ -125,6 +126,7 @@ interface DiContainers { interface Environment { renderSidebar: () => React.ReactNode; + renderTopBar: () => React.ReactNode; renderStatusBar: () => React.ReactNode; beforeRender: () => void; onAllowKubeResource: () => void; @@ -166,6 +168,8 @@ export const getApplicationBuilder = () => { application: { renderSidebar: () => null, + renderTopBar: () => , + renderStatusBar: () => , beforeRender: () => { @@ -184,6 +188,7 @@ export const getApplicationBuilder = () => { clusterFrame: { renderSidebar: () => , renderStatusBar: () => null, + renderTopBar: () => null, beforeRender: () => {}, onAllowKubeResource: () => {}, } as Environment, @@ -482,6 +487,7 @@ export const getApplicationBuilder = () => { rendered = render( {environment.renderSidebar()} + {environment.renderTopBar()} {environment.renderStatusBar()} diff --git a/src/renderer/components/update-button/__tests__/__snapshots__/update-button.test.tsx.snap b/src/renderer/components/update-button/__tests__/__snapshots__/update-button.test.tsx.snap deleted file mode 100644 index 3492065df4..0000000000 --- a/src/renderer/components/update-button/__tests__/__snapshots__/update-button.test.tsx.snap +++ /dev/null @@ -1,22 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[` should render if warning level prop passed 1`] = ` - -`; diff --git a/src/renderer/components/update-button/__tests__/update-button.test.tsx b/src/renderer/components/update-button/__tests__/update-button.test.tsx deleted file mode 100644 index 8133bd3845..0000000000 --- a/src/renderer/components/update-button/__tests__/update-button.test.tsx +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { act } from "@testing-library/react"; -import React from "react"; -import { UpdateButton } from "../update-button"; -import "@testing-library/jest-dom/extend-expect"; -import { getDiForUnitTesting } from "../../../getDiForUnitTesting"; -import type { DiRender } from "../../test-utils/renderFor"; -import { renderFor } from "../../test-utils/renderFor"; - -const update = jest.fn(); - -describe("", () => { - let render: DiRender; - - beforeEach(() => { - - const di = getDiForUnitTesting({ doGeneralOverrides: true }); - - render = renderFor(di); - - update.mockClear(); - }); - - it("should not render if no warning level prop passed", () => { - const { queryByTestId } = render(); - - expect(queryByTestId("update-button")).not.toBeInTheDocument(); - }); - - it("should render if warning level prop passed", () => { - const { getByTestId } = render(); - - expect(getByTestId("update-button")).toMatchSnapshot(); - }); - - it("should open menu when clicked", async () => { - const { getByTestId } = render(); - - const button = getByTestId("update-button"); - - act(() => button.click()); - - expect(getByTestId("update-lens-menu-item")).toBeInTheDocument(); - }); - - it("should call update function when menu item clicked", () => { - const { getByTestId } = render(); - - const button = getByTestId("update-button"); - - act(() => button.click()); - - const menuItem = getByTestId("update-lens-menu-item"); - - menuItem.click(); - - expect(update).toHaveBeenCalled(); - }); - - it("should have light warning level", () => { - const { getByTestId } = render(); - - const button = getByTestId("update-button"); - - expect(button.dataset.warningLevel).toBe("light"); - }); - - it("should have medium warning level", () => { - const { getByTestId } = render(); - - const button = getByTestId("update-button"); - - expect(button.dataset.warningLevel).toBe("medium"); - }); - - it("should have high warning level", () => { - const { getByTestId } = render(); - - const button = getByTestId("update-button"); - - expect(button.dataset.warningLevel).toBe("high"); - }); -}); diff --git a/src/renderer/components/update-button/restart-and-install-update.injectable.ts b/src/renderer/components/update-button/restart-and-install-update.injectable.ts new file mode 100644 index 0000000000..854e0a428f --- /dev/null +++ b/src/renderer/components/update-button/restart-and-install-update.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 restartAndInstallUpdateChannel from "../../../common/application-update/restart-and-install-update-channel/restart-and-install-update-channel.injectable"; +import messageToChannelInjectable from "../../utils/channel/message-to-channel.injectable"; + +const restartAndInstallUpdateInjectable = getInjectable({ + id: "restart-and-install-update", + + instantiate: (di) => { + const messageToChannel = di.inject(messageToChannelInjectable); + const channel = di.inject(restartAndInstallUpdateChannel); + + return () => { + messageToChannel(channel); + }; + }, +}); + +export default restartAndInstallUpdateInjectable; diff --git a/src/renderer/components/update-button/styles.module.scss b/src/renderer/components/update-button/styles.module.scss index ad4d39a7dd..14b607327b 100644 --- a/src/renderer/components/update-button/styles.module.scss +++ b/src/renderer/components/update-button/styles.module.scss @@ -11,7 +11,7 @@ color: var(--accent-color); display: flex; align-items: center; - padding: 4px 8px; + padding: calc(var(--padding) / 4) var(--padding); gap: 6px; cursor: default; position: relative; diff --git a/src/renderer/components/update-button/update-button.tsx b/src/renderer/components/update-button/update-button.tsx index 6da453de3d..029b58f3fe 100644 --- a/src/renderer/components/update-button/update-button.tsx +++ b/src/renderer/components/update-button/update-button.tsx @@ -11,22 +11,30 @@ import { Menu, MenuItem } from "../menu"; import { cssNames } from "../../utils"; import type { IconProps } from "../icon"; import { Icon } from "../icon"; +import { withInjectables } from "@ogre-tools/injectable-react"; +import { observer } from "mobx-react"; +import type { IComputedValue } from "mobx"; +import restartAndInstallUpdateInjectable from "./restart-and-install-update.injectable"; +import updateWarningLevelInjectable from "./update-warning-level.injectable"; -interface UpdateButtonProps extends HTMLAttributes { - warningLevel?: "light" | "medium" | "high"; +interface UpdateButtonProps extends HTMLAttributes {} + +interface Dependencies { + warningLevel: IComputedValue<"light" | "medium" | "high" | "">; update: () => void; } -export function UpdateButton({ warningLevel, update, id }: UpdateButtonProps) { +export const NonInjectedUpdateButton = observer(({ warningLevel, update, id }: UpdateButtonProps & Dependencies) => { const buttonId = id ?? "update-lens-button"; const menuIconProps: IconProps = { material: "update", small: true }; const [opened, setOpened] = useState(false); + const level = warningLevel.get(); const toggle = () => { setOpened(!opened); }; - if (!warningLevel) { + if (!level) { return null; } @@ -34,11 +42,11 @@ export function UpdateButton({ warningLevel, update, id }: UpdateButtonProps) { <>
-
-
-
- - - info_outline - - -
-
-
- - Update Available - -

- Version some-version of Lens IDE is available and ready to be installed. Would you like to update now? - -Lens should restart automatically, if it doesn't please restart manually. Installed extensions might require updating. -

-
- - -
-
-
-
- `; -exports[`installing update when started when user checks for updates when new update is discovered when download succeeds when user answers not to install the update renders 1`] = ` - -
-
-
- - - home - - - - - arrow_back - - - - - arrow_forward - - - -
-
-
-
-
-
-
-
-
- -`; - -exports[`installing update when started when user checks for updates when new update is discovered when download succeeds when user answers to install the update renders 1`] = ` - -
-
-
- - - home - - - - - arrow_back - - - - - arrow_forward - - - -
-
-
-
-
-
-
-
-
- -`; - exports[`installing update when started when user checks for updates when no new update is discovered renders 1`] = `
diff --git a/src/behaviours/application-update/installing-update.test.ts b/src/behaviours/application-update/installing-update.test.ts index 14cd107598..2d3516a6ed 100644 --- a/src/behaviours/application-update/installing-update.test.ts +++ b/src/behaviours/application-update/installing-update.test.ts @@ -15,8 +15,6 @@ import asyncFn from "@async-fn/jest"; import type { DownloadPlatformUpdate } from "../../main/application-update/download-platform-update/download-platform-update.injectable"; import downloadPlatformUpdateInjectable from "../../main/application-update/download-platform-update/download-platform-update.injectable"; import setUpdateOnQuitInjectable from "../../main/electron-app/features/set-update-on-quit.injectable"; -import type { AskBoolean } from "../../main/ask-boolean/ask-boolean.injectable"; -import askBooleanInjectable from "../../main/ask-boolean/ask-boolean.injectable"; import showInfoNotificationInjectable from "../../renderer/components/notifications/show-info-notification.injectable"; import processCheckingForUpdatesInjectable from "../../main/application-update/check-for-updates/process-checking-for-updates.injectable"; @@ -27,7 +25,6 @@ describe("installing update", () => { let downloadPlatformUpdateMock: AsyncFnMock; let setUpdateOnQuitMock: jest.Mock; let showInfoNotificationMock: jest.Mock; - let askBooleanMock: AsyncFnMock; beforeEach(() => { applicationBuilder = getApplicationBuilder(); @@ -38,11 +35,9 @@ describe("installing update", () => { downloadPlatformUpdateMock = asyncFn(); setUpdateOnQuitMock = jest.fn(); showInfoNotificationMock = jest.fn(() => () => {}); - askBooleanMock = asyncFn(); rendererDi.override(showInfoNotificationInjectable, () => showInfoNotificationMock); - mainDi.override(askBooleanInjectable, () => askBooleanMock); mainDi.override(setUpdateOnQuitInjectable, () => setUpdateOnQuitMock); mainDi.override( @@ -160,10 +155,6 @@ describe("installing update", () => { expect(showInfoNotificationMock).toHaveBeenCalledWith("Download of update failed"); }); - it("does not ask user to install update", () => { - expect(askBooleanMock).not.toHaveBeenCalled(); - }); - it("renders", () => { expect(rendered.baseElement).toMatchSnapshot(); }); @@ -181,43 +172,6 @@ describe("installing update", () => { it("renders", () => { expect(rendered.baseElement).toMatchSnapshot(); }); - - it("asks user to install update immediately", () => { - expect(askBooleanMock).toHaveBeenCalledWith({ - title: "Update Available", - question: - "Version some-version of Lens IDE is available and ready to be installed. Would you like to update now?\n\n" + - "Lens should restart automatically, if it doesn't please restart manually. Installed extensions might require updating.", - }); - }); - - describe("when user answers to install the update", () => { - beforeEach(async () => { - await askBooleanMock.resolve(true); - }); - - it("renders", () => { - expect(rendered.baseElement).toMatchSnapshot(); - }); - - it("quits application and installs the update", () => { - expect(quitAndInstallUpdateMock).toHaveBeenCalled(); - }); - }); - - describe("when user answers not to install the update", () => { - beforeEach(async () => { - await askBooleanMock.resolve(false); - }); - - it("renders", () => { - expect(rendered.baseElement).toMatchSnapshot(); - }); - - it("does not quit application and install the update", () => { - expect(quitAndInstallUpdateMock).not.toHaveBeenCalled(); - }); - }); }); }); }); diff --git a/src/behaviours/application-update/selection-of-update-stability.test.ts b/src/behaviours/application-update/selection-of-update-stability.test.ts index 1fd6e22dbd..c934e7fc43 100644 --- a/src/behaviours/application-update/selection-of-update-stability.test.ts +++ b/src/behaviours/application-update/selection-of-update-stability.test.ts @@ -19,8 +19,6 @@ import downloadPlatformUpdateInjectable from "../../main/application-update/down import selectedUpdateChannelInjectable from "../../common/application-update/selected-update-channel/selected-update-channel.injectable"; import type { IComputedValue } from "mobx"; import setUpdateOnQuitInjectable from "../../main/electron-app/features/set-update-on-quit.injectable"; -import type { AskBoolean } from "../../main/ask-boolean/ask-boolean.injectable"; -import askBooleanInjectable from "../../main/ask-boolean/ask-boolean.injectable"; import showInfoNotificationInjectable from "../../renderer/components/notifications/show-info-notification.injectable"; import processCheckingForUpdatesInjectable from "../../main/application-update/check-for-updates/process-checking-for-updates.injectable"; import appVersionInjectable from "../../common/get-configuration-file-model/app-version/app-version.injectable"; @@ -32,7 +30,6 @@ describe("selection of update stability", () => { let downloadPlatformUpdateMock: AsyncFnMock; let setUpdateOnQuitMock: jest.Mock; let showInfoNotificationMock: jest.Mock; - let askBooleanMock: AsyncFnMock; beforeEach(() => { applicationBuilder = getApplicationBuilder(); @@ -43,11 +40,9 @@ describe("selection of update stability", () => { downloadPlatformUpdateMock = asyncFn(); setUpdateOnQuitMock = jest.fn(); showInfoNotificationMock = jest.fn(() => () => {}); - askBooleanMock = asyncFn(); rendererDi.override(showInfoNotificationInjectable, () => showInfoNotificationMock); - mainDi.override(askBooleanInjectable, () => askBooleanMock); mainDi.override(setUpdateOnQuitInjectable, () => setUpdateOnQuitMock); mainDi.override( diff --git a/src/main/application-update/check-for-updates/process-checking-for-updates.injectable.ts b/src/main/application-update/check-for-updates/process-checking-for-updates.injectable.ts index a7066468da..bd3501b5d8 100644 --- a/src/main/application-update/check-for-updates/process-checking-for-updates.injectable.ts +++ b/src/main/application-update/check-for-updates/process-checking-for-updates.injectable.ts @@ -7,21 +7,17 @@ import selectedUpdateChannelInjectable from "../../../common/application-update/ import updatesAreBeingDiscoveredInjectable from "../../../common/application-update/updates-are-being-discovered/updates-are-being-discovered.injectable"; import discoveredUpdateVersionInjectable from "../../../common/application-update/discovered-update-version/discovered-update-version.injectable"; import { runInAction } from "mobx"; -import askBooleanInjectable from "../../ask-boolean/ask-boolean.injectable"; import downloadUpdateInjectable from "../download-update/download-update.injectable"; import broadcastChangeInUpdatingStatusInjectable from "./broadcast-change-in-updating-status.injectable"; import checkForUpdatesStartingFromChannelInjectable from "./check-for-updates-starting-from-channel.injectable"; import withOrphanPromiseInjectable from "../../../common/utils/with-orphan-promise/with-orphan-promise.injectable"; import emitEventInjectable from "../../../common/app-event-bus/emit-event.injectable"; import { getCurrentDateTime } from "../../../common/utils/date/get-current-date-time"; -import quitAndInstallUpdateInjectable from "../quit-and-install-update.injectable"; const processCheckingForUpdatesInjectable = getInjectable({ id: "process-checking-for-updates", instantiate: (di) => { - const askBoolean = di.inject(askBooleanInjectable); - const quitAndInstallUpdate = di.inject(quitAndInstallUpdateInjectable); const downloadUpdate = di.inject(downloadUpdateInjectable); const selectedUpdateChannel = di.inject(selectedUpdateChannelInjectable); const broadcastChangeInUpdatingStatus = di.inject(broadcastChangeInUpdatingStatusInjectable); @@ -86,19 +82,6 @@ const processCheckingForUpdatesInjectable = getInjectable({ broadcastChangeInUpdatingStatus({ eventId: "download-for-update-failed", }); - - return; - } - - const userWantsToInstallUpdate = await askBoolean({ - title: "Update Available", - - question: `Version ${version} of Lens IDE is available and ready to be installed. Would you like to update now?\n\n` + - `Lens should restart automatically, if it doesn't please restart manually. Installed extensions might require updating.`, - }); - - if (userWantsToInstallUpdate) { - quitAndInstallUpdate(); } })(); }; diff --git a/src/main/ask-boolean/__snapshots__/ask-boolean.test.ts.snap b/src/main/ask-boolean/__snapshots__/ask-boolean.test.ts.snap deleted file mode 100644 index 33b2ec4033..0000000000 --- a/src/main/ask-boolean/__snapshots__/ask-boolean.test.ts.snap +++ /dev/null @@ -1,666 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`ask-boolean given started when asking multiple questions renders 1`] = ` - -
-
-
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
-
-
-
-
-
- - - info_outline - - -
-
-
- - some-title - -

- Some question -

-
- - -
-
-
-
- - - close - - -
-
-
-
- - - info_outline - - -
-
-
- - some-other-title - -

- Some other question -

-
- - -
-
-
-
- - - close - - -
-
-
-
- -`; - -exports[`ask-boolean given started when asking multiple questions when answering to first question renders 1`] = ` - -
-
-
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
-
-
-
-
-
- - - info_outline - - -
-
-
- - some-other-title - -

- Some other question -

-
- - -
-
-
-
- - - close - - -
-
-
-
- -`; - -exports[`ask-boolean given started when asking question renders 1`] = ` - -
-
-
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
-
-
-
-
-
- - - info_outline - - -
-
-
- - some-title - -

- Some question -

-
- - -
-
-
-
- - - close - - -
-
-
-
- -`; - -exports[`ask-boolean given started when asking question when user answers "no" renders 1`] = ` - -
-
-
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
-
-
-
-
- -`; - -exports[`ask-boolean given started when asking question when user answers "yes" renders 1`] = ` - -
-
-
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
-
-
-
-
- -`; - -exports[`ask-boolean given started when asking question when user closes notification without answering the question renders 1`] = ` - -
-
-
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
-
-
-
-
- -`; diff --git a/src/main/ask-boolean/ask-boolean-answer-channel-listener.injectable.ts b/src/main/ask-boolean/ask-boolean-answer-channel-listener.injectable.ts deleted file mode 100644 index 06bc3972eb..0000000000 --- a/src/main/ask-boolean/ask-boolean-answer-channel-listener.injectable.ts +++ /dev/null @@ -1,29 +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 type { AskBooleanAnswerChannel } from "../../common/ask-boolean/ask-boolean-answer-channel.injectable"; -import askBooleanAnswerChannelInjectable from "../../common/ask-boolean/ask-boolean-answer-channel.injectable"; -import askBooleanPromiseInjectable from "./ask-boolean-promise.injectable"; -import type { MessageChannelListener } from "../../common/utils/channel/message-channel-listener-injection-token"; -import { messageChannelListenerInjectionToken } from "../../common/utils/channel/message-channel-listener-injection-token"; - - -const askBooleanAnswerChannelListenerInjectable = getInjectable({ - id: "ask-boolean-answer-channel-listener", - - instantiate: (di): MessageChannelListener => ({ - channel: di.inject(askBooleanAnswerChannelInjectable), - - handler: ({ id, value }) => { - const answerPromise = di.inject(askBooleanPromiseInjectable, id); - - answerPromise.resolve(value); - }, - }), - - injectionToken: messageChannelListenerInjectionToken, -}); - -export default askBooleanAnswerChannelListenerInjectable; diff --git a/src/main/ask-boolean/ask-boolean-promise.injectable.ts b/src/main/ask-boolean/ask-boolean-promise.injectable.ts deleted file mode 100644 index 827714084f..0000000000 --- a/src/main/ask-boolean/ask-boolean-promise.injectable.ts +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; - -const askBooleanPromiseInjectable = getInjectable({ - id: "ask-boolean-promise", - - instantiate: (di, questionId: string) => { - void questionId; - - let resolve: (value: boolean) => void; - - const promise = new Promise(_resolve => { - resolve = _resolve; - }); - - return ({ - promise, - - resolve: (value: boolean) => { - resolve(value); - }, - }); - }, - - lifecycle: lifecycleEnum.keyedSingleton({ - getInstanceKey: (di, questionId: string) => questionId, - }), -}); - -export default askBooleanPromiseInjectable; diff --git a/src/main/ask-boolean/ask-boolean.injectable.ts b/src/main/ask-boolean/ask-boolean.injectable.ts deleted file mode 100644 index 1fa54629b2..0000000000 --- a/src/main/ask-boolean/ask-boolean.injectable.ts +++ /dev/null @@ -1,39 +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 { messageToChannelInjectionToken } from "../../common/utils/channel/message-to-channel-injection-token"; -import askBooleanQuestionChannelInjectable from "../../common/ask-boolean/ask-boolean-question-channel.injectable"; -import askBooleanPromiseInjectable from "./ask-boolean-promise.injectable"; -import getRandomIdInjectable from "../../common/utils/get-random-id.injectable"; - -export type AskBoolean = ({ - title, - question, -}: { - title: string; - question: string; -}) => Promise; - -const askBooleanInjectable = getInjectable({ - id: "ask-boolean", - - instantiate: (di): AskBoolean => { - const messageToChannel = di.inject(messageToChannelInjectionToken); - const askBooleanChannel = di.inject(askBooleanQuestionChannelInjectable); - const getRandomId = di.inject(getRandomIdInjectable); - - return async ({ title, question }) => { - const id = getRandomId(); - - const returnValuePromise = di.inject(askBooleanPromiseInjectable, id); - - await messageToChannel(askBooleanChannel, { id, title, question }); - - return await returnValuePromise.promise; - }; - }, -}); - -export default askBooleanInjectable; diff --git a/src/main/ask-boolean/ask-boolean.test.ts b/src/main/ask-boolean/ask-boolean.test.ts deleted file mode 100644 index 79fecdceca..0000000000 --- a/src/main/ask-boolean/ask-boolean.test.ts +++ /dev/null @@ -1,206 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ -import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; -import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; -import type { AskBoolean } from "./ask-boolean.injectable"; -import askBooleanInjectable from "./ask-boolean.injectable"; -import { getPromiseStatus } from "../../common/test-utils/get-promise-status"; -import type { RenderResult } from "@testing-library/react"; -import { fireEvent } from "@testing-library/react"; -import getRandomIdInjectable from "../../common/utils/get-random-id.injectable"; - -describe("ask-boolean", () => { - let applicationBuilder: ApplicationBuilder; - let askBoolean: AskBoolean; - - beforeEach(() => { - applicationBuilder = getApplicationBuilder(); - - const getRandomIdFake = jest - .fn() - .mockReturnValueOnce("some-random-id-1") - .mockReturnValueOnce("some-random-id-2"); - - applicationBuilder.dis.mainDi.override(getRandomIdInjectable, () => getRandomIdFake); - - askBoolean = applicationBuilder.dis.mainDi.inject(askBooleanInjectable); - }); - - describe("given started", () => { - let rendered: RenderResult; - - beforeEach(async () => { - rendered = await applicationBuilder.render(); - }); - - describe("when asking question", () => { - let actualPromise: Promise; - - beforeEach(() => { - actualPromise = askBoolean({ - title: "some-title", - question: "Some question", - }); - }); - - it("does not resolve yet", async () => { - const promiseStatus = await getPromiseStatus(actualPromise); - - expect(promiseStatus.fulfilled).toBe(false); - }); - - it("renders", () => { - expect(rendered.baseElement).toMatchSnapshot(); - }); - - it("shows notification", () => { - const notification = rendered.getByTestId("ask-boolean-some-random-id-1"); - - expect(notification).not.toBeUndefined(); - }); - - describe('when user answers "yes"', () => { - beforeEach(() => { - const button = rendered.getByTestId("ask-boolean-some-random-id-1-button-yes"); - - fireEvent.click(button); - }); - - it("renders", () => { - expect(rendered.baseElement).toMatchSnapshot(); - }); - - it("does not show notification anymore", () => { - const notification = rendered.queryByTestId("ask-boolean-some-random-id-1"); - - expect(notification).toBeNull(); - }); - - it("resolves", async () => { - const actual = await actualPromise; - - expect(actual).toBe(true); - }); - }); - - describe('when user answers "no"', () => { - beforeEach(() => { - const button = rendered.getByTestId("ask-boolean-some-random-id-1-button-no"); - - fireEvent.click(button); - }); - - it("renders", () => { - expect(rendered.baseElement).toMatchSnapshot(); - }); - - it("does not show notification anymore", () => { - const notification = rendered.queryByTestId("ask-boolean-some-random-id-1"); - - expect(notification).toBeNull(); - }); - - it("resolves", async () => { - const actual = await actualPromise; - - expect(actual).toBe(false); - }); - }); - - describe("when user closes notification without answering the question", () => { - beforeEach(() => { - const button = rendered.getByTestId("close-notification-for-ask-boolean-for-some-random-id-1"); - - fireEvent.click(button); - }); - - it("renders", () => { - expect(rendered.baseElement).toMatchSnapshot(); - }); - - it("does not show notification anymore", () => { - const notification = rendered.queryByTestId("ask-boolean-some-random-id-1"); - - expect(notification).toBeNull(); - }); - - it("resolves", async () => { - const actual = await actualPromise; - - expect(actual).toBe(false); - }); - }); - }); - - describe("when asking multiple questions", () => { - let firstQuestionPromise: Promise; - let secondQuestionPromise: Promise; - - beforeEach(() => { - firstQuestionPromise = askBoolean({ - title: "some-title", - question: "Some question", - }); - - secondQuestionPromise = askBoolean({ - title: "some-other-title", - question: "Some other question", - }); - }); - - it("renders", () => { - expect(rendered.baseElement).toMatchSnapshot(); - }); - - it("shows notification for first question", () => { - const notification = rendered.getByTestId("ask-boolean-some-random-id-1"); - - expect(notification).not.toBeUndefined(); - }); - - it("shows notification for second question", () => { - const notification = rendered.getByTestId("ask-boolean-some-random-id-2"); - - expect(notification).not.toBeUndefined(); - }); - - describe("when answering to first question", () => { - beforeEach(() => { - const button = rendered.getByTestId("ask-boolean-some-random-id-1-button-no"); - - fireEvent.click(button); - }); - - it("renders", () => { - expect(rendered.baseElement).toMatchSnapshot(); - }); - - it("does not show notification for first question anymore", () => { - const notification = rendered.queryByTestId("ask-boolean-some-random-id-1"); - - expect(notification).toBeNull(); - }); - - it("still shows notification for second question", () => { - const notification = rendered.getByTestId("ask-boolean-some-random-id-2"); - - expect(notification).not.toBeUndefined(); - }); - - it("resolves first question", async () => { - const actual = await firstQuestionPromise; - - expect(actual).toBe(false); - }); - - it("does not resolve second question yet", async () => { - const promiseStatus = await getPromiseStatus(secondQuestionPromise); - - expect(promiseStatus.fulfilled).toBe(false); - }); - }); - }); - }); -}); From 54ba7b13cd38278dbd33e22cfc36ec922642e61f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Jun 2022 12:01:13 -0400 Subject: [PATCH 027/248] Bump playwright from 1.22.2 to 1.23.0 (#5748) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 38a57c50e2..b6e828b450 100644 --- a/package.json +++ b/package.json @@ -392,7 +392,7 @@ "node-gyp": "7.1.2", "node-loader": "^2.0.0", "nodemon": "^2.0.18", - "playwright": "^1.22.2", + "playwright": "^1.23.0", "postcss": "^8.4.14", "postcss-loader": "^6.2.1", "randomcolor": "^0.6.2", diff --git a/yarn.lock b/yarn.lock index 23aa7b788a..62a012045d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10164,17 +10164,17 @@ pkg-up@^3.1.0: dependencies: find-up "^3.0.0" -playwright-core@1.22.2: - version "1.22.2" - resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.22.2.tgz#ed2963d79d71c2a18d5a6fd25b60b9f0a344661a" - integrity sha512-w/hc/Ld0RM4pmsNeE6aL/fPNWw8BWit2tg+TfqJ3+p59c6s3B6C8mXvXrIPmfQEobkcFDc+4KirNzOQ+uBSP1Q== +playwright-core@1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/playwright-core/-/playwright-core-1.23.0.tgz#51e24121b3a5bbe759d79738d8eff7a63156293c" + integrity sha512-Zzhyr5RZGoJ1ek2sgfJCt2076kdOg8hnNwFBqAYeLySiutXyxSQk93vZ5gbnFiWV1sHvueCcwla9n35acUTxtA== -playwright@^1.22.2: - version "1.22.2" - resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.22.2.tgz#353a7c29f89ca9600edc7a9a30aed790823c797d" - integrity sha512-hUTpg7LytIl3/O4t0AQJS1V6hWsaSY5uZ7w1oCC8r3a1AQN5d6otIdCkiB3cbzgQkcMaRxisinjMFMVqZkybdQ== +playwright@^1.23.0: + version "1.23.0" + resolved "https://registry.yarnpkg.com/playwright/-/playwright-1.23.0.tgz#93b53fa0ba194d62b8af1be7e2bceff3585fe031" + integrity sha512-rfZfuLueBPGV3UdEqPQxS8Uw7TgVMATWSPb3O0oV8SZBmVAhOndkOU9MPP8dxJoQI68r94yevuObPr14PhW9Xg== dependencies: - playwright-core "1.22.2" + playwright-core "1.23.0" plist@^3.0.1, plist@^3.0.4: version "3.0.5" From 41fc9089b5225c291042026818831c28dfb4d75c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 28 Jun 2022 12:01:26 -0400 Subject: [PATCH 028/248] Bump typedoc from 0.22.17 to 0.23.2 (#5746) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Sebastian Malton --- package.json | 4 ++-- yarn.lock | 28 ++++++++-------------------- 2 files changed, 10 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index b6e828b450..e521e2399e 100644 --- a/package.json +++ b/package.json @@ -414,8 +414,8 @@ "ts-node": "^10.8.1", "type-fest": "^2.14.0", "typed-emitter": "^1.4.0", - "typedoc": "0.22.17", - "typedoc-plugin-markdown": "^3.11.12", + "typedoc": "0.23.2", + "typedoc-plugin-markdown": "^3.13.1", "typescript": "^4.7.4", "typescript-plugin-css-modules": "^3.4.0", "webpack": "^5.73.0", diff --git a/yarn.lock b/yarn.lock index 62a012045d..e4e88778f3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6350,17 +6350,6 @@ glob@^7.0.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^8.0.3: - version "8.0.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" - integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - global-agent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-3.0.0.tgz#ae7cd31bd3583b93c5a16437a1afe27cc33a1ab6" @@ -12600,19 +12589,18 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typedoc-plugin-markdown@^3.11.12: - version "3.12.1" - resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.12.1.tgz#2a33ca0018bdd7ed512e29960d3eb344ecb65f4a" - integrity sha512-gMntJq7+JlGJZ5sVjrkzO/rG2dsmNBbWk5ZkcKvYu6QOeBwGcK5tzEyS0aqnFTJj9GCHCB+brAnTuKtAyotNwA== +typedoc-plugin-markdown@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.13.1.tgz#f4bca4bf8c5a48d8c7f1b44071e64028d223a1e0" + integrity sha512-Gx7pmvFNXAxbE9N2MuQNi5RwMVSH9lPxDBAaBNftaZ+ZzMO8YkDwir6aoXcWNq50qgG/eTs5CiKvLe33OVm2iQ== dependencies: handlebars "^4.7.7" -typedoc@0.22.17: - version "0.22.17" - resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.22.17.tgz#bc51cc95f569040112504300831cdac4f8089b7b" - integrity sha512-h6+uXHVVCPDaANzjwzdsj9aePBjZiBTpiMpBBeyh1zcN2odVsDCNajz8zyKnixF93HJeGpl34j/70yoEE5BfNg== +typedoc@0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.23.2.tgz#c5f82752530749c8b541ff9b17883f6fb9e72f14" + integrity sha512-THpC4vtb3wu1yck6YHzEc4ck6W4lScf8TD0Rg7XAetDih8BzP+ErYO0/6DtdzYcZyKkDwEoujkMeWW7CffCbrQ== dependencies: - glob "^8.0.3" lunr "^2.3.9" marked "^4.0.16" minimatch "^5.1.0" From 657119b22b2ae186786e02138d5945a40fe0c28f Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Wed, 29 Jun 2022 15:15:15 +0300 Subject: [PATCH 029/248] release v5.6.0-alpha.5 (#5754) Signed-off-by: Janne Savolainen --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e521e2399e..db22500a07 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": "5.6.0-alpha.4", + "version": "5.6.0-alpha.5", "main": "static/build/main.js", "copyright": "© 2022 OpenLens Authors", "license": "MIT", From 7ab3d419b3e475eb1273ddf83e7382e590cc5eba Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Wed, 29 Jun 2022 05:21:57 -0700 Subject: [PATCH 030/248] Fix selecting items always scrolling to top (#5728) --- .../__snapshots__/virtual-list.test.tsx.snap | 355 ++++++++++++++++++ .../virtual-list/virtual-list.test.tsx | 81 ++++ .../components/virtual-list/virtual-list.tsx | 7 +- 3 files changed, 439 insertions(+), 4 deletions(-) create mode 100644 src/renderer/components/virtual-list/__snapshots__/virtual-list.test.tsx.snap create mode 100644 src/renderer/components/virtual-list/virtual-list.test.tsx diff --git a/src/renderer/components/virtual-list/__snapshots__/virtual-list.test.tsx.snap b/src/renderer/components/virtual-list/__snapshots__/virtual-list.test.tsx.snap new file mode 100644 index 0000000000..93fcd4849a --- /dev/null +++ b/src/renderer/components/virtual-list/__snapshots__/virtual-list.test.tsx.snap @@ -0,0 +1,355 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`VirtualList renders 1`] = ` + +
+
+
+
+
+ some-id-0 +
+
+ some-id-1 +
+
+ some-id-2 +
+
+ some-id-3 +
+
+ some-id-4 +
+
+ some-id-5 +
+
+ some-id-6 +
+
+ some-id-7 +
+
+ some-id-8 +
+
+ some-id-9 +
+
+ some-id-10 +
+
+ some-id-11 +
+
+ some-id-12 +
+
+
+
+
+ +`; + +exports[`VirtualList when non-visable item is selected renders 1`] = ` + +
+
+
+
+
+ some-id-19 +
+
+ some-id-20 +
+
+ some-id-21 +
+
+ some-id-22 +
+
+ some-id-23 +
+
+ some-id-24 +
+
+ some-id-25 +
+
+ some-id-26 +
+
+ some-id-27 +
+
+ some-id-28 +
+
+ some-id-29 +
+
+ some-id-30 +
+
+ some-id-31 +
+
+ some-id-32 +
+
+ some-id-33 +
+
+ some-id-34 +
+
+ some-id-35 +
+
+ some-id-36 +
+
+ some-id-37 +
+
+ some-id-38 +
+
+ some-id-39 +
+
+ some-id-40 +
+
+ some-id-41 +
+
+
+
+
+ +`; + +exports[`VirtualList when visible item is selected renders 1`] = ` + +
+
+
+
+
+ some-id-0 +
+
+ some-id-1 +
+
+ some-id-2 +
+
+ some-id-3 +
+
+ some-id-4 +
+
+ some-id-5 +
+
+ some-id-6 +
+
+ some-id-7 +
+
+ some-id-8 +
+
+ some-id-9 +
+
+ some-id-10 +
+
+ some-id-11 +
+
+ some-id-12 +
+
+
+
+
+ +`; diff --git a/src/renderer/components/virtual-list/virtual-list.test.tsx b/src/renderer/components/virtual-list/virtual-list.test.tsx new file mode 100644 index 0000000000..f9446589f2 --- /dev/null +++ b/src/renderer/components/virtual-list/virtual-list.test.tsx @@ -0,0 +1,81 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import type { RenderResult } from "@testing-library/react"; +import { render } from "@testing-library/react"; +import React from "react"; +import { VirtualList } from "./virtual-list"; + +const generateListOfIdObjects = (count: number) => [...new Array(count)].map((v, index) => ({ + getId() { + return `some-id-${index}`; + }, +})); +const generateListOfRowHeights = (count: number, size: number) => [...new Array(count)].map(() => size); +const renderList = (selectedId?: string) => ( +
{id}
} + /> +); + +describe("VirtualList", () => { + let result: RenderResult; + + beforeEach(() => { + result = render(renderList()); + }); + + it("renders", () => { + expect(result.baseElement).toMatchSnapshot(); + }); + + it("shows the first item", () => { + expect(result.queryByTestId("some-id-0")).toBeInTheDocument(); + }); + + it("shows the second item", () => { + expect(result.queryByTestId("some-id-1")).toBeInTheDocument(); + }); + + it("shows the third item", () => { + expect(result.queryByTestId("some-id-2")).toBeInTheDocument(); + }); + + describe("when non-visable item is selected", () => { + beforeEach(() => { + result.rerender(renderList("some-id-30")); + }); + + it("renders", () => { + expect(result.baseElement).toMatchSnapshot(); + }); + + it("shows selected item", () => { + expect(result.queryByTestId("some-id-30")).toBeInTheDocument(); + }); + + it("does not show the first item", () => { + expect(result.queryByTestId("some-id-0")).not.toBeInTheDocument(); + }); + }); + + describe("when visible item is selected", () => { + beforeEach(() => { + result.rerender(renderList("some-id-2")); + }); + + it("renders", () => { + expect(result.baseElement).toMatchSnapshot(); + }); + + it("shows selected item", () => { + expect(result.queryByTestId("some-id-2")).toBeInTheDocument(); + }); + }); +}); diff --git a/src/renderer/components/virtual-list/virtual-list.tsx b/src/renderer/components/virtual-list/virtual-list.tsx index 1045cc5d22..3f318b5e9f 100644 --- a/src/renderer/components/virtual-list/virtual-list.tsx +++ b/src/renderer/components/virtual-list/virtual-list.tsx @@ -14,7 +14,6 @@ import type { Align, ListChildComponentProps, ListOnScrollProps } from "react-wi import { VariableSizeList } from "react-window"; import { cssNames, noop } from "../../utils"; import type { TableRowProps } from "../table/table-row"; -import debounce from "lodash/debounce"; import isEqual from "lodash/isEqual"; import AutoSizer from "react-virtualized-auto-sizer"; @@ -59,7 +58,7 @@ function VirtualListInner({ const listRef = createRef(); const prevItems = useRef(items); const prevRowHeights = useRef(rowHeights); - const scrollToSelectedItem = useCallback(debounce(() => { + const scrollToSelectedItem = useCallback(() => { if (!selectedItemId) { return; } @@ -71,9 +70,9 @@ function VirtualListInner({ )); if (index >= 0) { - listRef.current?.scrollToItem(index, "start"); + listRef.current?.scrollToItem(index, "smart"); } - }), [selectedItemId, [items]]); + }, [selectedItemId, [items]]); const getItemSize = (index: number) => rowHeights[index]; useImperativeHandle(forwardedRef, () => ({ From 5d76dd4fc2c254c43a57a2888fe04b83fa79fc47 Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Wed, 29 Jun 2022 15:22:08 +0300 Subject: [PATCH 031/248] Stop trying to restart catalog sync and updating of application when reloading window (#5735) --- .../start-checking-for-updates.injectable.ts | 2 +- .../start-catalog-sync.injectable.ts | 4 +- src/main/getDiForUnitTesting.ts | 2 - ...or-after-root-frame-is-ready.injectable.ts | 37 ------------------- 4 files changed, 4 insertions(+), 41 deletions(-) delete mode 100644 src/main/start-main-application/runnables/setup-runnables-for-after-root-frame-is-ready.injectable.ts diff --git a/src/main/application-update/periodical-check-for-updates/start-checking-for-updates.injectable.ts b/src/main/application-update/periodical-check-for-updates/start-checking-for-updates.injectable.ts index 9a9b9cf206..4c80e8178e 100644 --- a/src/main/application-update/periodical-check-for-updates/start-checking-for-updates.injectable.ts +++ b/src/main/application-update/periodical-check-for-updates/start-checking-for-updates.injectable.ts @@ -16,7 +16,7 @@ const startCheckingForUpdatesInjectable = getInjectable({ return { run: async () => { - if (updatingIsEnabled) { + if (updatingIsEnabled && !periodicalCheckForUpdates.started) { await periodicalCheckForUpdates.start(); } }, diff --git a/src/main/catalog-sync-to-renderer/start-catalog-sync.injectable.ts b/src/main/catalog-sync-to-renderer/start-catalog-sync.injectable.ts index 71afc4d895..3dfd9ee2ae 100644 --- a/src/main/catalog-sync-to-renderer/start-catalog-sync.injectable.ts +++ b/src/main/catalog-sync-to-renderer/start-catalog-sync.injectable.ts @@ -14,7 +14,9 @@ const startCatalogSyncInjectable = getInjectable({ return { run: async () => { - await catalogSyncToRenderer.start(); + if (!catalogSyncToRenderer.started) { + await catalogSyncToRenderer.start(); + } }, }; }, diff --git a/src/main/getDiForUnitTesting.ts b/src/main/getDiForUnitTesting.ts index 36713d852d..c09142d83d 100644 --- a/src/main/getDiForUnitTesting.ts +++ b/src/main/getDiForUnitTesting.ts @@ -37,7 +37,6 @@ import lensResourcesDirInjectable from "../common/vars/lens-resources-dir.inject import environmentVariablesInjectable from "../common/utils/environment-variables.injectable"; import setupIpcMainHandlersInjectable from "./electron-app/runnables/setup-ipc-main-handlers/setup-ipc-main-handlers.injectable"; import setupLensProxyInjectable from "./start-main-application/runnables/setup-lens-proxy.injectable"; -import setupRunnablesForAfterRootFrameIsReadyInjectable from "./start-main-application/runnables/setup-runnables-for-after-root-frame-is-ready.injectable"; import setupSentryInjectable from "./start-main-application/runnables/setup-sentry.injectable"; import setupShellInjectable from "./start-main-application/runnables/setup-shell.injectable"; import setupSyncingOfWeblinksInjectable from "./start-main-application/runnables/setup-syncing-of-weblinks.injectable"; @@ -212,7 +211,6 @@ const overrideRunnablesHavingSideEffects = (di: DiContainer) => { initializeExtensionsInjectable, setupIpcMainHandlersInjectable, setupLensProxyInjectable, - setupRunnablesForAfterRootFrameIsReadyInjectable, setupSentryInjectable, setupShellInjectable, setupSyncingOfWeblinksInjectable, diff --git a/src/main/start-main-application/runnables/setup-runnables-for-after-root-frame-is-ready.injectable.ts b/src/main/start-main-application/runnables/setup-runnables-for-after-root-frame-is-ready.injectable.ts deleted file mode 100644 index 82c323c501..0000000000 --- a/src/main/start-main-application/runnables/setup-runnables-for-after-root-frame-is-ready.injectable.ts +++ /dev/null @@ -1,37 +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 { ipcMainOn } from "../../../common/ipc"; -import { IpcRendererNavigationEvents } from "../../../renderer/navigation/events"; -import { afterRootFrameIsReadyInjectionToken } from "../runnable-tokens/after-root-frame-is-ready-injection-token"; -import { runManyFor } from "../../../common/runnable/run-many-for"; -import { onLoadOfApplicationInjectionToken } from "../runnable-tokens/on-load-of-application-injection-token"; - -const setupRunnablesForAfterRootFrameIsReadyInjectable = getInjectable({ - id: "setup-runnables-for-after-root-frame-is-ready", - - instantiate: (di) => { - const runMany = runManyFor(di); - - const runRunnablesAfterRootFrameIsReady = runMany( - afterRootFrameIsReadyInjectionToken, - ); - - return { - run: () => { - ipcMainOn(IpcRendererNavigationEvents.LOADED, async () => { - await runRunnablesAfterRootFrameIsReady(); - }); - }, - }; - }, - - // Direct usage of IPC - causesSideEffects: true, - - injectionToken: onLoadOfApplicationInjectionToken, -}); - -export default setupRunnablesForAfterRootFrameIsReadyInjectable; From 5242941f2f126801f59d05a2b3d5e43104cf4d86 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 Jun 2022 08:35:47 -0400 Subject: [PATCH 032/248] Bump cli-progress from 3.11.1 to 3.11.2 (#5753) 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 db22500a07..ccec9d978c 100644 --- a/package.json +++ b/package.json @@ -356,7 +356,7 @@ "ansi_up": "^5.1.0", "chart.js": "^2.9.4", "circular-dependency-plugin": "^5.2.2", - "cli-progress": "^3.11.1", + "cli-progress": "^3.11.2", "color": "^3.2.1", "command-line-args": "^5.2.1", "concurrently": "^7.2.2", diff --git a/yarn.lock b/yarn.lock index e4e88778f3..6a629a51d9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3830,10 +3830,10 @@ cli-columns@^3.1.2: string-width "^2.0.0" strip-ansi "^3.0.1" -cli-progress@^3.11.1: - version "3.11.1" - resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.11.1.tgz#02afb11be9a123f2a302931beb087eafe3a0d971" - integrity sha512-TTMA2LHrYaZeNMcgZGO10oYqj9hvd03pltNtVbu4ddeyDTHlYV7gWxsFiuvaQlgwMBFCv1TukcjiODWFlb16tQ== +cli-progress@^3.11.2: + version "3.11.2" + resolved "https://registry.yarnpkg.com/cli-progress/-/cli-progress-3.11.2.tgz#f8c89bd157e74f3f2c43bcfb3505670b4d48fc77" + integrity sha512-lCPoS6ncgX4+rJu5bS3F/iCz17kZ9MPZ6dpuTtI0KXKABkhyXIdYB3Inby1OpaGti3YlI3EeEkM9AuWpelJrVA== dependencies: string-width "^4.2.3" From 21109f36ca375cc607c88f87b2fde2cb6d6c470e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 Jun 2022 08:36:09 -0400 Subject: [PATCH 033/248] Bump mobx-react from 7.5.0 to 7.5.1 (#5752) 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 ccec9d978c..d1e5cc0a4f 100644 --- a/package.json +++ b/package.json @@ -246,7 +246,7 @@ "md5-file": "^5.0.0", "mobx": "^6.6.1", "mobx-observable-history": "^2.0.3", - "mobx-react": "^7.5.0", + "mobx-react": "^7.5.1", "mobx-utils": "^6.0.4", "mock-fs": "^5.1.2", "moment": "^2.29.3", diff --git a/yarn.lock b/yarn.lock index 6a629a51d9..f8ac5de108 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9005,10 +9005,10 @@ mobx-react-lite@^3.4.0: resolved "https://registry.yarnpkg.com/mobx-react-lite/-/mobx-react-lite-3.4.0.tgz#d59156a96889cdadad751e5e4dab95f28926dfff" integrity sha512-bRuZp3C0itgLKHu/VNxi66DN/XVkQG7xtoBVWxpvC5FhAqbOCP21+nPhULjnzEqd7xBMybp6KwytdUpZKEgpIQ== -mobx-react@^7.5.0: - version "7.5.0" - resolved "https://registry.yarnpkg.com/mobx-react/-/mobx-react-7.5.0.tgz#8da71f8d3c96409cf178112503ec50467e5cea70" - integrity sha512-riHu0XZJA6f64L1iXZoAaDjVt6suYoy8I2HIfuz2tX3O4FFaAe4lVA2CoObttmUQTTFPM7j3Df6T4re0cHkghQ== +mobx-react@^7.5.1: + version "7.5.1" + resolved "https://registry.yarnpkg.com/mobx-react/-/mobx-react-7.5.1.tgz#2dbeb090025b75466fee5ea4092b45e268fbb10a" + integrity sha512-VNRpKBNpJEYER3XdkcY1PAr9zxFIaR2Ka6xwKFvySbEUC/uIITKt8rioVDqBdTc9pPzaYiCLw2dYpUOU85GQ5w== dependencies: mobx-react-lite "^3.4.0" From 014ec6a03be01ba8eb10f491ef4b529a38a3917c Mon Sep 17 00:00:00 2001 From: Alex Andreev Date: Wed, 29 Jun 2022 15:44:36 +0300 Subject: [PATCH 034/248] Align HotbarSelector elements with status bar items (#5755) Signed-off-by: Alex Andreev --- .../hotbar/hotbar-selector.module.scss | 16 ++++++---------- .../components/hotbar/hotbar-selector.tsx | 4 ++-- .../components/status-bar/status-bar.module.scss | 4 +++- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/renderer/components/hotbar/hotbar-selector.module.scss b/src/renderer/components/hotbar/hotbar-selector.module.scss index b95823f7fe..a8154c4579 100644 --- a/src/renderer/components/hotbar/hotbar-selector.module.scss +++ b/src/renderer/components/hotbar/hotbar-selector.module.scss @@ -6,9 +6,10 @@ .HotbarSelector { display: flex; align-items: center; - height: 26px; + height: 25px; background-color: var(--layoutBackground); position: relative; + justify-content: center; &:before { content: " "; @@ -21,8 +22,7 @@ .HotbarIndex { display: flex; - flex-grow: 1; - align-items: center; + width: 3ch; } .Badge { @@ -30,21 +30,17 @@ background: var(--secondaryBackground); width: 100%; color: var(--settingsColor); - padding-top: 3px; + padding: 0px calc(var(--padding) / 2); } .Icon { - --size: 16px; - padding: 0 4px 0 0px; - margin: 0px 4px; - &:hover { box-shadow: none; background-color: transparent; } - &.previous { - transform: rotateY(180deg); + &:focus-visible { + z-index: 1; } } } diff --git a/src/renderer/components/hotbar/hotbar-selector.tsx b/src/renderer/components/hotbar/hotbar-selector.tsx index d6a52dcae6..4d6104b5b3 100644 --- a/src/renderer/components/hotbar/hotbar-selector.tsx +++ b/src/renderer/components/hotbar/hotbar-selector.tsx @@ -58,7 +58,7 @@ const NonInjectedHotbarSelector = observer(({ hotbar, hotbarStore, openCommandOv return (
@@ -80,7 +80,7 @@ const NonInjectedHotbarSelector = observer(({ hotbar, hotbarStore, openCommandOv
diff --git a/src/renderer/components/status-bar/status-bar.module.scss b/src/renderer/components/status-bar/status-bar.module.scss index 04f07fa31b..8bd56c55f7 100644 --- a/src/renderer/components/status-bar/status-bar.module.scss +++ b/src/renderer/components/status-bar/status-bar.module.scss @@ -19,17 +19,19 @@ .leftSide { display: flex; align-items: center; + padding-inline-start: calc(var(--padding) / 2); } .rightSide { display: flex; align-items: center; justify-content: flex-end; + padding-inline-end: calc(var(--padding) / 2); } .item { height: 100%; - padding: 0 4px; + padding-inline: calc(var(--padding) / 4); display: flex; align-items: center; From aedcc472f8fd4a43c3a02fc08d2583992daf869a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 Jun 2022 10:25:17 -0400 Subject: [PATCH 035/248] Bump jest from 28.1.1 to 28.1.2 (#5756) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 254 ++++++++++++++++++++++++++++----------------------- 2 files changed, 139 insertions(+), 117 deletions(-) diff --git a/package.json b/package.json index d1e5cc0a4f..af5a5bd1c3 100644 --- a/package.json +++ b/package.json @@ -381,7 +381,7 @@ "identity-obj-proxy": "^3.0.0", "ignore-loader": "^0.1.2", "include-media": "^1.4.9", - "jest": "^28.1.1", + "jest": "^28.1.2", "jest-canvas-mock": "^2.3.1", "jest-environment-jsdom": "^28.1.1", "jest-fetch-mock": "^3.0.3", diff --git a/yarn.lock b/yarn.lock index f8ac5de108..99a1a09737 100644 --- a/yarn.lock +++ b/yarn.lock @@ -770,15 +770,15 @@ jest-util "^28.1.1" slash "^3.0.0" -"@jest/core@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.1.1.tgz#086830bec6267accf9af5ca76f794858e9f9f092" - integrity sha512-3pYsBoZZ42tXMdlcFeCc/0j9kOlK7MYuXs2B1QbvDgMoW1K9NJ4G/VYvIbMb26iqlkTfPHo7SC2JgjDOk/mxXw== +"@jest/core@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-28.1.2.tgz#eac519b9acbd154313854b8823a47b5c645f785a" + integrity sha512-Xo4E+Sb/nZODMGOPt2G3cMmCBqL4/W2Ijwr7/mrXlq4jdJwcFQ/9KrrJZT2adQRk2otVBXXOz1GRQ4Z5iOgvRQ== dependencies: "@jest/console" "^28.1.1" - "@jest/reporters" "^28.1.1" + "@jest/reporters" "^28.1.2" "@jest/test-result" "^28.1.1" - "@jest/transform" "^28.1.1" + "@jest/transform" "^28.1.2" "@jest/types" "^28.1.1" "@types/node" "*" ansi-escapes "^4.2.1" @@ -787,15 +787,15 @@ exit "^0.1.2" graceful-fs "^4.2.9" jest-changed-files "^28.0.2" - jest-config "^28.1.1" + jest-config "^28.1.2" jest-haste-map "^28.1.1" jest-message-util "^28.1.1" jest-regex-util "^28.0.2" jest-resolve "^28.1.1" - jest-resolve-dependencies "^28.1.1" - jest-runner "^28.1.1" - jest-runtime "^28.1.1" - jest-snapshot "^28.1.1" + jest-resolve-dependencies "^28.1.2" + jest-runner "^28.1.2" + jest-runtime "^28.1.2" + jest-snapshot "^28.1.2" jest-util "^28.1.1" jest-validate "^28.1.1" jest-watcher "^28.1.1" @@ -822,6 +822,16 @@ "@types/node" "*" jest-mock "^28.1.1" +"@jest/environment@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-28.1.2.tgz#94a052c0c5f9f8c8e6d13ea6da78dbc5d7d9b85b" + integrity sha512-I0CR1RUMmOzd0tRpz10oUfaChBWs+/Hrvn5xYhMEF/ZqrDaaeHwS8yDBqEWCrEnkH2g+WE/6g90oBv3nKpcm8Q== + dependencies: + "@jest/fake-timers" "^28.1.2" + "@jest/types" "^28.1.1" + "@types/node" "*" + jest-mock "^28.1.1" + "@jest/expect-utils@^28.1.1": version "28.1.1" resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-28.1.1.tgz#d84c346025b9f6f3886d02c48a6177e2b0360587" @@ -829,13 +839,13 @@ dependencies: jest-get-type "^28.0.2" -"@jest/expect@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.1.1.tgz#ea4fcc8504b45835029221c0dc357c622a761326" - integrity sha512-/+tQprrFoT6lfkMj4mW/mUIfAmmk/+iQPmg7mLDIFOf2lyf7EBHaS+x3RbeR0VZVMe55IvX7QRoT/2aK3AuUXg== +"@jest/expect@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-28.1.2.tgz#0b25acedff46e1e1e5606285306c8a399c12534f" + integrity sha512-HBzyZBeFBiOelNbBKN0pilWbbrGvwDUwAqMC46NVJmWm8AVkuE58NbG1s7DR4cxFt4U5cVLxofAoHxgvC5MyOw== dependencies: expect "^28.1.1" - jest-snapshot "^28.1.1" + jest-snapshot "^28.1.2" "@jest/fake-timers@^28.1.1": version "28.1.1" @@ -849,26 +859,38 @@ jest-mock "^28.1.1" jest-util "^28.1.1" -"@jest/globals@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.1.1.tgz#c0a7977f85e26279cc090d9adcdf82b8a34c4061" - integrity sha512-dEgl/6v7ToB4vXItdvcltJBgny0xBE6xy6IYQrPJAJggdEinGxCDMivNv7sFzPcTITGquXD6UJwYxfJ/5ZwDSg== +"@jest/fake-timers@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-28.1.2.tgz#d49e8ee4e02ba85a6e844a52a5e7c59c23e3b76f" + integrity sha512-xSYEI7Y0D5FbZN2LsCUj/EKRR1zfQYmGuAUVh6xTqhx7V5JhjgMcK5Pa0iR6WIk0GXiHDe0Ke4A+yERKE9saqg== dependencies: - "@jest/environment" "^28.1.1" - "@jest/expect" "^28.1.1" + "@jest/types" "^28.1.1" + "@sinonjs/fake-timers" "^9.1.2" + "@types/node" "*" + jest-message-util "^28.1.1" + jest-mock "^28.1.1" + jest-util "^28.1.1" + +"@jest/globals@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-28.1.2.tgz#92fab296e337c7309c25e4202fb724f62249d83f" + integrity sha512-cz0lkJVDOtDaYhvT3Fv2U1B6FtBnV+OpEyJCzTHM1fdoTsU4QNLAt/H4RkiwEUU+dL4g/MFsoTuHeT2pvbo4Hg== + dependencies: + "@jest/environment" "^28.1.2" + "@jest/expect" "^28.1.2" "@jest/types" "^28.1.1" -"@jest/reporters@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.1.1.tgz#9389f4bb3cce4d9b586f6195f83c79cd2a1c8662" - integrity sha512-597Zj4D4d88sZrzM4atEGLuO7SdA/YrOv9SRXHXRNC+/FwPCWxZhBAEzhXoiJzfRwn8zes/EjS8Lo6DouGN5Gg== +"@jest/reporters@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-28.1.2.tgz#0327be4ce4d0d9ae49e7908656f89669d0c2a260" + integrity sha512-/whGLhiwAqeCTmQEouSigUZJPVl7sW8V26EiboImL+UyXznnr1a03/YZ2BX8OlFw0n+Zlwu+EZAITZtaeRTxyA== dependencies: "@bcoe/v8-coverage" "^0.2.3" "@jest/console" "^28.1.1" "@jest/test-result" "^28.1.1" - "@jest/transform" "^28.1.1" + "@jest/transform" "^28.1.2" "@jest/types" "^28.1.1" - "@jridgewell/trace-mapping" "^0.3.7" + "@jridgewell/trace-mapping" "^0.3.13" "@types/node" "*" chalk "^4.0.0" collect-v8-coverage "^1.0.0" @@ -887,7 +909,7 @@ string-length "^4.0.1" strip-ansi "^6.0.0" terminal-link "^2.0.0" - v8-to-istanbul "^9.0.0" + v8-to-istanbul "^9.0.1" "@jest/schemas@^28.0.2": version "28.0.2" @@ -896,12 +918,12 @@ dependencies: "@sinclair/typebox" "^0.23.3" -"@jest/source-map@^28.0.2": - version "28.0.2" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-28.0.2.tgz#914546f4410b67b1d42c262a1da7e0406b52dc90" - integrity sha512-Y9dxC8ZpN3kImkk0LkK5XCEneYMAXlZ8m5bflmSL5vrwyeUpJfentacCUg6fOb8NOpOO7hz2+l37MV77T6BFPw== +"@jest/source-map@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-28.1.2.tgz#7fe832b172b497d6663cdff6c13b0a920e139e24" + integrity sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww== dependencies: - "@jridgewell/trace-mapping" "^0.3.7" + "@jridgewell/trace-mapping" "^0.3.13" callsites "^3.0.0" graceful-fs "^4.2.9" @@ -925,14 +947,14 @@ jest-haste-map "^28.1.1" slash "^3.0.0" -"@jest/transform@^28.1.1": - version "28.1.1" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.1.tgz#83541f2a3f612077c8501f49cc4e205d4e4a6b27" - integrity sha512-PkfaTUuvjUarl1EDr5ZQcCA++oXkFCP9QFUkG0yVKVmNObjhrqDy0kbMpMebfHWm3CCDHjYNem9eUSH8suVNHQ== +"@jest/transform@^28.1.2": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-28.1.2.tgz#b367962c53fd53821269bde050ce373e111327c1" + integrity sha512-3o+lKF6iweLeJFHBlMJysdaPbpoMmtbHEFsjzSv37HIq/wWt5ijTeO2Yf7MO5yyczCopD507cNwNLeX8Y/CuIg== dependencies: "@babel/core" "^7.11.6" "@jest/types" "^28.1.1" - "@jridgewell/trace-mapping" "^0.3.7" + "@jridgewell/trace-mapping" "^0.3.13" babel-plugin-istanbul "^6.1.1" chalk "^4.0.0" convert-source-map "^1.4.0" @@ -1020,10 +1042,10 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.7": - version "0.3.13" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" - integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w== +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.13": + version "0.3.14" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" + integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" @@ -1397,7 +1419,7 @@ dependencies: type-detect "4.0.8" -"@sinonjs/fake-timers@^9.1.1": +"@sinonjs/fake-timers@^9.1.1", "@sinonjs/fake-timers@^9.1.2": version "9.1.2" resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz#4eaab737fab77332ab132d396a3c0d364bd0ea8c" integrity sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw== @@ -3206,12 +3228,12 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -babel-jest@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.1.tgz#2a3a4ae50964695b2d694ccffe4bec537c5a3586" - integrity sha512-MEt0263viUdAkTq5D7upHPNxvt4n9uLUGa6pPz3WviNBMtOmStb1lIXS3QobnoqM+qnH+vr4EKlvhe8QcmxIYw== +babel-jest@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.2.tgz#2b37fb81439f14d34d8b2cc4a4bd7efabf9acbfe" + integrity sha512-pfmoo6sh4L/+5/G2OOfQrGJgvH7fTa1oChnuYH2G/6gA+JwDvO8PELwvwnofKBMNrQsam0Wy/Rw+QSrBNewq2Q== dependencies: - "@jest/transform" "^28.1.1" + "@jest/transform" "^28.1.2" "@types/babel__core" "^7.1.14" babel-plugin-istanbul "^6.1.1" babel-preset-jest "^28.1.1" @@ -7491,13 +7513,13 @@ jest-changed-files@^28.0.2: execa "^5.0.0" throat "^6.0.1" -jest-circus@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.1.1.tgz#3d27da6a974d85a466dc0cdc6ddeb58daaa57bb4" - integrity sha512-75+BBVTsL4+p2w198DQpCeyh1RdaS2lhEG87HkaFX/UG0gJExVq2skG2pT7XZEGBubNj2CytcWSPan4QEPNosw== +jest-circus@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-28.1.2.tgz#0d5a5623eccb244efe87d1edc365696e4fcf80ce" + integrity sha512-E2vdPIJG5/69EMpslFhaA46WkcrN74LI5V/cSJ59L7uS8UNoXbzTxmwhpi9XrIL3zqvMt5T0pl5k2l2u2GwBNQ== dependencies: - "@jest/environment" "^28.1.1" - "@jest/expect" "^28.1.1" + "@jest/environment" "^28.1.2" + "@jest/expect" "^28.1.2" "@jest/test-result" "^28.1.1" "@jest/types" "^28.1.1" "@types/node" "*" @@ -7508,52 +7530,52 @@ jest-circus@^28.1.1: jest-each "^28.1.1" jest-matcher-utils "^28.1.1" jest-message-util "^28.1.1" - jest-runtime "^28.1.1" - jest-snapshot "^28.1.1" + jest-runtime "^28.1.2" + jest-snapshot "^28.1.2" jest-util "^28.1.1" pretty-format "^28.1.1" slash "^3.0.0" stack-utils "^2.0.3" throat "^6.0.1" -jest-cli@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.1.1.tgz#23ddfde8940e1818585ae4a568877b33b0e51cfe" - integrity sha512-+sUfVbJqb1OjBZ0OdBbI6OWfYM1i7bSfzYy6gze1F1w3OKWq8ZTEKkZ8a7ZQPq6G/G1qMh/uKqpdWhgl11NFQQ== +jest-cli@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-28.1.2.tgz#b89012e5bad14135e71b1628b85475d3773a1bbc" + integrity sha512-l6eoi5Do/IJUXAFL9qRmDiFpBeEJAnjJb1dcd9i/VWfVWbp3mJhuH50dNtX67Ali4Ecvt4eBkWb4hXhPHkAZTw== dependencies: - "@jest/core" "^28.1.1" + "@jest/core" "^28.1.2" "@jest/test-result" "^28.1.1" "@jest/types" "^28.1.1" chalk "^4.0.0" exit "^0.1.2" graceful-fs "^4.2.9" import-local "^3.0.2" - jest-config "^28.1.1" + jest-config "^28.1.2" jest-util "^28.1.1" jest-validate "^28.1.1" prompts "^2.0.1" yargs "^17.3.1" -jest-config@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.1.1.tgz#e90b97b984f14a6c24a221859e81b258990fce2f" - integrity sha512-tASynMhS+jVV85zKvjfbJ8nUyJS/jUSYZ5KQxLUN2ZCvcQc/OmhQl2j6VEL3ezQkNofxn5pQ3SPYWPHb0unTZA== +jest-config@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-28.1.2.tgz#ba00ad30caf62286c86e7c1099e915218a0ac8c6" + integrity sha512-g6EfeRqddVbjPVBVY4JWpUY4IvQoFRIZcv4V36QkqzE0IGhEC/VkugFeBMAeUE7PRgC8KJF0yvJNDeQRbamEVA== dependencies: "@babel/core" "^7.11.6" "@jest/test-sequencer" "^28.1.1" "@jest/types" "^28.1.1" - babel-jest "^28.1.1" + babel-jest "^28.1.2" chalk "^4.0.0" ci-info "^3.2.0" deepmerge "^4.2.2" glob "^7.1.3" graceful-fs "^4.2.9" - jest-circus "^28.1.1" - jest-environment-node "^28.1.1" + jest-circus "^28.1.2" + jest-environment-node "^28.1.2" jest-get-type "^28.0.2" jest-regex-util "^28.0.2" jest-resolve "^28.1.1" - jest-runner "^28.1.1" + jest-runner "^28.1.2" jest-util "^28.1.1" jest-validate "^28.1.1" micromatch "^4.0.4" @@ -7604,13 +7626,13 @@ jest-environment-jsdom@^28.1.1: jest-util "^28.1.1" jsdom "^19.0.0" -jest-environment-node@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.1.1.tgz#1c86c59003a7d319fa06ea3b1bbda6c193715c67" - integrity sha512-2aV/eeY/WNgUUJrrkDJ3cFEigjC5fqT1+fCclrY6paqJ5zVPoM//sHmfgUUp7WLYxIdbPwMiVIzejpN56MxnNA== +jest-environment-node@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-28.1.2.tgz#3e2eb47f6d173b0648d5f7c717cb1c26651d5c8a" + integrity sha512-oYsZz9Qw27XKmOgTtnl0jW7VplJkN2oeof+SwAwKFQacq3CLlG9u4kTGuuLWfvu3J7bVutWlrbEQMOCL/jughw== dependencies: - "@jest/environment" "^28.1.1" - "@jest/fake-timers" "^28.1.1" + "@jest/environment" "^28.1.2" + "@jest/fake-timers" "^28.1.2" "@jest/types" "^28.1.1" "@types/node" "*" jest-mock "^28.1.1" @@ -7706,13 +7728,13 @@ jest-regex-util@^28.0.2: resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-28.0.2.tgz#afdc377a3b25fb6e80825adcf76c854e5bf47ead" integrity sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw== -jest-resolve-dependencies@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.1.tgz#3dffaaa56f4b41bc6b61053899d1756401763a27" - integrity sha512-p8Y150xYJth4EXhOuB8FzmS9r8IGLEioiaetgdNGb9VHka4fl0zqWlVe4v7mSkYOuEUg2uB61iE+zySDgrOmgQ== +jest-resolve-dependencies@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.2.tgz#ca528858e0c6642d5a1dda8fc7cda10230c275bc" + integrity sha512-OXw4vbOZuyRTBi3tapWBqdyodU+T33ww5cPZORuTWkg+Y8lmsxQlVu3MWtJh6NMlKRTHQetF96yGPv01Ye7Mbg== dependencies: jest-regex-util "^28.0.2" - jest-snapshot "^28.1.1" + jest-snapshot "^28.1.2" jest-resolve@^28.1.1: version "28.1.1" @@ -7729,44 +7751,44 @@ jest-resolve@^28.1.1: resolve.exports "^1.1.0" slash "^3.0.0" -jest-runner@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.1.1.tgz#9ecdb3f27a00059986797aa6b012ba8306aa436c" - integrity sha512-W5oFUiDBgTsCloTAj6q95wEvYDB0pxIhY6bc5F26OucnwBN+K58xGTGbliSMI4ChQal5eANDF+xvELaYkJxTmA== +jest-runner@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-28.1.2.tgz#f293409592a62234285a71237e38499a3554e350" + integrity sha512-6/k3DlAsAEr5VcptCMdhtRhOoYClZQmxnVMZvZ/quvPGRpN7OBQYPIC32tWSgOnbgqLXNs5RAniC+nkdFZpD4A== dependencies: "@jest/console" "^28.1.1" - "@jest/environment" "^28.1.1" + "@jest/environment" "^28.1.2" "@jest/test-result" "^28.1.1" - "@jest/transform" "^28.1.1" + "@jest/transform" "^28.1.2" "@jest/types" "^28.1.1" "@types/node" "*" chalk "^4.0.0" emittery "^0.10.2" graceful-fs "^4.2.9" jest-docblock "^28.1.1" - jest-environment-node "^28.1.1" + jest-environment-node "^28.1.2" jest-haste-map "^28.1.1" jest-leak-detector "^28.1.1" jest-message-util "^28.1.1" jest-resolve "^28.1.1" - jest-runtime "^28.1.1" + jest-runtime "^28.1.2" jest-util "^28.1.1" jest-watcher "^28.1.1" jest-worker "^28.1.1" source-map-support "0.5.13" throat "^6.0.1" -jest-runtime@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.1.1.tgz#569e1dc3c36c6c4c0b29516c1c49b6ad580abdaf" - integrity sha512-J89qEJWW0leOsqyi0D9zHpFEYHwwafFdS9xgvhFHtIdRghbadodI0eA+DrthK/1PebBv3Px8mFSMGKrtaVnleg== +jest-runtime@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-28.1.2.tgz#d68f34f814a848555a345ceda23289f14d59a688" + integrity sha512-i4w93OsWzLOeMXSi9epmakb2+3z0AchZtUQVF1hesBmcQQy4vtaql5YdVe9KexdJaVRyPDw8DoBR0j3lYsZVYw== dependencies: - "@jest/environment" "^28.1.1" - "@jest/fake-timers" "^28.1.1" - "@jest/globals" "^28.1.1" - "@jest/source-map" "^28.0.2" + "@jest/environment" "^28.1.2" + "@jest/fake-timers" "^28.1.2" + "@jest/globals" "^28.1.2" + "@jest/source-map" "^28.1.2" "@jest/test-result" "^28.1.1" - "@jest/transform" "^28.1.1" + "@jest/transform" "^28.1.2" "@jest/types" "^28.1.1" chalk "^4.0.0" cjs-module-lexer "^1.0.0" @@ -7779,15 +7801,15 @@ jest-runtime@^28.1.1: jest-mock "^28.1.1" jest-regex-util "^28.0.2" jest-resolve "^28.1.1" - jest-snapshot "^28.1.1" + jest-snapshot "^28.1.2" jest-util "^28.1.1" slash "^3.0.0" strip-bom "^4.0.0" -jest-snapshot@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.1.1.tgz#ab825c16c8d8b5e883bd57eee6ca8748c42ab848" - integrity sha512-1KjqHJ98adRcbIdMizjF5DipwZFbvxym/kFO4g4fVZCZRxH/dqV8TiBFCa6rqic3p0karsy8RWS1y4E07b7P0A== +jest-snapshot@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-28.1.2.tgz#93d31b87b11b384f5946fe0767541496135f8d52" + integrity sha512-wzrieFttZYfLvrCVRJxX+jwML2YTArOUqFpCoSVy1QUapx+LlV9uLbV/mMEhYj4t7aMeE9aSQFHSvV/oNoDAMA== dependencies: "@babel/core" "^7.11.6" "@babel/generator" "^7.7.2" @@ -7795,7 +7817,7 @@ jest-snapshot@^28.1.1: "@babel/traverse" "^7.7.2" "@babel/types" "^7.3.3" "@jest/expect-utils" "^28.1.1" - "@jest/transform" "^28.1.1" + "@jest/transform" "^28.1.2" "@jest/types" "^28.1.1" "@types/babel__traverse" "^7.0.6" "@types/prettier" "^2.1.5" @@ -7869,15 +7891,15 @@ jest-worker@^28.1.1: merge-stream "^2.0.0" supports-color "^8.0.0" -jest@^28.1.1: - version "28.1.1" - resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.1.tgz#3c39a3a09791e16e9ef283597d24ab19a0df701e" - integrity sha512-qw9YHBnjt6TCbIDMPMpJZqf9E12rh6869iZaN08/vpOGgHJSAaLLUn6H8W3IAEuy34Ls3rct064mZLETkxJ2XA== +jest@^28.1.2: + version "28.1.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-28.1.2.tgz#451ff24081ce31ca00b07b60c61add13aa96f8eb" + integrity sha512-Tuf05DwLeCh2cfWCQbcz9UxldoDyiR1E9Igaei5khjonKncYdc6LDfynKCEWozK0oLE3GD+xKAo2u8x/0s6GOg== dependencies: - "@jest/core" "^28.1.1" + "@jest/core" "^28.1.2" "@jest/types" "^28.1.1" import-local "^3.0.2" - jest-cli "^28.1.1" + jest-cli "^28.1.2" joi@^17.6.0: version "17.6.0" @@ -12873,12 +12895,12 @@ v8-compile-cache@^2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -v8-to-istanbul@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.0.tgz#be0dae58719fc53cb97e5c7ac1d7e6d4f5b19511" - integrity sha512-HcvgY/xaRm7isYmyx+lFKA4uQmfUbN0J4M0nNItvzTvH/iQ9kW5j/t4YSR+Ge323/lrgDAWJoF46tzGQHwBHFw== +v8-to-istanbul@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" + integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== dependencies: - "@jridgewell/trace-mapping" "^0.3.7" + "@jridgewell/trace-mapping" "^0.3.12" "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^1.6.0" From 0f43779727f7e08a27bd130710bd5678be0e6d65 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Wed, 29 Jun 2022 19:33:31 -0700 Subject: [PATCH 036/248] Add react-select as a dependency for @k8slens/extensions (#5705) Signed-off-by: Sebastian Malton --- .../npm/extensions/package-lock.json | 389 ++++++++++++++++++ src/extensions/npm/extensions/package.json | 1 + 2 files changed, 390 insertions(+) diff --git a/src/extensions/npm/extensions/package-lock.json b/src/extensions/npm/extensions/package-lock.json index 5cca29ab21..cb350082bc 100644 --- a/src/extensions/npm/extensions/package-lock.json +++ b/src/extensions/npm/extensions/package-lock.json @@ -4,6 +4,50 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "requires": { + "@babel/types": "^7.16.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz", + "integrity": "sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA==" + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" + }, + "@babel/highlight": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz", + "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.17.12", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.17.12.tgz", + "integrity": "sha512-spyY3E3AURfxh/RHtjx5j6hs8am5NbUBGfcZ2vB3uShSpZdQyXSf5rR5Mk76vbtlAZOelyVQ71Fg0x9SG4fsog==", + "requires": { + "@babel/helper-plugin-utils": "^7.17.12" + } + }, "@babel/runtime": { "version": "7.17.9", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", @@ -12,11 +56,109 @@ "regenerator-runtime": "^0.13.4" } }, + "@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, + "@emotion/babel-plugin": { + "version": "11.9.2", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.9.2.tgz", + "integrity": "sha512-Pr/7HGH6H6yKgnVFNEj2MVlreu3ADqftqjqwUvDy/OJzKFgxKeTQ+eeUf20FOTuHVkDON2iNa25rAXVYtWJCjw==", + "requires": { + "@babel/helper-module-imports": "^7.12.13", + "@babel/plugin-syntax-jsx": "^7.12.13", + "@babel/runtime": "^7.13.10", + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.5", + "@emotion/serialize": "^1.0.2", + "babel-plugin-macros": "^2.6.1", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.0.13" + } + }, + "@emotion/cache": { + "version": "11.9.3", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.9.3.tgz", + "integrity": "sha512-0dgkI/JKlCXa+lEXviaMtGBL0ynpx4osh7rjOXE71q9bIF8G+XhJgvi+wDu0B0IdCVx37BffiwXlN9I3UuzFvg==", + "requires": { + "@emotion/memoize": "^0.7.4", + "@emotion/sheet": "^1.1.1", + "@emotion/utils": "^1.0.0", + "@emotion/weak-memoize": "^0.2.5", + "stylis": "4.0.13" + } + }, "@emotion/hash": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" }, + "@emotion/memoize": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz", + "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==" + }, + "@emotion/react": { + "version": "11.9.3", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.9.3.tgz", + "integrity": "sha512-g9Q1GcTOlzOEjqwuLF/Zd9LC+4FljjPjDfxSM7KmEakm+hsHXk+bYZ2q+/hTJzr0OUNkujo72pXLQvXj6H+GJQ==", + "requires": { + "@babel/runtime": "^7.13.10", + "@emotion/babel-plugin": "^11.7.1", + "@emotion/cache": "^11.9.3", + "@emotion/serialize": "^1.0.4", + "@emotion/utils": "^1.1.0", + "@emotion/weak-memoize": "^0.2.5", + "hoist-non-react-statics": "^3.3.1" + } + }, + "@emotion/serialize": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.0.4.tgz", + "integrity": "sha512-1JHamSpH8PIfFwAMryO2bNka+y8+KA5yga5Ocf2d7ZEiJjb7xlLW7aknBGZqJLajuLOvJ+72vN+IBSwPlXD1Pg==", + "requires": { + "@emotion/hash": "^0.8.0", + "@emotion/memoize": "^0.7.4", + "@emotion/unitless": "^0.7.5", + "@emotion/utils": "^1.0.0", + "csstype": "^3.0.2" + }, + "dependencies": { + "csstype": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", + "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" + } + } + }, + "@emotion/sheet": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.1.1.tgz", + "integrity": "sha512-J3YPccVRMiTZxYAY0IOq3kd+hUP8idY8Kz6B/Cyo+JuXq52Ek+zbPbSQUrVQp95aJ+lsAW7DPL1P2Z+U1jGkKA==" + }, + "@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, + "@emotion/utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.1.0.tgz", + "integrity": "sha512-iRLa/Y4Rs5H/f2nimczYmS5kFJEbpiVvgN3XVfZ022IYhuNA1IRSHEizcof88LtCTXtl9S2Cxt32KgaXEu72JQ==" + }, + "@emotion/weak-memoize": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", + "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==" + }, "@material-ui/core": { "version": "4.12.3", "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.12.3.tgz", @@ -95,6 +237,11 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.14.tgz", "integrity": "sha512-rsAj2u8Xkqfc332iXV12SqIsjVi07H479bOP4q94NAcjzmAvapumEhuVIt53koEf7JFrpjgNKjBga5Pnn/GL8A==" }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, "@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", @@ -168,16 +315,69 @@ "uri-js": "^4.2.2" } }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, "atomically": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz", "integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==" }, + "babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "requires": { + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + } + } + }, "clsx": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, "conf": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/conf/-/conf-7.1.2.tgz", @@ -195,6 +395,26 @@ "semver": "^7.3.2" } }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" + } + }, "css-vendor": { "version": "2.0.8", "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.8.tgz", @@ -246,6 +466,19 @@ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -256,6 +489,11 @@ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" + }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", @@ -264,6 +502,24 @@ "locate-path": "^3.0.0" } }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, "hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", @@ -284,6 +540,28 @@ "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "requires": { + "has": "^1.0.3" + } + }, "is-in-browser": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", @@ -299,6 +577,11 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -394,6 +677,11 @@ "jss": "10.9.0" } }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", @@ -434,6 +722,11 @@ } } }, + "memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==" + }, "mimic-fn": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", @@ -498,11 +791,40 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, "pkg-up": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", @@ -543,6 +865,20 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, + "react-select": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/react-select/-/react-select-5.3.2.tgz", + "integrity": "sha512-W6Irh7U6Ha7p5uQQ2ZnemoCQ8mcfgOtHfw3wuMzG6FAu0P+CYicgofSLOq97BhjMx8jS+h+wwWdCBeVVZ9VqlQ==", + "requires": { + "@babel/runtime": "^7.12.0", + "@emotion/cache": "^11.4.0", + "@emotion/react": "^11.8.1", + "@types/react-transition-group": "^4.4.0", + "memoize-one": "^5.0.0", + "prop-types": "^15.6.0", + "react-transition-group": "^4.3.0" + } + }, "react-transition-group": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", @@ -559,6 +895,26 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "semver": { "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", @@ -567,11 +923,39 @@ "lru-cache": "^6.0.0" } }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + }, + "stylis": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.0.13.tgz", + "integrity": "sha512-xGPXiFVl4YED9Jh7Euv2V220mriG9u4B2TA6Ybjc1catrstKD2PpIdU3U0RKpkVBC2EhmL/F0sPCr9vrFTNRag==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, "tiny-warning": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + }, "typed-emitter": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-1.4.0.tgz", @@ -589,6 +973,11 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" } } } diff --git a/src/extensions/npm/extensions/package.json b/src/extensions/npm/extensions/package.json index 9f145fed97..2afda96cf2 100644 --- a/src/extensions/npm/extensions/package.json +++ b/src/extensions/npm/extensions/package.json @@ -25,6 +25,7 @@ "conf": "^7.0.1", "mobx": "^6.5.0", "mobx-react": "^7.3.0", + "react-select": "^5.3.2", "typed-emitter": "^1.3.1" } } From 71473af796f81e902c3f2a4fa898b597c5dbe93b Mon Sep 17 00:00:00 2001 From: Jari Kolehmainen Date: Thu, 30 Jun 2022 10:11:04 +0300 Subject: [PATCH 037/248] more padding between status bar items (#5760) Signed-off-by: Jari Kolehmainen --- src/renderer/components/status-bar/status-bar.module.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderer/components/status-bar/status-bar.module.scss b/src/renderer/components/status-bar/status-bar.module.scss index 8bd56c55f7..8eb0ded0ec 100644 --- a/src/renderer/components/status-bar/status-bar.module.scss +++ b/src/renderer/components/status-bar/status-bar.module.scss @@ -31,7 +31,7 @@ .item { height: 100%; - padding-inline: calc(var(--padding) / 4); + padding-inline: var(--padding); display: flex; align-items: center; From 27adab8d1c4ef62f833932fae247296f57e95b80 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 30 Jun 2022 05:25:56 -0700 Subject: [PATCH 038/248] Fix parsing memory metrics expecting wrong unit suffix (#5585) --- .../utils/__tests__/convert-memory.test.ts | 52 ++++++++++++++++--- src/common/utils/convertMemory.ts | 10 ++-- 2 files changed, 50 insertions(+), 12 deletions(-) diff --git a/src/common/utils/__tests__/convert-memory.test.ts b/src/common/utils/__tests__/convert-memory.test.ts index 5acc10e5ab..c69f43a061 100644 --- a/src/common/utils/__tests__/convert-memory.test.ts +++ b/src/common/utils/__tests__/convert-memory.test.ts @@ -10,6 +10,50 @@ describe("unitsToBytes", () => { expect(unitsToBytes("1234")).toBe(1234); }); + it("should parse with B suffix", () => { + expect(unitsToBytes("1234B")).toBe(1234); + }); + + it("should parse with Ki suffix", () => { + expect(unitsToBytes("1234Ki")).toBe(1234 * (1024)); + }); + + it("should parse with Ki suffix as the same as KiB", () => { + expect(unitsToBytes("1234Ki")).toBe(unitsToBytes("1234KiB")); + }); + + it("should parse with Mi suffix", () => { + expect(unitsToBytes("1234Mi")).toBe(1234 * (1024 ** 2)); + }); + + it("should parse with Mi suffix as the same as MiB", () => { + expect(unitsToBytes("1234Mi")).toBe(unitsToBytes("1234MiB")); + }); + + it("should parse with Gi suffix", () => { + expect(unitsToBytes("1234Gi")).toBe(1234 * (1024 ** 3)); + }); + + it("should parse with Gi suffix as the same as GiB", () => { + expect(unitsToBytes("1234Gi")).toBe(unitsToBytes("1234GiB")); + }); + + it("should parse with Ti suffix", () => { + expect(unitsToBytes("1234Ti")).toBe(1234 * (1024 ** 4)); + }); + + it("should parse with Ti suffix as the same as TiB", () => { + expect(unitsToBytes("1234Ti")).toBe(unitsToBytes("1234TiB")); + }); + + it("should parse with Pi suffix", () => { + expect(unitsToBytes("1234Pi")).toBe(1234 * (1024 ** 5)); + }); + + it("should parse with Pi suffix as the same as PiB", () => { + expect(unitsToBytes("1234Pi")).toBe(unitsToBytes("1234PiB")); + }); + it("given unrelated data, return NaN", () => { expect(unitsToBytes("I am not a number")).toBeNaN(); }); @@ -64,14 +108,6 @@ describe("bytesToUnits", () => { expect(bytesToUnits(1900 * 1024 ** 4)).toBe("1.9PiB"); expect(bytesToUnits(50*(1024 ** 5) + 1)).toBe("50.0PiB"); }); - - it("given a number within the magnitude of 1024^6.., format with EiB", () => { - expect(bytesToUnits(1024**6)).toBe("1.0EiB"); - expect(bytesToUnits(2048**6)).toBe("64.0EiB"); - expect(bytesToUnits(1900 * 1024 ** 5)).toBe("1.9EiB"); - expect(bytesToUnits(50*(1024 ** 6) + 1)).toBe("50.0EiB"); - expect(bytesToUnits(1024**8)).toBe("1048576.0EiB"); - }); }); describe("bytesToUnits -> unitsToBytes", () => { diff --git a/src/common/utils/convertMemory.ts b/src/common/utils/convertMemory.ts index d06b33d64a..7cae1cf0c1 100644 --- a/src/common/utils/convertMemory.ts +++ b/src/common/utils/convertMemory.ts @@ -9,17 +9,18 @@ import * as iter from "./iter"; // Helper to convert memory from units Ki, Mi, Gi, Ti, Pi to bytes and vise versa const baseMagnitude = 1024; -const maxMagnitude = ["EiB", baseMagnitude ** 6] as const; +const maxMagnitude = ["PiB", baseMagnitude ** 5] as const; const magnitudes = new Map([ ["B", 1] as const, ["KiB", baseMagnitude ** 1] as const, ["MiB", baseMagnitude ** 2] as const, ["GiB", baseMagnitude ** 3] as const, ["TiB", baseMagnitude ** 4] as const, - ["PiB", baseMagnitude ** 5] as const, maxMagnitude, ]); -const unitRegex = /(?[0-9]+(\.[0-9]*)?)(?(B|[KMGTPE]iB))?/; +const unitRegex = /(?[0-9]+(\.[0-9]*)?)(?(B|[KMGTP]iB?))?/; + +type BinaryUnit = typeof magnitudes extends Map ? Key : never; export function unitsToBytes(value: string): number { const unitsMatch = value.match(unitRegex); @@ -34,7 +35,8 @@ export function unitsToBytes(value: string): number { return parsedValue; } - const magnitude = magnitudes.get(unitsMatch.groups.suffix as never); + const magnitude = magnitudes.get(unitsMatch.groups.suffix as BinaryUnit) + ?? magnitudes.get(`${unitsMatch.groups.suffix}B` as BinaryUnit); assert(magnitude, "UnitRegex is wrong some how"); From 165bf57380fc55017e86e67701e83c994ce50885 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 30 Jun 2022 05:26:08 -0700 Subject: [PATCH 039/248] Fix triple click breaking inputs (#5588) --- src/renderer/components/drawer/drawer.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/renderer/components/drawer/drawer.tsx b/src/renderer/components/drawer/drawer.tsx index 2f575788fe..61577e1bde 100644 --- a/src/renderer/components/drawer/drawer.tsx +++ b/src/renderer/components/drawer/drawer.tsx @@ -107,8 +107,9 @@ class NonInjectedDrawer extends React.Component Date: Fri, 1 Jul 2022 07:09:00 -0400 Subject: [PATCH 040/248] auto-update notifications on the status bar (#5361) * auto-update notifications on the status bar Signed-off-by: Jim Ehrismann * integrated with new and improved autoupdate code Signed-off-by: Jim Ehrismann * lint Signed-off-by: Jim Ehrismann * refactored to include AutoUpdateComponent in the statusBarItemsInjectable Signed-off-by: Jim Ehrismann * refactor to use a registrator Signed-off-by: Jim Ehrismann * fix lint, remove unused code Signed-off-by: Jim Ehrismann * refactored for the simplified logic for injecting many instances PR Signed-off-by: Jim Ehrismann * using the update syncBox injectables directly for status bar notifications Signed-off-by: Jim Ehrismann * removed update broadcasting/listening, updated snapshots Signed-off-by: Jim Ehrismann * fixing tests Signed-off-by: Jim Ehrismann * fixed tests Signed-off-by: Jim Ehrismann * cleanup after rebase to master Signed-off-by: Jim Ehrismann * address review comments Signed-off-by: Jim Ehrismann * fixed incorrect injectable id Signed-off-by: Jim Ehrismann * address review comments Signed-off-by: Jim Ehrismann * Tweak code-style Signed-off-by: Janne Savolainen Co-authored-by: Janne Savolainen --- ...acters-in-page-registrations.test.tsx.snap | 28 +- .../navigate-to-extension-page.test.tsx.snap | 70 ++- .../navigating-between-routes.test.tsx.snap | 28 +- ...ation-using-application-menu.test.tsx.snap | 28 +- ...g-update-using-topbar-button.test.tsx.snap | 14 +- .../installing-update-using-tray.test.ts.snap | 505 +++--------------- .../installing-update.test.ts.snap | 90 +++- ...eriodical-checking-of-updates.test.ts.snap | 14 +- ...selection-of-update-stability.test.ts.snap | 14 +- .../installing-update.test.ts | 29 +- ...gation-using-application-menu.test.ts.snap | 28 +- ...elm-repository-in-preferences.test.ts.snap | 168 +++++- ...tory-from-list-in-preferences.test.ts.snap | 140 ++++- ...m-repositories-in-preferences.test.ts.snap | 140 ++++- ...ive-repository-in-preferences.test.ts.snap | 56 +- .../closing-preferences.test.tsx.snap | 112 +++- ...on-to-application-preferences.test.ts.snap | 28 +- ...igation-to-editor-preferences.test.ts.snap | 28 +- ...tension-specific-preferences.test.tsx.snap | 140 ++++- ...ion-to-kubernetes-preferences.test.ts.snap | 28 +- ...vigation-to-proxy-preferences.test.ts.snap | 28 +- ...ion-to-telemetry-preferences.test.tsx.snap | 70 ++- ...ation-to-terminal-preferences.test.ts.snap | 28 +- ...gation-using-application-menu.test.ts.snap | 28 +- .../navigation-using-tray.test.ts.snap | 28 +- ...-originating-from-extensions.test.tsx.snap | 124 +++++ ...items-originating-from-extensions.test.tsx | 150 ++++++ ...gation-using-application-menu.test.ts.snap | 28 +- ...cation-update-status-channel.injectable.ts | 29 - .../discovered-update-version.injectable.ts | 14 +- .../progress-of-update-download.injectable.ts | 4 + .../update-is-being-downloaded.injectable.ts | 3 + ...updates-are-being-discovered.injectable.ts | 3 + ...st-change-in-updating-status.injectable.ts | 23 - ...process-checking-for-updates.injectable.ts | 21 +- .../download-update.injectable.ts | 1 + ...ation-update-status-listener.injectable.ts | 57 -- .../status-bar/auto-update-component.tsx | 107 ++++ .../auto-update-status-bar-item.injectable.ts | 22 + ...registered-status-bar-items.injectable.tsx | 78 --- .../status-bar-item-injection-token.ts | 17 + ...status-bar-item-registrator.injectable.tsx | 85 +++ .../status-bar/status-bar-items.injectable.ts | 21 - .../status-bar-items.injectable.tsx | 61 +++ .../components/status-bar/status-bar.test.tsx | 55 +- .../components/status-bar/status-bar.tsx | 12 +- .../test-utils/get-renderer-extension-fake.ts | 6 +- 47 files changed, 1999 insertions(+), 792 deletions(-) create mode 100644 src/behaviours/status-bar/__snapshots__/status-bar-items-originating-from-extensions.test.tsx.snap create mode 100644 src/behaviours/status-bar/status-bar-items-originating-from-extensions.test.tsx delete mode 100644 src/common/application-update/application-update-status-channel.injectable.ts delete mode 100644 src/main/application-update/check-for-updates/broadcast-change-in-updating-status.injectable.ts delete mode 100644 src/renderer/application-update/application-update-status-listener.injectable.ts create mode 100644 src/renderer/components/status-bar/auto-update-component.tsx create mode 100644 src/renderer/components/status-bar/auto-update-status-bar-item.injectable.ts delete mode 100644 src/renderer/components/status-bar/registered-status-bar-items.injectable.tsx create mode 100644 src/renderer/components/status-bar/status-bar-item-injection-token.ts create mode 100644 src/renderer/components/status-bar/status-bar-item-registrator.injectable.tsx delete mode 100644 src/renderer/components/status-bar/status-bar-items.injectable.ts create mode 100644 src/renderer/components/status-bar/status-bar-items.injectable.tsx diff --git a/src/behaviours/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap b/src/behaviours/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap index 3a3d32317c..91606c6ec9 100644 --- a/src/behaviours/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap +++ b/src/behaviours/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap @@ -52,9 +52,21 @@ exports[`extension special characters in page registrations renders 1`] = ` >
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
diff --git a/src/behaviours/__snapshots__/navigate-to-extension-page.test.tsx.snap b/src/behaviours/__snapshots__/navigate-to-extension-page.test.tsx.snap index c99c770ef1..9ed5890940 100644 --- a/src/behaviours/__snapshots__/navigate-to-extension-page.test.tsx.snap +++ b/src/behaviours/__snapshots__/navigate-to-extension-page.test.tsx.snap @@ -52,9 +52,21 @@ exports[`navigate to extension page renders 1`] = ` >
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
@@ -181,9 +205,21 @@ exports[`navigate to extension page when extension navigates to route with param >
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
@@ -263,9 +299,21 @@ exports[`navigate to extension page when extension navigates to route without pa >
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
@@ -345,9 +393,21 @@ exports[`navigate to extension page when extension navigates to route without pa >
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
diff --git a/src/behaviours/__snapshots__/navigating-between-routes.test.tsx.snap b/src/behaviours/__snapshots__/navigating-between-routes.test.tsx.snap index 921adfec18..bdc7fa31c1 100644 --- a/src/behaviours/__snapshots__/navigating-between-routes.test.tsx.snap +++ b/src/behaviours/__snapshots__/navigating-between-routes.test.tsx.snap @@ -52,9 +52,21 @@ exports[`navigating between routes given route with optional path parameters whe >
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
@@ -121,9 +133,21 @@ exports[`navigating between routes given route without path parameters when navi
   >
     
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
diff --git a/src/behaviours/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap b/src/behaviours/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap index 1da17bdc47..09f28e90a3 100644 --- a/src/behaviours/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap +++ b/src/behaviours/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap @@ -52,9 +52,21 @@ exports[`add-cluster - navigation using application menu renders 1`] = ` >
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+
+ Checking for updates... +
+
+
-
-
- - - info_outline - - -
-
- Checking for updates... -
-
- - - close - - -
-
-
+ />
`; @@ -224,95 +210,29 @@ exports[`installing update using tray when started when user checks for updates >
+ data-testid="status-bar-left" + > +
+
+ Downloading version some-version... +
+
+
+
-
-
- - - info_outline - - -
-
- Checking for updates... -
-
- - - close - - -
-
-
-
- - - info_outline - - -
-
- Download for version some-version started... -
-
- - - close - - -
-
-
+ />
`; @@ -388,135 +308,26 @@ exports[`installing update using tray when started when user checks for updates >
+ data-testid="status-bar-left" + > +
+
+ Download of update failed +
+
+
-
-
- - - info_outline - - -
-
- Checking for updates... -
-
- - - close - - -
-
-
-
- - - info_outline - - -
-
- Download for version some-version started... -
-
- - - close - - -
-
-
-
- - - info_outline - - -
-
- Download of update failed -
-
- - - close - - -
-
-
+ />
`; @@ -592,95 +403,26 @@ exports[`installing update using tray when started when user checks for updates >
+ data-testid="status-bar-left" + > +
+
+ some-version is available +
+
+
-
-
- - - info_outline - - -
-
- Checking for updates... -
-
- - - close - - -
-
-
-
- - - info_outline - - -
-
- Download for version some-version started... -
-
- - - close - - -
-
-
+ />
`; @@ -738,95 +480,26 @@ exports[`installing update using tray when started when user checks for updates >
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
-
-
- - - info_outline - - -
-
- Checking for updates... -
-
- - - close - - -
-
-
-
- - - info_outline - - -
-
- No new updates available -
-
- - - close - - -
-
-
+ />
`; diff --git a/src/behaviours/application-update/__snapshots__/installing-update.test.ts.snap b/src/behaviours/application-update/__snapshots__/installing-update.test.ts.snap index d865b6ce06..e9b4ce2a94 100644 --- a/src/behaviours/application-update/__snapshots__/installing-update.test.ts.snap +++ b/src/behaviours/application-update/__snapshots__/installing-update.test.ts.snap @@ -53,9 +53,21 @@ exports[`installing update when started renders 1`] = ` >
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+
+ Checking for updates... +
+
+
+ data-testid="status-bar-left" + > +
+
+ Downloading version some-version... +
+
+
+
+ data-testid="status-bar-left" + > +
+
+ Download of update failed +
+
+
+ data-testid="status-bar-left" + > +
+
+ some-version is available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
{ @@ -24,19 +23,17 @@ describe("installing update", () => { let checkForPlatformUpdatesMock: AsyncFnMock; let downloadPlatformUpdateMock: AsyncFnMock; let setUpdateOnQuitMock: jest.Mock; - let showInfoNotificationMock: jest.Mock; beforeEach(() => { + jest.useFakeTimers(); + applicationBuilder = getApplicationBuilder(); - applicationBuilder.beforeApplicationStart(({ mainDi, rendererDi }) => { + applicationBuilder.beforeApplicationStart(({ mainDi }) => { quitAndInstallUpdateMock = jest.fn(); checkForPlatformUpdatesMock = asyncFn(); downloadPlatformUpdateMock = asyncFn(); setUpdateOnQuitMock = jest.fn(); - showInfoNotificationMock = jest.fn(() => () => {}); - - rendererDi.override(showInfoNotificationInjectable, () => showInfoNotificationMock); mainDi.override(setUpdateOnQuitInjectable, () => setUpdateOnQuitMock); @@ -89,7 +86,7 @@ describe("installing update", () => { }); it("notifies the user that checking for updates is happening", () => { - expect(showInfoNotificationMock).toHaveBeenCalledWith("Checking for updates..."); + expect(rendered.getByTestId("app-update-checking")).toBeInTheDocument(); }); it("renders", () => { @@ -98,8 +95,6 @@ describe("installing update", () => { describe("when no new update is discovered", () => { beforeEach(async () => { - showInfoNotificationMock.mockClear(); - await checkForPlatformUpdatesMock.resolve({ updateWasDiscovered: false, }); @@ -108,7 +103,7 @@ describe("installing update", () => { }); it("notifies the user", () => { - expect(showInfoNotificationMock).toHaveBeenCalledWith("No new updates available"); + expect(rendered.getByTestId("app-update-not-available")).toBeInTheDocument(); }); it("does not start downloading update", () => { @@ -118,6 +113,12 @@ describe("installing update", () => { it("renders", () => { expect(rendered.baseElement).toMatchSnapshot(); }); + + it.skip("when 5 seconds elapses, clears the notification to the user", () => { + jest.advanceTimersByTime(6000); + + expect(rendered.getByTestId("app-update-idle")).toBeInTheDocument(); + }); }); describe("when new update is discovered", () => { @@ -135,7 +136,7 @@ describe("installing update", () => { }); it("notifies the user that download is happening", () => { - expect(showInfoNotificationMock).toHaveBeenCalledWith("Download for version some-version started..."); + expect(rendered.getByTestId("app-update-downloading")).toBeInTheDocument(); }); it("renders", () => { @@ -152,7 +153,7 @@ describe("installing update", () => { }); it("notifies the user about failed download", () => { - expect(showInfoNotificationMock).toHaveBeenCalledWith("Download of update failed"); + expect(rendered.getByTestId("app-update-download-failed")).toBeInTheDocument(); }); it("renders", () => { @@ -169,6 +170,10 @@ describe("installing update", () => { expect(quitAndInstallUpdateMock).not.toHaveBeenCalled(); }); + it("notifies the user about successful download", () => { + expect(rendered.getByTestId("app-update-available")).toBeInTheDocument(); + }); + it("renders", () => { expect(rendered.baseElement).toMatchSnapshot(); }); diff --git a/src/behaviours/extensions/__snapshots__/navigation-using-application-menu.test.ts.snap b/src/behaviours/extensions/__snapshots__/navigation-using-application-menu.test.ts.snap index b8c6804f4d..a549889d94 100644 --- a/src/behaviours/extensions/__snapshots__/navigation-using-application-menu.test.ts.snap +++ b/src/behaviours/extensions/__snapshots__/navigation-using-application-menu.test.ts.snap @@ -52,9 +52,21 @@ exports[`extensions - navigation using application menu renders 1`] = ` >
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
@@ -914,9 +950,21 @@ exports[`preferences - closing-preferences given accessing preferences directly >
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
@@ -980,9 +1028,21 @@ exports[`preferences - closing-preferences given already in a page and then navi >
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+
+
+
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
+
+ No new updates available +
+
+
+
+ left1 +
+
+
+
+ left2 +
+
+
+
+
+
+ right3 +
+
+
+ + right2 + +
+
+ + right1 + +
+
+
+
+
+ +`; diff --git a/src/behaviours/status-bar/status-bar-items-originating-from-extensions.test.tsx b/src/behaviours/status-bar/status-bar-items-originating-from-extensions.test.tsx new file mode 100644 index 0000000000..998a8d7281 --- /dev/null +++ b/src/behaviours/status-bar/status-bar-items-originating-from-extensions.test.tsx @@ -0,0 +1,150 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import type { RenderResult } from "@testing-library/react"; +import React from "react"; +import type { GetRendererExtensionFake, TestExtension } from "../../renderer/components/test-utils/get-renderer-extension-fake"; +import { getRendererExtensionFakeFor } from "../../renderer/components/test-utils/get-renderer-extension-fake"; +import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; +import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; +import getRandomIdInjectable from "../../common/utils/get-random-id.injectable"; + +describe("status-bar-items-originating-from-extensions", () => { + let applicationBuilder: ApplicationBuilder; + + beforeEach(() => { + applicationBuilder = getApplicationBuilder(); + + applicationBuilder.beforeApplicationStart(({ rendererDi }) => { + rendererDi.unoverride(getRandomIdInjectable); + rendererDi.permitSideEffects(getRandomIdInjectable); + }); + }); + + describe("when application starts", () => { + let rendered: RenderResult; + let getRendererExtensionFake: GetRendererExtensionFake; + + beforeEach(async () => { + rendered = await applicationBuilder.render(); + getRendererExtensionFake = getRendererExtensionFakeFor(applicationBuilder); + }); + + it("when multiple extensions with status bar items are loaded, shows items in correct order", () => { + const testExtension1 = getRendererExtensionFake({ + id: "some-id", + name: "some-name", + + statusBarItems: [ + { + components: { + Item: () =>
extension1
, + position: "right", + }, + }, + ], + }); + + const testExtension2 = getRendererExtensionFake({ + id: "some-other-id", + name: "some-other-name", + statusBarItems: [ + { + components: { + Item: () =>
extension2
, + position: "right", + }, + }, + ], + }); + + applicationBuilder.extensions.renderer.enable(testExtension1, testExtension2); + + const rightSide = rendered.getByTestId("status-bar-right"); + + const actual = getTestStatusBarTexts(rightSide, [ + "extension1", + "extension2", + ]); + + expect(actual).toEqual(["extension2", "extension1"]); + }); + + describe("when extension with status bar items is loaded", () => { + let testExtension: TestExtension; + + beforeEach(() => { + testExtension = getRendererExtensionFake({ + id: "some-id", + name: "some-name", + statusBarItems: [ + { + item: () => right1, + }, + { + item: () => right2, + }, + { + components: { + Item: () =>
right3
, + position: "right", + }, + }, + { + components: { + Item: () =>
left1
, + position: "left", + }, + }, + { + components: { + Item: () =>
left2
, + position: "left", + }, + }, + ], + }); + + applicationBuilder.extensions.renderer.enable(testExtension); + }); + + it("renders", () => { + expect(rendered.baseElement).toMatchSnapshot(); + }); + + it("shows right side status bar items in the correct order", () => { + const rightSide = rendered.getByTestId("status-bar-right"); + + const actual = getTestStatusBarTexts(rightSide, [ + "right1", + "right2", + "right3", + ]); + + expect(actual).toEqual(["right3", "right2", "right1"]); + }); + + it("shows left side status bar items in the correct order", () => { + const leftSide = rendered.getByTestId("status-bar-left"); + + const actual = getTestStatusBarTexts(leftSide, ["left2", "left1"]); + + expect(actual).toEqual(["left1", "left2"]); + }); + + it("when the extension is removed, shows there are no extension status bar items", () => { + applicationBuilder.extensions.renderer.disable(testExtension); + + const actual = rendered.queryAllByTestId("some-testId"); + + expect(actual).toHaveLength(0); + }); + }); + }); +}); + +const getTestStatusBarTexts = (actual: HTMLElement, expectedTexts: string[]) => + Array.from(actual.children) + .map((elem) => elem.textContent) + .filter((elem) => elem && expectedTexts.includes(elem)); diff --git a/src/behaviours/welcome/__snapshots__/navigation-using-application-menu.test.ts.snap b/src/behaviours/welcome/__snapshots__/navigation-using-application-menu.test.ts.snap index 47b75b4303..5f76677010 100644 --- a/src/behaviours/welcome/__snapshots__/navigation-using-application-menu.test.ts.snap +++ b/src/behaviours/welcome/__snapshots__/navigation-using-application-menu.test.ts.snap @@ -52,9 +52,21 @@ exports[`welcome - navigation using application menu renders 1`] = ` >
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
+ data-testid="status-bar-left" + > +
+
+ No new updates available +
+
+
; - -const applicationUpdateStatusChannelInjectable = getInjectable({ - id: "application-update-status-channel", - - instantiate: (): ApplicationUpdateStatusChannel => ({ - id: "application-update-status-channel", - }), - - injectionToken: messageChannelInjectionToken, -}); - -export default applicationUpdateStatusChannelInjectable; diff --git a/src/common/application-update/discovered-update-version/discovered-update-version.injectable.ts b/src/common/application-update/discovered-update-version/discovered-update-version.injectable.ts index 60557de211..29e89d3ea3 100644 --- a/src/common/application-update/discovered-update-version/discovered-update-version.injectable.ts +++ b/src/common/application-update/discovered-update-version/discovered-update-version.injectable.ts @@ -5,21 +5,21 @@ import { getInjectable } from "@ogre-tools/injectable"; import createSyncBoxInjectable from "../../utils/sync-box/create-sync-box.injectable"; import type { UpdateChannel } from "../update-channels"; +import type { SyncBox } from "../../utils/sync-box/sync-box-injection-token"; import { syncBoxInjectionToken } from "../../utils/sync-box/sync-box-injection-token"; +export type DiscoveredUpdateVersion = SyncBox<{ version: string; updateChannel: UpdateChannel } | null>; + const discoveredUpdateVersionInjectable = getInjectable({ id: "discovered-update-version", instantiate: (di) => { const createSyncBox = di.inject(createSyncBoxInjectable); - return createSyncBox< - | { version: string; updateChannel: UpdateChannel } - | null - >( - "discovered-update-version", - null, - ); + return createSyncBox( + "discovered-update-version", + null, + ) as DiscoveredUpdateVersion; }, injectionToken: syncBoxInjectionToken, diff --git a/src/common/application-update/progress-of-update-download/progress-of-update-download.injectable.ts b/src/common/application-update/progress-of-update-download/progress-of-update-download.injectable.ts index 26ecd1d618..cf7b0cf7e0 100644 --- a/src/common/application-update/progress-of-update-download/progress-of-update-download.injectable.ts +++ b/src/common/application-update/progress-of-update-download/progress-of-update-download.injectable.ts @@ -4,12 +4,16 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import createSyncBoxInjectable from "../../utils/sync-box/create-sync-box.injectable"; +import type { SyncBox } from "../../utils/sync-box/sync-box-injection-token"; import { syncBoxInjectionToken } from "../../utils/sync-box/sync-box-injection-token"; export interface ProgressOfDownload { percentage: number; + failed?: string; } +export type ProgressOfUpdateDownload = SyncBox; + const progressOfUpdateDownloadInjectable = getInjectable({ id: "progress-of-update-download-state", diff --git a/src/common/application-update/update-is-being-downloaded/update-is-being-downloaded.injectable.ts b/src/common/application-update/update-is-being-downloaded/update-is-being-downloaded.injectable.ts index e1701d7952..0eae5779ed 100644 --- a/src/common/application-update/update-is-being-downloaded/update-is-being-downloaded.injectable.ts +++ b/src/common/application-update/update-is-being-downloaded/update-is-being-downloaded.injectable.ts @@ -4,8 +4,11 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import createSyncBoxInjectable from "../../utils/sync-box/create-sync-box.injectable"; +import type { SyncBox } from "../../utils/sync-box/sync-box-injection-token"; import { syncBoxInjectionToken } from "../../utils/sync-box/sync-box-injection-token"; +export type UpdateIsBeingDownloaded = SyncBox; + const updateIsBeingDownloadedInjectable = getInjectable({ id: "update-is-being-downloaded", diff --git a/src/common/application-update/updates-are-being-discovered/updates-are-being-discovered.injectable.ts b/src/common/application-update/updates-are-being-discovered/updates-are-being-discovered.injectable.ts index 21f1c14bec..97ff920af4 100644 --- a/src/common/application-update/updates-are-being-discovered/updates-are-being-discovered.injectable.ts +++ b/src/common/application-update/updates-are-being-discovered/updates-are-being-discovered.injectable.ts @@ -4,8 +4,11 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import createSyncBoxInjectable from "../../utils/sync-box/create-sync-box.injectable"; +import type { SyncBox } from "../../utils/sync-box/sync-box-injection-token"; import { syncBoxInjectionToken } from "../../utils/sync-box/sync-box-injection-token"; +export type UpdatesAreBeingDiscovered = SyncBox; + const updatesAreBeingDiscoveredInjectable = getInjectable({ id: "updates-are-being-discovered", diff --git a/src/main/application-update/check-for-updates/broadcast-change-in-updating-status.injectable.ts b/src/main/application-update/check-for-updates/broadcast-change-in-updating-status.injectable.ts deleted file mode 100644 index 7e9257e966..0000000000 --- a/src/main/application-update/check-for-updates/broadcast-change-in-updating-status.injectable.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 { getInjectable } from "@ogre-tools/injectable"; -import type { ApplicationUpdateStatusChannelMessage } from "../../../common/application-update/application-update-status-channel.injectable"; -import { messageToChannelInjectionToken } from "../../../common/utils/channel/message-to-channel-injection-token"; -import applicationUpdateStatusChannelInjectable from "../../../common/application-update/application-update-status-channel.injectable"; - -const broadcastChangeInUpdatingStatusInjectable = getInjectable({ - id: "broadcast-change-in-updating-status", - - instantiate: (di) => { - const messageToChannel = di.inject(messageToChannelInjectionToken); - const applicationUpdateStatusChannel = di.inject(applicationUpdateStatusChannelInjectable); - - return (data: ApplicationUpdateStatusChannelMessage) => { - messageToChannel(applicationUpdateStatusChannel, data); - }; - }, -}); - -export default broadcastChangeInUpdatingStatusInjectable; diff --git a/src/main/application-update/check-for-updates/process-checking-for-updates.injectable.ts b/src/main/application-update/check-for-updates/process-checking-for-updates.injectable.ts index bd3501b5d8..73cab8d300 100644 --- a/src/main/application-update/check-for-updates/process-checking-for-updates.injectable.ts +++ b/src/main/application-update/check-for-updates/process-checking-for-updates.injectable.ts @@ -8,7 +8,6 @@ import updatesAreBeingDiscoveredInjectable from "../../../common/application-upd import discoveredUpdateVersionInjectable from "../../../common/application-update/discovered-update-version/discovered-update-version.injectable"; import { runInAction } from "mobx"; import downloadUpdateInjectable from "../download-update/download-update.injectable"; -import broadcastChangeInUpdatingStatusInjectable from "./broadcast-change-in-updating-status.injectable"; import checkForUpdatesStartingFromChannelInjectable from "./check-for-updates-starting-from-channel.injectable"; import withOrphanPromiseInjectable from "../../../common/utils/with-orphan-promise/with-orphan-promise.injectable"; import emitEventInjectable from "../../../common/app-event-bus/emit-event.injectable"; @@ -20,7 +19,6 @@ const processCheckingForUpdatesInjectable = getInjectable({ instantiate: (di) => { const downloadUpdate = di.inject(downloadUpdateInjectable); const selectedUpdateChannel = di.inject(selectedUpdateChannelInjectable); - const broadcastChangeInUpdatingStatus = di.inject(broadcastChangeInUpdatingStatusInjectable); const checkingForUpdatesState = di.inject(updatesAreBeingDiscoveredInjectable); const discoveredVersionState = di.inject(discoveredUpdateVersionInjectable); const checkForUpdatesStartingFromChannel = di.inject(checkForUpdatesStartingFromChannelInjectable); @@ -34,8 +32,6 @@ const processCheckingForUpdatesInjectable = getInjectable({ params: { currentDateTime: getCurrentDateTime(), source }, }); - broadcastChangeInUpdatingStatus({ eventId: "checking-for-updates" }); - runInAction(() => { checkingForUpdatesState.set(true); }); @@ -43,8 +39,6 @@ const processCheckingForUpdatesInjectable = getInjectable({ const result = await checkForUpdatesStartingFromChannel(selectedUpdateChannel.value.get()); if (!result.updateWasDiscovered) { - broadcastChangeInUpdatingStatus({ eventId: "no-updates-available" }); - runInAction(() => { discoveredVersionState.set(null); checkingForUpdatesState.set(false); @@ -61,11 +55,6 @@ const processCheckingForUpdatesInjectable = getInjectable({ params: { version, currentDateTime: getCurrentDateTime() }, }); - broadcastChangeInUpdatingStatus({ - eventId: "download-for-update-started", - version, - }); - runInAction(() => { discoveredVersionState.set({ version, @@ -75,15 +64,7 @@ const processCheckingForUpdatesInjectable = getInjectable({ checkingForUpdatesState.set(false); }); - withOrphanPromise(async () => { - const { downloadWasSuccessful } = await downloadUpdate(); - - if (!downloadWasSuccessful) { - broadcastChangeInUpdatingStatus({ - eventId: "download-for-update-failed", - }); - } - })(); + withOrphanPromise(async () => await downloadUpdate())(); }; }, }); diff --git a/src/main/application-update/download-update/download-update.injectable.ts b/src/main/application-update/download-update/download-update.injectable.ts index f68b5166c0..4def3b493a 100644 --- a/src/main/application-update/download-update/download-update.injectable.ts +++ b/src/main/application-update/download-update/download-update.injectable.ts @@ -38,6 +38,7 @@ const downloadUpdateInjectable = getInjectable({ runInAction(() => { if (!downloadWasSuccessful) { + progressOfUpdateDownload.set({ percentage: 0, failed: "Download of update failed" }); discoveredVersionState.set(null); } diff --git a/src/renderer/application-update/application-update-status-listener.injectable.ts b/src/renderer/application-update/application-update-status-listener.injectable.ts deleted file mode 100644 index 69ba23608c..0000000000 --- a/src/renderer/application-update/application-update-status-listener.injectable.ts +++ /dev/null @@ -1,57 +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 type { ApplicationUpdateStatusChannel, ApplicationUpdateStatusEventId } from "../../common/application-update/application-update-status-channel.injectable"; -import applicationUpdateStatusChannelInjectable from "../../common/application-update/application-update-status-channel.injectable"; -import showInfoNotificationInjectable from "../components/notifications/show-info-notification.injectable"; -import type { MessageChannelListener } from "../../common/utils/channel/message-channel-listener-injection-token"; -import { messageChannelListenerInjectionToken } from "../../common/utils/channel/message-channel-listener-injection-token"; - -const applicationUpdateStatusListenerInjectable = getInjectable({ - id: "application-update-status-listener", - - instantiate: (di): MessageChannelListener => { - const channel = di.inject(applicationUpdateStatusChannelInjectable); - const showInfoNotification = di.inject(showInfoNotificationInjectable); - - const eventHandlers: Record void }> = { - "checking-for-updates": { - handle: () => { - showInfoNotification("Checking for updates..."); - }, - }, - - "no-updates-available": { - handle: () => { - showInfoNotification("No new updates available"); - }, - }, - - "download-for-update-started": { - handle: (version) => { - showInfoNotification(`Download for version ${version} started...`); - }, - }, - - "download-for-update-failed": { - handle: () => { - showInfoNotification("Download of update failed"); - }, - }, - }; - - return { - channel, - - handler: ({ eventId, version }) => { - eventHandlers[eventId].handle(version); - }, - }; - }, - - injectionToken: messageChannelListenerInjectionToken, -}); - -export default applicationUpdateStatusListenerInjectable; diff --git a/src/renderer/components/status-bar/auto-update-component.tsx b/src/renderer/components/status-bar/auto-update-component.tsx new file mode 100644 index 0000000000..5a0b7e8acf --- /dev/null +++ b/src/renderer/components/status-bar/auto-update-component.tsx @@ -0,0 +1,107 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { withInjectables } from "@ogre-tools/injectable-react"; +import { observer } from "mobx-react"; +import assert from "assert"; +import React, { useState } from "react"; +import { Spinner } from "../spinner"; +import type { ProgressOfUpdateDownload } from "../../../common/application-update/progress-of-update-download/progress-of-update-download.injectable"; +import progressOfUpdateDownloadInjectable from "../../../common/application-update/progress-of-update-download/progress-of-update-download.injectable"; +import type { DiscoveredUpdateVersion } from "../../../common/application-update/discovered-update-version/discovered-update-version.injectable"; +import discoveredUpdateVersionInjectable from "../../../common/application-update/discovered-update-version/discovered-update-version.injectable"; +import type { UpdateIsBeingDownloaded } from "../../../common/application-update/update-is-being-downloaded/update-is-being-downloaded.injectable"; +import updateIsBeingDownloadedInjectable from "../../../common/application-update/update-is-being-downloaded/update-is-being-downloaded.injectable"; +import type { UpdatesAreBeingDiscovered } from "../../../common/application-update/updates-are-being-discovered/updates-are-being-discovered.injectable"; +import updatesAreBeingDiscoveredInjectable from "../../../common/application-update/updates-are-being-discovered/updates-are-being-discovered.injectable"; +import { now as reactiveDateNow } from "mobx-utils"; + +interface Dependencies { + progressOfUpdateDownload: ProgressOfUpdateDownload; + discoveredVersionState: DiscoveredUpdateVersion; + downloadingUpdateState: UpdateIsBeingDownloaded; + checkingForUpdatesState: UpdatesAreBeingDiscovered; +} + +interface EndNoteProps { + version?: string; + note: (version: string) => JSX.Element; +} + +const EndNote = observer(({ version, note }: EndNoteProps) => { + const [start] = useState(Date.now()); + + if (start + 5000 <= reactiveDateNow()) { + return idle(); + } + + return note(version ?? ""); +}); + +const checking = () => ( + <> + +
Checking for updates...
+ +); + +const available = (version: string) =>
{`${version ?? "Update"} is available`}
; + +const notAvailable = () =>
No new updates available
; + +const downloading = (version: string) => { + return ( + <> +
{`Downloading version ${version}...`}
+ + + ); +}; + +const downloadFailed = (errMsg: string) =>
{errMsg}
; + +const idle = () =>
; + + +export const NonInjectedAutoUpdateComponent = observer(({ + progressOfUpdateDownload, + discoveredVersionState, + downloadingUpdateState, + checkingForUpdatesState, +}: Dependencies) => { + const discoveredVersion = discoveredVersionState.value.get(); + + const { failed } = progressOfUpdateDownload.value.get(); + + if (downloadingUpdateState.value.get()) { + + assert(discoveredVersion); + + return downloading(discoveredVersion.version); + } + + if (checkingForUpdatesState.value.get()) { + return checking(); + } + + if ( discoveredVersion) { + return ; + } + + if ( failed ) { + return ; + } + + return ; +}); + +export const AutoUpdateComponent = withInjectables(NonInjectedAutoUpdateComponent, { + getProps: (di, props) => ({ + progressOfUpdateDownload: di.inject(progressOfUpdateDownloadInjectable), + discoveredVersionState: di.inject(discoveredUpdateVersionInjectable), + downloadingUpdateState: di.inject(updateIsBeingDownloadedInjectable), + checkingForUpdatesState: di.inject(updatesAreBeingDiscoveredInjectable), + ...props, + }), +}); diff --git a/src/renderer/components/status-bar/auto-update-status-bar-item.injectable.ts b/src/renderer/components/status-bar/auto-update-status-bar-item.injectable.ts new file mode 100644 index 0000000000..de8f1518e8 --- /dev/null +++ b/src/renderer/components/status-bar/auto-update-status-bar-item.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 { computed } from "mobx"; +import { AutoUpdateComponent } from "./auto-update-component"; +import { statusBarItemInjectionToken } from "./status-bar-item-injection-token"; + +const autoUpdateStatusBarItemInjectable = getInjectable({ + id: "auto-update-status-bar-item", + + instantiate: () => ({ + component: AutoUpdateComponent, + position: "left" as const, + visible: computed(() => true), + }), + + injectionToken: statusBarItemInjectionToken, +}); + +export default autoUpdateStatusBarItemInjectable; diff --git a/src/renderer/components/status-bar/registered-status-bar-items.injectable.tsx b/src/renderer/components/status-bar/registered-status-bar-items.injectable.tsx deleted file mode 100644 index 976d36451c..0000000000 --- a/src/renderer/components/status-bar/registered-status-bar-items.injectable.tsx +++ /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 React from "react"; -import { getInjectable } from "@ogre-tools/injectable"; -import type { IComputedValue } from "mobx"; -import { computed } from "mobx"; -import type { - StatusBarItemProps, - StatusBarRegistration, -} from "./status-bar-registration"; -import statusBarItemsInjectable from "./status-bar-items.injectable"; - -export interface RegisteredStatusBarItems { - right: React.ComponentType[]; - left: React.ComponentType[]; -} - -interface Dependencies { - registrations: IComputedValue; -} - -function getRegisteredStatusBarItems({ registrations }: Dependencies): IComputedValue { - return computed(() => { - const res: RegisteredStatusBarItems = { - left: [], - right: [], - }; - - for (const registration of registrations.get()) { - if (!registration || typeof registration !== "object") { - continue; - } - - if (registration.item) { - const { item } = registration; - - // default for old API is "right" - res.right.push( - () => ( - <> - { - typeof item === "function" - ? item() - : item - } - - ), - ); - } else if (registration.components) { - const { position = "right", Item } = registration.components; - - if (position !== "left" && position !== "right") { - throw new TypeError("StatusBarRegistration.components.position must be either 'right' or 'left'"); - } - - res[position].push(Item); - } - } - - // This is done so that the first ones registered are closest to the corner - res.right.reverse(); - - return res; - }); -} - -const registeredStatusBarItemsInjectable = getInjectable({ - id: "registered-status-bar-items", - - instantiate: (di) => getRegisteredStatusBarItems({ - registrations: di.inject(statusBarItemsInjectable), - }), - -}); - -export default registeredStatusBarItemsInjectable; diff --git a/src/renderer/components/status-bar/status-bar-item-injection-token.ts b/src/renderer/components/status-bar/status-bar-item-injection-token.ts new file mode 100644 index 0000000000..0fec934077 --- /dev/null +++ b/src/renderer/components/status-bar/status-bar-item-injection-token.ts @@ -0,0 +1,17 @@ +/** + * 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 { IComputedValue } from "mobx"; +import type React from "react"; + +export interface StatusBarItem { + component: React.ComponentType; + position: "left" | "right"; + visible: IComputedValue; +} + +export const statusBarItemInjectionToken = getInjectionToken({ + id: "status-bar-item", +}); diff --git a/src/renderer/components/status-bar/status-bar-item-registrator.injectable.tsx b/src/renderer/components/status-bar/status-bar-item-registrator.injectable.tsx new file mode 100644 index 0000000000..2b31c9b312 --- /dev/null +++ b/src/renderer/components/status-bar/status-bar-item-registrator.injectable.tsx @@ -0,0 +1,85 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import type { Injectable } from "@ogre-tools/injectable"; +import { getInjectable } from "@ogre-tools/injectable"; +import { computed } from "mobx"; +import { extensionRegistratorInjectionToken } from "../../../extensions/extension-loader/extension-registrator-injection-token"; +import type { LensRendererExtension } from "../../../extensions/lens-renderer-extension"; +import type { StatusBarItem } from "./status-bar-item-injection-token"; +import { statusBarItemInjectionToken } from "./status-bar-item-injection-token"; +import type { StatusBarRegistration } from "./status-bar-registration"; +import React from "react"; +import getRandomIdInjectable from "../../../common/utils/get-random-id.injectable"; +import loggerInjectable from "../../../common/logger.injectable"; +import type { Logger } from "../../../common/logger"; + +const statusBarItemRegistratorInjectable = getInjectable({ + id: "status-bar-item-registrator", + + instantiate: (di) => (extension) => { + const rendererExtension = extension as LensRendererExtension; + const getRandomId = di.inject(getRandomIdInjectable); + const logger = di.inject(loggerInjectable); + + return rendererExtension.statusBarItems.flatMap( + toItemInjectableFor(rendererExtension, getRandomId, logger), + ); + }, + + injectionToken: extensionRegistratorInjectionToken, +}); + +export default statusBarItemRegistratorInjectable; + +const toItemInjectableFor = (extension: LensRendererExtension, getRandomId: () => string, logger: Logger) => { + return (registration: StatusBarRegistration): Injectable[] => { + const id = `${getRandomId()}-status-bar-item-for-extension-${extension.sanitizedExtensionId}`; + let component: React.ComponentType; + let position: "left" | "right"; + + if (registration?.item) { + const { item } = registration; + + position = "right"; + component = + () => ( + <> + { + typeof item === "function" + ? item() + : item + } + + ); + } else if (registration?.components) { + const { position: pos = "right", Item } = registration.components; + + if (pos !== "left" && pos !== "right") { + throw new TypeError("StatusBarRegistration.components.position must be either 'right' or 'left'"); + } + + position = pos; + component = Item; + } else { + logger.warn("StatusBarRegistration must have valid item or components field"); + + return []; + } + + return [getInjectable({ + id, + + instantiate: () => ({ + component, + position, + visible: computed(() => true), + }), + + injectionToken: statusBarItemInjectionToken, + })]; + }; +}; + + diff --git a/src/renderer/components/status-bar/status-bar-items.injectable.ts b/src/renderer/components/status-bar/status-bar-items.injectable.ts deleted file mode 100644 index 05a22b86a7..0000000000 --- a/src/renderer/components/status-bar/status-bar-items.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 { computed } from "mobx"; -import rendererExtensionsInjectable from "../../../extensions/renderer-extensions.injectable"; - -const statusBarItemsInjectable = getInjectable({ - id: "status-bar-items", - - instantiate: (di) => { - const extensions = di.inject(rendererExtensionsInjectable); - - return computed(() => - extensions.get().flatMap((ext) => ext.statusBarItems), - ); - }, -}); - -export default statusBarItemsInjectable; diff --git a/src/renderer/components/status-bar/status-bar-items.injectable.tsx b/src/renderer/components/status-bar/status-bar-items.injectable.tsx new file mode 100644 index 0000000000..855b8654c9 --- /dev/null +++ b/src/renderer/components/status-bar/status-bar-items.injectable.tsx @@ -0,0 +1,61 @@ +/** + * 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 { computed } from "mobx"; +import type { StatusBarItemProps } from "./status-bar-registration"; +import type { StatusBarItem } from "./status-bar-item-injection-token"; +import { statusBarItemInjectionToken } from "./status-bar-item-injection-token"; +import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx"; + +export interface StatusBarItems { + right: React.ComponentType[]; + left: React.ComponentType[]; +} + +interface Dependencies { + registrations: IComputedValue; +} + +function getStatusBarItems({ registrations }: Dependencies): IComputedValue { + return computed(() => { + const res: StatusBarItems = { + left: [], + right: [], + }; + + for (const registration of registrations.get()) { + const { position = "right", component, visible } = registration; + + if (!visible.get()) { + continue; + } + + res[position].push(component); + } + + // This is done so that the first ones registered are closest to the corner + res.right.reverse(); + + return res; + }); +} + +const statusBarItemsInjectable = getInjectable({ + id: "status-bar-items", + + instantiate: (di) => { + const computedInjectMany = di.inject( + computedInjectManyInjectable, + ); + + return getStatusBarItems({ + registrations: computedInjectMany(statusBarItemInjectionToken), + }); + }, + +}); + +export default statusBarItemsInjectable; diff --git a/src/renderer/components/status-bar/status-bar.test.tsx b/src/renderer/components/status-bar/status-bar.test.tsx index 53920d45c7..322b37dc85 100644 --- a/src/renderer/components/status-bar/status-bar.test.tsx +++ b/src/renderer/components/status-bar/status-bar.test.tsx @@ -5,18 +5,16 @@ import React from "react"; import "@testing-library/jest-dom/extend-expect"; -import { StatusBar } from "./status-bar"; -import { getDiForUnitTesting } from "../../getDiForUnitTesting"; -import type { DiRender } from "../test-utils/renderFor"; -import { renderFor } from "../test-utils/renderFor"; import type { IObservableArray } from "mobx"; import { computed, observable } from "mobx"; import type { DiContainer } from "@ogre-tools/injectable"; +import type { StatusBarItems } from "./status-bar-items.injectable"; import statusBarItemsInjectable from "./status-bar-items.injectable"; -import type { StatusBarRegistration } from "./status-bar-registration"; import { LensRendererExtension } from "../../../extensions/lens-renderer-extension"; import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; -import rendererExtensionsInjectable from "../../../extensions/renderer-extensions.injectable"; +import type { ApplicationBuilder } from "../test-utils/get-application-builder"; +import { getApplicationBuilder } from "../test-utils/get-application-builder"; +import getRandomIdInjectable from "../../../common/utils/get-random-id.injectable"; class SomeTestExtension extends LensRendererExtension { constructor(statusBarItems: IObservableArray) { @@ -35,21 +33,29 @@ class SomeTestExtension extends LensRendererExtension { } describe("", () => { - let render: DiRender; let di: DiContainer; let statusBarItems: IObservableArray; + let applicationBuilder: ApplicationBuilder; - beforeEach(() => { + beforeEach(async () => { statusBarItems = observable.array([]); - di = getDiForUnitTesting({ doGeneralOverrides: true }); - render = renderFor(di); + + applicationBuilder = getApplicationBuilder(); + + applicationBuilder.beforeApplicationStart(({ rendererDi }) => { + rendererDi.unoverride(getRandomIdInjectable); + rendererDi.permitSideEffects(getRandomIdInjectable); + }); + + applicationBuilder.extensions.renderer.enable(new SomeTestExtension(statusBarItems)); + + di = applicationBuilder.dis.rendererDi; di.override(directoryForUserDataInjectable, () => "some-directory-for-user-data"); - di.override(rendererExtensionsInjectable, () => computed(() => [new SomeTestExtension(statusBarItems)])); }); - it("renders w/o errors", () => { - const { container } = render(); + it("renders w/o errors", async () => { + const { container } = await applicationBuilder.render(); expect(container).toBeInstanceOf(HTMLElement); }); @@ -62,26 +68,27 @@ describe("", () => { [], [{}], {}, - ])("renders w/o errors when registrations are not type compliant (%p)", val => { + ])("renders w/o errors when registrations are not type compliant (%p)", async val => { statusBarItems.replace([val]); - expect(() => render()).not.toThrow(); + await expect(applicationBuilder.render()).resolves.toBeTruthy(); }); - it("renders items [{item: React.ReactNode}] (4.0.0-rc.1)", () => { + it("renders items [{item: React.ReactNode}] (4.0.0-rc.1)", async () => { const testId = "testId"; const text = "heee"; - di.override(statusBarItemsInjectable, () => computed(() => [ - { item: {text} }, - ] as StatusBarRegistration[])); + di.override(statusBarItemsInjectable, () => computed(() => ({ + right: [ () => {text} ], + left: [], + }) as StatusBarItems)); - const { getByTestId } = render(); + const { getByTestId } = await applicationBuilder.render(); expect(getByTestId(testId)).toHaveTextContent(text); }); - it("renders items [{item: () => React.ReactNode}] (4.0.0-rc.1+)", () => { + it("renders items [{item: () => React.ReactNode}] (4.0.0-rc.1+)", async () => { const testId = "testId"; const text = "heee"; @@ -89,13 +96,13 @@ describe("", () => { item: () => {text}, }]); - const { getByTestId } = render(); + const { getByTestId } = await applicationBuilder.render(); expect(getByTestId(testId)).toHaveTextContent(text); }); - it("sort positioned items properly", () => { + it("sort positioned items properly", async () => { statusBarItems.replace([ { components: { @@ -122,7 +129,7 @@ describe("", () => { }, ]); - const { getAllByTestId } = render(); + const { getAllByTestId } = await applicationBuilder.render(); const elems = getAllByTestId("sortedElem"); const positions = elems.map(elem => elem.textContent); diff --git a/src/renderer/components/status-bar/status-bar.tsx b/src/renderer/components/status-bar/status-bar.tsx index 9d08cfb1fa..1214a104c7 100644 --- a/src/renderer/components/status-bar/status-bar.tsx +++ b/src/renderer/components/status-bar/status-bar.tsx @@ -8,14 +8,14 @@ import styles from "./status-bar.module.scss"; import React from "react"; import { observer } from "mobx-react"; import { withInjectables } from "@ogre-tools/injectable-react"; -import type { RegisteredStatusBarItems } from "./registered-status-bar-items.injectable"; -import registeredStatusBarItemsInjectable from "./registered-status-bar-items.injectable"; +import type { StatusBarItems } from "./status-bar-items.injectable"; +import statusBarItemsInjectable from "./status-bar-items.injectable"; import type { IComputedValue } from "mobx"; export interface StatusBarProps {} interface Dependencies { - items: IComputedValue; + items: IComputedValue; } const NonInjectedStatusBar = observer(({ items }: Dependencies & StatusBarProps) => { @@ -23,14 +23,14 @@ const NonInjectedStatusBar = observer(({ items }: Dependencies & StatusBarProps) return (
-
+
{left.map((Item, index) => (
))}
-
+
{right.map((Item, index) => (
@@ -44,7 +44,7 @@ const NonInjectedStatusBar = observer(({ items }: Dependencies & StatusBarProps) export const StatusBar = withInjectables(NonInjectedStatusBar, { getProps: (di, props) => ({ - items: di.inject(registeredStatusBarItemsInjectable), + items: di.inject(statusBarItemsInjectable), ...props, }), }); diff --git a/src/renderer/components/test-utils/get-renderer-extension-fake.ts b/src/renderer/components/test-utils/get-renderer-extension-fake.ts index fb31ee70b9..3fb720bf0f 100644 --- a/src/renderer/components/test-utils/get-renderer-extension-fake.ts +++ b/src/renderer/components/test-utils/get-renderer-extension-fake.ts @@ -17,8 +17,10 @@ export class TestExtension extends LensRendererExtension {} export type FakeExtensionData = SetRequired, "id" | "name">; -export const getRendererExtensionFakeFor = (builder: ApplicationBuilder) => ( - function getRendererExtensionFake({ id, name, ...rest }: FakeExtensionData) { +export type GetRendererExtensionFake = (fakeExtensionData: FakeExtensionData) => TestExtension; + +export const getRendererExtensionFakeFor = (builder: ApplicationBuilder): GetRendererExtensionFake => ( + function getRendererExtensionFake({ id, name, ...rest }) { const instance = new TestExtension({ id, absolutePath: "irrelevant", From 5f57213179ee694e75b74e2e086d79ac0f169099 Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Fri, 1 Jul 2022 19:40:34 +0300 Subject: [PATCH 041/248] Fix stuff happening based on timers not being run correctly in unit tests (#5764) * Introduce helper for advancing fake time Signed-off-by: Janne Savolainen * Introduce reactive now to kludge around global shared state in library Signed-off-by: Janne Savolainen * Replace all usages of "now" from mobx-utils with our own kludge to get rid of shared global state between unit tests Signed-off-by: Janne Savolainen * Consolidate all usages of advanceTimersByTime to make sure things happening based on timers are run correctly Signed-off-by: Janne Savolainen * Fix incorrect expect in test Signed-off-by: Janne Savolainen * Enable skipped unit test since prerequisites are done Signed-off-by: Janne Savolainen --- .../analytics-for-installing-update.test.ts | 9 ++- ...alling-update-using-topbar-button.test.tsx | 7 +- .../installing-update.test.ts | 7 +- .../periodical-checking-of-updates.test.ts | 7 +- ...debar-and-tab-navigation-for-core.test.tsx | 7 +- ...and-tab-navigation-for-extensions.test.tsx | 7 +- ...ing-the-app-using-application-menu.test.ts | 7 +- src/common/test-utils/use-fake-time.ts | 25 +++++++ .../utils/reactive-now/reactive-now.test.tsx | 70 +++++++++++++++++++ src/common/utils/reactive-now/reactive-now.ts | 60 ++++++++++++++++ .../components/duration/reactive-duration.tsx | 4 +- .../status-bar/auto-update-component.tsx | 6 +- .../update-warning-level.injectable.ts | 4 +- 13 files changed, 190 insertions(+), 30 deletions(-) create mode 100644 src/common/test-utils/use-fake-time.ts create mode 100644 src/common/utils/reactive-now/reactive-now.test.tsx create mode 100644 src/common/utils/reactive-now/reactive-now.ts diff --git a/src/behaviours/application-update/analytics-for-installing-update.test.ts b/src/behaviours/application-update/analytics-for-installing-update.test.ts index c33a3f92af..018d2361da 100644 --- a/src/behaviours/application-update/analytics-for-installing-update.test.ts +++ b/src/behaviours/application-update/analytics-for-installing-update.test.ts @@ -18,6 +18,7 @@ import downloadPlatformUpdateInjectable from "../../main/application-update/down import quitAndInstallUpdateInjectable from "../../main/application-update/quit-and-install-update.injectable"; import appVersionInjectable from "../../common/get-configuration-file-model/app-version/app-version.injectable"; import periodicalCheckForUpdatesInjectable from "../../main/application-update/periodical-check-for-updates/periodical-check-for-updates.injectable"; +import { advanceFakeTime, useFakeTime } from "../../common/test-utils/use-fake-time"; describe("analytics for installing update", () => { let applicationBuilder: ApplicationBuilder; @@ -27,9 +28,7 @@ describe("analytics for installing update", () => { let mainDi: DiContainer; beforeEach(async () => { - jest.useFakeTimers(); - - global.Date.now = () => new Date("2015-10-21T07:28:00Z").getTime(); + useFakeTime("2015-10-21T07:28:00Z"); applicationBuilder = getApplicationBuilder(); @@ -84,14 +83,14 @@ describe("analytics for installing update", () => { it("when enough time passes to check for updates again, sends event to analytics for being checked periodically", () => { analyticsListenerMock.mockClear(); - jest.advanceTimersByTime(1000 * 60 * 60 * 2); + advanceFakeTime(1000 * 60 * 60 * 2); expect(analyticsListenerMock).toHaveBeenCalledWith({ name: "app", action: "checking-for-updates", params: { - currentDateTime: "2015-10-21T07:28:00Z", + currentDateTime: "2015-10-21T09:28:00Z", source: "periodic", }, }); diff --git a/src/behaviours/application-update/installing-update-using-topbar-button.test.tsx b/src/behaviours/application-update/installing-update-using-topbar-button.test.tsx index f2b9a58dd1..c639798fac 100644 --- a/src/behaviours/application-update/installing-update-using-topbar-button.test.tsx +++ b/src/behaviours/application-update/installing-update-using-topbar-button.test.tsx @@ -16,6 +16,7 @@ import type { ApplicationBuilder } from "../../renderer/components/test-utils/ge import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder"; import processCheckingForUpdatesInjectable from "../../main/application-update/check-for-updates/process-checking-for-updates.injectable"; import quitAndInstallUpdateInjectable from "../../main/application-update/quit-and-install-update.injectable"; +import { advanceFakeTime, useFakeTime } from "../../common/test-utils/use-fake-time"; function daysToMilliseconds(days: number) { return Math.round(days * 24 * 60 * 60 * 1000); @@ -28,7 +29,7 @@ describe("encourage user to update when sufficient time passed since update was let quitAndInstallUpdateMock: jest.MockedFunction<() => void>; beforeEach(() => { - jest.useFakeTimers(); + useFakeTime("2015-10-21T07:28:00Z"); applicationBuilder = getApplicationBuilder(); @@ -128,13 +129,13 @@ describe("encourage user to update when sufficient time passed since update was }); it("given just enough time passes for medium update encouragement, has medium emotional indication in the button", () => { - jest.advanceTimersByTime(daysToMilliseconds(22)); + advanceFakeTime(daysToMilliseconds(22)); expect(button).toHaveAttribute("data-warning-level", "medium"); }); it("given just enough time passes for severe update encouragement, has severe emotional indication in the button", () => { - jest.advanceTimersByTime(daysToMilliseconds(26)); + advanceFakeTime(daysToMilliseconds(26)); expect(button).toHaveAttribute("data-warning-level", "high"); }); diff --git a/src/behaviours/application-update/installing-update.test.ts b/src/behaviours/application-update/installing-update.test.ts index c81f2954ed..666dbc1e4c 100644 --- a/src/behaviours/application-update/installing-update.test.ts +++ b/src/behaviours/application-update/installing-update.test.ts @@ -16,6 +16,7 @@ import type { DownloadPlatformUpdate } from "../../main/application-update/downl import downloadPlatformUpdateInjectable from "../../main/application-update/download-platform-update/download-platform-update.injectable"; import setUpdateOnQuitInjectable from "../../main/electron-app/features/set-update-on-quit.injectable"; import processCheckingForUpdatesInjectable from "../../main/application-update/check-for-updates/process-checking-for-updates.injectable"; +import { advanceFakeTime, useFakeTime } from "../../common/test-utils/use-fake-time"; describe("installing update", () => { let applicationBuilder: ApplicationBuilder; @@ -25,7 +26,7 @@ describe("installing update", () => { let setUpdateOnQuitMock: jest.Mock; beforeEach(() => { - jest.useFakeTimers(); + useFakeTime("2015-10-21T07:28:00Z"); applicationBuilder = getApplicationBuilder(); @@ -114,8 +115,8 @@ describe("installing update", () => { expect(rendered.baseElement).toMatchSnapshot(); }); - it.skip("when 5 seconds elapses, clears the notification to the user", () => { - jest.advanceTimersByTime(6000); + it("when 5 seconds elapses, clears the notification to the user", () => { + advanceFakeTime(6000); expect(rendered.getByTestId("app-update-idle")).toBeInTheDocument(); }); diff --git a/src/behaviours/application-update/periodical-checking-of-updates.test.ts b/src/behaviours/application-update/periodical-checking-of-updates.test.ts index e81c002e34..37c9d4e92b 100644 --- a/src/behaviours/application-update/periodical-checking-of-updates.test.ts +++ b/src/behaviours/application-update/periodical-checking-of-updates.test.ts @@ -11,6 +11,7 @@ import type { AsyncFnMock } from "@async-fn/jest"; import asyncFn from "@async-fn/jest"; import processCheckingForUpdatesInjectable from "../../main/application-update/check-for-updates/process-checking-for-updates.injectable"; import periodicalCheckForUpdatesInjectable from "../../main/application-update/periodical-check-for-updates/periodical-check-for-updates.injectable"; +import { advanceFakeTime, useFakeTime } from "../../common/test-utils/use-fake-time"; const ENOUGH_TIME = 1000 * 60 * 60 * 2; @@ -19,7 +20,7 @@ describe("periodical checking of updates", () => { let processCheckingForUpdatesMock: AsyncFnMock<() => Promise>; beforeEach(() => { - jest.useFakeTimers(); + useFakeTime("2015-10-21T07:28:00Z"); applicationBuilder = getApplicationBuilder(); @@ -59,7 +60,7 @@ describe("periodical checking of updates", () => { it("when just not enough time passes, does not check for updates again automatically yet", () => { processCheckingForUpdatesMock.mockClear(); - jest.advanceTimersByTime(ENOUGH_TIME - 1); + advanceFakeTime(ENOUGH_TIME - 1); expect(processCheckingForUpdatesMock).not.toHaveBeenCalled(); }); @@ -67,7 +68,7 @@ describe("periodical checking of updates", () => { it("when just enough time passes, checks for updates again automatically", () => { processCheckingForUpdatesMock.mockClear(); - jest.advanceTimersByTime(ENOUGH_TIME); + advanceFakeTime(ENOUGH_TIME); expect(processCheckingForUpdatesMock).toHaveBeenCalled(); }); diff --git a/src/behaviours/cluster/sidebar-and-tab-navigation-for-core.test.tsx b/src/behaviours/cluster/sidebar-and-tab-navigation-for-core.test.tsx index 5258a51d88..96b4a6b2d7 100644 --- a/src/behaviours/cluster/sidebar-and-tab-navigation-for-core.test.tsx +++ b/src/behaviours/cluster/sidebar-and-tab-navigation-for-core.test.tsx @@ -22,6 +22,7 @@ import pathExistsInjectable from "../../common/fs/path-exists.injectable"; import readJsonFileInjectable from "../../common/fs/read-json-file.injectable"; import { navigateToRouteInjectionToken } from "../../common/front-end-routing/navigate-to-route-injection-token"; import sidebarStorageInjectable from "../../renderer/components/layout/sidebar-storage/sidebar-storage.injectable"; +import { advanceFakeTime, useFakeTime } from "../../common/test-utils/use-fake-time"; describe("cluster - sidebar and tab navigation for core", () => { let applicationBuilder: ApplicationBuilder; @@ -29,7 +30,7 @@ describe("cluster - sidebar and tab navigation for core", () => { let rendered: RenderResult; beforeEach(() => { - jest.useFakeTimers(); + useFakeTime("2015-10-21T07:28:00Z"); applicationBuilder = getApplicationBuilder(); rendererDi = applicationBuilder.dis.rendererDi; @@ -262,7 +263,7 @@ describe("cluster - sidebar and tab navigation for core", () => { }); it("when not enough time passes, does not store state for expanded sidebar items to file system yet", async () => { - jest.advanceTimersByTime(250 - 1); + advanceFakeTime(250 - 1); const pathExistsFake = rendererDi.inject(pathExistsInjectable); @@ -274,7 +275,7 @@ describe("cluster - sidebar and tab navigation for core", () => { }); it("when enough time passes, stores state for expanded sidebar items to file system", async () => { - jest.advanceTimersByTime(250); + advanceFakeTime(250); const readJsonFileFake = rendererDi.inject(readJsonFileInjectable); diff --git a/src/behaviours/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx b/src/behaviours/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx index 0f625965b8..75389c6631 100644 --- a/src/behaviours/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx +++ b/src/behaviours/cluster/sidebar-and-tab-navigation-for-extensions.test.tsx @@ -18,6 +18,7 @@ import { navigateToRouteInjectionToken } from "../../common/front-end-routing/na import assert from "assert"; import type { FakeExtensionData } from "../../renderer/components/test-utils/get-renderer-extension-fake"; import { getRendererExtensionFakeFor } from "../../renderer/components/test-utils/get-renderer-extension-fake"; +import { advanceFakeTime, useFakeTime } from "../../common/test-utils/use-fake-time"; describe("cluster - sidebar and tab navigation for extensions", () => { let applicationBuilder: ApplicationBuilder; @@ -25,7 +26,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => { let rendered: RenderResult; beforeEach(() => { - jest.useFakeTimers(); + useFakeTime("2015-10-21T07:28:00Z"); applicationBuilder = getApplicationBuilder(); rendererDi = applicationBuilder.dis.rendererDi; @@ -278,7 +279,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => { }); it("when not enough time passes, does not store state for expanded sidebar items to file system yet", async () => { - jest.advanceTimersByTime(250 - 1); + advanceFakeTime(250 - 1); const pathExistsFake = rendererDi.inject(pathExistsInjectable); @@ -290,7 +291,7 @@ describe("cluster - sidebar and tab navigation for extensions", () => { }); it("when enough time passes, stores state for expanded sidebar items to file system", async () => { - jest.advanceTimersByTime(250); + advanceFakeTime(250); const readJsonFileFake = rendererDi.inject(readJsonFileInjectable); diff --git a/src/behaviours/quitting-and-restarting-the-app/quitting-the-app-using-application-menu.test.ts b/src/behaviours/quitting-and-restarting-the-app/quitting-the-app-using-application-menu.test.ts index 5f96bb06fb..19360d77bd 100644 --- a/src/behaviours/quitting-and-restarting-the-app/quitting-the-app-using-application-menu.test.ts +++ b/src/behaviours/quitting-and-restarting-the-app/quitting-the-app-using-application-menu.test.ts @@ -10,6 +10,7 @@ import { lensWindowInjectionToken } from "../../main/start-main-application/lens import exitAppInjectable from "../../main/electron-app/features/exit-app.injectable"; import clusterManagerInjectable from "../../main/cluster-manager.injectable"; import stopServicesAndExitAppInjectable from "../../main/stop-services-and-exit-app.injectable"; +import { advanceFakeTime, useFakeTime } from "../../common/test-utils/use-fake-time"; describe("quitting the app using application menu", () => { describe("given application has started", () => { @@ -18,7 +19,7 @@ describe("quitting the app using application menu", () => { let exitAppMock: jest.Mock; beforeEach(async () => { - jest.useFakeTimers(); + useFakeTime("2015-10-21T07:28:00Z"); applicationBuilder = getApplicationBuilder().beforeApplicationStart( ({ mainDi }) => { @@ -71,14 +72,14 @@ describe("quitting the app using application menu", () => { }); it("after insufficient time passes, does not terminate application yet", () => { - jest.advanceTimersByTime(999); + advanceFakeTime(999); expect(exitAppMock).not.toHaveBeenCalled(); }); describe("after sufficient time passes", () => { beforeEach(() => { - jest.advanceTimersByTime(1000); + advanceFakeTime(1000); }); it("terminates application", () => { diff --git a/src/common/test-utils/use-fake-time.ts b/src/common/test-utils/use-fake-time.ts new file mode 100644 index 0000000000..77cd385b4b --- /dev/null +++ b/src/common/test-utils/use-fake-time.ts @@ -0,0 +1,25 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { act } from "@testing-library/react"; + +let usingFakeTime = false; + +export const advanceFakeTime = (milliseconds: number) => { + if (!usingFakeTime) { + throw new Error("Tried to advance fake time but it was not enabled. Call useFakeTime() first."); + } + + act(() => { + jest.advanceTimersByTime(milliseconds); + }); +}; + +export const useFakeTime = (dateTime: string) => { + usingFakeTime = true; + + jest.useFakeTimers(); + + jest.setSystemTime(new Date(dateTime)); +}; diff --git a/src/common/utils/reactive-now/reactive-now.test.tsx b/src/common/utils/reactive-now/reactive-now.test.tsx new file mode 100644 index 0000000000..d2deb951b7 --- /dev/null +++ b/src/common/utils/reactive-now/reactive-now.test.tsx @@ -0,0 +1,70 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import type { RenderResult } from "@testing-library/react"; +import { render } from "@testing-library/react"; +import type { IComputedValue } from "mobx"; +import { computed, observe } from "mobx"; +import React from "react"; +import { observer } from "mobx-react"; +import { advanceFakeTime, useFakeTime } from "../../test-utils/use-fake-time"; +import { reactiveNow } from "./reactive-now"; + +describe("reactiveNow", () => { + let someComputed: IComputedValue; + + beforeEach(() => { + useFakeTime("2015-10-21T07:28:00Z"); + + someComputed = computed(() => { + const currentTimestamp = reactiveNow(); + + return currentTimestamp > new Date("2015-10-21T07:28:00Z").getTime(); + }); + }); + + describe("react-context", () => { + let rendered: RenderResult; + + beforeEach(() => { + const TestComponent = observer( + ({ someComputed }: { someComputed: IComputedValue }) => ( +
{someComputed.get() ? "true" : "false"}
+ ), + ); + + rendered = render(); + }); + + it("given time passes, works", () => { + advanceFakeTime(1000); + + expect(rendered.container.textContent).toBe("true"); + }); + + it("does not share the state from previous test", () => { + expect(rendered.container.textContent).toBe("false"); + }); + }); + + describe("non-react-context", () => { + let actual: boolean; + + beforeEach(() => { + observe(someComputed, (changed) => { + actual = changed.newValue as boolean; + }, true); + }); + + it("given time passes, works", () => { + advanceFakeTime(1000); + + expect(actual).toBe(true); + }); + + it("does not share the state from previous test", () => { + expect(actual).toBe(false); + }); + }); +}); diff --git a/src/common/utils/reactive-now/reactive-now.ts b/src/common/utils/reactive-now/reactive-now.ts new file mode 100644 index 0000000000..febac37010 --- /dev/null +++ b/src/common/utils/reactive-now/reactive-now.ts @@ -0,0 +1,60 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { _isComputingDerivation } from "mobx"; +import type { IResource } from "mobx-utils"; +import { fromResource } from "mobx-utils"; + +// Note: This file is copy-pasted from mobx-utils to fix very specific issue. +// TODO: Remove this file once https://github.com/mobxjs/mobx-utils/issues/306 is fixed. +const tickers: Record> = {}; + +export function reactiveNow(interval?: number | "frame") { + if (interval === void 0) { interval = 1000; } + + if (!_isComputingDerivation()) { + // See #40 + return Date.now(); + } + + // Note: This is the kludge until https://github.com/mobxjs/mobx-utils/issues/306 is fixed + const synchronizationIsEnabled = !process.env.JEST_WORKER_ID; + + if (!tickers[interval] || !synchronizationIsEnabled) { + if (typeof interval === "number") + tickers[interval] = createIntervalTicker(interval); + else + tickers[interval] = createAnimationFrameTicker(); + } + + return tickers[interval].current(); +} + +function createIntervalTicker(interval: number) { + let subscriptionHandle: NodeJS.Timer; + + return fromResource(function (sink) { + sink(Date.now()); + subscriptionHandle = setInterval(function () { return sink(Date.now()); }, interval); + }, function () { + clearInterval(subscriptionHandle); + }, Date.now()); +} + +function createAnimationFrameTicker() { + const frameBasedTicker = fromResource(function (sink) { + sink(Date.now()); + + function scheduleTick() { + window.requestAnimationFrame(function () { + sink(Date.now()); + if (frameBasedTicker.isAlive()) + scheduleTick(); + }); + } + scheduleTick(); + }, function () { }, Date.now()); + + return frameBasedTicker; +} diff --git a/src/renderer/components/duration/reactive-duration.tsx b/src/renderer/components/duration/reactive-duration.tsx index 4430315b38..ce38b82509 100644 --- a/src/renderer/components/duration/reactive-duration.tsx +++ b/src/renderer/components/duration/reactive-duration.tsx @@ -4,9 +4,9 @@ */ import { observer } from "mobx-react"; -import { now } from "mobx-utils"; import React from "react"; import { formatDuration } from "../../utils"; +import { reactiveNow } from "../../../common/utils/reactive-now/reactive-now"; export interface ReactiveDurationProps { timestamp: string | undefined; @@ -42,7 +42,7 @@ export const ReactiveDuration = observer(({ timestamp, compact = true }: Reactiv return ( <> - {formatDuration(now(computeUpdateInterval(timestampSeconds)) - timestampSeconds, compact)} + {formatDuration(reactiveNow(computeUpdateInterval(timestampSeconds)) - timestampSeconds, compact)} ); }); diff --git a/src/renderer/components/status-bar/auto-update-component.tsx b/src/renderer/components/status-bar/auto-update-component.tsx index 5a0b7e8acf..0f6e69c086 100644 --- a/src/renderer/components/status-bar/auto-update-component.tsx +++ b/src/renderer/components/status-bar/auto-update-component.tsx @@ -15,7 +15,7 @@ import type { UpdateIsBeingDownloaded } from "../../../common/application-update import updateIsBeingDownloadedInjectable from "../../../common/application-update/update-is-being-downloaded/update-is-being-downloaded.injectable"; import type { UpdatesAreBeingDiscovered } from "../../../common/application-update/updates-are-being-discovered/updates-are-being-discovered.injectable"; import updatesAreBeingDiscoveredInjectable from "../../../common/application-update/updates-are-being-discovered/updates-are-being-discovered.injectable"; -import { now as reactiveDateNow } from "mobx-utils"; +import { reactiveNow } from "../../../common/utils/reactive-now/reactive-now"; interface Dependencies { progressOfUpdateDownload: ProgressOfUpdateDownload; @@ -32,10 +32,10 @@ interface EndNoteProps { const EndNote = observer(({ version, note }: EndNoteProps) => { const [start] = useState(Date.now()); - if (start + 5000 <= reactiveDateNow()) { + if (start + 5000 <= reactiveNow()) { return idle(); } - + return note(version ?? ""); }); diff --git a/src/renderer/components/update-button/update-warning-level.injectable.ts b/src/renderer/components/update-button/update-warning-level.injectable.ts index 7db021c472..cc963ab27d 100644 --- a/src/renderer/components/update-button/update-warning-level.injectable.ts +++ b/src/renderer/components/update-button/update-warning-level.injectable.ts @@ -4,8 +4,8 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { computed } from "mobx"; -import { now as reactiveDateNow } from "mobx-utils"; import updateDownloadedDateTimeInjectable from "../../../common/application-update/update-downloaded-date-time/update-downloaded-date-time.injectable"; +import { reactiveNow } from "../../../common/utils/reactive-now/reactive-now"; const updateWarningLevelInjectable = getInjectable({ id: "update-warning-level", @@ -23,7 +23,7 @@ const updateWarningLevelInjectable = getInjectable({ const ONE_DAY = 1000 * 60 * 60 * 24; const downloadedAtTimestamp = new Date(downloadedAt).getTime(); - const currentDateTimeTimestamp = reactiveDateNow(ONE_DAY); + const currentDateTimeTimestamp = reactiveNow(ONE_DAY); const elapsedTime = currentDateTimeTimestamp - downloadedAtTimestamp; From a4f70c3d5342da0e6487d6cff293c383fcb81aba Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Fri, 1 Jul 2022 10:06:27 -0700 Subject: [PATCH 042/248] Fix broken 'Add Cluster' docs link (#5725) * Fix broken 'Add Cluster' docs link Signed-off-by: Sebastian Malton * fix tests Signed-off-by: Sebastian Malton --- .../navigation-using-application-menu.test.tsx.snap | 2 +- .../navigation-using-application-menu.test.ts.snap | 2 +- src/common/vars.ts | 2 +- src/renderer/components/+add-cluster/add-cluster.tsx | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/behaviours/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap b/src/behaviours/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap index 09f28e90a3..9125e4a116 100644 --- a/src/behaviours/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap +++ b/src/behaviours/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap @@ -169,7 +169,7 @@ exports[`add-cluster - navigation using application menu when navigating to add file. diff --git a/src/behaviours/extensions/__snapshots__/navigation-using-application-menu.test.ts.snap b/src/behaviours/extensions/__snapshots__/navigation-using-application-menu.test.ts.snap index a549889d94..8109ff7f3f 100644 --- a/src/behaviours/extensions/__snapshots__/navigation-using-application-menu.test.ts.snap +++ b/src/behaviours/extensions/__snapshots__/navigation-using-application-menu.test.ts.snap @@ -165,7 +165,7 @@ exports[`extensions - navigation using application menu when navigating to exten

Add new features via Lens Extensions. Check out the diff --git a/src/common/vars.ts b/src/common/vars.ts index 32eda45db6..fb9156725c 100644 --- a/src/common/vars.ts +++ b/src/common/vars.ts @@ -140,7 +140,7 @@ export const lensBlogWeblinkId = "lens-blog-link"; export const kubernetesDocumentationWeblinkId = "kubernetes-documentation-link"; export const appSemVer = new SemVer(packageInfo.version); -export const docsUrl = "https://docs.k8slens.dev/main/" as string; +export const docsUrl = "https://docs.k8slens.dev/main" as string; export const sentryDsn = packageInfo.config?.sentryDsn ?? ""; export const contentSecurityPolicy = packageInfo.config?.contentSecurityPolicy ?? ""; diff --git a/src/renderer/components/+add-cluster/add-cluster.tsx b/src/renderer/components/+add-cluster/add-cluster.tsx index b582cc99dc..6630420ad6 100644 --- a/src/renderer/components/+add-cluster/add-cluster.tsx +++ b/src/renderer/components/+add-cluster/add-cluster.tsx @@ -112,7 +112,7 @@ class NonInjectedAddCluster extends React.Component { ~/.kube/config {" file. "} From 1a9fa699c9d67dc3637a1f3d29a79289714814d1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Jul 2022 09:43:32 -0400 Subject: [PATCH 043/248] Bump @types/node from 16.11.41 to 16.11.43 (#5774) 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 af5a5bd1c3..85bdc48329 100644 --- a/package.json +++ b/package.json @@ -321,7 +321,7 @@ "@types/md5-file": "^4.0.2", "@types/mini-css-extract-plugin": "^2.4.0", "@types/mock-fs": "^4.13.1", - "@types/node": "^16.11.41", + "@types/node": "^16.11.43", "@types/node-fetch": "^2.6.2", "@types/npm": "^2.0.32", "@types/proper-lockfile": "^4.1.2", diff --git a/yarn.lock b/yarn.lock index 99a1a09737..e999304f0e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2082,10 +2082,10 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.18.tgz#5c9503030df484ccffcbb935ea9a9e1d6fad1a20" integrity sha512-B9EoJFjhqcQ9OmQrNorItO+OwEOORNn3S31WuiHvZY/dm9ajkB7AKD/8toessEtHHNL+58jofbq7hMMY9v4yig== -"@types/node@^16.11.41": - version "16.11.41" - resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.41.tgz#88eb485b1bfdb4c224d878b7832239536aa2f813" - integrity sha512-mqoYK2TnVjdkGk8qXAVGc/x9nSaTpSrFaGFm43BUH3IdoBV0nta6hYaGmdOvIMlbHJbUEVen3gvwpwovAZKNdQ== +"@types/node@^16.11.43": + version "16.11.43" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.43.tgz#555e5a743f76b6b897d47f945305b618525ddbe6" + integrity sha512-GqWykok+3uocgfAJM8imbozrqLnPyTrpFlrryURQlw1EesPUCx5XxTiucWDSFF9/NUEXDuD4bnvHm8xfVGWTpQ== "@types/npm@^2.0.32": version "2.0.32" From 14d5a1c3cc0d1b9088e8e8431b85dc7004dad62a Mon Sep 17 00:00:00 2001 From: Janne Savolainen Date: Mon, 4 Jul 2022 19:38:29 +0300 Subject: [PATCH 044/248] Split root and cluster frames in smaller pieces (#5737) * Make root frame child components comply with open closed principle and include it in the behavioural unit tests Signed-off-by: Janne Savolainen * Make cluster frame child components comply with open closed principle and include it in behavioural unit tests Signed-off-by: Janne Savolainen * Remove duplication Signed-off-by: Janne Savolainen * Simplify test Signed-off-by: Janne Savolainen * Make a component more determistic in unit tests Signed-off-by: Janne Savolainen * Mock uninterested, non-deterministic third party library in unit tests Co-authored-by: Mikko Aspiala Signed-off-by: Janne Savolainen * Optimize registration of injectables in unit tests to make tests faster Signed-off-by: Janne Savolainen * Update snapshots Signed-off-by: Janne Savolainen * Remove import time side-effect causing memory leak Signed-off-by: Janne Savolainen --- __mocks__/react-beautiful-dnd.tsx | 15 + package.json | 10 +- ...acters-in-page-registrations.test.tsx.snap | 411 +- .../navigate-to-extension-page.test.tsx.snap | 1005 +- .../navigating-between-routes.test.tsx.snap | 342 +- ...ation-using-application-menu.test.tsx.snap | 543 +- ...navigation-using-application-menu.test.tsx | 4 - ...g-update-using-topbar-button.test.tsx.snap | 243 +- .../installing-update-using-tray.test.ts.snap | 1508 ++- .../installing-update.test.ts.snap | 1508 ++- ...eriodical-checking-of-updates.test.ts.snap | 243 +- ...selection-of-update-stability.test.ts.snap | 243 +- .../order-of-sidebar-items.test.tsx.snap | 1736 ++- ...-and-tab-navigation-for-core.test.tsx.snap | 5108 +++++--- ...ab-navigation-for-extensions.test.tsx.snap | 6151 +++++---- .../visibility-of-sidebar-items.test.tsx.snap | 1472 ++- ...debar-and-tab-navigation-for-core.test.tsx | 13 +- ...and-tab-navigation-for-extensions.test.tsx | 18 +- ...gation-using-application-menu.test.ts.snap | 617 +- ...elm-repository-in-preferences.test.ts.snap | 10422 ++++++++-------- ...tory-from-list-in-preferences.test.ts.snap | 9926 ++++++++------- ...m-repositories-in-preferences.test.ts.snap | 8386 +++++++------ .../navigation-to-helm-charts.test.ts.snap | 929 +- ...ive-repository-in-preferences.test.ts.snap | 3980 +++--- .../closing-preferences.test.tsx.snap | 4360 ++++--- ...on-to-application-preferences.test.ts.snap | 1696 +-- ...igation-to-editor-preferences.test.ts.snap | 1970 +-- ...tension-specific-preferences.test.tsx.snap | 6614 +++++----- ...ion-to-kubernetes-preferences.test.ts.snap | 2002 +-- ...vigation-to-proxy-preferences.test.ts.snap | 1696 +-- ...ion-to-telemetry-preferences.test.tsx.snap | 3744 +++--- ...ation-to-terminal-preferences.test.ts.snap | 2030 +-- ...gation-using-application-menu.test.ts.snap | 1423 ++- .../navigation-using-tray.test.ts.snap | 1423 ++- ...-originating-from-extensions.test.tsx.snap | 291 +- ...gation-using-application-menu.test.ts.snap | 1203 +- .../navigation-using-application-menu.test.ts | 34 +- src/main/getDiForUnitTesting.ts | 25 +- ...luster-frame-child-component.injectable.ts | 24 + ...luster-frame-child-component.injectable.ts | 24 + ...luster-frame-child-component.injectable.ts | 24 + ...luster-frame-child-component.injectable.ts | 24 + ...-root-frame-child-component.injectable.tsx | 30 + ...luster-frame-child-component.injectable.ts | 24 + ...r-root-frame-child-component.injectable.ts | 24 + ...luster-frame-child-component.injectable.ts | 22 + ...g-root-frame-child-component.injectable.ts | 22 + .../__tests__/delete-cluster-dialog.test.tsx | 44 - ...luster-frame-child-component.injectable.ts | 24 + src/renderer/components/dock/dock-tab.tsx | 8 +- .../components/hotbar/hotbar-menu.tsx | 4 +- ...luster-frame-child-component.injectable.ts | 24 + ...luster-frame-child-component.injectable.ts | 24 + ...luster-frame-child-component.injectable.ts | 22 + ...s-root-frame-child-component.injectable.ts | 22 + .../test-utils/get-application-builder.tsx | 62 +- .../__snapshots__/cluster-frame.test.tsx.snap | 18 +- ...r-frame-child-component-injection-token.ts | 17 + ...rame-layout-child-component.injectable.tsx | 61 + .../frames/cluster-frame/cluster-frame.tsx | 77 +- ...t-frame-child-component-injection-token.ts | 17 + src/renderer/frames/root-frame/root-frame.tsx | 28 +- .../root-frame/setup-system-ca.injectable.ts | 23 + src/renderer/getDiForUnitTesting.tsx | 68 +- ...luster-frame-child-component.injectable.ts | 24 + yarn.lock | 54 +- 66 files changed, 48472 insertions(+), 35711 deletions(-) create mode 100644 __mocks__/react-beautiful-dnd.tsx create mode 100644 src/renderer/components/+workloads-cronjobs/cron-job-trigger-dialog-cluster-frame-child-component.injectable.ts create mode 100644 src/renderer/components/+workloads-deployments/scale/deployment-scale-dialog-cluster-frame-child-component.injectable.ts create mode 100644 src/renderer/components/+workloads-replicasets/scale-dialog/replicaset-scale-dialog-cluster-frame-child-component.injectable.ts create mode 100644 src/renderer/components/+workloads-statefulsets/scale/statefulset-scale-dialog-cluster-frame-child-component.injectable.ts create mode 100644 src/renderer/components/cluster-manager/cluster-manager-root-frame-child-component.injectable.tsx create mode 100644 src/renderer/components/command-palette/command-container-cluster-frame-child-component.injectable.ts create mode 100644 src/renderer/components/command-palette/command-container-root-frame-child-component.injectable.ts create mode 100644 src/renderer/components/confirm-dialog/confirm-dialog-cluster-frame-child-component.injectable.ts create mode 100644 src/renderer/components/confirm-dialog/confirm-dialog-root-frame-child-component.injectable.ts create mode 100644 src/renderer/components/delete-cluster-dialog/delete-cluster-dialog-cluster-frame-child-component.injectable.ts create mode 100644 src/renderer/components/kube-object-details/kube-object-details-cluster-frame-child-component.injectable.ts create mode 100644 src/renderer/components/kubeconfig-dialog/kubeconfig-dialog-cluster-frame-child-component.injectable.ts create mode 100644 src/renderer/components/notifications/notifications-cluster-frame-child-component.injectable.ts create mode 100644 src/renderer/components/notifications/notifications-root-frame-child-component.injectable.ts create mode 100644 src/renderer/frames/cluster-frame/cluster-frame-child-component-injection-token.ts create mode 100644 src/renderer/frames/cluster-frame/cluster-frame-layout-child-component.injectable.tsx create mode 100644 src/renderer/frames/root-frame/root-frame-child-component-injection-token.ts create mode 100644 src/renderer/frames/root-frame/setup-system-ca.injectable.ts create mode 100644 src/renderer/port-forward/port-forward-dialog-cluster-frame-child-component.injectable.ts diff --git a/__mocks__/react-beautiful-dnd.tsx b/__mocks__/react-beautiful-dnd.tsx new file mode 100644 index 0000000000..6404bfd450 --- /dev/null +++ b/__mocks__/react-beautiful-dnd.tsx @@ -0,0 +1,15 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import React from "react"; + +import type { + DragDropContextProps, + DraggableProps, + DroppableProps, +} from "react-beautiful-dnd"; + +export const DragDropContext = ({ children }: DragDropContextProps) => <>{ children }; +export const Draggable = ({ children }: DraggableProps) => <>{ children }; +export const Droppable = ({ children }: DroppableProps) => <>{ children }; diff --git a/package.json b/package.json index 85bdc48329..7a9f1264b6 100644 --- a/package.json +++ b/package.json @@ -209,11 +209,11 @@ "@hapi/subtext": "^7.0.4", "@kubernetes/client-node": "^0.16.3", "@material-ui/styles": "^4.11.5", - "@ogre-tools/fp": "9.0.0", - "@ogre-tools/injectable": "9.0.0", - "@ogre-tools/injectable-extension-for-auto-registration": "9.0.0", - "@ogre-tools/injectable-extension-for-mobx": "9.0.0", - "@ogre-tools/injectable-react": "9.0.0", + "@ogre-tools/fp": "9.0.1", + "@ogre-tools/injectable": "9.0.1", + "@ogre-tools/injectable-extension-for-auto-registration": "9.0.1", + "@ogre-tools/injectable-extension-for-mobx": "9.0.1", + "@ogre-tools/injectable-react": "9.0.1", "@sentry/electron": "^3.0.7", "@sentry/integrations": "^6.19.3", "@side/jest-runtime": "^1.0.1", diff --git a/src/behaviours/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap b/src/behaviours/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap index 91606c6ec9..74307f3b53 100644 --- a/src/behaviours/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap +++ b/src/behaviours/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap @@ -3,71 +3,206 @@ exports[`extension special characters in page registrations renders 1`] = `

- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+
+ + + arrow_right + + +
+ class="StatusBar" + > +
+
+
+ No new updates available +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
-
- No new updates available + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
+ Some page +
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+ + + arrow_right + +
-
-
- Some page + class="StatusBar" + > +
+
+
+ No new updates available +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
- No new updates available + +
+
+

+ Welcome to OpenLens 5! +

+

+ To get you started we have auto-detected your clusters in your + + kubeconfig file and added them to the catalog, your centralized + + view for managing all your cloud-native resources. +
+
+ If you have any questions or feedback, please join our + + Lens Community slack channel + + . +

+ +
+
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+
+ + + arrow_right + + +
+ class="StatusBar" + > +
+
+
+ No new updates available +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
-
- No new updates available + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
+ Child page +
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+ + + arrow_right + +
-
-
- Child page + class="StatusBar" + > +
+
+
+ No new updates available +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
-
- No new updates available + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
+
    +
  • + some-string-value-from-navigate +
  • +
  • + 126 +
  • +
  • + some-array-value-from-navigate +
  • +
+ +
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+ + + arrow_right + +
-
-
-
    -
  • - some-string-value-from-navigate -
  • -
  • - 126 -
  • -
  • - some-array-value-from-navigate -
  • -
- +
+
+
+ No new updates available +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
-
- No new updates available + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
+
    +
  • + some-string-value +
  • +
  • + 42 +
  • +
  • + some-array-value,some-other-array-value +
  • +
+ +
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+ + + arrow_right + +
-
-
-
    -
  • - some-string-value -
  • -
  • - 42 -
  • -
  • - some-array-value,some-other-array-value -
  • -
- +
+
+
+ No new updates available +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
-
- No new updates available + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
+
    +
  • + some-changed-string-value +
  • +
  • + 84 +
  • +
  • + some-changed-array-value,some-other-changed-array-value +
  • +
+ +
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+ + + arrow_right + +
-
-
-
    -
  • - some-changed-string-value -
  • -
  • - 84 -
  • -
  • - some-changed-array-value,some-other-changed-array-value -
  • -
- +
+
+
+ No new updates available +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
-
- No new updates available -
+ + home + + + + + arrow_back + + + + + arrow_forward + +
+
-
-
-
-    {
+    
+
+
+        {
   "someParameter": "some-value",
   "someOtherParameter": "some-other-value"
 }
-  
+
+ +
+
+
+ + + arrow_left + + +
+
+ 0 +
+
+ + + arrow_right + + +
+
+
+
+
+
+ No new updates available +
+
+
+
+
+
@@ -84,74 +136,126 @@ exports[`navigating between routes given route with optional path parameters whe exports[`navigating between routes given route without path parameters when navigating to route renders 1`] = `
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
-
- No new updates available + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
+ Some component +
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+ + + arrow_right + +
-
-
- Some component + class="StatusBar" + > +
+
+
+ No new updates available +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
- No new updates available + +
+
+

+ Welcome to OpenLens 5! +

+

+ To get you started we have auto-detected your clusters in your + + kubeconfig file and added them to the catalog, your centralized + + view for managing all your cloud-native resources. +
+
+ If you have any questions or feedback, please join our + + Lens Community slack channel + + . +

+ +
+
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+
+ + + arrow_right + + +
+ class="StatusBar" + > +
+
+
+ No new updates available +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
-
- No new updates available -
-
-
-
-
-
-
-
-

- Add Clusters from Kubeconfig -

-

- Clusters added here are - - not - - merged into the - - ~/.kube/config - - file. - - Read more about adding clusters. - -

-
-
+ + - -
+ arrow_back + + + + + arrow_forward + +
+
+
+
+
-
-
- +

+ Add Clusters from Kubeconfig +

+

+ Clusters added here are + + not + + merged into the + + ~/.kube/config + + file. + - - close - - -

+ Read more about adding clusters. + +

+
+
+
+
+ + + close + + +
+ +
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+
+ + + arrow_right + + +
+
+
+
+
+
+ No new updates available +
+
+
+
({ - Tooltip: () => null, -})); - jest.mock("../../renderer/components/tooltip/withTooltip", () => ({ withTooltip: (Target: any) => ({ tooltip, tooltipOverrideDisabled, ...props }: any) => , })); diff --git a/src/behaviours/application-update/__snapshots__/installing-update-using-topbar-button.test.tsx.snap b/src/behaviours/application-update/__snapshots__/installing-update-using-topbar-button.test.tsx.snap index 089b031c96..8f3981f48a 100644 --- a/src/behaviours/application-update/__snapshots__/installing-update-using-topbar-button.test.tsx.snap +++ b/src/behaviours/application-update/__snapshots__/installing-update-using-topbar-button.test.tsx.snap @@ -4,71 +4,206 @@ exports[`encourage user to update when sufficient time passed since update was d
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
- No new updates available + +
+
+

+ Welcome to OpenLens 5! +

+

+ To get you started we have auto-detected your clusters in your + + kubeconfig file and added them to the catalog, your centralized + + view for managing all your cloud-native resources. +
+
+ If you have any questions or feedback, please join our + + Lens Community slack channel + + . +

+ +
+
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+
+ + + arrow_right + + +
+ class="StatusBar" + > +
+
+
+ No new updates available +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
- No new updates available + +
+
+

+ Welcome to OpenLens 5! +

+

+ To get you started we have auto-detected your clusters in your + + kubeconfig file and added them to the catalog, your centralized + + view for managing all your cloud-native resources. +
+
+ If you have any questions or feedback, please join our + + Lens Community slack channel + + . +

+ +
+
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+
+ + + arrow_right + + +
+ class="StatusBar" + > +
+
+
+ No new updates available +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
-
- Checking for updates... + +
+
+

+ Welcome to OpenLens 5! +

+

+ To get you started we have auto-detected your clusters in your + + kubeconfig file and added them to the catalog, your centralized + + view for managing all your cloud-native resources. +
+
+ If you have any questions or feedback, please join our + + Lens Community slack channel + + . +

+ +
+
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+
+ + + arrow_right + + +
+ class="StatusBar" + > +
+
+
+
+ Checking for updates... +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
- Downloading version some-version... + +
+
+

+ Welcome to OpenLens 5! +

+

+ To get you started we have auto-detected your clusters in your + + kubeconfig file and added them to the catalog, your centralized + + view for managing all your cloud-native resources. +
+
+ If you have any questions or feedback, please join our + + Lens Community slack channel + + . +

+ +
+
+
+
+
+
+
+ + + arrow_left + +
+ class="HotbarIndex" + > +
+ 0 +
+
+ + + arrow_right + +
+ class="StatusBar" + > +
+
+
+ Downloading version some-version... +
+
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - - -
-
-
-
-
+ + + arrow_back + + + + + arrow_forward + + + +
+
+
+
+
- Download of update failed + +
+
+

+ Welcome to OpenLens 5! +

+

+ To get you started we have auto-detected your clusters in your + + kubeconfig file and added them to the catalog, your centralized + + view for managing all your cloud-native resources. +
+
+ If you have any questions or feedback, please join our + + Lens Community slack channel + + . +

+ +
+
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+
+ + + arrow_right + + +
+ class="StatusBar" + > +
+
+
+ Download of update failed +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - - -
-
-
-
-
+ + + arrow_back + + + + + arrow_forward + + + +
+
+
+
+
- some-version is available + +
+
+

+ Welcome to OpenLens 5! +

+

+ To get you started we have auto-detected your clusters in your + + kubeconfig file and added them to the catalog, your centralized + + view for managing all your cloud-native resources. +
+
+ If you have any questions or feedback, please join our + + Lens Community slack channel + + . +

+ +
+
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+
+ + + arrow_right + + +
+ class="StatusBar" + > +
+
+
+ some-version is available +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
- No new updates available + +
+
+

+ Welcome to OpenLens 5! +

+

+ To get you started we have auto-detected your clusters in your + + kubeconfig file and added them to the catalog, your centralized + + view for managing all your cloud-native resources. +
+
+ If you have any questions or feedback, please join our + + Lens Community slack channel + + . +

+ +
+
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+
+ + + arrow_right + + +
+ class="StatusBar" + > +
+
+
+ No new updates available +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
- No new updates available + +
+
+

+ Welcome to OpenLens 5! +

+

+ To get you started we have auto-detected your clusters in your + + kubeconfig file and added them to the catalog, your centralized + + view for managing all your cloud-native resources. +
+
+ If you have any questions or feedback, please join our + + Lens Community slack channel + + . +

+ +
+
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+
+ + + arrow_right + + +
+ class="StatusBar" + > +
+
+
+ No new updates available +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
-
- Checking for updates... + +
+
+

+ Welcome to OpenLens 5! +

+

+ To get you started we have auto-detected your clusters in your + + kubeconfig file and added them to the catalog, your centralized + + view for managing all your cloud-native resources. +
+
+ If you have any questions or feedback, please join our + + Lens Community slack channel + + . +

+ +
+
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+
+ + + arrow_right + + +
+ class="StatusBar" + > +
+
+
+
+ Checking for updates... +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
- Downloading version some-version... + +
+
+

+ Welcome to OpenLens 5! +

+

+ To get you started we have auto-detected your clusters in your + + kubeconfig file and added them to the catalog, your centralized + + view for managing all your cloud-native resources. +
+
+ If you have any questions or feedback, please join our + + Lens Community slack channel + + . +

+ +
+
+
+
+
+
+
+ + + arrow_left + +
+ class="HotbarIndex" + > +
+ 0 +
+
+ + + arrow_right + +
+ class="StatusBar" + > +
+
+
+ Downloading version some-version... +
+
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - - -
-
-
-
-
+ + + arrow_back + + + + + arrow_forward + + + +
+
+
+
+
- Download of update failed + +
+
+

+ Welcome to OpenLens 5! +

+

+ To get you started we have auto-detected your clusters in your + + kubeconfig file and added them to the catalog, your centralized + + view for managing all your cloud-native resources. +
+
+ If you have any questions or feedback, please join our + + Lens Community slack channel + + . +

+ +
+
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+
+ + + arrow_right + + +
+ class="StatusBar" + > +
+
+
+ Download of update failed +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - - -
-
-
-
-
+ + + arrow_back + + + + + arrow_forward + + + +
+
+
+
+
- some-version is available + +
+
+

+ Welcome to OpenLens 5! +

+

+ To get you started we have auto-detected your clusters in your + + kubeconfig file and added them to the catalog, your centralized + + view for managing all your cloud-native resources. +
+
+ If you have any questions or feedback, please join our + + Lens Community slack channel + + . +

+ +
+
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+
+ + + arrow_right + + +
+ class="StatusBar" + > +
+
+
+ some-version is available +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
- No new updates available + +
+
+

+ Welcome to OpenLens 5! +

+

+ To get you started we have auto-detected your clusters in your + + kubeconfig file and added them to the catalog, your centralized + + view for managing all your cloud-native resources. +
+
+ If you have any questions or feedback, please join our + + Lens Community slack channel + + . +

+ +
+
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+
+ + + arrow_right + + +
+ class="StatusBar" + > +
+
+
+ No new updates available +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
- No new updates available + +
+
+

+ Welcome to OpenLens 5! +

+

+ To get you started we have auto-detected your clusters in your + + kubeconfig file and added them to the catalog, your centralized + + view for managing all your cloud-native resources. +
+
+ If you have any questions or feedback, please join our + + Lens Community slack channel + + . +

+ +
+
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+
+ + + arrow_right + + +
+ class="StatusBar" + > +
+
+
+ No new updates available +
+
+
+
+
- - - home - - - - - arrow_back - - - - - arrow_forward - - -
-
-
-
-
+ + + home + + + + + arrow_back + + + + + arrow_forward + + +
+
+
+
+
+
- No new updates available + +
+
+

+ Welcome to OpenLens 5! +

+

+ To get you started we have auto-detected your clusters in your + + kubeconfig file and added them to the catalog, your centralized + + view for managing all your cloud-native resources. +
+
+ If you have any questions or feedback, please join our + + Lens Community slack channel + + . +

+ +
+
+
+
+
+
+ + + arrow_left + + +
+
+ 0 +
+
+ + + arrow_right + + +
+ class="StatusBar" + > +
+
+
+ No new updates available +
+
+
+
+
-
`; exports[`cluster - order of sidebar items when rendered when parent is expanded renders 1`] = `
+
+