@k8slens/extensions 6.0.1-git.436aa3dcda.0 → 6.0.1-git.4771c7755c.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/dist/src/common/cluster/cluster.d.ts +2 -0
  2. package/dist/src/common/fs/stat/stat.global-override-for-injectable.d.ts +5 -0
  3. package/dist/src/common/fs/stat/stat.injectable.d.ts +2 -0
  4. package/dist/src/common/fs/validate-directory.injectable.d.ts +4 -0
  5. package/dist/src/common/fs/watch/watch.global-override-for-injectable.d.ts +5 -0
  6. package/dist/src/common/fs/watch/watch.injectable.d.ts +4 -0
  7. package/dist/src/common/ipc/broadcast-message.injectable.d.ts +2 -2
  8. package/dist/src/common/k8s-api/kube-object.store.d.ts +1 -1
  9. package/dist/src/common/protocol-handler/router.d.ts +2 -0
  10. package/dist/src/common/utils/abort-controller.d.ts +1 -1
  11. package/dist/src/extensions/extension-api.js +11 -11
  12. package/dist/src/extensions/extension-discovery/extension-discovery.d.ts +8 -0
  13. package/dist/src/main/__test__/cluster.test.d.ts +0 -4
  14. package/dist/src/main/helm/helm-chart-manager-cache.injectable.d.ts +7 -0
  15. package/dist/src/main/helm/helm-chart-manager.d.ts +9 -3
  16. package/dist/src/main/helm/helm-chart-manager.injectable.d.ts +4 -0
  17. package/dist/src/main/kube-auth-proxy/kube-auth-proxy.d.ts +3 -1
  18. package/dist/src/main/kube-auth-proxy/wait-until-port-is-used/wait-until-port-is-used.global-override-for-injectable.d.ts +5 -0
  19. package/dist/src/main/kube-auth-proxy/wait-until-port-is-used/wait-until-port-is-used.injectable.d.ts +3 -0
  20. package/dist/src/main/protocol-handler/lens-protocol-router-main/lens-protocol-router-main.d.ts +2 -0
  21. package/dist/src/main/utils/channel/ipc-main/ipc-main.global-override-for-injectable.d.ts +5 -0
  22. package/dist/src/renderer/api/catalog/entity/registry.d.ts +2 -0
  23. package/dist/src/renderer/components/cluster-settings/components/cluster-local-terminal-settings.d.ts +2 -1
  24. package/dist/src/renderer/protocol-handler/lens-protocol-router-renderer/lens-protocol-router-renderer.d.ts +2 -5
  25. package/dist/src/renderer/utils/channel/ipc-renderer.global-override-for-injectable.d.ts +5 -0
  26. package/package.json +1 -1
  27. package/dist/src/main/helm/__mocks__/helm-chart-manager.d.ts +0 -11
@@ -14,6 +14,7 @@ import { ClusterStatus } from "../cluster-types";
14
14
  import type { CanI } from "./authorization-review.injectable";
15
15
  import type { ListNamespaces } from "./list-namespaces.injectable";
16
16
  import type { Logger } from "../logger";
17
+ import type { BroadcastMessage } from "../ipc/broadcast-message.injectable";
17
18
  export interface ClusterDependencies {
18
19
  readonly directoryForKubeConfigs: string;
19
20
  readonly logger: Logger;
@@ -24,6 +25,7 @@ export interface ClusterDependencies {
24
25
  createAuthorizationReview: (config: KubeConfig) => CanI;
25
26
  createListNamespaces: (config: KubeConfig) => ListNamespaces;
26
27
  createVersionDetector: (cluster: Cluster) => VersionDetector;
28
+ broadcastMessage: BroadcastMessage;
27
29
  }
28
30
  /**
29
31
  * Cluster
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ injectable: import("@ogre-tools/injectable").Injectable<typeof import("fs-extra").stat, unknown, void>;
3
+ overridingInstantiate: import("@ogre-tools/injectable").Instantiate<typeof import("fs-extra").stat, void>;
4
+ };
5
+ export default _default;
@@ -0,0 +1,2 @@
1
+ declare const statInjectable: import("@ogre-tools/injectable").Injectable<typeof import("fs-extra").stat, unknown, void>;
2
+ export default statInjectable;
@@ -0,0 +1,4 @@
1
+ import type { AsyncResult } from "../utils/async-result";
2
+ export declare type ValidateDirectory = (path: string) => Promise<AsyncResult<undefined>>;
3
+ declare const validateDirectoryInjectable: import("@ogre-tools/injectable").Injectable<ValidateDirectory, unknown, void>;
4
+ export default validateDirectoryInjectable;
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ injectable: import("@ogre-tools/injectable").Injectable<import("./watch.injectable").Watch, unknown, void>;
3
+ overridingInstantiate: import("@ogre-tools/injectable").Instantiate<import("./watch.injectable").Watch, void>;
4
+ };
5
+ export default _default;
@@ -0,0 +1,4 @@
1
+ import type { FSWatcher, WatchOptions } from "chokidar";
2
+ export declare type Watch = (path: string, options?: WatchOptions) => FSWatcher;
3
+ declare const watchInjectable: import("@ogre-tools/injectable").Injectable<Watch, unknown, void>;
4
+ export default watchInjectable;
@@ -1,3 +1,3 @@
1
- import { broadcastMessage } from "./ipc";
2
- declare const broadcastMessageInjectable: import("@ogre-tools/injectable").Injectable<typeof broadcastMessage, unknown, void>;
1
+ export declare type BroadcastMessage = (channel: string, ...args: any[]) => Promise<void>;
2
+ declare const broadcastMessageInjectable: import("@ogre-tools/injectable").Injectable<BroadcastMessage, unknown, void>;
3
3
  export default broadcastMessageInjectable;
@@ -11,7 +11,7 @@ import type { KubeApiQueryParams, KubeApi } from "./kube-api";
11
11
  import type { RequestInit } from "node-fetch";
12
12
  import type { Patch } from "rfc6902";
13
13
  import type { PartialDeep } from "type-fest";
14
- import { AbortController } from "abort-controller";
14
+ import AbortController from "abort-controller";
15
15
  export declare type OnLoadFailure = (error: unknown) => void;
16
16
  export interface KubeObjectStoreLoadingParams {
17
17
  namespaces: string[];
@@ -8,6 +8,7 @@ import type { ExtensionsStore } from "../../extensions/extensions-store/extensio
8
8
  import type { ExtensionLoader } from "../../extensions/extension-loader";
9
9
  import type { LensExtension } from "../../extensions/lens-extension";
10
10
  import type { RouteHandler } from "../../extensions/registries/protocol-handler";
11
+ import type { Logger } from "../logger";
11
12
  export declare const ProtocolHandlerIpcPrefix = "protocol-handler";
12
13
  export declare const ProtocolHandlerInternal: string;
13
14
  export declare const ProtocolHandlerExtension: string;
@@ -42,6 +43,7 @@ export declare function foldAttemptResults(mainAttempt: RouteAttempt, rendererAt
42
43
  export interface LensProtocolRouterDependencies {
43
44
  readonly extensionLoader: ExtensionLoader;
44
45
  readonly extensionsStore: ExtensionsStore;
46
+ readonly logger: Logger;
45
47
  }
46
48
  export declare abstract class LensProtocolRouter {
47
49
  protected readonly dependencies: LensProtocolRouterDependencies;
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) OpenLens Authors. All rights reserved.
3
3
  * Licensed under MIT License. See LICENSE in root directory for more information.
4
4
  */
5
- import { AbortController } from "abort-controller";
5
+ import AbortController from "abort-controller";
6
6
  /**
7
7
  * This is like an `AbortController` but will also abort if the parent aborts,
8
8
  * but won't make the parent abort if this aborts (single direction)
@@ -11162,7 +11162,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
11162
11162
  /***/ ((module, __webpack_exports__, __webpack_require__) => {
11163
11163
 
11164
11164
  "use strict";
11165
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ \"./node_modules/css-loader/dist/runtime/sourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n.PodDetailsList {\\n position: relative;\\n}\\n.PodDetailsList .Table {\\n margin: 0 -24px;\\n}\\n.PodDetailsList .Table.virtual {\\n height: 500px;\\n}\\n.PodDetailsList .Table .TableHead.sticky {\\n top: calc(var(--spacing) * -1);\\n}\\n.PodDetailsList .TableCell:first-child {\\n margin-left: 8px;\\n}\\n.PodDetailsList .TableCell:last-child {\\n margin-right: 8px;\\n}\\n.PodDetailsList .TableCell.name {\\n flex-grow: 2;\\n}\\n.PodDetailsList .TableCell.namespace {\\n flex-grow: 1.2;\\n}\\n.PodDetailsList .TableCell.cpu {\\n align-self: center;\\n}\\n.PodDetailsList .TableCell.cpu .LineProgress {\\n color: var(--blue);\\n}\\n.PodDetailsList .TableCell.memory {\\n align-self: center;\\n}\\n.PodDetailsList .TableCell.memory .LineProgress {\\n color: var(--magenta);\\n}\\n.PodDetailsList .TableCell.warning {\\n display: flex;\\n align-items: center;\\n flex-grow: 0.3;\\n padding: 0;\\n}\\n.PodDetailsList .TableCell.status.running {\\n color: var(--colorOk);\\n}\\n.PodDetailsList .TableCell.status.pending {\\n color: var(--colorWarning);\\n}\\n.PodDetailsList .TableCell.status.evicted {\\n color: var(--colorError);\\n}\\n.PodDetailsList .TableCell.status.waiting {\\n color: var(--colorWarning);\\n}\\n.PodDetailsList .TableCell.status.succeeded {\\n color: var(--colorSuccess);\\n}\\n.PodDetailsList .TableCell.status.failed {\\n color: var(--colorError);\\n}\\n.PodDetailsList .TableCell.status.terminating {\\n color: var(--colorTerminated);\\n}\\n.PodDetailsList .TableCell.status.terminated {\\n color: var(--colorTerminated);\\n}\\n.PodDetailsList .TableCell.status.completed {\\n color: var(--colorSuccess);\\n}\\n.PodDetailsList .TableCell.status.crash-loop-back-off {\\n color: var(--colorError);\\n}\\n.PodDetailsList .TableCell.status.error {\\n color: var(--colorError);\\n}\\n.PodDetailsList .TableCell.status.container-creating {\\n color: var(--colorInfo);\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/renderer/components/vars.scss\",\"webpack://./src/renderer/components/colors.scss\",\"webpack://./src/renderer/components/media.scss\",\"webpack://./src/renderer/components/mixins.scss\",\"webpack://./src/renderer/components/+workloads/workloads-mixins.scss\",\"webpack://./src/renderer/components/+storage/storage-mixins.scss\",\"webpack://./src/renderer/components/+nodes/nodes-mixins.scss\",\"webpack://./src/renderer/components/+namespaces/namespaces-mixins.scss\",\"webpack://./src/renderer/components/table/table.mixins.scss\",\"webpack://./src/renderer/components/+network/network-mixins.scss\",\"webpack://./src/renderer/components/+workloads-pods/pod-details-list.scss\"],\"names\":[],\"mappings\":\"AAAA;;;EAAA;ACAA;;;EAAA;ACAA;;;EAAA;ACAA;;;EAAA;ACAA;;;EAAA;ACAA;;;EAAA;ACAA;;;EAAA;ACAA;;;EAAA;ACAA;;;EAAA;ACAA;;;EAAA;ACCA;;;EAAA;AAKA;EACE,kBAAA;AAuCF;AArCE;EACE,eAAA;AAuCJ;AArCI;EACE,aAAA;AAuCN;AApCI;EACE,8BAAA;AAsCN;AAjCI;EACE,gBVfC;AUkDP;AAhCI;EACE,iBVnBC;AUqDP;AA/BI;EACE,YAAA;AAiCN;AA9BI;EACE,cAAA;AAgCN;AA7BI;EACE,kBAAA;AA+BN;AA7BM;EACE,kBAAA;AA+BR;AA3BI;EACE,kBAAA;AA6BN;AA3BM;EACE,qBAAA;AA6BR;AAzBI;EFtCF,aAAA;EACA,mBAAA;EACA,cAAA;EACA,UAAA;AEkEF;ANTI;EACE,qBAvCkB;AMkDxB;ANZI;EACE,0BAvCkB;AMqDxB;ANfI;EACE,wBAvCkB;AMwDxB;ANlBI;EACE,0BAvCkB;AM2DxB;ANrBI;EACE,0BAvCkB;AM8DxB;ANxBI;EACE,wBAvCkB;AMiExB;AN3BI;EACE,6BAvCkB;AMoExB;AN9BI;EACE,6BAvCkB;AMuExB;ANjCI;EACE,0BAvCkB;AM0ExB;ANpCI;EACE,wBAvCkB;AM6ExB;ANvCI;EACE,wBAvCkB;AMgFxB;AN1CI;EACE,uBAvCkB;AMmFxB\",\"sourcesContent\":[\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n@import \\\"colors\\\", \\\"media\\\";\\n\\n// Dimensions\\n$unit: 8px;\\n$padding: $unit;\\n$margin: $unit;\\n$radius: var(--border-radius);\\n\\n// Fonts\\n$font-main: var(--font-main);\\n$font-monospace: var(--font-monospace);\\n$font-size-small: var(--font-size-small);\\n$font-size: var(--font-size);\\n$font-size-big: var(--font-size-big);\\n$font-weight-thin: var(--font-weight-thin);\\n$font-weight-normal: var(--font-weight-normal);\\n$font-weight-bold: var(--font-weight-bold);\\n\\n// Z-index correlations\\n$zIndex-sidebar-hover: 500;\\n$zIndex-select-portal: 300;\\n$zIndex-dialog: 200;\\n$zIndex-drawer: 100;\\n\\n// Animation timing functions\\n$animation-curve-fast-out-slow-in: cubic-bezier(0.4, 0, 0.2, 1);\\n$animation-curve-linear-out-slow-in: cubic-bezier(0, 0, 0.2, 1);\\n$animation-curve-fast-out-linear-in: cubic-bezier(0.4, 0, 1, 1);\\n\\n// Import other common vars & mixins\\n@import \\\"mixins\\\";\\n\",\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n//-- Material Design colors\\n\\n// Red\\n$red-50: rgb(255,235,238);\\n$red-100: rgb(255,205,210);\\n$red-200: rgb(239,154,154);\\n$red-300: rgb(229,115,115);\\n$red-400: rgb(239,83,80);\\n$red-500: rgb(244,67,54);\\n$red-600: rgb(229,57,53);\\n$red-700: rgb(211,47,47);\\n$red-800: rgb(198,40,40);\\n$red-900: rgb(183,28,28);\\n$red-a100: rgb(255,138,128);\\n$red-a200: rgb(255,82,82);\\n$red-a400: rgb(255,23,68);\\n$red-a700: rgb(213,0,0);\\n\\n// Pink\\n$pink-50: rgb(252,228,236);\\n$pink-100: rgb(248,187,208);\\n$pink-200: rgb(244,143,177);\\n$pink-300: rgb(240,98,146);\\n$pink-400: rgb(236,64,122);\\n$pink-500: rgb(233,30,99);\\n$pink-600: rgb(216,27,96);\\n$pink-700: rgb(194,24,91);\\n$pink-800: rgb(173,20,87);\\n$pink-900: rgb(136,14,79);\\n$pink-a100: rgb(255,128,171);\\n$pink-a200: rgb(255,64,129);\\n$pink-a400: rgb(245,0,87);\\n$pink-a700: rgb(197,17,98);\\n\\n// Purple\\n$purple-50: rgb(243,229,245);\\n$purple-100: rgb(225,190,231);\\n$purple-200: rgb(206,147,216);\\n$purple-300: rgb(186,104,200);\\n$purple-400: rgb(171,71,188);\\n$purple-500: rgb(156,39,176);\\n$purple-600: rgb(142,36,170);\\n$purple-700: rgb(123,31,162);\\n$purple-800: rgb(106,27,154);\\n$purple-900: rgb(74,20,140);\\n$purple-a100: rgb(234,128,252);\\n$purple-a200: rgb(224,64,251);\\n$purple-a400: rgb(213,0,249);\\n$purple-a700: rgb(170,0,255);\\n\\n//Deep Purple\\n$deep-purple-50: rgb(237,231,246);\\n$deep-purple-100: rgb(209,196,233);\\n$deep-purple-200: rgb(179,157,219);\\n$deep-purple-300: rgb(149,117,205);\\n$deep-purple-400: rgb(126,87,194);\\n$deep-purple-500: rgb(103,58,183);\\n$deep-purple-600: rgb(94,53,177);\\n$deep-purple-700: rgb(81,45,168);\\n$deep-purple-800: rgb(69,39,160);\\n$deep-purple-900: rgb(49,27,146);\\n$deep-purple-a100: rgb(179,136,255);\\n$deep-purple-a200: rgb(124,77,255);\\n$deep-purple-a400: rgb(101,31,255);\\n$deep-purple-a700: rgb(98,0,234);\\n\\n// Indigo\\n$indigo-50: rgb(232,234,246);\\n$indigo-100: rgb(197,202,233);\\n$indigo-200: rgb(159,168,218);\\n$indigo-300: rgb(121,134,203);\\n$indigo-400: rgb(92,107,192);\\n$indigo-500: rgb(63,81,181);\\n$indigo-600: rgb(57,73,171);\\n$indigo-700: rgb(48,63,159);\\n$indigo-800: rgb(40,53,147);\\n$indigo-900: rgb(26,35,126);\\n$indigo-a100: rgb(140,158,255);\\n$indigo-a200: rgb(83,109,254);\\n$indigo-a400: rgb(61,90,254);\\n$indigo-a700: rgb(48,79,254);\\n\\n// Blue\\n$blue-50: rgb(227,242,253);\\n$blue-100: rgb(187,222,251);\\n$blue-200: rgb(144,202,249);\\n$blue-300: rgb(100,181,246);\\n$blue-400: rgb(66,165,245);\\n$blue-500: rgb(33,150,243);\\n$blue-600: rgb(30,136,229);\\n$blue-700: rgb(25,118,210);\\n$blue-800: rgb(21,101,192);\\n$blue-900: rgb(13,71,161);\\n$blue-a100: rgb(130,177,255);\\n$blue-a200: rgb(68,138,255);\\n$blue-a400: rgb(41,121,255);\\n$blue-a700: rgb(41,98,255);\\n\\n// Light Blue\\n$light-blue-50: rgb(225,245,254);\\n$light-blue-100: rgb(179,229,252);\\n$light-blue-200: rgb(129,212,250);\\n$light-blue-300: rgb(79,195,247);\\n$light-blue-400: rgb(41,182,246);\\n$light-blue-500: rgb(3,169,244);\\n$light-blue-600: rgb(3,155,229);\\n$light-blue-700: rgb(2,136,209);\\n$light-blue-800: rgb(2,119,189);\\n$light-blue-900: rgb(1,87,155);\\n$light-blue-a100: rgb(128,216,255);\\n$light-blue-a200: rgb(64,196,255);\\n$light-blue-a400: rgb(0,176,255);\\n$light-blue-a700: rgb(0,145,234);\\n\\n// Cyan\\n$cyan-50: rgb(224,247,250);\\n$cyan-100: rgb(178,235,242);\\n$cyan-200: rgb(128,222,234);\\n$cyan-300: rgb(77,208,225);\\n$cyan-400: rgb(38,198,218);\\n$cyan-500: rgb(0,188,212);\\n$cyan-600: rgb(0,172,193);\\n$cyan-700: rgb(0,151,167);\\n$cyan-800: rgb(0,131,143);\\n$cyan-900: rgb(0,96,100);\\n$cyan-a100: rgb(132,255,255);\\n$cyan-a200: rgb(24,255,255);\\n$cyan-a400: rgb(0,229,255);\\n$cyan-a700: rgb(0,184,212);\\n\\n// Teal\\n$teal-50: rgb(224,242,241);\\n$teal-100: rgb(178,223,219);\\n$teal-200: rgb(128,203,196);\\n$teal-300: rgb(77,182,172);\\n$teal-400: rgb(38,166,154);\\n$teal-500: rgb(0,150,136);\\n$teal-600: rgb(0,137,123);\\n$teal-700: rgb(0,121,107);\\n$teal-800: rgb(0,105,92);\\n$teal-900: rgb(0,77,64);\\n$teal-a100: rgb(167,255,235);\\n$teal-a200: rgb(100,255,218);\\n$teal-a400: rgb(29,233,182);\\n$teal-a700: rgb(0,191,165);\\n\\n// Green\\n$green-50: rgb(232,245,233);\\n$green-100: rgb(200,230,201);\\n$green-200: rgb(165,214,167);\\n$green-300: rgb(129,199,132);\\n$green-400: rgb(102,187,106);\\n$green-500: rgb(76,175,80);\\n$green-600: rgb(67,160,71);\\n$green-700: rgb(56,142,60);\\n$green-800: rgb(46,125,50);\\n$green-900: rgb(27,94,32);\\n$green-a100: rgb(185,246,202);\\n$green-a200: rgb(105,240,174);\\n$green-a400: rgb(0,230,118);\\n$green-a700: rgb(0,200,83);\\n\\n// Green\\n$light-green-50: rgb(241,248,233);\\n$light-green-100: rgb(220,237,200);\\n$light-green-200: rgb(197,225,165);\\n$light-green-300: rgb(174,213,129);\\n$light-green-400: rgb(156,204,101);\\n$light-green-500: rgb(139,195,74);\\n$light-green-600: rgb(124,179,66);\\n$light-green-700: rgb(104,159,56);\\n$light-green-800: rgb(85,139,47);\\n$light-green-900: rgb(51,105,30);\\n$light-green-a100: rgb(204,255,144);\\n$light-green-a200: rgb(178,255,89);\\n$light-green-a400: rgb(118,255,3);\\n$light-green-a700: rgb(100,221,23);\\n\\n// Lime\\n$lime-50: rgb(249,251,231);\\n$lime-100: rgb(240,244,195);\\n$lime-200: rgb(230,238,156);\\n$lime-300: rgb(220,231,117);\\n$lime-400: rgb(212,225,87);\\n$lime-500: rgb(205,220,57);\\n$lime-600: rgb(192,202,51);\\n$lime-700: rgb(175,180,43);\\n$lime-800: rgb(158,157,36);\\n$lime-900: rgb(130,119,23);\\n$lime-a100: rgb(244,255,129);\\n$lime-a200: rgb(238,255,65);\\n$lime-a400: rgb(198,255,0);\\n$lime-a700: rgb(174,234,0);\\n\\n// Yellow\\n$yellow-50: rgb(255,253,231);\\n$yellow-100: rgb(255,249,196);\\n$yellow-200: rgb(255,245,157);\\n$yellow-300: rgb(255,241,118);\\n$yellow-400: rgb(255,238,88);\\n$yellow-500: rgb(255,235,59);\\n$yellow-600: rgb(253,216,53);\\n$yellow-700: rgb(251,192,45);\\n$yellow-800: rgb(249,168,37);\\n$yellow-900: rgb(245,127,23);\\n$yellow-a100: rgb(255,255,141);\\n$yellow-a200: rgb(255,255,0);\\n$yellow-a400: rgb(255,234,0);\\n$yellow-a700: rgb(255,214,0);\\n\\n// Amber\\n$amber-50: rgb(255,248,225);\\n$amber-100: rgb(255,236,179);\\n$amber-200: rgb(255,224,130);\\n$amber-300: rgb(255,213,79);\\n$amber-400: rgb(255,202,40);\\n$amber-500: rgb(255,193,7);\\n$amber-600: rgb(255,179,0);\\n$amber-700: rgb(255,160,0);\\n$amber-800: rgb(255,143,0);\\n$amber-900: rgb(255,111,0);\\n$amber-a100: rgb(255,229,127);\\n$amber-a200: rgb(255,215,64);\\n$amber-a400: rgb(255,196,0);\\n$amber-a700: rgb(255,171,0);\\n\\n// Orange\\n$orange-50: rgb(255,243,224);\\n$orange-100: rgb(255,224,178);\\n$orange-200: rgb(255,204,128);\\n$orange-300: rgb(255,183,77);\\n$orange-400: rgb(255,167,38);\\n$orange-500: rgb(255,152,0);\\n$orange-600: rgb(251,140,0);\\n$orange-700: rgb(245,124,0);\\n$orange-800: rgb(239,108,0);\\n$orange-900: rgb(230,81,0);\\n$orange-a100: rgb(255,209,128);\\n$orange-a200: rgb(255,171,64);\\n$orange-a400: rgb(255,145,0);\\n$orange-a700: rgb(255,109,0);\\n\\n// Deep Orange\\n$deep-orange-50: rgb(251,233,231);\\n$deep-orange-100: rgb(255,204,188);\\n$deep-orange-200: rgb(255,171,145);\\n$deep-orange-300: rgb(255,138,101);\\n$deep-orange-400: rgb(255,112,67);\\n$deep-orange-500: rgb(255,87,34);\\n$deep-orange-600: rgb(244,81,30);\\n$deep-orange-700: rgb(230,74,25);\\n$deep-orange-800: rgb(216,67,21);\\n$deep-orange-900: rgb(191,54,12);\\n$deep-orange-a100: rgb(255,158,128);\\n$deep-orange-a200: rgb(255,110,64);\\n$deep-orange-a400: rgb(255,61,0);\\n$deep-orange-a700: rgb(221,44,0);\\n\\n// Brown\\n$brown-50: rgb(239,235,233);\\n$brown-100: rgb(215,204,200);\\n$brown-200: rgb(188,170,164);\\n$brown-300: rgb(161,136,127);\\n$brown-400: rgb(141,110,99);\\n$brown-500: rgb(121,85,72);\\n$brown-600: rgb(109,76,65);\\n$brown-700: rgb(93,64,55);\\n$brown-800: rgb(78,52,46);\\n$brown-900: rgb(62,39,35);\\n\\n// Grey\\n$grey-50: rgb(250,250,250);\\n$grey-100: rgb(245,245,245);\\n$grey-200: rgb(238,238,238);\\n$grey-300: rgb(224,224,224);\\n$grey-400: rgb(189,189,189);\\n$grey-500: rgb(158,158,158);\\n$grey-600: rgb(117,117,117);\\n$grey-700: rgb(97,97,97);\\n$grey-800: rgb(66,66,66);\\n$grey-900: rgb(33,33,33);\\n\\n// Blue Grey\\n$blue-grey-50: rgb(236,239,241);\\n$blue-grey-100: rgb(207,216,220);\\n$blue-grey-200: rgb(176,190,197);\\n$blue-grey-300: rgb(144,164,174);\\n$blue-grey-400: rgb(120,144,156);\\n$blue-grey-500: rgb(96,125,139);\\n$blue-grey-600: rgb(84,110,122);\\n$blue-grey-700: rgb(69,90,100);\\n$blue-grey-800: rgb(55,71,79);\\n$blue-grey-900: rgb(38,50,56);\\n\\n$color-black: rgb(0,0,0);\\n$color-white: rgb(255,255,255);\\n\\n//-- The two possible colors for overlayed text.\\n$color-dark-contrast: $color-white !default;\\n$color-light-contrast: $color-black !default;\\n\",\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n//-- Mixins for adaptive layout (media queries)\\n@import \\\"~include-media/dist/include-media\\\";\\n\\n@mixin mobile {\\n @include media(\\\"<=desktop\\\") {\\n @content;\\n }\\n}\\n\",\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n//-- Mixins\\n@import \\\"+workloads/workloads-mixins\\\";\\n@import \\\"+storage/storage-mixins\\\";\\n@import \\\"+nodes/nodes-mixins\\\";\\n@import \\\"+namespaces/namespaces-mixins\\\";\\n@import \\\"table/table.mixins\\\";\\n@import \\\"+network/network-mixins\\\";\\n\\n// Hide scrollbar but keep the element scrollable\\n@mixin hidden-scrollbar {\\n overflow: auto;\\n // Chrome, Safari\\n &::-webkit-scrollbar {\\n width: 0;\\n height: 0;\\n background: transparent;\\n }\\n}\\n\\n@mixin stripeLinesAnimation($color1: #ccc, $color2: transparent, $spacing: 1rem) {\\n background: repeating-linear-gradient(-45deg, $color2, $color2, $spacing, $color1 $spacing, $color1 $spacing * 2);\\n background-size: 200% 200%;\\n animation: stripeLines 10s linear infinite;\\n\\n @keyframes stripeLines {\\n 100% {\\n background-position: 100% 100%;\\n }\\n }\\n}\\n\\n@mixin pseudo-link($color: var(--primary)) {\\n color: $color;\\n text-decoration: underline;\\n cursor: pointer;\\n}\\n\\n@mixin set-draggable($is-draggable: true) {\\n @if ($is-draggable) {\\n -webkit-user-select: none;\\n -webkit-app-region: drag;\\n } @else {\\n -webkit-app-region: no-drag;\\n }\\n}\\n\\n@mixin theme-light() {\\n $selector: \\\"theme-light\\\"; // keep in sync with class in `theme.store.ts`\\n\\n body.#{$selector} {\\n @content;\\n }\\n :global(body.#{$selector}) {\\n @content; // css-modules (*.module.scss)\\n }\\n}\\n\",\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n// Pods\\n$pod-status-running-color: var(--colorOk);\\n$pod-status-pending-color: var(--colorWarning);\\n$pod-status-evicted-color: var(--colorError);\\n$pod-status-succeeded-color: var(--colorSuccess);\\n$pod-status-failed-color: var(--colorError);\\n$pod-status-terminated-color: var(--colorTerminated);\\n$pod-status-terminating-color: var(--colorTerminated);\\n$pod-status-unknown-color: var(--colorVague);\\n$pod-status-complete-color: var(--colorSuccess);\\n$pod-status-crash-loop-color: var(--colorError);\\n$pod-scheduled: var(--colorOk);\\n$pod-ready: var(--colorOk);\\n$pod-initialized: var(--colorOk);\\n$pod-unschedulable: var(--colorError);\\n$pod-containers-ready: var(--colorInfo);\\n$pod-error: var(--colorError);\\n$pod-container-creating: var(--colorInfo);\\n\\n// Deployments\\n$deployment-available: var(--colorOk);\\n$deployment-progressing: var(--colorInfo);\\n$deployment-replicafailure: var(--colorError);\\n\\n// Jobs\\n$job-complete: var(--colorSuccess);\\n$job-failed: var(--colorError);\\n\\n// Cronjob\\n$cronjob-scheduled: var(--colorSuccess);\\n$cronjob-suspended: var(--colorTerminated);\\n\\n// Pod Statuses\\n$pod-status-color-list: (\\n running: $pod-status-running-color,\\n pending: $pod-status-pending-color,\\n evicted: $pod-status-evicted-color,\\n waiting: $pod-status-pending-color,\\n succeeded: $pod-status-succeeded-color,\\n failed: $pod-status-failed-color,\\n terminating: $pod-status-terminating-color,\\n terminated: $pod-status-terminated-color,\\n completed: $pod-status-complete-color,\\n crash-loop-back-off: $pod-status-crash-loop-color,\\n error: $pod-error,\\n container-creating: $pod-container-creating,\\n);\\n\\n// Job Conditions\\n$job-condition-color-list: (\\n complete: $job-complete,\\n failed: $job-failed,\\n);\\n\\n// Cronjob Conditions\\n$cronjob-condition-color-list: (\\n scheduled: $cronjob-scheduled,\\n suspended: $cronjob-suspended,\\n);\\n\\n@mixin pod-status-bgs {\\n @each $status, $color in $pod-status-color-list {\\n &.#{$status} {\\n color: white;\\n background: $color;\\n }\\n }\\n}\\n\\n@mixin pod-status-colors {\\n @each $status, $color in $pod-status-color-list {\\n &.#{$status} {\\n color: $color;\\n }\\n }\\n}\\n\\n@mixin job-condition-bgs {\\n @each $condition, $color in $job-condition-color-list {\\n .#{$condition} {\\n color: white;\\n background: $color;\\n }\\n }\\n}\\n\\n@mixin job-condition-colors {\\n @each $condition, $color in $job-condition-color-list {\\n &.#{$condition} {\\n color: $color;\\n }\\n }\\n}\\n\",\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n// PersistentVolumes\\n$pv-bound: var(--colorOk);\\n$pv-available: var(--colorSuccess);\\n$pv-released: var(--colorWarning);\\n$pv-failed: var(--colorError);\\n\\n// PersistentVolumeClaims\\n$pvc-bound: var(--colorOk);\\n$pvc-pending: var(--colorWarning);\\n$pvc-lost: var(--colorError);\\n\\n// PersistentVolume Statuses\\n$pv-status-color-list: (\\n bound: $pv-bound,\\n available: $pv-available,\\n released: $pv-released,\\n failed: $pv-failed\\n);\\n\\n$pvc-status-color-list: (\\n bound: $pvc-bound,\\n pending: $pvc-pending,\\n lost: $pvc-lost\\n);\\n\\n@mixin pv-status-colors {\\n @each $condition, $color in $pv-status-color-list {\\n &.#{$condition} {\\n color: $color;\\n }\\n }\\n}\\n\\n@mixin pvc-status-colors {\\n @each $condition, $color in $pvc-status-color-list {\\n &.#{$condition} {\\n color: $color;\\n }\\n }\\n}\\n\",\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n$node-status-color-list: (\\n out-of-disk: #ce3933,\\n network-unavailable: #812727,\\n memory-pressure: #901995,\\n disk-pressure: #CC8D00,\\n pid-pressure: #068DBF,\\n ready: #4caf50,\\n scheduling-disabled: #ff9800,\\n invalid-license: #ce3933,\\n cordoned: var(--colorWarning)\\n);\\n\\n@mixin node-status-bgs {\\n @each $status, $color in $node-status-color-list {\\n .#{$status} {\\n background: $color;\\n color: white;\\n }\\n }\\n}\\n\\n@mixin node-status-colors {\\n @each $status, $color in $node-status-color-list {\\n &.#{$status} {\\n color: $color;\\n }\\n }\\n}\\n\",\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n\\n@mixin namespaceStatus {\\n &.active {\\n color: var(--colorOk);\\n }\\n &.terminating {\\n color: var(--colorError);\\n }\\n}\\n\",\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n@mixin table-cell-action {\\n display: flex;\\n padding: 0 !important;\\n flex: 0 0 55px !important;\\n\\n > * {\\n margin: 6px auto;\\n }\\n}\\n\\n@mixin table-cell-warning {\\n display: flex;\\n align-items: center;\\n flex-grow: 0.3;\\n padding: 0;\\n}\\n\\n@mixin table-cell-labels {\\n .TableRow {\\n .TableCell {\\n &.labels {\\n @include table-cell-labels-offsets;\\n }\\n }\\n }\\n}\\n\\n@mixin table-cell-labels-offsets {\\n padding-top: $padding * 0.5;\\n padding-bottom: 0;\\n}\\n\",\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n$service-status-color-list: (\\n active: var(--colorOk),\\n pending: var(--colorWarning)\\n);\\n\\n@mixin service-status-colors {\\n @each $status, $color in $service-status-color-list {\\n &.#{$status} {\\n color: $color;\\n }\\n }\\n}\\n\\n$port-forward-status-color-list: (\\n active: var(--colorOk),\\n disabled: var(--colorSoftError)\\n);\\n\\n@mixin port-forward-status-colors {\\n @each $status, $color in $port-forward-status-color-list {\\n &.#{$status} {\\n color: $color;\\n }\\n }\\n}\\n\",\"@import \\\"vars.scss\\\";\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n.PodDetailsList {\\n position: relative;\\n\\n .Table {\\n margin: 0 (-$margin * 3);\\n\\n &.virtual {\\n height: 500px;\\n }\\n\\n .TableHead.sticky {\\n top: calc(var(--spacing) * -1);\\n }\\n }\\n\\n .TableCell {\\n &:first-child {\\n margin-left: $margin;\\n }\\n\\n &:last-child {\\n margin-right: $margin;\\n }\\n\\n &.name {\\n flex-grow: 2;\\n }\\n\\n &.namespace {\\n flex-grow: 1.2;\\n }\\n\\n &.cpu {\\n align-self: center;\\n\\n .LineProgress {\\n color: var(--blue);\\n }\\n }\\n\\n &.memory {\\n align-self: center;\\n\\n .LineProgress {\\n color: var(--magenta);\\n }\\n }\\n\\n &.warning {\\n @include table-cell-warning;\\n }\\n\\n &.status {\\n @include pod-status-colors;\\n }\\n }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://open-lens/./src/renderer/components/+workloads-pods/pod-details-list.scss?./node_modules/css-loader/dist/cjs.js??ruleSet%5B1%5D.rules%5B2%5D.use%5B1%5D!./node_modules/postcss-loader/dist/cjs.js??ruleSet%5B1%5D.rules%5B2%5D.use%5B2%5D!./node_modules/sass-loader/dist/cjs.js??ruleSet%5B1%5D.rules%5B2%5D.use%5B3%5D");
11165
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ \"./node_modules/css-loader/dist/runtime/sourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n.PodDetailsList {\\n position: relative;\\n}\\n.PodDetailsList .Table {\\n margin: 0 -24px;\\n}\\n.PodDetailsList .Table.virtual {\\n height: 500px;\\n}\\n.PodDetailsList .Table .TableHead.sticky {\\n top: calc(var(--spacing) * -1);\\n}\\n.PodDetailsList .TableCell:first-child {\\n margin-left: 8px;\\n}\\n.PodDetailsList .TableCell:last-child {\\n margin-right: 8px;\\n}\\n.PodDetailsList .TableCell.name {\\n flex-grow: 2;\\n}\\n.PodDetailsList .TableCell.node {\\n flex-grow: 2;\\n}\\n.PodDetailsList .TableCell.namespace {\\n flex-grow: 1.2;\\n}\\n.PodDetailsList .TableCell.cpu {\\n align-self: center;\\n}\\n.PodDetailsList .TableCell.cpu .LineProgress {\\n color: var(--blue);\\n}\\n.PodDetailsList .TableCell.memory {\\n align-self: center;\\n}\\n.PodDetailsList .TableCell.memory .LineProgress {\\n color: var(--magenta);\\n}\\n.PodDetailsList .TableCell.warning {\\n display: flex;\\n align-items: center;\\n flex-grow: 0.3;\\n padding: 0;\\n}\\n.PodDetailsList .TableCell.status.running {\\n color: var(--colorOk);\\n}\\n.PodDetailsList .TableCell.status.pending {\\n color: var(--colorWarning);\\n}\\n.PodDetailsList .TableCell.status.evicted {\\n color: var(--colorError);\\n}\\n.PodDetailsList .TableCell.status.waiting {\\n color: var(--colorWarning);\\n}\\n.PodDetailsList .TableCell.status.succeeded {\\n color: var(--colorSuccess);\\n}\\n.PodDetailsList .TableCell.status.failed {\\n color: var(--colorError);\\n}\\n.PodDetailsList .TableCell.status.terminating {\\n color: var(--colorTerminated);\\n}\\n.PodDetailsList .TableCell.status.terminated {\\n color: var(--colorTerminated);\\n}\\n.PodDetailsList .TableCell.status.completed {\\n color: var(--colorSuccess);\\n}\\n.PodDetailsList .TableCell.status.crash-loop-back-off {\\n color: var(--colorError);\\n}\\n.PodDetailsList .TableCell.status.error {\\n color: var(--colorError);\\n}\\n.PodDetailsList .TableCell.status.container-creating {\\n color: var(--colorInfo);\\n}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/renderer/components/vars.scss\",\"webpack://./src/renderer/components/colors.scss\",\"webpack://./src/renderer/components/media.scss\",\"webpack://./src/renderer/components/mixins.scss\",\"webpack://./src/renderer/components/+workloads/workloads-mixins.scss\",\"webpack://./src/renderer/components/+storage/storage-mixins.scss\",\"webpack://./src/renderer/components/+nodes/nodes-mixins.scss\",\"webpack://./src/renderer/components/+namespaces/namespaces-mixins.scss\",\"webpack://./src/renderer/components/table/table.mixins.scss\",\"webpack://./src/renderer/components/+network/network-mixins.scss\",\"webpack://./src/renderer/components/+workloads-pods/pod-details-list.scss\"],\"names\":[],\"mappings\":\"AAAA;;;EAAA;ACAA;;;EAAA;ACAA;;;EAAA;ACAA;;;EAAA;ACAA;;;EAAA;ACAA;;;EAAA;ACAA;;;EAAA;ACAA;;;EAAA;ACAA;;;EAAA;ACAA;;;EAAA;ACCA;;;EAAA;AAKA;EACE,kBAAA;AAuCF;AArCE;EACE,eAAA;AAuCJ;AArCI;EACE,aAAA;AAuCN;AApCI;EACE,8BAAA;AAsCN;AAjCI;EACE,gBVfC;AUkDP;AAhCI;EACE,iBVnBC;AUqDP;AA/BI;EACE,YAAA;AAiCN;AA9BI;EACE,YAAA;AAgCN;AA7BI;EACE,cAAA;AA+BN;AA5BI;EACE,kBAAA;AA8BN;AA5BM;EACE,kBAAA;AA8BR;AA1BI;EACE,kBAAA;AA4BN;AA1BM;EACE,qBAAA;AA4BR;AAxBI;EF1CF,aAAA;EACA,mBAAA;EACA,cAAA;EACA,UAAA;AEqEF;ANZI;EACE,qBAvCkB;AMqDxB;ANfI;EACE,0BAvCkB;AMwDxB;ANlBI;EACE,wBAvCkB;AM2DxB;ANrBI;EACE,0BAvCkB;AM8DxB;ANxBI;EACE,0BAvCkB;AMiExB;AN3BI;EACE,wBAvCkB;AMoExB;AN9BI;EACE,6BAvCkB;AMuExB;ANjCI;EACE,6BAvCkB;AM0ExB;ANpCI;EACE,0BAvCkB;AM6ExB;ANvCI;EACE,wBAvCkB;AMgFxB;AN1CI;EACE,wBAvCkB;AMmFxB;AN7CI;EACE,uBAvCkB;AMsFxB\",\"sourcesContent\":[\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n@import \\\"colors\\\", \\\"media\\\";\\n\\n// Dimensions\\n$unit: 8px;\\n$padding: $unit;\\n$margin: $unit;\\n$radius: var(--border-radius);\\n\\n// Fonts\\n$font-main: var(--font-main);\\n$font-monospace: var(--font-monospace);\\n$font-size-small: var(--font-size-small);\\n$font-size: var(--font-size);\\n$font-size-big: var(--font-size-big);\\n$font-weight-thin: var(--font-weight-thin);\\n$font-weight-normal: var(--font-weight-normal);\\n$font-weight-bold: var(--font-weight-bold);\\n\\n// Z-index correlations\\n$zIndex-sidebar-hover: 500;\\n$zIndex-select-portal: 300;\\n$zIndex-dialog: 200;\\n$zIndex-drawer: 100;\\n\\n// Animation timing functions\\n$animation-curve-fast-out-slow-in: cubic-bezier(0.4, 0, 0.2, 1);\\n$animation-curve-linear-out-slow-in: cubic-bezier(0, 0, 0.2, 1);\\n$animation-curve-fast-out-linear-in: cubic-bezier(0.4, 0, 1, 1);\\n\\n// Import other common vars & mixins\\n@import \\\"mixins\\\";\\n\",\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n//-- Material Design colors\\n\\n// Red\\n$red-50: rgb(255,235,238);\\n$red-100: rgb(255,205,210);\\n$red-200: rgb(239,154,154);\\n$red-300: rgb(229,115,115);\\n$red-400: rgb(239,83,80);\\n$red-500: rgb(244,67,54);\\n$red-600: rgb(229,57,53);\\n$red-700: rgb(211,47,47);\\n$red-800: rgb(198,40,40);\\n$red-900: rgb(183,28,28);\\n$red-a100: rgb(255,138,128);\\n$red-a200: rgb(255,82,82);\\n$red-a400: rgb(255,23,68);\\n$red-a700: rgb(213,0,0);\\n\\n// Pink\\n$pink-50: rgb(252,228,236);\\n$pink-100: rgb(248,187,208);\\n$pink-200: rgb(244,143,177);\\n$pink-300: rgb(240,98,146);\\n$pink-400: rgb(236,64,122);\\n$pink-500: rgb(233,30,99);\\n$pink-600: rgb(216,27,96);\\n$pink-700: rgb(194,24,91);\\n$pink-800: rgb(173,20,87);\\n$pink-900: rgb(136,14,79);\\n$pink-a100: rgb(255,128,171);\\n$pink-a200: rgb(255,64,129);\\n$pink-a400: rgb(245,0,87);\\n$pink-a700: rgb(197,17,98);\\n\\n// Purple\\n$purple-50: rgb(243,229,245);\\n$purple-100: rgb(225,190,231);\\n$purple-200: rgb(206,147,216);\\n$purple-300: rgb(186,104,200);\\n$purple-400: rgb(171,71,188);\\n$purple-500: rgb(156,39,176);\\n$purple-600: rgb(142,36,170);\\n$purple-700: rgb(123,31,162);\\n$purple-800: rgb(106,27,154);\\n$purple-900: rgb(74,20,140);\\n$purple-a100: rgb(234,128,252);\\n$purple-a200: rgb(224,64,251);\\n$purple-a400: rgb(213,0,249);\\n$purple-a700: rgb(170,0,255);\\n\\n//Deep Purple\\n$deep-purple-50: rgb(237,231,246);\\n$deep-purple-100: rgb(209,196,233);\\n$deep-purple-200: rgb(179,157,219);\\n$deep-purple-300: rgb(149,117,205);\\n$deep-purple-400: rgb(126,87,194);\\n$deep-purple-500: rgb(103,58,183);\\n$deep-purple-600: rgb(94,53,177);\\n$deep-purple-700: rgb(81,45,168);\\n$deep-purple-800: rgb(69,39,160);\\n$deep-purple-900: rgb(49,27,146);\\n$deep-purple-a100: rgb(179,136,255);\\n$deep-purple-a200: rgb(124,77,255);\\n$deep-purple-a400: rgb(101,31,255);\\n$deep-purple-a700: rgb(98,0,234);\\n\\n// Indigo\\n$indigo-50: rgb(232,234,246);\\n$indigo-100: rgb(197,202,233);\\n$indigo-200: rgb(159,168,218);\\n$indigo-300: rgb(121,134,203);\\n$indigo-400: rgb(92,107,192);\\n$indigo-500: rgb(63,81,181);\\n$indigo-600: rgb(57,73,171);\\n$indigo-700: rgb(48,63,159);\\n$indigo-800: rgb(40,53,147);\\n$indigo-900: rgb(26,35,126);\\n$indigo-a100: rgb(140,158,255);\\n$indigo-a200: rgb(83,109,254);\\n$indigo-a400: rgb(61,90,254);\\n$indigo-a700: rgb(48,79,254);\\n\\n// Blue\\n$blue-50: rgb(227,242,253);\\n$blue-100: rgb(187,222,251);\\n$blue-200: rgb(144,202,249);\\n$blue-300: rgb(100,181,246);\\n$blue-400: rgb(66,165,245);\\n$blue-500: rgb(33,150,243);\\n$blue-600: rgb(30,136,229);\\n$blue-700: rgb(25,118,210);\\n$blue-800: rgb(21,101,192);\\n$blue-900: rgb(13,71,161);\\n$blue-a100: rgb(130,177,255);\\n$blue-a200: rgb(68,138,255);\\n$blue-a400: rgb(41,121,255);\\n$blue-a700: rgb(41,98,255);\\n\\n// Light Blue\\n$light-blue-50: rgb(225,245,254);\\n$light-blue-100: rgb(179,229,252);\\n$light-blue-200: rgb(129,212,250);\\n$light-blue-300: rgb(79,195,247);\\n$light-blue-400: rgb(41,182,246);\\n$light-blue-500: rgb(3,169,244);\\n$light-blue-600: rgb(3,155,229);\\n$light-blue-700: rgb(2,136,209);\\n$light-blue-800: rgb(2,119,189);\\n$light-blue-900: rgb(1,87,155);\\n$light-blue-a100: rgb(128,216,255);\\n$light-blue-a200: rgb(64,196,255);\\n$light-blue-a400: rgb(0,176,255);\\n$light-blue-a700: rgb(0,145,234);\\n\\n// Cyan\\n$cyan-50: rgb(224,247,250);\\n$cyan-100: rgb(178,235,242);\\n$cyan-200: rgb(128,222,234);\\n$cyan-300: rgb(77,208,225);\\n$cyan-400: rgb(38,198,218);\\n$cyan-500: rgb(0,188,212);\\n$cyan-600: rgb(0,172,193);\\n$cyan-700: rgb(0,151,167);\\n$cyan-800: rgb(0,131,143);\\n$cyan-900: rgb(0,96,100);\\n$cyan-a100: rgb(132,255,255);\\n$cyan-a200: rgb(24,255,255);\\n$cyan-a400: rgb(0,229,255);\\n$cyan-a700: rgb(0,184,212);\\n\\n// Teal\\n$teal-50: rgb(224,242,241);\\n$teal-100: rgb(178,223,219);\\n$teal-200: rgb(128,203,196);\\n$teal-300: rgb(77,182,172);\\n$teal-400: rgb(38,166,154);\\n$teal-500: rgb(0,150,136);\\n$teal-600: rgb(0,137,123);\\n$teal-700: rgb(0,121,107);\\n$teal-800: rgb(0,105,92);\\n$teal-900: rgb(0,77,64);\\n$teal-a100: rgb(167,255,235);\\n$teal-a200: rgb(100,255,218);\\n$teal-a400: rgb(29,233,182);\\n$teal-a700: rgb(0,191,165);\\n\\n// Green\\n$green-50: rgb(232,245,233);\\n$green-100: rgb(200,230,201);\\n$green-200: rgb(165,214,167);\\n$green-300: rgb(129,199,132);\\n$green-400: rgb(102,187,106);\\n$green-500: rgb(76,175,80);\\n$green-600: rgb(67,160,71);\\n$green-700: rgb(56,142,60);\\n$green-800: rgb(46,125,50);\\n$green-900: rgb(27,94,32);\\n$green-a100: rgb(185,246,202);\\n$green-a200: rgb(105,240,174);\\n$green-a400: rgb(0,230,118);\\n$green-a700: rgb(0,200,83);\\n\\n// Green\\n$light-green-50: rgb(241,248,233);\\n$light-green-100: rgb(220,237,200);\\n$light-green-200: rgb(197,225,165);\\n$light-green-300: rgb(174,213,129);\\n$light-green-400: rgb(156,204,101);\\n$light-green-500: rgb(139,195,74);\\n$light-green-600: rgb(124,179,66);\\n$light-green-700: rgb(104,159,56);\\n$light-green-800: rgb(85,139,47);\\n$light-green-900: rgb(51,105,30);\\n$light-green-a100: rgb(204,255,144);\\n$light-green-a200: rgb(178,255,89);\\n$light-green-a400: rgb(118,255,3);\\n$light-green-a700: rgb(100,221,23);\\n\\n// Lime\\n$lime-50: rgb(249,251,231);\\n$lime-100: rgb(240,244,195);\\n$lime-200: rgb(230,238,156);\\n$lime-300: rgb(220,231,117);\\n$lime-400: rgb(212,225,87);\\n$lime-500: rgb(205,220,57);\\n$lime-600: rgb(192,202,51);\\n$lime-700: rgb(175,180,43);\\n$lime-800: rgb(158,157,36);\\n$lime-900: rgb(130,119,23);\\n$lime-a100: rgb(244,255,129);\\n$lime-a200: rgb(238,255,65);\\n$lime-a400: rgb(198,255,0);\\n$lime-a700: rgb(174,234,0);\\n\\n// Yellow\\n$yellow-50: rgb(255,253,231);\\n$yellow-100: rgb(255,249,196);\\n$yellow-200: rgb(255,245,157);\\n$yellow-300: rgb(255,241,118);\\n$yellow-400: rgb(255,238,88);\\n$yellow-500: rgb(255,235,59);\\n$yellow-600: rgb(253,216,53);\\n$yellow-700: rgb(251,192,45);\\n$yellow-800: rgb(249,168,37);\\n$yellow-900: rgb(245,127,23);\\n$yellow-a100: rgb(255,255,141);\\n$yellow-a200: rgb(255,255,0);\\n$yellow-a400: rgb(255,234,0);\\n$yellow-a700: rgb(255,214,0);\\n\\n// Amber\\n$amber-50: rgb(255,248,225);\\n$amber-100: rgb(255,236,179);\\n$amber-200: rgb(255,224,130);\\n$amber-300: rgb(255,213,79);\\n$amber-400: rgb(255,202,40);\\n$amber-500: rgb(255,193,7);\\n$amber-600: rgb(255,179,0);\\n$amber-700: rgb(255,160,0);\\n$amber-800: rgb(255,143,0);\\n$amber-900: rgb(255,111,0);\\n$amber-a100: rgb(255,229,127);\\n$amber-a200: rgb(255,215,64);\\n$amber-a400: rgb(255,196,0);\\n$amber-a700: rgb(255,171,0);\\n\\n// Orange\\n$orange-50: rgb(255,243,224);\\n$orange-100: rgb(255,224,178);\\n$orange-200: rgb(255,204,128);\\n$orange-300: rgb(255,183,77);\\n$orange-400: rgb(255,167,38);\\n$orange-500: rgb(255,152,0);\\n$orange-600: rgb(251,140,0);\\n$orange-700: rgb(245,124,0);\\n$orange-800: rgb(239,108,0);\\n$orange-900: rgb(230,81,0);\\n$orange-a100: rgb(255,209,128);\\n$orange-a200: rgb(255,171,64);\\n$orange-a400: rgb(255,145,0);\\n$orange-a700: rgb(255,109,0);\\n\\n// Deep Orange\\n$deep-orange-50: rgb(251,233,231);\\n$deep-orange-100: rgb(255,204,188);\\n$deep-orange-200: rgb(255,171,145);\\n$deep-orange-300: rgb(255,138,101);\\n$deep-orange-400: rgb(255,112,67);\\n$deep-orange-500: rgb(255,87,34);\\n$deep-orange-600: rgb(244,81,30);\\n$deep-orange-700: rgb(230,74,25);\\n$deep-orange-800: rgb(216,67,21);\\n$deep-orange-900: rgb(191,54,12);\\n$deep-orange-a100: rgb(255,158,128);\\n$deep-orange-a200: rgb(255,110,64);\\n$deep-orange-a400: rgb(255,61,0);\\n$deep-orange-a700: rgb(221,44,0);\\n\\n// Brown\\n$brown-50: rgb(239,235,233);\\n$brown-100: rgb(215,204,200);\\n$brown-200: rgb(188,170,164);\\n$brown-300: rgb(161,136,127);\\n$brown-400: rgb(141,110,99);\\n$brown-500: rgb(121,85,72);\\n$brown-600: rgb(109,76,65);\\n$brown-700: rgb(93,64,55);\\n$brown-800: rgb(78,52,46);\\n$brown-900: rgb(62,39,35);\\n\\n// Grey\\n$grey-50: rgb(250,250,250);\\n$grey-100: rgb(245,245,245);\\n$grey-200: rgb(238,238,238);\\n$grey-300: rgb(224,224,224);\\n$grey-400: rgb(189,189,189);\\n$grey-500: rgb(158,158,158);\\n$grey-600: rgb(117,117,117);\\n$grey-700: rgb(97,97,97);\\n$grey-800: rgb(66,66,66);\\n$grey-900: rgb(33,33,33);\\n\\n// Blue Grey\\n$blue-grey-50: rgb(236,239,241);\\n$blue-grey-100: rgb(207,216,220);\\n$blue-grey-200: rgb(176,190,197);\\n$blue-grey-300: rgb(144,164,174);\\n$blue-grey-400: rgb(120,144,156);\\n$blue-grey-500: rgb(96,125,139);\\n$blue-grey-600: rgb(84,110,122);\\n$blue-grey-700: rgb(69,90,100);\\n$blue-grey-800: rgb(55,71,79);\\n$blue-grey-900: rgb(38,50,56);\\n\\n$color-black: rgb(0,0,0);\\n$color-white: rgb(255,255,255);\\n\\n//-- The two possible colors for overlayed text.\\n$color-dark-contrast: $color-white !default;\\n$color-light-contrast: $color-black !default;\\n\",\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n//-- Mixins for adaptive layout (media queries)\\n@import \\\"~include-media/dist/include-media\\\";\\n\\n@mixin mobile {\\n @include media(\\\"<=desktop\\\") {\\n @content;\\n }\\n}\\n\",\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n//-- Mixins\\n@import \\\"+workloads/workloads-mixins\\\";\\n@import \\\"+storage/storage-mixins\\\";\\n@import \\\"+nodes/nodes-mixins\\\";\\n@import \\\"+namespaces/namespaces-mixins\\\";\\n@import \\\"table/table.mixins\\\";\\n@import \\\"+network/network-mixins\\\";\\n\\n// Hide scrollbar but keep the element scrollable\\n@mixin hidden-scrollbar {\\n overflow: auto;\\n // Chrome, Safari\\n &::-webkit-scrollbar {\\n width: 0;\\n height: 0;\\n background: transparent;\\n }\\n}\\n\\n@mixin stripeLinesAnimation($color1: #ccc, $color2: transparent, $spacing: 1rem) {\\n background: repeating-linear-gradient(-45deg, $color2, $color2, $spacing, $color1 $spacing, $color1 $spacing * 2);\\n background-size: 200% 200%;\\n animation: stripeLines 10s linear infinite;\\n\\n @keyframes stripeLines {\\n 100% {\\n background-position: 100% 100%;\\n }\\n }\\n}\\n\\n@mixin pseudo-link($color: var(--primary)) {\\n color: $color;\\n text-decoration: underline;\\n cursor: pointer;\\n}\\n\\n@mixin set-draggable($is-draggable: true) {\\n @if ($is-draggable) {\\n -webkit-user-select: none;\\n -webkit-app-region: drag;\\n } @else {\\n -webkit-app-region: no-drag;\\n }\\n}\\n\\n@mixin theme-light() {\\n $selector: \\\"theme-light\\\"; // keep in sync with class in `theme.store.ts`\\n\\n body.#{$selector} {\\n @content;\\n }\\n :global(body.#{$selector}) {\\n @content; // css-modules (*.module.scss)\\n }\\n}\\n\",\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n// Pods\\n$pod-status-running-color: var(--colorOk);\\n$pod-status-pending-color: var(--colorWarning);\\n$pod-status-evicted-color: var(--colorError);\\n$pod-status-succeeded-color: var(--colorSuccess);\\n$pod-status-failed-color: var(--colorError);\\n$pod-status-terminated-color: var(--colorTerminated);\\n$pod-status-terminating-color: var(--colorTerminated);\\n$pod-status-unknown-color: var(--colorVague);\\n$pod-status-complete-color: var(--colorSuccess);\\n$pod-status-crash-loop-color: var(--colorError);\\n$pod-scheduled: var(--colorOk);\\n$pod-ready: var(--colorOk);\\n$pod-initialized: var(--colorOk);\\n$pod-unschedulable: var(--colorError);\\n$pod-containers-ready: var(--colorInfo);\\n$pod-error: var(--colorError);\\n$pod-container-creating: var(--colorInfo);\\n\\n// Deployments\\n$deployment-available: var(--colorOk);\\n$deployment-progressing: var(--colorInfo);\\n$deployment-replicafailure: var(--colorError);\\n\\n// Jobs\\n$job-complete: var(--colorSuccess);\\n$job-failed: var(--colorError);\\n\\n// Cronjob\\n$cronjob-scheduled: var(--colorSuccess);\\n$cronjob-suspended: var(--colorTerminated);\\n\\n// Pod Statuses\\n$pod-status-color-list: (\\n running: $pod-status-running-color,\\n pending: $pod-status-pending-color,\\n evicted: $pod-status-evicted-color,\\n waiting: $pod-status-pending-color,\\n succeeded: $pod-status-succeeded-color,\\n failed: $pod-status-failed-color,\\n terminating: $pod-status-terminating-color,\\n terminated: $pod-status-terminated-color,\\n completed: $pod-status-complete-color,\\n crash-loop-back-off: $pod-status-crash-loop-color,\\n error: $pod-error,\\n container-creating: $pod-container-creating,\\n);\\n\\n// Job Conditions\\n$job-condition-color-list: (\\n complete: $job-complete,\\n failed: $job-failed,\\n);\\n\\n// Cronjob Conditions\\n$cronjob-condition-color-list: (\\n scheduled: $cronjob-scheduled,\\n suspended: $cronjob-suspended,\\n);\\n\\n@mixin pod-status-bgs {\\n @each $status, $color in $pod-status-color-list {\\n &.#{$status} {\\n color: white;\\n background: $color;\\n }\\n }\\n}\\n\\n@mixin pod-status-colors {\\n @each $status, $color in $pod-status-color-list {\\n &.#{$status} {\\n color: $color;\\n }\\n }\\n}\\n\\n@mixin job-condition-bgs {\\n @each $condition, $color in $job-condition-color-list {\\n .#{$condition} {\\n color: white;\\n background: $color;\\n }\\n }\\n}\\n\\n@mixin job-condition-colors {\\n @each $condition, $color in $job-condition-color-list {\\n &.#{$condition} {\\n color: $color;\\n }\\n }\\n}\\n\",\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n// PersistentVolumes\\n$pv-bound: var(--colorOk);\\n$pv-available: var(--colorSuccess);\\n$pv-released: var(--colorWarning);\\n$pv-failed: var(--colorError);\\n\\n// PersistentVolumeClaims\\n$pvc-bound: var(--colorOk);\\n$pvc-pending: var(--colorWarning);\\n$pvc-lost: var(--colorError);\\n\\n// PersistentVolume Statuses\\n$pv-status-color-list: (\\n bound: $pv-bound,\\n available: $pv-available,\\n released: $pv-released,\\n failed: $pv-failed\\n);\\n\\n$pvc-status-color-list: (\\n bound: $pvc-bound,\\n pending: $pvc-pending,\\n lost: $pvc-lost\\n);\\n\\n@mixin pv-status-colors {\\n @each $condition, $color in $pv-status-color-list {\\n &.#{$condition} {\\n color: $color;\\n }\\n }\\n}\\n\\n@mixin pvc-status-colors {\\n @each $condition, $color in $pvc-status-color-list {\\n &.#{$condition} {\\n color: $color;\\n }\\n }\\n}\\n\",\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n$node-status-color-list: (\\n out-of-disk: #ce3933,\\n network-unavailable: #812727,\\n memory-pressure: #901995,\\n disk-pressure: #CC8D00,\\n pid-pressure: #068DBF,\\n ready: #4caf50,\\n scheduling-disabled: #ff9800,\\n invalid-license: #ce3933,\\n cordoned: var(--colorWarning)\\n);\\n\\n@mixin node-status-bgs {\\n @each $status, $color in $node-status-color-list {\\n .#{$status} {\\n background: $color;\\n color: white;\\n }\\n }\\n}\\n\\n@mixin node-status-colors {\\n @each $status, $color in $node-status-color-list {\\n &.#{$status} {\\n color: $color;\\n }\\n }\\n}\\n\",\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n\\n@mixin namespaceStatus {\\n &.active {\\n color: var(--colorOk);\\n }\\n &.terminating {\\n color: var(--colorError);\\n }\\n}\\n\",\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n@mixin table-cell-action {\\n display: flex;\\n padding: 0 !important;\\n flex: 0 0 55px !important;\\n\\n > * {\\n margin: 6px auto;\\n }\\n}\\n\\n@mixin table-cell-warning {\\n display: flex;\\n align-items: center;\\n flex-grow: 0.3;\\n padding: 0;\\n}\\n\\n@mixin table-cell-labels {\\n .TableRow {\\n .TableCell {\\n &.labels {\\n @include table-cell-labels-offsets;\\n }\\n }\\n }\\n}\\n\\n@mixin table-cell-labels-offsets {\\n padding-top: $padding * 0.5;\\n padding-bottom: 0;\\n}\\n\",\"/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n$service-status-color-list: (\\n active: var(--colorOk),\\n pending: var(--colorWarning)\\n);\\n\\n@mixin service-status-colors {\\n @each $status, $color in $service-status-color-list {\\n &.#{$status} {\\n color: $color;\\n }\\n }\\n}\\n\\n$port-forward-status-color-list: (\\n active: var(--colorOk),\\n disabled: var(--colorSoftError)\\n);\\n\\n@mixin port-forward-status-colors {\\n @each $status, $color in $port-forward-status-color-list {\\n &.#{$status} {\\n color: $color;\\n }\\n }\\n}\\n\",\"@import \\\"vars.scss\\\";\\n/**\\n * Copyright (c) OpenLens Authors. All rights reserved.\\n * Licensed under MIT License. See LICENSE in root directory for more information.\\n */\\n\\n.PodDetailsList {\\n position: relative;\\n\\n .Table {\\n margin: 0 (-$margin * 3);\\n\\n &.virtual {\\n height: 500px;\\n }\\n\\n .TableHead.sticky {\\n top: calc(var(--spacing) * -1);\\n }\\n }\\n\\n .TableCell {\\n &:first-child {\\n margin-left: $margin;\\n }\\n\\n &:last-child {\\n margin-right: $margin;\\n }\\n\\n &.name {\\n flex-grow: 2;\\n }\\n\\n &.node {\\n flex-grow: 2;\\n }\\n\\n &.namespace {\\n flex-grow: 1.2;\\n }\\n\\n &.cpu {\\n align-self: center;\\n\\n .LineProgress {\\n color: var(--blue);\\n }\\n }\\n\\n &.memory {\\n align-self: center;\\n\\n .LineProgress {\\n color: var(--magenta);\\n }\\n }\\n\\n &.warning {\\n @include table-cell-warning;\\n }\\n\\n &.status {\\n @include pod-status-colors;\\n }\\n }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://open-lens/./src/renderer/components/+workloads-pods/pod-details-list.scss?./node_modules/css-loader/dist/cjs.js??ruleSet%5B1%5D.rules%5B2%5D.use%5B1%5D!./node_modules/postcss-loader/dist/cjs.js??ruleSet%5B1%5D.rules%5B2%5D.use%5B2%5D!./node_modules/sass-loader/dist/cjs.js??ruleSet%5B1%5D.rules%5B2%5D.use%5B3%5D");
11166
11166
 
11167
11167
  /***/ }),
11168
11168
 
@@ -30087,7 +30087,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
30087
30087
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30088
30088
 
30089
30089
  "use strict";
30090
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Cluster\": () => (/* binding */ Cluster)\n/* harmony export */ });\n/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! mobx */ \"./node_modules/mobx/dist/mobx.esm.js\");\n/* harmony import */ var _ipc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../ipc */ \"./src/common/ipc/index.ts\");\n/* harmony import */ var _kubernetes_client_node__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @kubernetes/client-node */ \"./node_modules/@kubernetes/client-node/dist/index.js\");\n/* harmony import */ var _kubernetes_client_node__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_kubernetes_client_node__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _kube_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../kube-helpers */ \"./src/common/kube-helpers.ts\");\n/* harmony import */ var _rbac__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../rbac */ \"./src/common/rbac.ts\");\n/* harmony import */ var p_limit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! p-limit */ \"./node_modules/p-limit/index.js\");\n/* harmony import */ var p_limit__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(p_limit__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _cluster_types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../cluster-types */ \"./src/common/cluster-types.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils */ \"./src/common/utils/index.ts\");\n/* harmony import */ var _ipc_cluster__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../ipc/cluster */ \"./src/common/ipc/cluster.ts\");\n/* harmony import */ var assert__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! assert */ \"assert\");\n/* harmony import */ var assert__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(assert__WEBPACK_IMPORTED_MODULE_8__);\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (undefined && undefined.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\n/**\n * Cluster\n *\n * @beta\n */\nclass Cluster {\n constructor(dependencies, model, configData) {\n Object.defineProperty(this, \"dependencies\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: dependencies\n });\n /** Unique id for a cluster */\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"kubeCtl\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * Context handler\n *\n * @internal\n */\n Object.defineProperty(this, \"_contextHandler\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_proxyKubeconfigManager\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"eventsDisposer\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: (0,_utils__WEBPACK_IMPORTED_MODULE_6__.disposer)()\n });\n Object.defineProperty(this, \"activated\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: false\n });\n Object.defineProperty(this, \"resourceAccessStatuses\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: new Map()\n });\n /**\n * Kubeconfig context name\n *\n * @observable\n */\n Object.defineProperty(this, \"contextName\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * Path to kubeconfig\n *\n * @observable\n */\n Object.defineProperty(this, \"kubeConfigPath\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * @deprecated\n */\n Object.defineProperty(this, \"workspace\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * @deprecated\n */\n Object.defineProperty(this, \"workspaces\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * Kubernetes API server URL\n *\n * @observable\n */\n Object.defineProperty(this, \"apiUrl\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n }); // cluster server url\n /**\n * Is cluster online\n *\n * @observable\n */\n Object.defineProperty(this, \"online\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: false\n }); // describes if we can detect that cluster is online\n /**\n * Can user access cluster resources\n *\n * @observable\n */\n Object.defineProperty(this, \"accessible\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: false\n }); // if user is able to access cluster resources\n /**\n * Is cluster instance in usable state\n *\n * @observable\n */\n Object.defineProperty(this, \"ready\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: false\n }); // cluster is in usable state\n /**\n * Is cluster currently reconnecting\n *\n * @observable\n */\n Object.defineProperty(this, \"reconnecting\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: false\n });\n /**\n * Is cluster disconnected. False if user has selected to connect.\n *\n * @observable\n */\n Object.defineProperty(this, \"disconnected\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: true\n });\n /**\n * Does user have admin like access\n *\n * @observable\n */\n Object.defineProperty(this, \"isAdmin\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: false\n });\n /**\n * Global watch-api accessibility , e.g. \"/api/v1/services?watch=1\"\n *\n * @observable\n */\n Object.defineProperty(this, \"isGlobalWatchEnabled\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: false\n });\n /**\n * Preferences\n *\n * @observable\n */\n Object.defineProperty(this, \"preferences\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {}\n });\n /**\n * Metadata\n *\n * @observable\n */\n Object.defineProperty(this, \"metadata\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {}\n });\n /**\n * List of allowed namespaces verified via K8S::SelfSubjectAccessReview api\n *\n * @observable\n */\n Object.defineProperty(this, \"allowedNamespaces\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: []\n });\n /**\n * List of allowed resources\n *\n * @observable\n * @internal\n */\n Object.defineProperty(this, \"allowedResources\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: []\n });\n /**\n * List of accessible namespaces provided by user in the Cluster Settings\n *\n * @observable\n */\n Object.defineProperty(this, \"accessibleNamespaces\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: []\n });\n /**\n * Labels for the catalog entity\n */\n Object.defineProperty(this, \"labels\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {}\n });\n (0,mobx__WEBPACK_IMPORTED_MODULE_9__.makeObservable)(this);\n this.id = model.id;\n this.updateModel(model);\n this.apiUrl = configData.clusterServerUrl;\n // for the time being, until renderer gets its own cluster type\n this._contextHandler = this.dependencies.createContextHandler(this);\n this._proxyKubeconfigManager = this.dependencies.createKubeconfigManager(this);\n this.dependencies.logger.debug(`[CLUSTER]: Cluster init success`, {\n id: this.id,\n context: this.contextName,\n apiUrl: this.apiUrl,\n });\n }\n get contextHandler() {\n // TODO: remove these once main/renderer are seperate classes\n assert__WEBPACK_IMPORTED_MODULE_8___default()(this._contextHandler, \"contextHandler is only defined in the main environment\");\n return this._contextHandler;\n }\n get proxyKubeconfigManager() {\n // TODO: remove these once main/renderer are seperate classes\n assert__WEBPACK_IMPORTED_MODULE_8___default()(this._proxyKubeconfigManager, \"proxyKubeconfigManager is only defined in the main environment\");\n return this._proxyKubeconfigManager;\n }\n get whenReady() {\n return (0,mobx__WEBPACK_IMPORTED_MODULE_9__.when)(() => this.ready);\n }\n /**\n * Is cluster available\n *\n * @computed\n */\n get available() {\n return this.accessible && !this.disconnected;\n }\n /**\n * Cluster name\n *\n * @computed\n */\n get name() {\n return this.preferences.clusterName || this.contextName;\n }\n /**\n * The detected kubernetes distribution\n */\n get distribution() {\n var _a;\n return ((_a = this.metadata[_cluster_types__WEBPACK_IMPORTED_MODULE_5__.ClusterMetadataKey.DISTRIBUTION]) === null || _a === void 0 ? void 0 : _a.toString()) || \"unknown\";\n }\n /**\n * The detected kubernetes version\n */\n get version() {\n var _a;\n return ((_a = this.metadata[_cluster_types__WEBPACK_IMPORTED_MODULE_5__.ClusterMetadataKey.VERSION]) === null || _a === void 0 ? void 0 : _a.toString()) || \"unknown\";\n }\n /**\n * Prometheus preferences\n *\n * @computed\n * @internal\n */\n get prometheusPreferences() {\n const { prometheus, prometheusProvider } = this.preferences;\n return (0,_utils__WEBPACK_IMPORTED_MODULE_6__.toJS)({ prometheus, prometheusProvider });\n }\n /**\n * defaultNamespace preference\n *\n * @computed\n * @internal\n */\n get defaultNamespace() {\n return this.preferences.defaultNamespace;\n }\n /**\n * Update cluster data model\n *\n * @param model\n */\n updateModel(model) {\n // Note: do not assign ID as that should never be updated\n this.kubeConfigPath = model.kubeConfigPath;\n this.contextName = model.contextName;\n if (model.workspace) {\n this.workspace = model.workspace;\n }\n if (model.workspaces) {\n this.workspaces = model.workspaces;\n }\n if (model.preferences) {\n this.preferences = model.preferences;\n }\n if (model.metadata) {\n this.metadata = model.metadata;\n }\n if (model.accessibleNamespaces) {\n this.accessibleNamespaces = model.accessibleNamespaces;\n }\n if (model.labels) {\n this.labels = model.labels;\n }\n }\n /**\n * @internal\n */\n bindEvents() {\n this.dependencies.logger.info(`[CLUSTER]: bind events`, this.getMeta());\n const refreshTimer = setInterval(() => !this.disconnected && this.refresh(), 30000); // every 30s\n const refreshMetadataTimer = setInterval(() => !this.disconnected && this.refreshMetadata(), 900000); // every 15 minutes\n this.eventsDisposer.push((0,mobx__WEBPACK_IMPORTED_MODULE_9__.reaction)(() => this.getState(), state => this.pushState(state)), (0,mobx__WEBPACK_IMPORTED_MODULE_9__.reaction)(() => this.prometheusPreferences, prefs => this.contextHandler.setupPrometheus(prefs), { equals: mobx__WEBPACK_IMPORTED_MODULE_9__.comparer.structural }), () => clearInterval(refreshTimer), () => clearInterval(refreshMetadataTimer), (0,mobx__WEBPACK_IMPORTED_MODULE_9__.reaction)(() => this.defaultNamespace, () => this.recreateProxyKubeconfig()));\n }\n /**\n * @internal\n */\n async recreateProxyKubeconfig() {\n this.dependencies.logger.info(\"[CLUSTER]: Recreating proxy kubeconfig\");\n try {\n await this.proxyKubeconfigManager.clear();\n await this.getProxyKubeconfig();\n }\n catch (error) {\n this.dependencies.logger.error(`[CLUSTER]: failed to recreate proxy kubeconfig`, error);\n }\n }\n /**\n * @param force force activation\n * @internal\n */\n async activate(force = false) {\n if (this.activated && !force) {\n return this.pushState();\n }\n this.dependencies.logger.info(`[CLUSTER]: activate`, this.getMeta());\n if (!this.eventsDisposer.length) {\n this.bindEvents();\n }\n if (this.disconnected || !this.accessible) {\n try {\n this.broadcastConnectUpdate(\"Starting connection ...\");\n await this.reconnect();\n }\n catch (error) {\n this.broadcastConnectUpdate(`Failed to start connection: ${error}`, true);\n return;\n }\n }\n try {\n this.broadcastConnectUpdate(\"Refreshing connection status ...\");\n await this.refreshConnectionStatus();\n }\n catch (error) {\n this.broadcastConnectUpdate(`Failed to connection status: ${error}`, true);\n return;\n }\n if (this.accessible) {\n try {\n this.broadcastConnectUpdate(\"Refreshing cluster accessibility ...\");\n await this.refreshAccessibility();\n }\n catch (error) {\n this.broadcastConnectUpdate(`Failed to refresh accessibility: ${error}`, true);\n return;\n }\n // download kubectl in background, so it's not blocking dashboard\n this.ensureKubectl()\n .catch(error => this.dependencies.logger.warn(`[CLUSTER]: failed to download kubectl for clusterId=${this.id}`, error));\n this.broadcastConnectUpdate(\"Connected, waiting for view to load ...\");\n }\n this.activated = true;\n this.pushState();\n }\n /**\n * @internal\n */\n async ensureKubectl() {\n var _a;\n (_a = this.kubeCtl) !== null && _a !== void 0 ? _a : (this.kubeCtl = this.dependencies.createKubectl(this.version));\n await this.kubeCtl.ensureKubectl();\n return this.kubeCtl;\n }\n /**\n * @internal\n */\n async reconnect() {\n var _a;\n this.dependencies.logger.info(`[CLUSTER]: reconnect`, this.getMeta());\n await ((_a = this.contextHandler) === null || _a === void 0 ? void 0 : _a.restartServer());\n this.disconnected = false;\n }\n /**\n * @internal\n */\n disconnect() {\n var _a;\n if (this.disconnected) {\n return void this.dependencies.logger.debug(\"[CLUSTER]: already disconnected\", { id: this.id });\n }\n this.dependencies.logger.info(`[CLUSTER]: disconnecting`, { id: this.id });\n this.eventsDisposer();\n (_a = this.contextHandler) === null || _a === void 0 ? void 0 : _a.stopServer();\n this.disconnected = true;\n this.online = false;\n this.accessible = false;\n this.ready = false;\n this.activated = false;\n this.allowedNamespaces = [];\n this.resourceAccessStatuses.clear();\n this.pushState();\n this.dependencies.logger.info(`[CLUSTER]: disconnected`, { id: this.id });\n }\n /**\n * @internal\n * @param opts refresh options\n */\n async refresh(opts = {}) {\n this.dependencies.logger.info(`[CLUSTER]: refresh`, this.getMeta());\n await this.refreshConnectionStatus();\n if (this.accessible) {\n await this.refreshAccessibility();\n if (opts.refreshMetadata) {\n this.refreshMetadata();\n }\n }\n this.pushState();\n }\n /**\n * @internal\n */\n async refreshMetadata() {\n this.dependencies.logger.info(`[CLUSTER]: refreshMetadata`, this.getMeta());\n const metadata = await this.dependencies.detectorRegistry.detectForCluster(this);\n const existingMetadata = this.metadata;\n this.metadata = Object.assign(existingMetadata, metadata);\n }\n /**\n * @internal\n */\n async refreshAccessibility() {\n const proxyConfig = await this.getProxyKubeconfig();\n const canI = this.dependencies.createAuthorizationReview(proxyConfig);\n this.isAdmin = await canI({\n namespace: \"kube-system\",\n resource: \"*\",\n verb: \"create\",\n });\n this.isGlobalWatchEnabled = await canI({\n verb: \"watch\",\n resource: \"*\",\n });\n this.allowedNamespaces = await this.getAllowedNamespaces(proxyConfig);\n this.allowedResources = await this.getAllowedResources(canI);\n this.ready = true;\n }\n /**\n * @internal\n */\n async refreshConnectionStatus() {\n const connectionStatus = await this.getConnectionStatus();\n this.online = connectionStatus > _cluster_types__WEBPACK_IMPORTED_MODULE_5__.ClusterStatus.Offline;\n this.accessible = connectionStatus == _cluster_types__WEBPACK_IMPORTED_MODULE_5__.ClusterStatus.AccessGranted;\n }\n async getKubeconfig() {\n const { config } = await (0,_kube_helpers__WEBPACK_IMPORTED_MODULE_2__.loadConfigFromFile)(this.kubeConfigPath);\n return config;\n }\n /**\n * @internal\n */\n async getProxyKubeconfig() {\n const proxyKCPath = await this.getProxyKubeconfigPath();\n const { config } = await (0,_kube_helpers__WEBPACK_IMPORTED_MODULE_2__.loadConfigFromFile)(proxyKCPath);\n return config;\n }\n /**\n * @internal\n */\n async getProxyKubeconfigPath() {\n return this.proxyKubeconfigManager.getPath();\n }\n async getConnectionStatus() {\n try {\n const versionDetector = this.dependencies.createVersionDetector(this);\n const versionData = await versionDetector.detect();\n this.metadata.version = versionData.value;\n return _cluster_types__WEBPACK_IMPORTED_MODULE_5__.ClusterStatus.AccessGranted;\n }\n catch (error) {\n this.dependencies.logger.error(`[CLUSTER]: Failed to connect to \"${this.contextName}\": ${error}`);\n if ((0,_utils__WEBPACK_IMPORTED_MODULE_6__.isRequestError)(error)) {\n if (error.statusCode) {\n if (error.statusCode >= 400 && error.statusCode < 500) {\n this.broadcastConnectUpdate(\"Invalid credentials\", true);\n return _cluster_types__WEBPACK_IMPORTED_MODULE_5__.ClusterStatus.AccessDenied;\n }\n const message = String(error.error || error.message) || String(error);\n this.broadcastConnectUpdate(message, true);\n return _cluster_types__WEBPACK_IMPORTED_MODULE_5__.ClusterStatus.Offline;\n }\n if (error.failed === true) {\n if (error.timedOut === true) {\n this.broadcastConnectUpdate(\"Connection timed out\", true);\n return _cluster_types__WEBPACK_IMPORTED_MODULE_5__.ClusterStatus.Offline;\n }\n this.broadcastConnectUpdate(\"Failed to fetch credentials\", true);\n return _cluster_types__WEBPACK_IMPORTED_MODULE_5__.ClusterStatus.AccessDenied;\n }\n const message = String(error.error || error.message) || String(error);\n this.broadcastConnectUpdate(message, true);\n }\n else {\n this.broadcastConnectUpdate(\"Unknown error has occurred\", true);\n }\n return _cluster_types__WEBPACK_IMPORTED_MODULE_5__.ClusterStatus.Offline;\n }\n }\n toJSON() {\n return (0,_utils__WEBPACK_IMPORTED_MODULE_6__.toJS)({\n id: this.id,\n contextName: this.contextName,\n kubeConfigPath: this.kubeConfigPath,\n workspace: this.workspace,\n workspaces: this.workspaces,\n preferences: this.preferences,\n metadata: this.metadata,\n accessibleNamespaces: this.accessibleNamespaces,\n labels: this.labels,\n });\n }\n /**\n * Serializable cluster-state used for sync btw main <-> renderer\n */\n getState() {\n return (0,_utils__WEBPACK_IMPORTED_MODULE_6__.toJS)({\n apiUrl: this.apiUrl,\n online: this.online,\n ready: this.ready,\n disconnected: this.disconnected,\n accessible: this.accessible,\n isAdmin: this.isAdmin,\n allowedNamespaces: this.allowedNamespaces,\n allowedResources: this.allowedResources,\n isGlobalWatchEnabled: this.isGlobalWatchEnabled,\n });\n }\n /**\n * @internal\n * @param state cluster state\n */\n setState(state) {\n Object.assign(this, state);\n }\n /**\n * @internal\n * @param state cluster state\n */\n pushState(state = this.getState()) {\n this.dependencies.logger.silly(`[CLUSTER]: push-state`, state);\n (0,_ipc__WEBPACK_IMPORTED_MODULE_0__.broadcastMessage)(\"cluster:state\", this.id, state);\n }\n // get cluster system meta, e.g. use in \"logger\"\n getMeta() {\n return {\n id: this.id,\n name: this.contextName,\n ready: this.ready,\n online: this.online,\n accessible: this.accessible,\n disconnected: this.disconnected,\n };\n }\n /**\n * broadcast an authentication update concerning this cluster\n * @internal\n */\n broadcastConnectUpdate(message, isError = false) {\n const update = { message, isError };\n this.dependencies.logger.debug(`[CLUSTER]: broadcasting connection update`, { ...update, meta: this.getMeta() });\n (0,_ipc__WEBPACK_IMPORTED_MODULE_0__.broadcastMessage)(`cluster:${this.id}:connection-update`, update);\n }\n async getAllowedNamespaces(proxyConfig) {\n if (this.accessibleNamespaces.length) {\n return this.accessibleNamespaces;\n }\n try {\n const listNamespaces = this.dependencies.createListNamespaces(proxyConfig);\n return await listNamespaces();\n }\n catch (error) {\n const ctx = proxyConfig.getContextObject(this.contextName);\n const namespaceList = [ctx === null || ctx === void 0 ? void 0 : ctx.namespace].filter(_utils__WEBPACK_IMPORTED_MODULE_6__.isDefined);\n if (namespaceList.length === 0 && error instanceof _kubernetes_client_node__WEBPACK_IMPORTED_MODULE_1__.HttpError && error.statusCode === 403) {\n const { response } = error;\n this.dependencies.logger.info(\"[CLUSTER]: listing namespaces is forbidden, broadcasting\", { clusterId: this.id, error: response.body });\n (0,_ipc__WEBPACK_IMPORTED_MODULE_0__.broadcastMessage)(_ipc_cluster__WEBPACK_IMPORTED_MODULE_7__.clusterListNamespaceForbiddenChannel, this.id);\n }\n return namespaceList;\n }\n }\n async getAllowedResources(canI) {\n try {\n if (!this.allowedNamespaces.length) {\n return [];\n }\n const resources = _rbac__WEBPACK_IMPORTED_MODULE_3__.apiResources.filter((resource) => this.resourceAccessStatuses.get(resource) === undefined);\n const apiLimit = p_limit__WEBPACK_IMPORTED_MODULE_4___default()(5); // 5 concurrent api requests\n const requests = [];\n for (const apiResource of resources) {\n requests.push(apiLimit(async () => {\n for (const namespace of this.allowedNamespaces.slice(0, 10)) {\n if (!this.resourceAccessStatuses.get(apiResource)) {\n const result = await canI({\n resource: apiResource.apiName,\n group: apiResource.group,\n verb: \"list\",\n namespace,\n });\n this.resourceAccessStatuses.set(apiResource, result);\n }\n }\n }));\n }\n await Promise.all(requests);\n return _rbac__WEBPACK_IMPORTED_MODULE_3__.apiResources.filter((resource) => this.resourceAccessStatuses.get(resource))\n .map(apiResource => apiResource.apiName);\n }\n catch (error) {\n return [];\n }\n }\n isAllowedResource(kind) {\n if (kind in _rbac__WEBPACK_IMPORTED_MODULE_3__.apiResourceRecord) {\n return this.allowedResources.includes(kind);\n }\n const apiResource = _rbac__WEBPACK_IMPORTED_MODULE_3__.apiResources.find(resource => resource.kind === kind);\n if (apiResource) {\n return this.allowedResources.includes(apiResource.apiName);\n }\n return true; // allowed by default for other resources\n }\n isMetricHidden(resource) {\n var _a;\n return Boolean((_a = this.preferences.hiddenMetrics) === null || _a === void 0 ? void 0 : _a.includes(resource));\n }\n get nodeShellImage() {\n var _a;\n return ((_a = this.preferences) === null || _a === void 0 ? void 0 : _a.nodeShellImage) || _cluster_types__WEBPACK_IMPORTED_MODULE_5__.initialNodeShellImage;\n }\n get imagePullSecret() {\n var _a;\n return (_a = this.preferences) === null || _a === void 0 ? void 0 : _a.imagePullSecret;\n }\n isInLocalKubeconfig() {\n return this.kubeConfigPath.startsWith(this.dependencies.directoryForKubeConfigs);\n }\n}\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.observable,\n __metadata(\"design:type\", String)\n], Cluster.prototype, \"contextName\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.observable,\n __metadata(\"design:type\", String)\n], Cluster.prototype, \"kubeConfigPath\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.observable,\n __metadata(\"design:type\", String)\n], Cluster.prototype, \"workspace\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.observable,\n __metadata(\"design:type\", Array)\n], Cluster.prototype, \"workspaces\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.observable,\n __metadata(\"design:type\", String)\n], Cluster.prototype, \"apiUrl\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"online\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"accessible\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"ready\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"reconnecting\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"disconnected\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"isAdmin\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"isGlobalWatchEnabled\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"preferences\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"metadata\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.observable,\n __metadata(\"design:type\", Array)\n], Cluster.prototype, \"allowedNamespaces\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.observable,\n __metadata(\"design:type\", Array)\n], Cluster.prototype, \"allowedResources\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.observable,\n __metadata(\"design:type\", Array)\n], Cluster.prototype, \"accessibleNamespaces\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"labels\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.computed,\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [])\n], Cluster.prototype, \"available\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.computed,\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [])\n], Cluster.prototype, \"name\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.computed,\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], Cluster.prototype, \"distribution\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.computed,\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], Cluster.prototype, \"version\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.computed,\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [])\n], Cluster.prototype, \"prometheusPreferences\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.computed,\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [])\n], Cluster.prototype, \"defaultNamespace\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], Cluster.prototype, \"updateModel\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", Promise)\n], Cluster.prototype, \"activate\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", Promise)\n], Cluster.prototype, \"reconnect\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n], Cluster.prototype, \"disconnect\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", Promise)\n], Cluster.prototype, \"refresh\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", Promise)\n], Cluster.prototype, \"refreshMetadata\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", Promise)\n], Cluster.prototype, \"refreshConnectionStatus\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], Cluster.prototype, \"setState\", null);\n\n\n//# sourceURL=webpack://open-lens/./src/common/cluster/cluster.ts?");
30090
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Cluster\": () => (/* binding */ Cluster)\n/* harmony export */ });\n/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! mobx */ \"./node_modules/mobx/dist/mobx.esm.js\");\n/* harmony import */ var _kubernetes_client_node__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @kubernetes/client-node */ \"./node_modules/@kubernetes/client-node/dist/index.js\");\n/* harmony import */ var _kubernetes_client_node__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_kubernetes_client_node__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _kube_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../kube-helpers */ \"./src/common/kube-helpers.ts\");\n/* harmony import */ var _rbac__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../rbac */ \"./src/common/rbac.ts\");\n/* harmony import */ var p_limit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! p-limit */ \"./node_modules/p-limit/index.js\");\n/* harmony import */ var p_limit__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(p_limit__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _cluster_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../cluster-types */ \"./src/common/cluster-types.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils */ \"./src/common/utils/index.ts\");\n/* harmony import */ var _ipc_cluster__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../ipc/cluster */ \"./src/common/ipc/cluster.ts\");\n/* harmony import */ var assert__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! assert */ \"assert\");\n/* harmony import */ var assert__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(assert__WEBPACK_IMPORTED_MODULE_7__);\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (undefined && undefined.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n/**\n * Cluster\n *\n * @beta\n */\nclass Cluster {\n constructor(dependencies, model, configData) {\n Object.defineProperty(this, \"dependencies\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: dependencies\n });\n /** Unique id for a cluster */\n Object.defineProperty(this, \"id\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"kubeCtl\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * Context handler\n *\n * @internal\n */\n Object.defineProperty(this, \"_contextHandler\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_proxyKubeconfigManager\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"eventsDisposer\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: (0,_utils__WEBPACK_IMPORTED_MODULE_5__.disposer)()\n });\n Object.defineProperty(this, \"activated\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: false\n });\n Object.defineProperty(this, \"resourceAccessStatuses\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: new Map()\n });\n /**\n * Kubeconfig context name\n *\n * @observable\n */\n Object.defineProperty(this, \"contextName\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * Path to kubeconfig\n *\n * @observable\n */\n Object.defineProperty(this, \"kubeConfigPath\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * @deprecated\n */\n Object.defineProperty(this, \"workspace\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * @deprecated\n */\n Object.defineProperty(this, \"workspaces\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * Kubernetes API server URL\n *\n * @observable\n */\n Object.defineProperty(this, \"apiUrl\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n }); // cluster server url\n /**\n * Is cluster online\n *\n * @observable\n */\n Object.defineProperty(this, \"online\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: false\n }); // describes if we can detect that cluster is online\n /**\n * Can user access cluster resources\n *\n * @observable\n */\n Object.defineProperty(this, \"accessible\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: false\n }); // if user is able to access cluster resources\n /**\n * Is cluster instance in usable state\n *\n * @observable\n */\n Object.defineProperty(this, \"ready\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: false\n }); // cluster is in usable state\n /**\n * Is cluster currently reconnecting\n *\n * @observable\n */\n Object.defineProperty(this, \"reconnecting\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: false\n });\n /**\n * Is cluster disconnected. False if user has selected to connect.\n *\n * @observable\n */\n Object.defineProperty(this, \"disconnected\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: true\n });\n /**\n * Does user have admin like access\n *\n * @observable\n */\n Object.defineProperty(this, \"isAdmin\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: false\n });\n /**\n * Global watch-api accessibility , e.g. \"/api/v1/services?watch=1\"\n *\n * @observable\n */\n Object.defineProperty(this, \"isGlobalWatchEnabled\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: false\n });\n /**\n * Preferences\n *\n * @observable\n */\n Object.defineProperty(this, \"preferences\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {}\n });\n /**\n * Metadata\n *\n * @observable\n */\n Object.defineProperty(this, \"metadata\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {}\n });\n /**\n * List of allowed namespaces verified via K8S::SelfSubjectAccessReview api\n *\n * @observable\n */\n Object.defineProperty(this, \"allowedNamespaces\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: []\n });\n /**\n * List of allowed resources\n *\n * @observable\n * @internal\n */\n Object.defineProperty(this, \"allowedResources\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: []\n });\n /**\n * List of accessible namespaces provided by user in the Cluster Settings\n *\n * @observable\n */\n Object.defineProperty(this, \"accessibleNamespaces\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: []\n });\n /**\n * Labels for the catalog entity\n */\n Object.defineProperty(this, \"labels\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: {}\n });\n (0,mobx__WEBPACK_IMPORTED_MODULE_8__.makeObservable)(this);\n this.id = model.id;\n this.updateModel(model);\n this.apiUrl = configData.clusterServerUrl;\n // for the time being, until renderer gets its own cluster type\n this._contextHandler = this.dependencies.createContextHandler(this);\n this._proxyKubeconfigManager = this.dependencies.createKubeconfigManager(this);\n this.dependencies.logger.debug(`[CLUSTER]: Cluster init success`, {\n id: this.id,\n context: this.contextName,\n apiUrl: this.apiUrl,\n });\n }\n get contextHandler() {\n // TODO: remove these once main/renderer are seperate classes\n assert__WEBPACK_IMPORTED_MODULE_7___default()(this._contextHandler, \"contextHandler is only defined in the main environment\");\n return this._contextHandler;\n }\n get proxyKubeconfigManager() {\n // TODO: remove these once main/renderer are seperate classes\n assert__WEBPACK_IMPORTED_MODULE_7___default()(this._proxyKubeconfigManager, \"proxyKubeconfigManager is only defined in the main environment\");\n return this._proxyKubeconfigManager;\n }\n get whenReady() {\n return (0,mobx__WEBPACK_IMPORTED_MODULE_8__.when)(() => this.ready);\n }\n /**\n * Is cluster available\n *\n * @computed\n */\n get available() {\n return this.accessible && !this.disconnected;\n }\n /**\n * Cluster name\n *\n * @computed\n */\n get name() {\n return this.preferences.clusterName || this.contextName;\n }\n /**\n * The detected kubernetes distribution\n */\n get distribution() {\n var _a;\n return ((_a = this.metadata[_cluster_types__WEBPACK_IMPORTED_MODULE_4__.ClusterMetadataKey.DISTRIBUTION]) === null || _a === void 0 ? void 0 : _a.toString()) || \"unknown\";\n }\n /**\n * The detected kubernetes version\n */\n get version() {\n var _a;\n return ((_a = this.metadata[_cluster_types__WEBPACK_IMPORTED_MODULE_4__.ClusterMetadataKey.VERSION]) === null || _a === void 0 ? void 0 : _a.toString()) || \"unknown\";\n }\n /**\n * Prometheus preferences\n *\n * @computed\n * @internal\n */\n get prometheusPreferences() {\n const { prometheus, prometheusProvider } = this.preferences;\n return (0,_utils__WEBPACK_IMPORTED_MODULE_5__.toJS)({ prometheus, prometheusProvider });\n }\n /**\n * defaultNamespace preference\n *\n * @computed\n * @internal\n */\n get defaultNamespace() {\n return this.preferences.defaultNamespace;\n }\n /**\n * Update cluster data model\n *\n * @param model\n */\n updateModel(model) {\n // Note: do not assign ID as that should never be updated\n this.kubeConfigPath = model.kubeConfigPath;\n this.contextName = model.contextName;\n if (model.workspace) {\n this.workspace = model.workspace;\n }\n if (model.workspaces) {\n this.workspaces = model.workspaces;\n }\n if (model.preferences) {\n this.preferences = model.preferences;\n }\n if (model.metadata) {\n this.metadata = model.metadata;\n }\n if (model.accessibleNamespaces) {\n this.accessibleNamespaces = model.accessibleNamespaces;\n }\n if (model.labels) {\n this.labels = model.labels;\n }\n }\n /**\n * @internal\n */\n bindEvents() {\n this.dependencies.logger.info(`[CLUSTER]: bind events`, this.getMeta());\n const refreshTimer = setInterval(() => !this.disconnected && this.refresh(), 30000); // every 30s\n const refreshMetadataTimer = setInterval(() => !this.disconnected && this.refreshMetadata(), 900000); // every 15 minutes\n this.eventsDisposer.push((0,mobx__WEBPACK_IMPORTED_MODULE_8__.reaction)(() => this.getState(), state => this.pushState(state)), (0,mobx__WEBPACK_IMPORTED_MODULE_8__.reaction)(() => this.prometheusPreferences, prefs => this.contextHandler.setupPrometheus(prefs), { equals: mobx__WEBPACK_IMPORTED_MODULE_8__.comparer.structural }), () => clearInterval(refreshTimer), () => clearInterval(refreshMetadataTimer), (0,mobx__WEBPACK_IMPORTED_MODULE_8__.reaction)(() => this.defaultNamespace, () => this.recreateProxyKubeconfig()));\n }\n /**\n * @internal\n */\n async recreateProxyKubeconfig() {\n this.dependencies.logger.info(\"[CLUSTER]: Recreating proxy kubeconfig\");\n try {\n await this.proxyKubeconfigManager.clear();\n await this.getProxyKubeconfig();\n }\n catch (error) {\n this.dependencies.logger.error(`[CLUSTER]: failed to recreate proxy kubeconfig`, error);\n }\n }\n /**\n * @param force force activation\n * @internal\n */\n async activate(force = false) {\n if (this.activated && !force) {\n return this.pushState();\n }\n this.dependencies.logger.info(`[CLUSTER]: activate`, this.getMeta());\n if (!this.eventsDisposer.length) {\n this.bindEvents();\n }\n if (this.disconnected || !this.accessible) {\n try {\n this.broadcastConnectUpdate(\"Starting connection ...\");\n await this.reconnect();\n }\n catch (error) {\n this.broadcastConnectUpdate(`Failed to start connection: ${error}`, true);\n return;\n }\n }\n try {\n this.broadcastConnectUpdate(\"Refreshing connection status ...\");\n await this.refreshConnectionStatus();\n }\n catch (error) {\n this.broadcastConnectUpdate(`Failed to connection status: ${error}`, true);\n return;\n }\n if (this.accessible) {\n try {\n this.broadcastConnectUpdate(\"Refreshing cluster accessibility ...\");\n await this.refreshAccessibility();\n }\n catch (error) {\n this.broadcastConnectUpdate(`Failed to refresh accessibility: ${error}`, true);\n return;\n }\n // download kubectl in background, so it's not blocking dashboard\n this.ensureKubectl()\n .catch(error => this.dependencies.logger.warn(`[CLUSTER]: failed to download kubectl for clusterId=${this.id}`, error));\n this.broadcastConnectUpdate(\"Connected, waiting for view to load ...\");\n }\n this.activated = true;\n this.pushState();\n }\n /**\n * @internal\n */\n async ensureKubectl() {\n var _a;\n (_a = this.kubeCtl) !== null && _a !== void 0 ? _a : (this.kubeCtl = this.dependencies.createKubectl(this.version));\n await this.kubeCtl.ensureKubectl();\n return this.kubeCtl;\n }\n /**\n * @internal\n */\n async reconnect() {\n var _a;\n this.dependencies.logger.info(`[CLUSTER]: reconnect`, this.getMeta());\n await ((_a = this.contextHandler) === null || _a === void 0 ? void 0 : _a.restartServer());\n this.disconnected = false;\n }\n /**\n * @internal\n */\n disconnect() {\n var _a;\n if (this.disconnected) {\n return void this.dependencies.logger.debug(\"[CLUSTER]: already disconnected\", { id: this.id });\n }\n this.dependencies.logger.info(`[CLUSTER]: disconnecting`, { id: this.id });\n this.eventsDisposer();\n (_a = this.contextHandler) === null || _a === void 0 ? void 0 : _a.stopServer();\n this.disconnected = true;\n this.online = false;\n this.accessible = false;\n this.ready = false;\n this.activated = false;\n this.allowedNamespaces = [];\n this.resourceAccessStatuses.clear();\n this.pushState();\n this.dependencies.logger.info(`[CLUSTER]: disconnected`, { id: this.id });\n }\n /**\n * @internal\n * @param opts refresh options\n */\n async refresh(opts = {}) {\n this.dependencies.logger.info(`[CLUSTER]: refresh`, this.getMeta());\n await this.refreshConnectionStatus();\n if (this.accessible) {\n await this.refreshAccessibility();\n if (opts.refreshMetadata) {\n this.refreshMetadata();\n }\n }\n this.pushState();\n }\n /**\n * @internal\n */\n async refreshMetadata() {\n this.dependencies.logger.info(`[CLUSTER]: refreshMetadata`, this.getMeta());\n const metadata = await this.dependencies.detectorRegistry.detectForCluster(this);\n const existingMetadata = this.metadata;\n this.metadata = Object.assign(existingMetadata, metadata);\n }\n /**\n * @internal\n */\n async refreshAccessibility() {\n const proxyConfig = await this.getProxyKubeconfig();\n const canI = this.dependencies.createAuthorizationReview(proxyConfig);\n this.isAdmin = await canI({\n namespace: \"kube-system\",\n resource: \"*\",\n verb: \"create\",\n });\n this.isGlobalWatchEnabled = await canI({\n verb: \"watch\",\n resource: \"*\",\n });\n this.allowedNamespaces = await this.getAllowedNamespaces(proxyConfig);\n this.allowedResources = await this.getAllowedResources(canI);\n this.ready = true;\n }\n /**\n * @internal\n */\n async refreshConnectionStatus() {\n const connectionStatus = await this.getConnectionStatus();\n this.online = connectionStatus > _cluster_types__WEBPACK_IMPORTED_MODULE_4__.ClusterStatus.Offline;\n this.accessible = connectionStatus == _cluster_types__WEBPACK_IMPORTED_MODULE_4__.ClusterStatus.AccessGranted;\n }\n async getKubeconfig() {\n const { config } = await (0,_kube_helpers__WEBPACK_IMPORTED_MODULE_1__.loadConfigFromFile)(this.kubeConfigPath);\n return config;\n }\n /**\n * @internal\n */\n async getProxyKubeconfig() {\n const proxyKCPath = await this.getProxyKubeconfigPath();\n const { config } = await (0,_kube_helpers__WEBPACK_IMPORTED_MODULE_1__.loadConfigFromFile)(proxyKCPath);\n return config;\n }\n /**\n * @internal\n */\n async getProxyKubeconfigPath() {\n return this.proxyKubeconfigManager.getPath();\n }\n async getConnectionStatus() {\n try {\n const versionDetector = this.dependencies.createVersionDetector(this);\n const versionData = await versionDetector.detect();\n this.metadata.version = versionData.value;\n return _cluster_types__WEBPACK_IMPORTED_MODULE_4__.ClusterStatus.AccessGranted;\n }\n catch (error) {\n this.dependencies.logger.error(`[CLUSTER]: Failed to connect to \"${this.contextName}\": ${error}`);\n if ((0,_utils__WEBPACK_IMPORTED_MODULE_5__.isRequestError)(error)) {\n if (error.statusCode) {\n if (error.statusCode >= 400 && error.statusCode < 500) {\n this.broadcastConnectUpdate(\"Invalid credentials\", true);\n return _cluster_types__WEBPACK_IMPORTED_MODULE_4__.ClusterStatus.AccessDenied;\n }\n const message = String(error.error || error.message) || String(error);\n this.broadcastConnectUpdate(message, true);\n return _cluster_types__WEBPACK_IMPORTED_MODULE_4__.ClusterStatus.Offline;\n }\n if (error.failed === true) {\n if (error.timedOut === true) {\n this.broadcastConnectUpdate(\"Connection timed out\", true);\n return _cluster_types__WEBPACK_IMPORTED_MODULE_4__.ClusterStatus.Offline;\n }\n this.broadcastConnectUpdate(\"Failed to fetch credentials\", true);\n return _cluster_types__WEBPACK_IMPORTED_MODULE_4__.ClusterStatus.AccessDenied;\n }\n const message = String(error.error || error.message) || String(error);\n this.broadcastConnectUpdate(message, true);\n }\n else {\n this.broadcastConnectUpdate(\"Unknown error has occurred\", true);\n }\n return _cluster_types__WEBPACK_IMPORTED_MODULE_4__.ClusterStatus.Offline;\n }\n }\n toJSON() {\n return (0,_utils__WEBPACK_IMPORTED_MODULE_5__.toJS)({\n id: this.id,\n contextName: this.contextName,\n kubeConfigPath: this.kubeConfigPath,\n workspace: this.workspace,\n workspaces: this.workspaces,\n preferences: this.preferences,\n metadata: this.metadata,\n accessibleNamespaces: this.accessibleNamespaces,\n labels: this.labels,\n });\n }\n /**\n * Serializable cluster-state used for sync btw main <-> renderer\n */\n getState() {\n return (0,_utils__WEBPACK_IMPORTED_MODULE_5__.toJS)({\n apiUrl: this.apiUrl,\n online: this.online,\n ready: this.ready,\n disconnected: this.disconnected,\n accessible: this.accessible,\n isAdmin: this.isAdmin,\n allowedNamespaces: this.allowedNamespaces,\n allowedResources: this.allowedResources,\n isGlobalWatchEnabled: this.isGlobalWatchEnabled,\n });\n }\n /**\n * @internal\n * @param state cluster state\n */\n setState(state) {\n Object.assign(this, state);\n }\n /**\n * @internal\n * @param state cluster state\n */\n pushState(state = this.getState()) {\n this.dependencies.logger.silly(`[CLUSTER]: push-state`, state);\n this.dependencies.broadcastMessage(\"cluster:state\", this.id, state);\n }\n // get cluster system meta, e.g. use in \"logger\"\n getMeta() {\n return {\n id: this.id,\n name: this.contextName,\n ready: this.ready,\n online: this.online,\n accessible: this.accessible,\n disconnected: this.disconnected,\n };\n }\n /**\n * broadcast an authentication update concerning this cluster\n * @internal\n */\n broadcastConnectUpdate(message, isError = false) {\n const update = { message, isError };\n this.dependencies.logger.debug(`[CLUSTER]: broadcasting connection update`, { ...update, meta: this.getMeta() });\n this.dependencies.broadcastMessage(`cluster:${this.id}:connection-update`, update);\n }\n async getAllowedNamespaces(proxyConfig) {\n if (this.accessibleNamespaces.length) {\n return this.accessibleNamespaces;\n }\n try {\n const listNamespaces = this.dependencies.createListNamespaces(proxyConfig);\n return await listNamespaces();\n }\n catch (error) {\n const ctx = proxyConfig.getContextObject(this.contextName);\n const namespaceList = [ctx === null || ctx === void 0 ? void 0 : ctx.namespace].filter(_utils__WEBPACK_IMPORTED_MODULE_5__.isDefined);\n if (namespaceList.length === 0 && error instanceof _kubernetes_client_node__WEBPACK_IMPORTED_MODULE_0__.HttpError && error.statusCode === 403) {\n const { response } = error;\n this.dependencies.logger.info(\"[CLUSTER]: listing namespaces is forbidden, broadcasting\", { clusterId: this.id, error: response.body });\n this.dependencies.broadcastMessage(_ipc_cluster__WEBPACK_IMPORTED_MODULE_6__.clusterListNamespaceForbiddenChannel, this.id);\n }\n return namespaceList;\n }\n }\n async getAllowedResources(canI) {\n try {\n if (!this.allowedNamespaces.length) {\n return [];\n }\n const resources = _rbac__WEBPACK_IMPORTED_MODULE_2__.apiResources.filter((resource) => this.resourceAccessStatuses.get(resource) === undefined);\n const apiLimit = p_limit__WEBPACK_IMPORTED_MODULE_3___default()(5); // 5 concurrent api requests\n const requests = [];\n for (const apiResource of resources) {\n requests.push(apiLimit(async () => {\n for (const namespace of this.allowedNamespaces.slice(0, 10)) {\n if (!this.resourceAccessStatuses.get(apiResource)) {\n const result = await canI({\n resource: apiResource.apiName,\n group: apiResource.group,\n verb: \"list\",\n namespace,\n });\n this.resourceAccessStatuses.set(apiResource, result);\n }\n }\n }));\n }\n await Promise.all(requests);\n return _rbac__WEBPACK_IMPORTED_MODULE_2__.apiResources.filter((resource) => this.resourceAccessStatuses.get(resource))\n .map(apiResource => apiResource.apiName);\n }\n catch (error) {\n return [];\n }\n }\n isAllowedResource(kind) {\n if (kind in _rbac__WEBPACK_IMPORTED_MODULE_2__.apiResourceRecord) {\n return this.allowedResources.includes(kind);\n }\n const apiResource = _rbac__WEBPACK_IMPORTED_MODULE_2__.apiResources.find(resource => resource.kind === kind);\n if (apiResource) {\n return this.allowedResources.includes(apiResource.apiName);\n }\n return true; // allowed by default for other resources\n }\n isMetricHidden(resource) {\n var _a;\n return Boolean((_a = this.preferences.hiddenMetrics) === null || _a === void 0 ? void 0 : _a.includes(resource));\n }\n get nodeShellImage() {\n var _a;\n return ((_a = this.preferences) === null || _a === void 0 ? void 0 : _a.nodeShellImage) || _cluster_types__WEBPACK_IMPORTED_MODULE_4__.initialNodeShellImage;\n }\n get imagePullSecret() {\n var _a;\n return (_a = this.preferences) === null || _a === void 0 ? void 0 : _a.imagePullSecret;\n }\n isInLocalKubeconfig() {\n return this.kubeConfigPath.startsWith(this.dependencies.directoryForKubeConfigs);\n }\n}\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", String)\n], Cluster.prototype, \"contextName\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", String)\n], Cluster.prototype, \"kubeConfigPath\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", String)\n], Cluster.prototype, \"workspace\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", Array)\n], Cluster.prototype, \"workspaces\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", String)\n], Cluster.prototype, \"apiUrl\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"online\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"accessible\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"ready\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"reconnecting\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"disconnected\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"isAdmin\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"isGlobalWatchEnabled\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"preferences\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"metadata\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", Array)\n], Cluster.prototype, \"allowedNamespaces\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", Array)\n], Cluster.prototype, \"allowedResources\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", Array)\n], Cluster.prototype, \"accessibleNamespaces\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", Object)\n], Cluster.prototype, \"labels\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.computed,\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [])\n], Cluster.prototype, \"available\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.computed,\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [])\n], Cluster.prototype, \"name\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.computed,\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], Cluster.prototype, \"distribution\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.computed,\n __metadata(\"design:type\", String),\n __metadata(\"design:paramtypes\", [])\n], Cluster.prototype, \"version\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.computed,\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [])\n], Cluster.prototype, \"prometheusPreferences\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.computed,\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [])\n], Cluster.prototype, \"defaultNamespace\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], Cluster.prototype, \"updateModel\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", Promise)\n], Cluster.prototype, \"activate\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", Promise)\n], Cluster.prototype, \"reconnect\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n], Cluster.prototype, \"disconnect\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", Promise)\n], Cluster.prototype, \"refresh\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", Promise)\n], Cluster.prototype, \"refreshMetadata\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", Promise)\n], Cluster.prototype, \"refreshConnectionStatus\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], Cluster.prototype, \"setState\", null);\n\n\n//# sourceURL=webpack://open-lens/./src/common/cluster/cluster.ts?");
30091
30091
 
30092
30092
  /***/ }),
30093
30093
 
@@ -30318,7 +30318,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
30318
30318
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30319
30319
 
30320
30320
  "use strict";
30321
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"broadcastMainChannel\": () => (/* binding */ broadcastMainChannel),\n/* harmony export */ \"broadcastMessage\": () => (/* binding */ broadcastMessage),\n/* harmony export */ \"ipcMainHandle\": () => (/* binding */ ipcMainHandle),\n/* harmony export */ \"ipcMainOn\": () => (/* binding */ ipcMainOn),\n/* harmony export */ \"ipcRendererOn\": () => (/* binding */ ipcRendererOn)\n/* harmony export */ });\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! electron */ \"electron\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_toJS__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/toJS */ \"./src/common/utils/toJS.ts\");\n/* harmony import */ var _main_logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../main/logger */ \"./src/main/logger.ts\");\n/* harmony import */ var _cluster_frames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../cluster-frames */ \"./src/common/cluster-frames.ts\");\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\n// Inter-process communications (main <-> renderer)\n// https://www.electronjs.org/docs/api/ipc-main\n// https://www.electronjs.org/docs/api/ipc-renderer\n\n\n\n\nconst broadcastMainChannel = \"ipc:broadcast-main\";\nfunction ipcMainHandle(channel, listener) {\n electron__WEBPACK_IMPORTED_MODULE_0__.ipcMain.handle(channel, async (event, ...args) => {\n return sanitizePayload(await listener(event, ...args));\n });\n}\nfunction getSubFrames() {\n return Array.from(_cluster_frames__WEBPACK_IMPORTED_MODULE_3__.clusterFrameMap.values());\n}\nasync function broadcastMessage(channel, ...args) {\n if (electron__WEBPACK_IMPORTED_MODULE_0__.ipcRenderer) {\n return electron__WEBPACK_IMPORTED_MODULE_0__.ipcRenderer.invoke(broadcastMainChannel, channel, ...args.map(sanitizePayload));\n }\n if (!electron__WEBPACK_IMPORTED_MODULE_0__.webContents) {\n return;\n }\n electron__WEBPACK_IMPORTED_MODULE_0__.ipcMain.listeners(channel).forEach((func) => func({\n processId: undefined, frameId: undefined, sender: undefined, senderFrame: undefined,\n }, ...args));\n const subFrames = getSubFrames();\n const views = electron__WEBPACK_IMPORTED_MODULE_0__.webContents.getAllWebContents();\n if (!views || !Array.isArray(views) || views.length === 0)\n return;\n args = args.map(sanitizePayload);\n for (const view of views) {\n let viewType = \"unknown\";\n // There will be a uncaught exception if the view is destroyed.\n try {\n viewType = view.getType();\n }\n catch {\n // We can ignore the view destroyed exception as viewType is only used for logging.\n }\n // Send message to views.\n try {\n _main_logger__WEBPACK_IMPORTED_MODULE_2__[\"default\"].silly(`[IPC]: broadcasting \"${channel}\" to ${viewType}=${view.id}`, { args });\n view.send(channel, ...args);\n }\n catch (error) {\n _main_logger__WEBPACK_IMPORTED_MODULE_2__[\"default\"].error(`[IPC]: failed to send IPC message \"${channel}\" to view \"${viewType}=${view.id}\"`, { error });\n }\n // Send message to subFrames of views.\n for (const frameInfo of subFrames) {\n _main_logger__WEBPACK_IMPORTED_MODULE_2__[\"default\"].silly(`[IPC]: broadcasting \"${channel}\" to subframe \"frameInfo.processId\"=${frameInfo.processId} \"frameInfo.frameId\"=${frameInfo.frameId}`, { args });\n try {\n view.sendToFrame([frameInfo.processId, frameInfo.frameId], channel, ...args);\n }\n catch (error) {\n _main_logger__WEBPACK_IMPORTED_MODULE_2__[\"default\"].error(`[IPC]: failed to send IPC message \"${channel}\" to view \"${viewType}=${view.id}\"'s subframe \"frameInfo.processId\"=${frameInfo.processId} \"frameInfo.frameId\"=${frameInfo.frameId}`, { error: String(error) });\n }\n }\n }\n}\nfunction ipcMainOn(channel, listener) {\n electron__WEBPACK_IMPORTED_MODULE_0__.ipcMain.on(channel, listener);\n return () => electron__WEBPACK_IMPORTED_MODULE_0__.ipcMain.off(channel, listener);\n}\nfunction ipcRendererOn(channel, listener) {\n electron__WEBPACK_IMPORTED_MODULE_0__.ipcRenderer.on(channel, listener);\n return () => electron__WEBPACK_IMPORTED_MODULE_0__.ipcRenderer.off(channel, listener);\n}\n/**\n * Sanitizing data for IPC-messaging before send.\n * Removes possible observable values to avoid exceptions like \"can't clone object\".\n */\nfunction sanitizePayload(data) {\n return (0,_utils_toJS__WEBPACK_IMPORTED_MODULE_1__.toJS)(data);\n}\n\n\n//# sourceURL=webpack://open-lens/./src/common/ipc/ipc.ts?");
30321
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"broadcastMainChannel\": () => (/* binding */ broadcastMainChannel),\n/* harmony export */ \"broadcastMessage\": () => (/* binding */ broadcastMessage),\n/* harmony export */ \"ipcMainHandle\": () => (/* binding */ ipcMainHandle),\n/* harmony export */ \"ipcMainOn\": () => (/* binding */ ipcMainOn),\n/* harmony export */ \"ipcRendererOn\": () => (/* binding */ ipcRendererOn)\n/* harmony export */ });\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! electron */ \"electron\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _utils_toJS__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/toJS */ \"./src/common/utils/toJS.ts\");\n/* harmony import */ var _main_logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../main/logger */ \"./src/main/logger.ts\");\n/* harmony import */ var _cluster_frames__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../cluster-frames */ \"./src/common/cluster-frames.ts\");\n/* harmony import */ var _main_utils_channel_ipc_main_ipc_main_injectable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../main/utils/channel/ipc-main/ipc-main.injectable */ \"./src/main/utils/channel/ipc-main/ipc-main.injectable.ts\");\n/* harmony import */ var _extensions_as_legacy_globals_for_extension_api_legacy_global_di_for_extension_api__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api */ \"./src/extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api.ts\");\n/* harmony import */ var _renderer_utils_channel_ipc_renderer_injectable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../renderer/utils/channel/ipc-renderer.injectable */ \"./src/renderer/utils/channel/ipc-renderer.injectable.ts\");\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\n// Inter-process communications (main <-> renderer)\n// https://www.electronjs.org/docs/api/ipc-main\n// https://www.electronjs.org/docs/api/ipc-renderer\n\n\n\n\n\n\n\nconst broadcastMainChannel = \"ipc:broadcast-main\";\nfunction ipcMainHandle(channel, listener) {\n const di = (0,_extensions_as_legacy_globals_for_extension_api_legacy_global_di_for_extension_api__WEBPACK_IMPORTED_MODULE_5__.getLegacyGlobalDiForExtensionApi)();\n const ipcMain = di.inject(_main_utils_channel_ipc_main_ipc_main_injectable__WEBPACK_IMPORTED_MODULE_4__[\"default\"]);\n ipcMain.handle(channel, async (event, ...args) => {\n return sanitizePayload(await listener(event, ...args));\n });\n}\nfunction getSubFrames() {\n return Array.from(_cluster_frames__WEBPACK_IMPORTED_MODULE_3__.clusterFrameMap.values());\n}\nasync function broadcastMessage(channel, ...args) {\n if (electron__WEBPACK_IMPORTED_MODULE_0__.ipcRenderer) {\n return electron__WEBPACK_IMPORTED_MODULE_0__.ipcRenderer.invoke(broadcastMainChannel, channel, ...args.map(sanitizePayload));\n }\n if (!electron__WEBPACK_IMPORTED_MODULE_0__.webContents) {\n return;\n }\n electron__WEBPACK_IMPORTED_MODULE_0__.ipcMain.listeners(channel).forEach((func) => func({\n processId: undefined, frameId: undefined, sender: undefined, senderFrame: undefined,\n }, ...args));\n const subFrames = getSubFrames();\n const views = electron__WEBPACK_IMPORTED_MODULE_0__.webContents.getAllWebContents();\n if (!views || !Array.isArray(views) || views.length === 0)\n return;\n args = args.map(sanitizePayload);\n for (const view of views) {\n let viewType = \"unknown\";\n // There will be a uncaught exception if the view is destroyed.\n try {\n viewType = view.getType();\n }\n catch {\n // We can ignore the view destroyed exception as viewType is only used for logging.\n }\n // Send message to views.\n try {\n _main_logger__WEBPACK_IMPORTED_MODULE_2__[\"default\"].silly(`[IPC]: broadcasting \"${channel}\" to ${viewType}=${view.id}`, { args });\n view.send(channel, ...args);\n }\n catch (error) {\n _main_logger__WEBPACK_IMPORTED_MODULE_2__[\"default\"].error(`[IPC]: failed to send IPC message \"${channel}\" to view \"${viewType}=${view.id}\"`, { error });\n }\n // Send message to subFrames of views.\n for (const frameInfo of subFrames) {\n _main_logger__WEBPACK_IMPORTED_MODULE_2__[\"default\"].silly(`[IPC]: broadcasting \"${channel}\" to subframe \"frameInfo.processId\"=${frameInfo.processId} \"frameInfo.frameId\"=${frameInfo.frameId}`, { args });\n try {\n view.sendToFrame([frameInfo.processId, frameInfo.frameId], channel, ...args);\n }\n catch (error) {\n _main_logger__WEBPACK_IMPORTED_MODULE_2__[\"default\"].error(`[IPC]: failed to send IPC message \"${channel}\" to view \"${viewType}=${view.id}\"'s subframe \"frameInfo.processId\"=${frameInfo.processId} \"frameInfo.frameId\"=${frameInfo.frameId}`, { error: String(error) });\n }\n }\n }\n}\nfunction ipcMainOn(channel, listener) {\n const di = (0,_extensions_as_legacy_globals_for_extension_api_legacy_global_di_for_extension_api__WEBPACK_IMPORTED_MODULE_5__.getLegacyGlobalDiForExtensionApi)();\n const ipcMain = di.inject(_main_utils_channel_ipc_main_ipc_main_injectable__WEBPACK_IMPORTED_MODULE_4__[\"default\"]);\n ipcMain.on(channel, listener);\n return () => ipcMain.off(channel, listener);\n}\nfunction ipcRendererOn(channel, listener) {\n const di = (0,_extensions_as_legacy_globals_for_extension_api_legacy_global_di_for_extension_api__WEBPACK_IMPORTED_MODULE_5__.getLegacyGlobalDiForExtensionApi)();\n const ipcRenderer = di.inject(_renderer_utils_channel_ipc_renderer_injectable__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n ipcRenderer.on(channel, listener);\n return () => ipcRenderer.off(channel, listener);\n}\n/**\n * Sanitizing data for IPC-messaging before send.\n * Removes possible observable values to avoid exceptions like \"can't clone object\".\n */\nfunction sanitizePayload(data) {\n return (0,_utils_toJS__WEBPACK_IMPORTED_MODULE_1__.toJS)(data);\n}\n\n\n//# sourceURL=webpack://open-lens/./src/common/ipc/ipc.ts?");
30322
30322
 
30323
30323
  /***/ }),
30324
30324
 
@@ -31275,7 +31275,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
31275
31275
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31276
31276
 
31277
31277
  "use strict";
31278
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"KubeObjectStore\": () => (/* binding */ KubeObjectStore)\n/* harmony export */ });\n/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! mobx */ \"./node_modules/mobx/dist/mobx.esm.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ \"./src/common/utils/index.ts\");\n/* harmony import */ var _kube_object__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./kube-object */ \"./src/common/k8s-api/kube-object.ts\");\n/* harmony import */ var _item_store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../item.store */ \"./src/common/item.store.ts\");\n/* harmony import */ var _kube_api_parse__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./kube-api-parse */ \"./src/common/k8s-api/kube-api-parse.ts\");\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../logger */ \"./src/common/logger.ts\");\n/* harmony import */ var assert__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! assert */ \"assert\");\n/* harmony import */ var assert__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(assert__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _utils_objects__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/objects */ \"./src/common/utils/objects.ts\");\n/* harmony import */ var abort_controller__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! abort-controller */ \"./node_modules/abort-controller/browser.js\");\n/* harmony import */ var abort_controller__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(abort_controller__WEBPACK_IMPORTED_MODULE_7__);\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (undefined && undefined.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\nclass KubeObjectStore extends _item_store__WEBPACK_IMPORTED_MODULE_2__.ItemStore {\n constructor(api, opts) {\n var _a;\n super();\n Object.defineProperty(this, \"api\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"limit\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"bufferSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"loadedNamespaces\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: undefined\n });\n // collect items from watch-api events to avoid UI blowing up with huge streams of data\n Object.defineProperty(this, \"eventsBuffer\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: mobx__WEBPACK_IMPORTED_MODULE_8__.observable.array([], { deep: false })\n });\n if (api) {\n this.api = api;\n }\n this.limit = opts === null || opts === void 0 ? void 0 : opts.limit;\n this.bufferSize = (_a = opts === null || opts === void 0 ? void 0 : opts.bufferSize) !== null && _a !== void 0 ? _a : 50000;\n (0,mobx__WEBPACK_IMPORTED_MODULE_8__.makeObservable)(this);\n (0,_utils__WEBPACK_IMPORTED_MODULE_0__.autoBind)(this);\n this.bindWatchEventsUpdater();\n }\n get contextReady() {\n return (0,mobx__WEBPACK_IMPORTED_MODULE_8__.when)(() => Boolean(this.context));\n }\n get namespacesReady() {\n return (0,mobx__WEBPACK_IMPORTED_MODULE_8__.when)(() => Boolean(this.loadedNamespaces));\n }\n get context() {\n return KubeObjectStore.defaultContext.get();\n }\n // TODO: Circular dependency: KubeObjectStore -> ClusterFrameContext -> NamespaceStore -> KubeObjectStore\n get contextItems() {\n var _a, _b;\n const namespaces = (_b = (_a = this.context) === null || _a === void 0 ? void 0 : _a.contextNamespaces) !== null && _b !== void 0 ? _b : [];\n return this.items.filter(item => {\n const itemNamespace = item.getNs();\n return !itemNamespace /* cluster-wide */ || namespaces.includes(itemNamespace);\n });\n }\n getTotalCount() {\n return this.contextItems.length;\n }\n get query() {\n const { limit } = this;\n if (!limit) {\n return {};\n }\n return { limit };\n }\n getAllByNs(namespace, strict = false) {\n const namespaces = [namespace].flat();\n if (namespaces.length) {\n return this.items.filter(item => (0,_utils__WEBPACK_IMPORTED_MODULE_0__.includes)(namespaces, item.getNs()));\n }\n if (!strict) {\n return this.items;\n }\n return [];\n }\n getById(id) {\n return this.items.find(item => item.getId() === id);\n }\n getByName(name, namespace) {\n return this.items.find(item => {\n return item.getName() === name && (namespace ? item.getNs() === namespace : true);\n });\n }\n getByPath(path) {\n return this.items.find(item => item.selfLink === path);\n }\n getByLabel(labels) {\n if (Array.isArray(labels)) {\n return this.items.filter((item) => {\n const itemLabels = item.getLabels();\n return labels.every(label => itemLabels.includes(label));\n });\n }\n else {\n return this.items.filter((item) => {\n const itemLabels = item.metadata.labels || {};\n return (0,_utils_objects__WEBPACK_IMPORTED_MODULE_6__.entries)(labels)\n .every(([key, value]) => itemLabels[key] === value);\n });\n }\n }\n async loadItems({ namespaces, reqInit, onLoadFailure }) {\n var _a, _b, _c, _d, _e, _f;\n if (!((_b = (_a = this.context) === null || _a === void 0 ? void 0 : _a.cluster) === null || _b === void 0 ? void 0 : _b.isAllowedResource(this.api.kind))) {\n return [];\n }\n const isLoadingAll = ((_c = this.context.allNamespaces) === null || _c === void 0 ? void 0 : _c.length) > 1\n && this.context.cluster.accessibleNamespaces.length === 0\n && this.context.allNamespaces.every(ns => namespaces.includes(ns));\n if (!this.api.isNamespaced || isLoadingAll) {\n if (this.api.isNamespaced) {\n this.loadedNamespaces = [];\n }\n const res = this.api.list({ reqInit }, this.query);\n if (onLoadFailure) {\n try {\n return (_d = await res) !== null && _d !== void 0 ? _d : [];\n }\n catch (error) {\n onLoadFailure(((0,_utils__WEBPACK_IMPORTED_MODULE_0__.isRequestError)(error)\n ? error.message || error.toString()\n : \"Unknown error\"));\n // reset the store because we are loading all, so that nothing is displayed\n this.items.clear();\n this.selectedItemsIds.clear();\n return [];\n }\n }\n return (_e = await res) !== null && _e !== void 0 ? _e : [];\n }\n this.loadedNamespaces = namespaces;\n const results = await Promise.allSettled(namespaces.map(namespace => this.api.list({ namespace, reqInit }, this.query)));\n const res = [];\n for (const result of results) {\n switch (result.status) {\n case \"fulfilled\":\n res.push(...(_f = result.value) !== null && _f !== void 0 ? _f : []);\n break;\n case \"rejected\":\n if (onLoadFailure) {\n onLoadFailure(result.reason.message || result.reason);\n }\n else {\n // if onLoadFailure is not provided then preserve old behaviour\n throw result.reason;\n }\n }\n }\n return res;\n }\n filterItemsOnLoad(items) {\n return items;\n }\n async loadAll({ namespaces, merge = true, reqInit, onLoadFailure } = {}) {\n const context = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.waitUntilDefined)(() => this.context);\n namespaces !== null && namespaces !== void 0 ? namespaces : (namespaces = context.contextNamespaces);\n this.isLoading = true;\n try {\n const items = await this.loadItems({ namespaces, reqInit, onLoadFailure });\n this.mergeItems(items, { merge, namespaces });\n this.isLoaded = true;\n this.failedLoading = false;\n return items;\n }\n catch (error) {\n console.warn(\"[KubeObjectStore] loadAll failed\", this.api.apiBase, error);\n this.resetOnError(error);\n this.failedLoading = true;\n }\n finally {\n this.isLoading = false;\n }\n return undefined;\n }\n async reloadAll(opts = {}) {\n const { force = false, ...loadingOptions } = opts;\n if (this.isLoading || (this.isLoaded && !force)) {\n return undefined;\n }\n return this.loadAll(loadingOptions);\n }\n mergeItems(partialItems, { merge = true, updateStore = true, sort = true, filter = true, namespaces }) {\n let items = partialItems;\n // update existing items\n if (merge && this.api.isNamespaced) {\n const ns = new Set(namespaces);\n items = [\n ...this.items.filter(item => !ns.has(item.getNs())),\n ...partialItems,\n ];\n }\n if (filter)\n items = this.filterItemsOnLoad(items);\n if (sort)\n items = this.sortItems(items);\n if (updateStore)\n this.items.replace(items);\n return items;\n }\n resetOnError(error) {\n if (error)\n this.reset();\n }\n async loadItem(params) {\n return this.api.get(params);\n }\n async load(params) {\n const { name, namespace } = params;\n let item = this.getByName(name, namespace);\n if (!item) {\n item = await this.loadItem(params);\n assert__WEBPACK_IMPORTED_MODULE_5___default()(item, \"Failed to load item from kube\");\n const newItems = this.sortItems([...this.items, item]);\n this.items.replace(newItems);\n }\n return item;\n }\n async loadFromPath(resourcePath) {\n const { namespace, name } = (0,_kube_api_parse__WEBPACK_IMPORTED_MODULE_3__.parseKubeApi)(resourcePath);\n assert__WEBPACK_IMPORTED_MODULE_5___default()(name, \"name must be part of resourcePath\");\n return this.load({ name, namespace });\n }\n async createItem(params, data) {\n return this.api.create(params, data);\n }\n async create(params, data) {\n const newItem = await this.createItem(params, data);\n assert__WEBPACK_IMPORTED_MODULE_5___default()(newItem, \"Failed to create item from kube\");\n const items = this.sortItems([...this.items, newItem]);\n this.items.replace(items);\n return newItem;\n }\n postUpdate(newItem) {\n const index = this.items.findIndex(item => item.getId() === newItem.getId());\n if (index < 0) {\n this.items.push(newItem);\n }\n else {\n this.items[index] = newItem;\n }\n return newItem;\n }\n async patch(item, patch) {\n const rawItem = await this.api.patch({\n name: item.getName(), namespace: item.getNs(),\n }, patch, \"json\");\n assert__WEBPACK_IMPORTED_MODULE_5___default()(rawItem, `Failed to patch ${item.getScopedName()} of ${item.kind} ${item.apiVersion}`);\n return this.postUpdate(rawItem);\n }\n async update(item, data) {\n const rawItem = await this.api.update({\n name: item.getName(),\n namespace: item.getNs(),\n }, data);\n assert__WEBPACK_IMPORTED_MODULE_5___default()(rawItem, `Failed to update ${item.getScopedName()} of ${item.kind} ${item.apiVersion}`);\n return this.postUpdate(rawItem);\n }\n async remove(item) {\n await this.api.delete({ name: item.getName(), namespace: item.getNs() });\n this.selectedItemsIds.delete(item.getId());\n }\n async removeSelectedItems() {\n await Promise.all(this.selectedItems.map(this.remove));\n }\n async removeItems(items) {\n await Promise.all(items.map(this.remove));\n }\n bindWatchEventsUpdater(delay = 1000) {\n (0,mobx__WEBPACK_IMPORTED_MODULE_8__.reaction)(() => this.eventsBuffer.length, this.updateFromEventsBuffer, {\n delay,\n });\n }\n subscribe({ onLoadFailure, abortController = new abort_controller__WEBPACK_IMPORTED_MODULE_7__.AbortController() } = {}) {\n if (this.api.isNamespaced) {\n Promise.race([\n (0,_utils__WEBPACK_IMPORTED_MODULE_0__.rejectPromiseBy)(abortController.signal),\n Promise.all([\n (0,_utils__WEBPACK_IMPORTED_MODULE_0__.waitUntilDefined)(() => this.context),\n this.namespacesReady,\n ]),\n ])\n .then(([context]) => {\n var _a;\n assert__WEBPACK_IMPORTED_MODULE_5___default()(this.loadedNamespaces);\n if (((_a = context.cluster) === null || _a === void 0 ? void 0 : _a.isGlobalWatchEnabled) && this.loadedNamespaces.length === 0) {\n return this.watchNamespace(\"\", abortController, { onLoadFailure });\n }\n for (const namespace of this.loadedNamespaces) {\n this.watchNamespace(namespace, abortController, { onLoadFailure });\n }\n })\n .catch(_utils__WEBPACK_IMPORTED_MODULE_0__.noop); // ignore DOMExceptions\n }\n else {\n this.watchNamespace(\"\", abortController, { onLoadFailure });\n }\n return () => abortController.abort();\n }\n watchNamespace(namespace, abortController, opts) {\n if (!this.api.getResourceVersion(namespace)) {\n return;\n }\n let timedRetry;\n const watch = () => this.api.watch({\n namespace,\n abortController,\n callback,\n });\n // TODO: upgrade node-fetch once we are starting to use ES modules\n const signal = abortController.signal;\n const callback = (data, error) => {\n if (!this.isLoaded || (error === null || error === void 0 ? void 0 : error.type) === \"aborted\")\n return;\n if (error instanceof Response) {\n if (error.status === 404 || error.status === 401) {\n // api has gone, or credentials are not permitted, let's not retry\n return;\n }\n // not sure what to do, best to retry\n clearTimeout(timedRetry);\n timedRetry = setTimeout(watch, 5000);\n }\n else if (error instanceof _kube_object__WEBPACK_IMPORTED_MODULE_1__.KubeStatus && error.code === 410) {\n clearTimeout(timedRetry);\n // resourceVersion has gone, let's try to reload\n timedRetry = setTimeout(() => {\n (namespace\n ? this.loadAll({ namespaces: [namespace], reqInit: { signal }, ...opts })\n : this.loadAll({ merge: false, reqInit: { signal }, ...opts })).then(watch);\n }, 1000);\n }\n else if (error) { // not sure what to do, best to retry\n clearTimeout(timedRetry);\n timedRetry = setTimeout(watch, 5000);\n }\n if (data) {\n this.eventsBuffer.push(data);\n }\n };\n signal.addEventListener(\"abort\", () => clearTimeout(timedRetry));\n watch();\n }\n updateFromEventsBuffer() {\n var _a;\n const items = this.getItems();\n for (const event of this.eventsBuffer.clear()) {\n if (event.type === \"ERROR\") {\n continue;\n }\n try {\n const { type, object } = event;\n if (!((_a = object.metadata) === null || _a === void 0 ? void 0 : _a.uid)) {\n _logger__WEBPACK_IMPORTED_MODULE_4__[\"default\"].warn(\"[KUBE-STORE]: watch event did not have defined .metadata.uid, skipping\", { event });\n // Other parts of the code will break if this happens\n continue;\n }\n const index = items.findIndex(item => item.getId() === object.metadata.uid);\n const item = items[index];\n switch (type) {\n case \"ADDED\":\n // fallthrough\n case \"MODIFIED\": {\n const newItem = new this.api.objectConstructor(object);\n if (!item) {\n items.push(newItem);\n }\n else {\n items[index] = newItem;\n }\n break;\n }\n case \"DELETED\":\n if (item) {\n items.splice(index, 1);\n }\n break;\n }\n }\n catch (error) {\n _logger__WEBPACK_IMPORTED_MODULE_4__[\"default\"].error(\"[KUBE-STORE]: failed to handle event from watch buffer\", { error, event });\n }\n }\n // update items\n this.items.replace(this.sortItems(items.slice(-this.bufferSize)));\n }\n}\nObject.defineProperty(KubeObjectStore, \"defaultContext\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: mobx__WEBPACK_IMPORTED_MODULE_8__.observable.box()\n}); // TODO: support multiple cluster contexts\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", Object)\n], KubeObjectStore.prototype, \"loadedNamespaces\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.computed,\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [])\n], KubeObjectStore.prototype, \"contextItems\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", Promise)\n], KubeObjectStore.prototype, \"loadAll\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", Promise)\n], KubeObjectStore.prototype, \"reloadAll\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Array, Object]),\n __metadata(\"design:returntype\", Array)\n], KubeObjectStore.prototype, \"mergeItems\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", Promise)\n], KubeObjectStore.prototype, \"load\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [String]),\n __metadata(\"design:returntype\", Promise)\n], KubeObjectStore.prototype, \"loadFromPath\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n], KubeObjectStore.prototype, \"updateFromEventsBuffer\", null);\n\n\n//# sourceURL=webpack://open-lens/./src/common/k8s-api/kube-object.store.ts?");
31278
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"KubeObjectStore\": () => (/* binding */ KubeObjectStore)\n/* harmony export */ });\n/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! mobx */ \"./node_modules/mobx/dist/mobx.esm.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ \"./src/common/utils/index.ts\");\n/* harmony import */ var _kube_object__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./kube-object */ \"./src/common/k8s-api/kube-object.ts\");\n/* harmony import */ var _item_store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../item.store */ \"./src/common/item.store.ts\");\n/* harmony import */ var _kube_api_parse__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./kube-api-parse */ \"./src/common/k8s-api/kube-api-parse.ts\");\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../logger */ \"./src/common/logger.ts\");\n/* harmony import */ var assert__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! assert */ \"assert\");\n/* harmony import */ var assert__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(assert__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _utils_objects__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/objects */ \"./src/common/utils/objects.ts\");\n/* harmony import */ var abort_controller__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! abort-controller */ \"./node_modules/abort-controller/browser.js\");\n/* harmony import */ var abort_controller__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(abort_controller__WEBPACK_IMPORTED_MODULE_7__);\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (undefined && undefined.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\nclass KubeObjectStore extends _item_store__WEBPACK_IMPORTED_MODULE_2__.ItemStore {\n constructor(api, opts) {\n var _a;\n super();\n Object.defineProperty(this, \"api\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"limit\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"bufferSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"loadedNamespaces\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: undefined\n });\n // collect items from watch-api events to avoid UI blowing up with huge streams of data\n Object.defineProperty(this, \"eventsBuffer\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: mobx__WEBPACK_IMPORTED_MODULE_8__.observable.array([], { deep: false })\n });\n if (api) {\n this.api = api;\n }\n this.limit = opts === null || opts === void 0 ? void 0 : opts.limit;\n this.bufferSize = (_a = opts === null || opts === void 0 ? void 0 : opts.bufferSize) !== null && _a !== void 0 ? _a : 50000;\n (0,mobx__WEBPACK_IMPORTED_MODULE_8__.makeObservable)(this);\n (0,_utils__WEBPACK_IMPORTED_MODULE_0__.autoBind)(this);\n this.bindWatchEventsUpdater();\n }\n get contextReady() {\n return (0,mobx__WEBPACK_IMPORTED_MODULE_8__.when)(() => Boolean(this.context));\n }\n get namespacesReady() {\n return (0,mobx__WEBPACK_IMPORTED_MODULE_8__.when)(() => Boolean(this.loadedNamespaces));\n }\n get context() {\n return KubeObjectStore.defaultContext.get();\n }\n // TODO: Circular dependency: KubeObjectStore -> ClusterFrameContext -> NamespaceStore -> KubeObjectStore\n get contextItems() {\n var _a, _b;\n const namespaces = (_b = (_a = this.context) === null || _a === void 0 ? void 0 : _a.contextNamespaces) !== null && _b !== void 0 ? _b : [];\n return this.items.filter(item => {\n const itemNamespace = item.getNs();\n return !itemNamespace /* cluster-wide */ || namespaces.includes(itemNamespace);\n });\n }\n getTotalCount() {\n return this.contextItems.length;\n }\n get query() {\n const { limit } = this;\n if (!limit) {\n return {};\n }\n return { limit };\n }\n getAllByNs(namespace, strict = false) {\n const namespaces = [namespace].flat();\n if (namespaces.length) {\n return this.items.filter(item => (0,_utils__WEBPACK_IMPORTED_MODULE_0__.includes)(namespaces, item.getNs()));\n }\n if (!strict) {\n return this.items;\n }\n return [];\n }\n getById(id) {\n return this.items.find(item => item.getId() === id);\n }\n getByName(name, namespace) {\n return this.items.find(item => {\n return item.getName() === name && (namespace ? item.getNs() === namespace : true);\n });\n }\n getByPath(path) {\n return this.items.find(item => item.selfLink === path);\n }\n getByLabel(labels) {\n if (Array.isArray(labels)) {\n return this.items.filter((item) => {\n const itemLabels = item.getLabels();\n return labels.every(label => itemLabels.includes(label));\n });\n }\n else {\n return this.items.filter((item) => {\n const itemLabels = item.metadata.labels || {};\n return (0,_utils_objects__WEBPACK_IMPORTED_MODULE_6__.entries)(labels)\n .every(([key, value]) => itemLabels[key] === value);\n });\n }\n }\n async loadItems({ namespaces, reqInit, onLoadFailure }) {\n var _a, _b, _c, _d, _e, _f;\n if (!((_b = (_a = this.context) === null || _a === void 0 ? void 0 : _a.cluster) === null || _b === void 0 ? void 0 : _b.isAllowedResource(this.api.kind))) {\n return [];\n }\n const isLoadingAll = ((_c = this.context.allNamespaces) === null || _c === void 0 ? void 0 : _c.length) > 1\n && this.context.cluster.accessibleNamespaces.length === 0\n && this.context.allNamespaces.every(ns => namespaces.includes(ns));\n if (!this.api.isNamespaced || isLoadingAll) {\n if (this.api.isNamespaced) {\n this.loadedNamespaces = [];\n }\n const res = this.api.list({ reqInit }, this.query);\n if (onLoadFailure) {\n try {\n return (_d = await res) !== null && _d !== void 0 ? _d : [];\n }\n catch (error) {\n onLoadFailure(((0,_utils__WEBPACK_IMPORTED_MODULE_0__.isRequestError)(error)\n ? error.message || error.toString()\n : \"Unknown error\"));\n // reset the store because we are loading all, so that nothing is displayed\n this.items.clear();\n this.selectedItemsIds.clear();\n return [];\n }\n }\n return (_e = await res) !== null && _e !== void 0 ? _e : [];\n }\n this.loadedNamespaces = namespaces;\n const results = await Promise.allSettled(namespaces.map(namespace => this.api.list({ namespace, reqInit }, this.query)));\n const res = [];\n for (const result of results) {\n switch (result.status) {\n case \"fulfilled\":\n res.push(...(_f = result.value) !== null && _f !== void 0 ? _f : []);\n break;\n case \"rejected\":\n if (onLoadFailure) {\n onLoadFailure(result.reason.message || result.reason);\n }\n else {\n // if onLoadFailure is not provided then preserve old behaviour\n throw result.reason;\n }\n }\n }\n return res;\n }\n filterItemsOnLoad(items) {\n return items;\n }\n async loadAll({ namespaces, merge = true, reqInit, onLoadFailure } = {}) {\n const context = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.waitUntilDefined)(() => this.context);\n namespaces !== null && namespaces !== void 0 ? namespaces : (namespaces = context.contextNamespaces);\n this.isLoading = true;\n try {\n const items = await this.loadItems({ namespaces, reqInit, onLoadFailure });\n this.mergeItems(items, { merge, namespaces });\n this.isLoaded = true;\n this.failedLoading = false;\n return items;\n }\n catch (error) {\n console.warn(\"[KubeObjectStore] loadAll failed\", this.api.apiBase, error);\n this.resetOnError(error);\n this.failedLoading = true;\n }\n finally {\n this.isLoading = false;\n }\n return undefined;\n }\n async reloadAll(opts = {}) {\n const { force = false, ...loadingOptions } = opts;\n if (this.isLoading || (this.isLoaded && !force)) {\n return undefined;\n }\n return this.loadAll(loadingOptions);\n }\n mergeItems(partialItems, { merge = true, updateStore = true, sort = true, filter = true, namespaces }) {\n let items = partialItems;\n // update existing items\n if (merge && this.api.isNamespaced) {\n const ns = new Set(namespaces);\n items = [\n ...this.items.filter(item => !ns.has(item.getNs())),\n ...partialItems,\n ];\n }\n if (filter)\n items = this.filterItemsOnLoad(items);\n if (sort)\n items = this.sortItems(items);\n if (updateStore)\n this.items.replace(items);\n return items;\n }\n resetOnError(error) {\n if (error)\n this.reset();\n }\n async loadItem(params) {\n return this.api.get(params);\n }\n async load(params) {\n const { name, namespace } = params;\n let item = this.getByName(name, namespace);\n if (!item) {\n item = await this.loadItem(params);\n assert__WEBPACK_IMPORTED_MODULE_5___default()(item, \"Failed to load item from kube\");\n const newItems = this.sortItems([...this.items, item]);\n this.items.replace(newItems);\n }\n return item;\n }\n async loadFromPath(resourcePath) {\n const { namespace, name } = (0,_kube_api_parse__WEBPACK_IMPORTED_MODULE_3__.parseKubeApi)(resourcePath);\n assert__WEBPACK_IMPORTED_MODULE_5___default()(name, \"name must be part of resourcePath\");\n return this.load({ name, namespace });\n }\n async createItem(params, data) {\n return this.api.create(params, data);\n }\n async create(params, data) {\n const newItem = await this.createItem(params, data);\n assert__WEBPACK_IMPORTED_MODULE_5___default()(newItem, \"Failed to create item from kube\");\n const items = this.sortItems([...this.items, newItem]);\n this.items.replace(items);\n return newItem;\n }\n postUpdate(newItem) {\n const index = this.items.findIndex(item => item.getId() === newItem.getId());\n if (index < 0) {\n this.items.push(newItem);\n }\n else {\n this.items[index] = newItem;\n }\n return newItem;\n }\n async patch(item, patch) {\n const rawItem = await this.api.patch({\n name: item.getName(), namespace: item.getNs(),\n }, patch, \"json\");\n assert__WEBPACK_IMPORTED_MODULE_5___default()(rawItem, `Failed to patch ${item.getScopedName()} of ${item.kind} ${item.apiVersion}`);\n return this.postUpdate(rawItem);\n }\n async update(item, data) {\n const rawItem = await this.api.update({\n name: item.getName(),\n namespace: item.getNs(),\n }, data);\n assert__WEBPACK_IMPORTED_MODULE_5___default()(rawItem, `Failed to update ${item.getScopedName()} of ${item.kind} ${item.apiVersion}`);\n return this.postUpdate(rawItem);\n }\n async remove(item) {\n await this.api.delete({ name: item.getName(), namespace: item.getNs() });\n this.selectedItemsIds.delete(item.getId());\n }\n async removeSelectedItems() {\n await Promise.all(this.selectedItems.map(this.remove));\n }\n async removeItems(items) {\n await Promise.all(items.map(this.remove));\n }\n bindWatchEventsUpdater(delay = 1000) {\n (0,mobx__WEBPACK_IMPORTED_MODULE_8__.reaction)(() => this.eventsBuffer.length, this.updateFromEventsBuffer, {\n delay,\n });\n }\n subscribe({ onLoadFailure, abortController = new (abort_controller__WEBPACK_IMPORTED_MODULE_7___default())() } = {}) {\n if (this.api.isNamespaced) {\n Promise.race([\n (0,_utils__WEBPACK_IMPORTED_MODULE_0__.rejectPromiseBy)(abortController.signal),\n Promise.all([\n (0,_utils__WEBPACK_IMPORTED_MODULE_0__.waitUntilDefined)(() => this.context),\n this.namespacesReady,\n ]),\n ])\n .then(([context]) => {\n var _a;\n assert__WEBPACK_IMPORTED_MODULE_5___default()(this.loadedNamespaces);\n if (((_a = context.cluster) === null || _a === void 0 ? void 0 : _a.isGlobalWatchEnabled) && this.loadedNamespaces.length === 0) {\n return this.watchNamespace(\"\", abortController, { onLoadFailure });\n }\n for (const namespace of this.loadedNamespaces) {\n this.watchNamespace(namespace, abortController, { onLoadFailure });\n }\n })\n .catch(_utils__WEBPACK_IMPORTED_MODULE_0__.noop); // ignore DOMExceptions\n }\n else {\n this.watchNamespace(\"\", abortController, { onLoadFailure });\n }\n return () => abortController.abort();\n }\n watchNamespace(namespace, abortController, opts) {\n if (!this.api.getResourceVersion(namespace)) {\n return;\n }\n let timedRetry;\n const watch = () => this.api.watch({\n namespace,\n abortController,\n callback,\n });\n // TODO: upgrade node-fetch once we are starting to use ES modules\n const signal = abortController.signal;\n const callback = (data, error) => {\n if (!this.isLoaded || (error === null || error === void 0 ? void 0 : error.type) === \"aborted\")\n return;\n if (error instanceof Response) {\n if (error.status === 404 || error.status === 401) {\n // api has gone, or credentials are not permitted, let's not retry\n return;\n }\n // not sure what to do, best to retry\n clearTimeout(timedRetry);\n timedRetry = setTimeout(watch, 5000);\n }\n else if (error instanceof _kube_object__WEBPACK_IMPORTED_MODULE_1__.KubeStatus && error.code === 410) {\n clearTimeout(timedRetry);\n // resourceVersion has gone, let's try to reload\n timedRetry = setTimeout(() => {\n (namespace\n ? this.loadAll({ namespaces: [namespace], reqInit: { signal }, ...opts })\n : this.loadAll({ merge: false, reqInit: { signal }, ...opts })).then(watch);\n }, 1000);\n }\n else if (error) { // not sure what to do, best to retry\n clearTimeout(timedRetry);\n timedRetry = setTimeout(watch, 5000);\n }\n if (data) {\n this.eventsBuffer.push(data);\n }\n };\n signal.addEventListener(\"abort\", () => clearTimeout(timedRetry));\n watch();\n }\n updateFromEventsBuffer() {\n var _a;\n const items = this.getItems();\n for (const event of this.eventsBuffer.clear()) {\n if (event.type === \"ERROR\") {\n continue;\n }\n try {\n const { type, object } = event;\n if (!((_a = object.metadata) === null || _a === void 0 ? void 0 : _a.uid)) {\n _logger__WEBPACK_IMPORTED_MODULE_4__[\"default\"].warn(\"[KUBE-STORE]: watch event did not have defined .metadata.uid, skipping\", { event });\n // Other parts of the code will break if this happens\n continue;\n }\n const index = items.findIndex(item => item.getId() === object.metadata.uid);\n const item = items[index];\n switch (type) {\n case \"ADDED\":\n // fallthrough\n case \"MODIFIED\": {\n const newItem = new this.api.objectConstructor(object);\n if (!item) {\n items.push(newItem);\n }\n else {\n items[index] = newItem;\n }\n break;\n }\n case \"DELETED\":\n if (item) {\n items.splice(index, 1);\n }\n break;\n }\n }\n catch (error) {\n _logger__WEBPACK_IMPORTED_MODULE_4__[\"default\"].error(\"[KUBE-STORE]: failed to handle event from watch buffer\", { error, event });\n }\n }\n // update items\n this.items.replace(this.sortItems(items.slice(-this.bufferSize)));\n }\n}\nObject.defineProperty(KubeObjectStore, \"defaultContext\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: mobx__WEBPACK_IMPORTED_MODULE_8__.observable.box()\n}); // TODO: support multiple cluster contexts\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.observable,\n __metadata(\"design:type\", Object)\n], KubeObjectStore.prototype, \"loadedNamespaces\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.computed,\n __metadata(\"design:type\", Array),\n __metadata(\"design:paramtypes\", [])\n], KubeObjectStore.prototype, \"contextItems\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", Promise)\n], KubeObjectStore.prototype, \"loadAll\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", Promise)\n], KubeObjectStore.prototype, \"reloadAll\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Array, Object]),\n __metadata(\"design:returntype\", Array)\n], KubeObjectStore.prototype, \"mergeItems\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", Promise)\n], KubeObjectStore.prototype, \"load\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [String]),\n __metadata(\"design:returntype\", Promise)\n], KubeObjectStore.prototype, \"loadFromPath\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n], KubeObjectStore.prototype, \"updateFromEventsBuffer\", null);\n\n\n//# sourceURL=webpack://open-lens/./src/common/k8s-api/kube-object.store.ts?");
31279
31279
 
31280
31280
  /***/ }),
31281
31281
 
@@ -31473,7 +31473,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
31473
31473
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31474
31474
 
31475
31475
  "use strict";
31476
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"WrappedAbortController\": () => (/* binding */ WrappedAbortController)\n/* harmony export */ });\n/* harmony import */ var abort_controller__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! abort-controller */ \"./node_modules/abort-controller/browser.js\");\n/* harmony import */ var abort_controller__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(abort_controller__WEBPACK_IMPORTED_MODULE_0__);\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\n\n/**\n * This is like an `AbortController` but will also abort if the parent aborts,\n * but won't make the parent abort if this aborts (single direction)\n */\nclass WrappedAbortController extends abort_controller__WEBPACK_IMPORTED_MODULE_0__.AbortController {\n constructor(parent) {\n super();\n parent === null || parent === void 0 ? void 0 : parent.signal.addEventListener(\"abort\", () => {\n this.abort();\n });\n }\n}\n\n\n//# sourceURL=webpack://open-lens/./src/common/utils/abort-controller.ts?");
31476
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"WrappedAbortController\": () => (/* binding */ WrappedAbortController)\n/* harmony export */ });\n/* harmony import */ var abort_controller__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! abort-controller */ \"./node_modules/abort-controller/browser.js\");\n/* harmony import */ var abort_controller__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(abort_controller__WEBPACK_IMPORTED_MODULE_0__);\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\n\n/**\n * This is like an `AbortController` but will also abort if the parent aborts,\n * but won't make the parent abort if this aborts (single direction)\n */\nclass WrappedAbortController extends (abort_controller__WEBPACK_IMPORTED_MODULE_0___default()) {\n constructor(parent) {\n super();\n parent === null || parent === void 0 ? void 0 : parent.signal.addEventListener(\"abort\", () => {\n this.abort();\n });\n }\n}\n\n\n//# sourceURL=webpack://open-lens/./src/common/utils/abort-controller.ts?");
31477
31477
 
31478
31478
  /***/ }),
31479
31479
 
@@ -32980,7 +32980,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
32980
32980
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32981
32981
 
32982
32982
  "use strict";
32983
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _ogre_tools_injectable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ogre-tools/injectable */ \"./node_modules/@ogre-tools/injectable/build/index.js\");\n/* harmony import */ var _ogre_tools_injectable__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_ogre_tools_injectable__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _common_catalog_category_registry_injectable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../common/catalog/category-registry.injectable */ \"./src/common/catalog/category-registry.injectable.ts\");\n/* harmony import */ var _navigation_navigate_injectable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../navigation/navigate.injectable */ \"./src/renderer/navigation/navigate.injectable.ts\");\n/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./registry */ \"./src/renderer/api/catalog/entity/registry.ts\");\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\n\n\n\n\nconst catalogEntityRegistryInjectable = (0,_ogre_tools_injectable__WEBPACK_IMPORTED_MODULE_0__.getInjectable)({\n id: \"catalog-entity-registry\",\n instantiate: (di) => new _registry__WEBPACK_IMPORTED_MODULE_3__.CatalogEntityRegistry({\n categoryRegistry: di.inject(_common_catalog_category_registry_injectable__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n navigate: di.inject(_navigation_navigate_injectable__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n }),\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (catalogEntityRegistryInjectable);\n\n\n//# sourceURL=webpack://open-lens/./src/renderer/api/catalog/entity/registry.injectable.ts?");
32983
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _ogre_tools_injectable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @ogre-tools/injectable */ \"./node_modules/@ogre-tools/injectable/build/index.js\");\n/* harmony import */ var _ogre_tools_injectable__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_ogre_tools_injectable__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _common_catalog_category_registry_injectable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../common/catalog/category-registry.injectable */ \"./src/common/catalog/category-registry.injectable.ts\");\n/* harmony import */ var _navigation_navigate_injectable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../navigation/navigate.injectable */ \"./src/renderer/navigation/navigate.injectable.ts\");\n/* harmony import */ var _registry__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./registry */ \"./src/renderer/api/catalog/entity/registry.ts\");\n/* harmony import */ var _common_logger_injectable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../common/logger.injectable */ \"./src/common/logger.injectable.ts\");\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\n\n\n\n\n\nconst catalogEntityRegistryInjectable = (0,_ogre_tools_injectable__WEBPACK_IMPORTED_MODULE_0__.getInjectable)({\n id: \"catalog-entity-registry\",\n instantiate: (di) => new _registry__WEBPACK_IMPORTED_MODULE_3__.CatalogEntityRegistry({\n categoryRegistry: di.inject(_common_catalog_category_registry_injectable__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n navigate: di.inject(_navigation_navigate_injectable__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n logger: di.inject(_common_logger_injectable__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n }),\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (catalogEntityRegistryInjectable);\n\n\n//# sourceURL=webpack://open-lens/./src/renderer/api/catalog/entity/registry.injectable.ts?");
32984
32984
 
32985
32985
  /***/ }),
32986
32986
 
@@ -32991,7 +32991,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
32991
32991
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32992
32992
 
32993
32993
  "use strict";
32994
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CatalogEntityRegistry\": () => (/* binding */ CatalogEntityRegistry)\n/* harmony export */ });\n/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! mobx */ \"./node_modules/mobx/dist/mobx.esm.js\");\n/* harmony import */ var _common_ipc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../common/ipc */ \"./src/common/ipc/index.ts\");\n/* harmony import */ var _common_catalog_entities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../common/catalog-entities */ \"./src/common/catalog-entities/index.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../utils */ \"./src/renderer/utils/index.ts\");\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\");\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _common_logger__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../common/logger */ \"./src/common/logger.ts\");\n/* harmony import */ var _common_catalog_catalog_run_event__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../../common/catalog/catalog-run-event */ \"./src/common/catalog/catalog-run-event.ts\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! electron */ \"electron\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _common_ipc_catalog__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../../common/ipc/catalog */ \"./src/common/ipc/catalog.ts\");\n/* harmony import */ var process__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! process */ \"process\");\n/* harmony import */ var process__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(process__WEBPACK_IMPORTED_MODULE_8__);\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (undefined && undefined.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\nclass CatalogEntityRegistry {\n constructor(dependencies) {\n Object.defineProperty(this, \"dependencies\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: dependencies\n });\n Object.defineProperty(this, \"activeEntityId\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: mobx__WEBPACK_IMPORTED_MODULE_9__.observable.box(undefined)\n });\n Object.defineProperty(this, \"_entities\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: mobx__WEBPACK_IMPORTED_MODULE_9__.observable.map([], { deep: true })\n });\n Object.defineProperty(this, \"filters\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: mobx__WEBPACK_IMPORTED_MODULE_9__.observable.set([], {\n deep: false,\n })\n });\n Object.defineProperty(this, \"onBeforeRunHooks\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: mobx__WEBPACK_IMPORTED_MODULE_9__.observable.set([], {\n deep: false,\n })\n });\n /**\n * Buffer for keeping entities that don't yet have CatalogCategory synced\n */\n Object.defineProperty(this, \"rawEntities\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: []\n });\n Object.defineProperty(this, \"items\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: (0,mobx__WEBPACK_IMPORTED_MODULE_9__.computed)(() => {\n this.processRawEntities();\n return Array.from(this._entities.values());\n })\n });\n (0,mobx__WEBPACK_IMPORTED_MODULE_9__.makeObservable)(this);\n }\n getActiveEntityById() {\n const activeEntityId = this.activeEntityId.get();\n if (!activeEntityId) {\n return undefined;\n }\n return this._entities.get(activeEntityId);\n }\n get activeEntity() {\n const entity = this.getActiveEntityById();\n // If the entity was not found but there are rawEntities to be processed,\n // try to process them and return the entity.\n // This might happen if an extension registered a new Catalog category.\n if (this.activeEntityId && !entity && this.rawEntities.length > 0) {\n this.processRawEntities();\n return this.getActiveEntityById();\n }\n return entity;\n }\n set activeEntity(raw) {\n if (raw) {\n const id = typeof raw === \"string\"\n ? raw\n : raw.getId();\n this.activeEntityId.set(id);\n }\n else {\n this.activeEntityId.set(undefined);\n }\n }\n init() {\n (0,_common_ipc__WEBPACK_IMPORTED_MODULE_0__.ipcRendererOn)(_common_ipc_catalog__WEBPACK_IMPORTED_MODULE_7__.catalogItemsChannel, (event, items) => {\n this.updateItems(items);\n });\n // Make sure that we get items ASAP and not the next time one of them changes\n electron__WEBPACK_IMPORTED_MODULE_6__.ipcRenderer.send(_common_ipc_catalog__WEBPACK_IMPORTED_MODULE_7__.catalogInitChannel);\n if (process__WEBPACK_IMPORTED_MODULE_8__.isMainFrame) {\n (0,_common_ipc__WEBPACK_IMPORTED_MODULE_0__.ipcRendererOn)(_common_ipc_catalog__WEBPACK_IMPORTED_MODULE_7__.catalogEntityRunListener, (event, id) => {\n const entity = this.getById(id);\n if (entity) {\n this.onRun(entity);\n }\n });\n }\n }\n updateItems(items) {\n this.rawEntities.length = 0;\n const newIds = new Set(items.map((item) => item.metadata.uid));\n for (const uid of this._entities.keys()) {\n if (!newIds.has(uid)) {\n this._entities.delete(uid);\n }\n }\n for (const item of items) {\n this.updateItem(item);\n }\n }\n updateItem(item) {\n const existing = this._entities.get(item.metadata.uid);\n if (!existing) {\n const entity = this.dependencies.categoryRegistry.getEntityForData(item);\n if (entity) {\n this._entities.set(entity.getId(), entity);\n }\n else {\n this.rawEntities.push(item);\n }\n }\n else {\n existing.metadata = item.metadata;\n existing.spec = item.spec;\n existing.status = item.status;\n }\n }\n processRawEntities() {\n const items = [...this.rawEntities];\n this.rawEntities.length = 0;\n for (const item of items) {\n this.updateItem(item);\n }\n }\n get filteredItems() {\n return Array.from(_utils__WEBPACK_IMPORTED_MODULE_2__.iter.reduce(this.filters, _utils__WEBPACK_IMPORTED_MODULE_2__.iter.filter, this.items.get().values()));\n }\n get entities() {\n return new Map(this.items.get().map(entity => [entity.getId(), entity]));\n }\n get filteredEntities() {\n return new Map(this.filteredItems.map(entity => [entity.getId(), entity]));\n }\n getById(id) {\n return this.entities.get(id);\n }\n getItemsForApiKind(apiVersion, kind, { filtered = false } = {}) {\n const byApiKind = (item) => item.apiVersion === apiVersion && item.kind === kind;\n const entities = filtered ? this.filteredItems : this.items.get();\n return entities.filter(byApiKind);\n }\n getItemsForCategory(category, { filtered = false } = {}) {\n const supportedVersions = new Set(category.spec.versions.map((v) => `${category.spec.group}/${v.name}`));\n const byApiVersionKind = (item) => supportedVersions.has(item.apiVersion) && item.kind === category.spec.names.kind;\n const entities = filtered ? this.filteredItems : this.items.get();\n return entities.filter(byApiVersionKind);\n }\n /**\n * Add a new filter to the set of item filters\n * @param fn The function that should return a truthy value if that entity should be sent currently \"active\"\n * @returns A function to remove that filter\n */\n addCatalogFilter(fn) {\n this.filters.add(fn);\n return (0,lodash__WEBPACK_IMPORTED_MODULE_3__.once)(() => void this.filters.delete(fn));\n }\n /**\n * Add a onBeforeRun hook. If `onBeforeRun` was previously added then it will not be added again\n * @param onBeforeRun The function that should return a boolean if the onRun of catalog entity should be triggered.\n * @returns A function to remove that hook\n */\n addOnBeforeRun(onBeforeRun) {\n this.onBeforeRunHooks.add(onBeforeRun);\n return (0,lodash__WEBPACK_IMPORTED_MODULE_3__.once)(() => void this.onBeforeRunHooks.delete(onBeforeRun));\n }\n /**\n * Runs all the registered `onBeforeRun` hooks, short circuiting on the first event that's preventDefaulted\n * @param entity The entity to run the hooks on\n * @returns Whether the entities `onRun` method should be executed\n */\n async onBeforeRun(entity) {\n _common_logger__WEBPACK_IMPORTED_MODULE_4__[\"default\"].debug(`[CATALOG-ENTITY-REGISTRY]: run onBeforeRun on ${entity.getId()}`);\n const runEvent = new _common_catalog_catalog_run_event__WEBPACK_IMPORTED_MODULE_5__.CatalogRunEvent({ target: entity });\n for (const onBeforeRun of this.onBeforeRunHooks) {\n try {\n await onBeforeRun(runEvent);\n }\n catch (error) {\n _common_logger__WEBPACK_IMPORTED_MODULE_4__[\"default\"].warn(`[CATALOG-ENTITY-REGISTRY]: entity ${entity.getId()} onBeforeRun threw an error`, error);\n }\n if (runEvent.defaultPrevented) {\n return false;\n }\n }\n return true;\n }\n /**\n * Perform the onBeforeRun check and, if successful, then proceed to call `entity`'s onRun method\n * @param entity The instance to invoke the hooks and then execute the onRun\n */\n onRun(entity) {\n this.onBeforeRun(entity)\n .then(doOnRun => {\n var _a;\n if (doOnRun) {\n return (_a = entity.onRun) === null || _a === void 0 ? void 0 : _a.call(entity, {\n navigate: this.dependencies.navigate,\n setCommandPaletteContext: (entity) => {\n this.activeEntity = entity;\n },\n });\n }\n else {\n _common_logger__WEBPACK_IMPORTED_MODULE_4__[\"default\"].debug(`onBeforeRun for ${entity.getId()} returned false`);\n }\n })\n .catch(error => _common_logger__WEBPACK_IMPORTED_MODULE_4__[\"default\"].error(`[CATALOG-ENTITY-REGISTRY]: entity ${entity.getId()} onRun threw an error`, error));\n }\n}\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Array]),\n __metadata(\"design:returntype\", void 0)\n], CatalogEntityRegistry.prototype, \"updateItems\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], CatalogEntityRegistry.prototype, \"updateItem\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.computed,\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [])\n], CatalogEntityRegistry.prototype, \"filteredItems\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.computed,\n __metadata(\"design:type\", Map),\n __metadata(\"design:paramtypes\", [])\n], CatalogEntityRegistry.prototype, \"entities\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.computed,\n __metadata(\"design:type\", Map),\n __metadata(\"design:paramtypes\", [])\n], CatalogEntityRegistry.prototype, \"filteredEntities\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function]),\n __metadata(\"design:returntype\", Function)\n], CatalogEntityRegistry.prototype, \"addCatalogFilter\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_9__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function]),\n __metadata(\"design:returntype\", Function)\n], CatalogEntityRegistry.prototype, \"addOnBeforeRun\", null);\n\n\n//# sourceURL=webpack://open-lens/./src/renderer/api/catalog/entity/registry.ts?");
32994
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"CatalogEntityRegistry\": () => (/* binding */ CatalogEntityRegistry)\n/* harmony export */ });\n/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! mobx */ \"./node_modules/mobx/dist/mobx.esm.js\");\n/* harmony import */ var _common_ipc__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../../common/ipc */ \"./src/common/ipc/index.ts\");\n/* harmony import */ var _common_catalog_entities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../../common/catalog-entities */ \"./src/common/catalog-entities/index.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../utils */ \"./src/renderer/utils/index.ts\");\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\");\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _common_catalog_catalog_run_event__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../common/catalog/catalog-run-event */ \"./src/common/catalog/catalog-run-event.ts\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! electron */ \"electron\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _common_ipc_catalog__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../../common/ipc/catalog */ \"./src/common/ipc/catalog.ts\");\n/* harmony import */ var process__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! process */ \"process\");\n/* harmony import */ var process__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(process__WEBPACK_IMPORTED_MODULE_7__);\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (undefined && undefined.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\nclass CatalogEntityRegistry {\n constructor(dependencies) {\n Object.defineProperty(this, \"dependencies\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: dependencies\n });\n Object.defineProperty(this, \"activeEntityId\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: mobx__WEBPACK_IMPORTED_MODULE_8__.observable.box(undefined)\n });\n Object.defineProperty(this, \"_entities\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: mobx__WEBPACK_IMPORTED_MODULE_8__.observable.map([], { deep: true })\n });\n Object.defineProperty(this, \"filters\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: mobx__WEBPACK_IMPORTED_MODULE_8__.observable.set([], {\n deep: false,\n })\n });\n Object.defineProperty(this, \"onBeforeRunHooks\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: mobx__WEBPACK_IMPORTED_MODULE_8__.observable.set([], {\n deep: false,\n })\n });\n /**\n * Buffer for keeping entities that don't yet have CatalogCategory synced\n */\n Object.defineProperty(this, \"rawEntities\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: []\n });\n Object.defineProperty(this, \"items\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: (0,mobx__WEBPACK_IMPORTED_MODULE_8__.computed)(() => {\n this.processRawEntities();\n return Array.from(this._entities.values());\n })\n });\n (0,mobx__WEBPACK_IMPORTED_MODULE_8__.makeObservable)(this);\n }\n getActiveEntityById() {\n const activeEntityId = this.activeEntityId.get();\n if (!activeEntityId) {\n return undefined;\n }\n return this._entities.get(activeEntityId);\n }\n get activeEntity() {\n const entity = this.getActiveEntityById();\n // If the entity was not found but there are rawEntities to be processed,\n // try to process them and return the entity.\n // This might happen if an extension registered a new Catalog category.\n if (this.activeEntityId && !entity && this.rawEntities.length > 0) {\n this.processRawEntities();\n return this.getActiveEntityById();\n }\n return entity;\n }\n set activeEntity(raw) {\n if (raw) {\n const id = typeof raw === \"string\"\n ? raw\n : raw.getId();\n this.activeEntityId.set(id);\n }\n else {\n this.activeEntityId.set(undefined);\n }\n }\n init() {\n (0,_common_ipc__WEBPACK_IMPORTED_MODULE_0__.ipcRendererOn)(_common_ipc_catalog__WEBPACK_IMPORTED_MODULE_6__.catalogItemsChannel, (event, items) => {\n this.updateItems(items);\n });\n // Make sure that we get items ASAP and not the next time one of them changes\n electron__WEBPACK_IMPORTED_MODULE_5__.ipcRenderer.send(_common_ipc_catalog__WEBPACK_IMPORTED_MODULE_6__.catalogInitChannel);\n if (process__WEBPACK_IMPORTED_MODULE_7__.isMainFrame) {\n (0,_common_ipc__WEBPACK_IMPORTED_MODULE_0__.ipcRendererOn)(_common_ipc_catalog__WEBPACK_IMPORTED_MODULE_6__.catalogEntityRunListener, (event, id) => {\n const entity = this.getById(id);\n if (entity) {\n this.onRun(entity);\n }\n });\n }\n }\n updateItems(items) {\n this.rawEntities.length = 0;\n const newIds = new Set(items.map((item) => item.metadata.uid));\n for (const uid of this._entities.keys()) {\n if (!newIds.has(uid)) {\n this._entities.delete(uid);\n }\n }\n for (const item of items) {\n this.updateItem(item);\n }\n }\n updateItem(item) {\n const existing = this._entities.get(item.metadata.uid);\n if (!existing) {\n const entity = this.dependencies.categoryRegistry.getEntityForData(item);\n if (entity) {\n this._entities.set(entity.getId(), entity);\n }\n else {\n this.rawEntities.push(item);\n }\n }\n else {\n existing.metadata = item.metadata;\n existing.spec = item.spec;\n existing.status = item.status;\n }\n }\n processRawEntities() {\n const items = [...this.rawEntities];\n this.rawEntities.length = 0;\n for (const item of items) {\n this.updateItem(item);\n }\n }\n get filteredItems() {\n return Array.from(_utils__WEBPACK_IMPORTED_MODULE_2__.iter.reduce(this.filters, _utils__WEBPACK_IMPORTED_MODULE_2__.iter.filter, this.items.get().values()));\n }\n get entities() {\n return new Map(this.items.get().map(entity => [entity.getId(), entity]));\n }\n get filteredEntities() {\n return new Map(this.filteredItems.map(entity => [entity.getId(), entity]));\n }\n getById(id) {\n return this.entities.get(id);\n }\n getItemsForApiKind(apiVersion, kind, { filtered = false } = {}) {\n const byApiKind = (item) => item.apiVersion === apiVersion && item.kind === kind;\n const entities = filtered ? this.filteredItems : this.items.get();\n return entities.filter(byApiKind);\n }\n getItemsForCategory(category, { filtered = false } = {}) {\n const supportedVersions = new Set(category.spec.versions.map((v) => `${category.spec.group}/${v.name}`));\n const byApiVersionKind = (item) => supportedVersions.has(item.apiVersion) && item.kind === category.spec.names.kind;\n const entities = filtered ? this.filteredItems : this.items.get();\n return entities.filter(byApiVersionKind);\n }\n /**\n * Add a new filter to the set of item filters\n * @param fn The function that should return a truthy value if that entity should be sent currently \"active\"\n * @returns A function to remove that filter\n */\n addCatalogFilter(fn) {\n this.filters.add(fn);\n return (0,lodash__WEBPACK_IMPORTED_MODULE_3__.once)(() => void this.filters.delete(fn));\n }\n /**\n * Add a onBeforeRun hook. If `onBeforeRun` was previously added then it will not be added again\n * @param onBeforeRun The function that should return a boolean if the onRun of catalog entity should be triggered.\n * @returns A function to remove that hook\n */\n addOnBeforeRun(onBeforeRun) {\n this.onBeforeRunHooks.add(onBeforeRun);\n return (0,lodash__WEBPACK_IMPORTED_MODULE_3__.once)(() => void this.onBeforeRunHooks.delete(onBeforeRun));\n }\n /**\n * Runs all the registered `onBeforeRun` hooks, short circuiting on the first event that's preventDefaulted\n * @param entity The entity to run the hooks on\n * @returns Whether the entities `onRun` method should be executed\n */\n async onBeforeRun(entity) {\n this.dependencies.logger.debug(`[CATALOG-ENTITY-REGISTRY]: run onBeforeRun on ${entity.getId()}`);\n const runEvent = new _common_catalog_catalog_run_event__WEBPACK_IMPORTED_MODULE_4__.CatalogRunEvent({ target: entity });\n for (const onBeforeRun of this.onBeforeRunHooks) {\n try {\n await onBeforeRun(runEvent);\n }\n catch (error) {\n this.dependencies.logger.warn(`[CATALOG-ENTITY-REGISTRY]: entity ${entity.getId()} onBeforeRun threw an error`, error);\n }\n if (runEvent.defaultPrevented) {\n return false;\n }\n }\n return true;\n }\n /**\n * Perform the onBeforeRun check and, if successful, then proceed to call `entity`'s onRun method\n * @param entity The instance to invoke the hooks and then execute the onRun\n */\n onRun(entity) {\n this.onBeforeRun(entity)\n .then(doOnRun => {\n var _a;\n if (doOnRun) {\n return (_a = entity.onRun) === null || _a === void 0 ? void 0 : _a.call(entity, {\n navigate: this.dependencies.navigate,\n setCommandPaletteContext: (entity) => {\n this.activeEntity = entity;\n },\n });\n }\n else {\n this.dependencies.logger.debug(`onBeforeRun for ${entity.getId()} returned false`);\n }\n })\n .catch(error => this.dependencies.logger.error(`[CATALOG-ENTITY-REGISTRY]: entity ${entity.getId()} onRun threw an error`, error));\n }\n}\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Array]),\n __metadata(\"design:returntype\", void 0)\n], CatalogEntityRegistry.prototype, \"updateItems\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], CatalogEntityRegistry.prototype, \"updateItem\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.computed,\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [])\n], CatalogEntityRegistry.prototype, \"filteredItems\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.computed,\n __metadata(\"design:type\", Map),\n __metadata(\"design:paramtypes\", [])\n], CatalogEntityRegistry.prototype, \"entities\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.computed,\n __metadata(\"design:type\", Map),\n __metadata(\"design:paramtypes\", [])\n], CatalogEntityRegistry.prototype, \"filteredEntities\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function]),\n __metadata(\"design:returntype\", Function)\n], CatalogEntityRegistry.prototype, \"addCatalogFilter\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_8__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Function]),\n __metadata(\"design:returntype\", Function)\n], CatalogEntityRegistry.prototype, \"addOnBeforeRun\", null);\n\n\n//# sourceURL=webpack://open-lens/./src/renderer/api/catalog/entity/registry.ts?");
32995
32995
 
32996
32996
  /***/ }),
32997
32997
 
@@ -33343,7 +33343,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
33343
33343
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33344
33344
 
33345
33345
  "use strict";
33346
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"PodDetailsList\": () => (/* binding */ PodDetailsList)\n/* harmony export */ });\n/* harmony import */ var _pod_details_list_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./pod-details-list.scss */ \"./src/renderer/components/+workloads-pods/pod-details-list.scss\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var lodash_kebabCase__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash/kebabCase */ \"./node_modules/lodash/kebabCase.js\");\n/* harmony import */ var lodash_kebabCase__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_kebabCase__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! mobx */ \"./node_modules/mobx/dist/mobx.esm.js\");\n/* harmony import */ var mobx_react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! mobx-react */ \"./node_modules/mobx-react/dist/mobxreact.esm.js\");\n/* harmony import */ var _legacy_store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./legacy-store */ \"./src/renderer/components/+workloads-pods/legacy-store.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils */ \"./src/renderer/utils/index.ts\");\n/* harmony import */ var _line_progress__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../line-progress */ \"./src/renderer/components/line-progress/index.ts\");\n/* harmony import */ var _table__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../table */ \"./src/renderer/components/table/index.ts\");\n/* harmony import */ var _spinner__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../spinner */ \"./src/renderer/components/spinner/index.ts\");\n/* harmony import */ var _drawer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../drawer */ \"./src/renderer/components/drawer/index.ts\");\n/* harmony import */ var _kube_object_status_icon__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../kube-object-status-icon */ \"./src/renderer/components/kube-object-status-icon/index.ts\");\n/* harmony import */ var _kube_detail_params__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../kube-detail-params */ \"./src/renderer/components/kube-detail-params/index.ts\");\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (undefined && undefined.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar sortBy;\n(function (sortBy) {\n sortBy[\"name\"] = \"name\";\n sortBy[\"namespace\"] = \"namespace\";\n sortBy[\"cpu\"] = \"cpu\";\n sortBy[\"memory\"] = \"memory\";\n})(sortBy || (sortBy = {}));\nlet PodDetailsList = class PodDetailsList extends react__WEBPACK_IMPORTED_MODULE_1__.Component {\n constructor(props) {\n super(props);\n Object.defineProperty(this, \"metricsWatcher\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: (0,_utils__WEBPACK_IMPORTED_MODULE_4__.interval)(120, () => {\n _legacy_store__WEBPACK_IMPORTED_MODULE_3__.podStore.loadKubeMetrics(this.props.owner.getNs());\n })\n });\n (0,_utils__WEBPACK_IMPORTED_MODULE_4__.autoBind)(this);\n }\n componentDidMount() {\n this.metricsWatcher.start(true);\n (0,mobx_react__WEBPACK_IMPORTED_MODULE_11__.disposeOnUnmount)(this, [\n (0,mobx__WEBPACK_IMPORTED_MODULE_12__.reaction)(() => this.props.owner, () => this.metricsWatcher.restart(true)),\n ]);\n }\n componentWillUnmount() {\n this.metricsWatcher.stop();\n }\n renderCpuUsage(id, usage) {\n const { maxCpu } = this.props;\n const value = usage.toFixed(3);\n if (!maxCpu) {\n if (parseFloat(value) === 0)\n return 0;\n return value;\n }\n const tooltip = (react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"p\", null,\n `CPU: ${Math.ceil(usage * 100 / maxCpu)}%`,\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"br\", null),\n usage.toFixed(3)));\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_line_progress__WEBPACK_IMPORTED_MODULE_5__.LineProgress, { max: maxCpu, value: usage, tooltip: parseFloat(value) !== 0 ? tooltip : null }));\n }\n renderMemoryUsage(id, usage) {\n const { maxMemory } = this.props;\n if (!maxMemory)\n return usage ? (0,_utils__WEBPACK_IMPORTED_MODULE_4__.bytesToUnits)(usage) : 0;\n const tooltip = (react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"p\", null,\n `Memory: ${Math.ceil(usage * 100 / maxMemory)}%`,\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"br\", null),\n (0,_utils__WEBPACK_IMPORTED_MODULE_4__.bytesToUnits)(usage, { precision: 3 })));\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_line_progress__WEBPACK_IMPORTED_MODULE_5__.LineProgress, { max: maxMemory, value: usage, tooltip: usage != 0 ? tooltip : null }));\n }\n getTableRow(uid) {\n const { pods } = this.props;\n const pod = pods.find(pod => pod.getId() == uid);\n if (!pod) {\n return;\n }\n const metrics = _legacy_store__WEBPACK_IMPORTED_MODULE_3__.podStore.getPodKubeMetrics(pod);\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableRow, { key: pod.getId(), sortItem: pod, nowrap: true, onClick: (0,_utils__WEBPACK_IMPORTED_MODULE_4__.prevDefault)(() => (0,_kube_detail_params__WEBPACK_IMPORTED_MODULE_10__.showDetails)(pod.selfLink, false)) },\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"name\" }, pod.getName()),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"warning\" },\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_kube_object_status_icon__WEBPACK_IMPORTED_MODULE_9__.KubeObjectStatusIcon, { key: \"icon\", object: pod })),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"namespace\" }, pod.getNs()),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"ready\" }, `${pod.getRunningContainers().length} / ${pod.getContainers().length}`),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"cpu\" }, this.renderCpuUsage(`cpu-${pod.getId()}`, metrics.cpu)),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"memory\" }, this.renderMemoryUsage(`memory-${pod.getId()}`, metrics.memory)),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: (0,_utils__WEBPACK_IMPORTED_MODULE_4__.cssNames)(\"status\", lodash_kebabCase__WEBPACK_IMPORTED_MODULE_2___default()(pod.getStatusMessage())) }, pod.getStatusMessage())));\n }\n render() {\n const { pods } = this.props;\n if (!_legacy_store__WEBPACK_IMPORTED_MODULE_3__.podStore.isLoaded) {\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"div\", { className: \"PodDetailsList flex justify-center\" },\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_spinner__WEBPACK_IMPORTED_MODULE_7__.Spinner, null)));\n }\n if (!pods.length) {\n return null;\n }\n const virtual = pods.length > 20;\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"div\", { className: \"PodDetailsList flex column\" },\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_drawer__WEBPACK_IMPORTED_MODULE_8__.DrawerTitle, null, \"Pods\"),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.Table, { tableId: \"workloads_pod_details_list\", items: pods, selectable: true, scrollable: false, virtual: virtual, \n // 660 is the exact hight required for 20 items with the default paddings\n virtualHeight: 660, sortable: {\n [sortBy.name]: pod => pod.getName(),\n [sortBy.namespace]: pod => pod.getNs(),\n [sortBy.cpu]: pod => _legacy_store__WEBPACK_IMPORTED_MODULE_3__.podStore.getPodKubeMetrics(pod).cpu,\n [sortBy.memory]: pod => _legacy_store__WEBPACK_IMPORTED_MODULE_3__.podStore.getPodKubeMetrics(pod).memory,\n }, sortByDefault: { sortBy: sortBy.cpu, orderBy: \"desc\" }, sortSyncWithUrl: false, getTableRow: this.getTableRow, renderRow: (virtual\n ? undefined\n : (pod => this.getTableRow(pod.getId()))), className: \"box grow\" },\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableHead, null,\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"name\", sortBy: sortBy.name }, \"Name\"),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"warning\" }),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"namespace\", sortBy: sortBy.namespace }, \"Namespace\"),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"ready\" }, \"Ready\"),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"cpu\", sortBy: sortBy.cpu }, \"CPU\"),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"memory\", sortBy: sortBy.memory }, \"Memory\"),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"status\" }, \"Status\")))));\n }\n};\nPodDetailsList = __decorate([\n mobx_react__WEBPACK_IMPORTED_MODULE_11__.observer,\n __metadata(\"design:paramtypes\", [Object])\n], PodDetailsList);\n\n\n\n//# sourceURL=webpack://open-lens/./src/renderer/components/+workloads-pods/pod-details-list.tsx?");
33346
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"PodDetailsList\": () => (/* binding */ PodDetailsList)\n/* harmony export */ });\n/* harmony import */ var _pod_details_list_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./pod-details-list.scss */ \"./src/renderer/components/+workloads-pods/pod-details-list.scss\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var lodash_kebabCase__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! lodash/kebabCase */ \"./node_modules/lodash/kebabCase.js\");\n/* harmony import */ var lodash_kebabCase__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(lodash_kebabCase__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! mobx */ \"./node_modules/mobx/dist/mobx.esm.js\");\n/* harmony import */ var mobx_react__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! mobx-react */ \"./node_modules/mobx-react/dist/mobxreact.esm.js\");\n/* harmony import */ var _legacy_store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./legacy-store */ \"./src/renderer/components/+workloads-pods/legacy-store.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils */ \"./src/renderer/utils/index.ts\");\n/* harmony import */ var _line_progress__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../line-progress */ \"./src/renderer/components/line-progress/index.ts\");\n/* harmony import */ var _table__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../table */ \"./src/renderer/components/table/index.ts\");\n/* harmony import */ var _spinner__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../spinner */ \"./src/renderer/components/spinner/index.ts\");\n/* harmony import */ var _drawer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../drawer */ \"./src/renderer/components/drawer/index.ts\");\n/* harmony import */ var _kube_object_status_icon__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../kube-object-status-icon */ \"./src/renderer/components/kube-object-status-icon/index.ts\");\n/* harmony import */ var _kube_detail_params__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../kube-detail-params */ \"./src/renderer/components/kube-detail-params/index.ts\");\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\nvar __decorate = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (undefined && undefined.__metadata) || function (k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar sortBy;\n(function (sortBy) {\n sortBy[\"name\"] = \"name\";\n sortBy[\"node\"] = \"node\";\n sortBy[\"namespace\"] = \"namespace\";\n sortBy[\"cpu\"] = \"cpu\";\n sortBy[\"memory\"] = \"memory\";\n})(sortBy || (sortBy = {}));\nlet PodDetailsList = class PodDetailsList extends react__WEBPACK_IMPORTED_MODULE_1__.Component {\n constructor(props) {\n super(props);\n Object.defineProperty(this, \"metricsWatcher\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: (0,_utils__WEBPACK_IMPORTED_MODULE_4__.interval)(120, () => {\n _legacy_store__WEBPACK_IMPORTED_MODULE_3__.podStore.loadKubeMetrics(this.props.owner.getNs());\n })\n });\n (0,_utils__WEBPACK_IMPORTED_MODULE_4__.autoBind)(this);\n }\n componentDidMount() {\n this.metricsWatcher.start(true);\n (0,mobx_react__WEBPACK_IMPORTED_MODULE_11__.disposeOnUnmount)(this, [\n (0,mobx__WEBPACK_IMPORTED_MODULE_12__.reaction)(() => this.props.owner, () => this.metricsWatcher.restart(true)),\n ]);\n }\n componentWillUnmount() {\n this.metricsWatcher.stop();\n }\n renderCpuUsage(id, usage) {\n const { maxCpu } = this.props;\n const value = usage.toFixed(3);\n if (!maxCpu) {\n if (parseFloat(value) === 0)\n return 0;\n return value;\n }\n const tooltip = (react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"p\", null,\n `CPU: ${Math.ceil(usage * 100 / maxCpu)}%`,\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"br\", null),\n usage.toFixed(3)));\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_line_progress__WEBPACK_IMPORTED_MODULE_5__.LineProgress, { max: maxCpu, value: usage, tooltip: parseFloat(value) !== 0 ? tooltip : null }));\n }\n renderMemoryUsage(id, usage) {\n const { maxMemory } = this.props;\n if (!maxMemory)\n return usage ? (0,_utils__WEBPACK_IMPORTED_MODULE_4__.bytesToUnits)(usage) : 0;\n const tooltip = (react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"p\", null,\n `Memory: ${Math.ceil(usage * 100 / maxMemory)}%`,\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"br\", null),\n (0,_utils__WEBPACK_IMPORTED_MODULE_4__.bytesToUnits)(usage, { precision: 3 })));\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_line_progress__WEBPACK_IMPORTED_MODULE_5__.LineProgress, { max: maxMemory, value: usage, tooltip: usage != 0 ? tooltip : null }));\n }\n getTableRow(uid) {\n const { pods } = this.props;\n const pod = pods.find(pod => pod.getId() == uid);\n if (!pod) {\n return;\n }\n const metrics = _legacy_store__WEBPACK_IMPORTED_MODULE_3__.podStore.getPodKubeMetrics(pod);\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableRow, { key: pod.getId(), sortItem: pod, nowrap: true, onClick: (0,_utils__WEBPACK_IMPORTED_MODULE_4__.prevDefault)(() => (0,_kube_detail_params__WEBPACK_IMPORTED_MODULE_10__.showDetails)(pod.selfLink, false)) },\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"name\" }, pod.getName()),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"warning\" },\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_kube_object_status_icon__WEBPACK_IMPORTED_MODULE_9__.KubeObjectStatusIcon, { key: \"icon\", object: pod })),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"node\" }, pod.getNodeName()),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"namespace\" }, pod.getNs()),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"ready\" }, `${pod.getRunningContainers().length} / ${pod.getContainers().length}`),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"cpu\" }, this.renderCpuUsage(`cpu-${pod.getId()}`, metrics.cpu)),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"memory\" }, this.renderMemoryUsage(`memory-${pod.getId()}`, metrics.memory)),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: (0,_utils__WEBPACK_IMPORTED_MODULE_4__.cssNames)(\"status\", lodash_kebabCase__WEBPACK_IMPORTED_MODULE_2___default()(pod.getStatusMessage())) }, pod.getStatusMessage())));\n }\n render() {\n const { pods } = this.props;\n if (!_legacy_store__WEBPACK_IMPORTED_MODULE_3__.podStore.isLoaded) {\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"div\", { className: \"PodDetailsList flex justify-center\" },\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_spinner__WEBPACK_IMPORTED_MODULE_7__.Spinner, null)));\n }\n if (!pods.length) {\n return null;\n }\n const virtual = pods.length > 20;\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"div\", { className: \"PodDetailsList flex column\" },\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_drawer__WEBPACK_IMPORTED_MODULE_8__.DrawerTitle, null, \"Pods\"),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.Table, { tableId: \"workloads_pod_details_list\", items: pods, selectable: true, scrollable: false, virtual: virtual, \n // 660 is the exact hight required for 20 items with the default paddings\n virtualHeight: 660, sortable: {\n [sortBy.name]: pod => pod.getName(),\n [sortBy.node]: pod => pod.getNodeName(),\n [sortBy.namespace]: pod => pod.getNs(),\n [sortBy.cpu]: pod => _legacy_store__WEBPACK_IMPORTED_MODULE_3__.podStore.getPodKubeMetrics(pod).cpu,\n [sortBy.memory]: pod => _legacy_store__WEBPACK_IMPORTED_MODULE_3__.podStore.getPodKubeMetrics(pod).memory,\n }, sortByDefault: { sortBy: sortBy.cpu, orderBy: \"desc\" }, sortSyncWithUrl: false, getTableRow: this.getTableRow, renderRow: (virtual\n ? undefined\n : (pod => this.getTableRow(pod.getId()))), className: \"box grow\" },\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableHead, null,\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"name\", sortBy: sortBy.name }, \"Name\"),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"warning\" }),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"node\", sortBy: sortBy.node }, \"Node\"),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"namespace\", sortBy: sortBy.namespace }, \"Namespace\"),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"ready\" }, \"Ready\"),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"cpu\", sortBy: sortBy.cpu }, \"CPU\"),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"memory\", sortBy: sortBy.memory }, \"Memory\"),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_6__.TableCell, { className: \"status\" }, \"Status\")))));\n }\n};\nPodDetailsList = __decorate([\n mobx_react__WEBPACK_IMPORTED_MODULE_11__.observer,\n __metadata(\"design:paramtypes\", [Object])\n], PodDetailsList);\n\n\n\n//# sourceURL=webpack://open-lens/./src/renderer/components/+workloads-pods/pod-details-list.tsx?");
33347
33347
 
33348
33348
  /***/ }),
33349
33349
 
@@ -35488,7 +35488,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
35488
35488
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35489
35489
 
35490
35490
  "use strict";
35491
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"emitOpenAppMenuAsContextMenu\": () => (/* binding */ emitOpenAppMenuAsContextMenu),\n/* harmony export */ \"emitWindowLocationChanged\": () => (/* binding */ emitWindowLocationChanged),\n/* harmony export */ \"requestClearClusterAsDeleting\": () => (/* binding */ requestClearClusterAsDeleting),\n/* harmony export */ \"requestClusterActivation\": () => (/* binding */ requestClusterActivation),\n/* harmony export */ \"requestClusterDisconnection\": () => (/* binding */ requestClusterDisconnection),\n/* harmony export */ \"requestDeleteCluster\": () => (/* binding */ requestDeleteCluster),\n/* harmony export */ \"requestExtensionLoaderInitialState\": () => (/* binding */ requestExtensionLoaderInitialState),\n/* harmony export */ \"requestInitialClusterStates\": () => (/* binding */ requestInitialClusterStates),\n/* harmony export */ \"requestInitialExtensionDiscovery\": () => (/* binding */ requestInitialExtensionDiscovery),\n/* harmony export */ \"requestKubectlApplyAll\": () => (/* binding */ requestKubectlApplyAll),\n/* harmony export */ \"requestKubectlDeleteAll\": () => (/* binding */ requestKubectlDeleteAll),\n/* harmony export */ \"requestOpenFilePickingDialog\": () => (/* binding */ requestOpenFilePickingDialog),\n/* harmony export */ \"requestSetClusterAsDeleting\": () => (/* binding */ requestSetClusterAsDeleting),\n/* harmony export */ \"requestSetClusterFrameId\": () => (/* binding */ requestSetClusterFrameId),\n/* harmony export */ \"requestWindowAction\": () => (/* binding */ requestWindowAction)\n/* harmony export */ });\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! electron */ \"electron\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _common_ipc_cluster__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../common/ipc/cluster */ \"./src/common/ipc/cluster.ts\");\n/* harmony import */ var _common_ipc_window__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../common/ipc/window */ \"./src/common/ipc/window.ts\");\n/* harmony import */ var _common_ipc_dialog__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../common/ipc/dialog */ \"./src/common/ipc/dialog.ts\");\n/* harmony import */ var _common_ipc_extension_handling__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../common/ipc/extension-handling */ \"./src/common/ipc/extension-handling.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils */ \"./src/renderer/utils/index.ts\");\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\n\n\n\n\n\n\nfunction requestMain(channel, ...args) {\n return electron__WEBPACK_IMPORTED_MODULE_0__.ipcRenderer.invoke(channel, ...args.map(_utils__WEBPACK_IMPORTED_MODULE_5__.toJS));\n}\nfunction emitToMain(channel, ...args) {\n return electron__WEBPACK_IMPORTED_MODULE_0__.ipcRenderer.send(channel, ...args.map(_utils__WEBPACK_IMPORTED_MODULE_5__.toJS));\n}\nfunction emitOpenAppMenuAsContextMenu() {\n emitToMain(_common_ipc_window__WEBPACK_IMPORTED_MODULE_2__.windowOpenAppMenuAsContextMenuChannel);\n}\nfunction emitWindowLocationChanged(location) {\n emitToMain(_common_ipc_window__WEBPACK_IMPORTED_MODULE_2__.windowLocationChangedChannel, location);\n}\nfunction requestWindowAction(type) {\n return requestMain(_common_ipc_window__WEBPACK_IMPORTED_MODULE_2__.windowActionHandleChannel, type);\n}\nfunction requestOpenFilePickingDialog(opts) {\n return requestMain(_common_ipc_dialog__WEBPACK_IMPORTED_MODULE_3__.openFilePickingDialogChannel, opts);\n}\nfunction requestSetClusterFrameId(clusterId) {\n return requestMain(_common_ipc_cluster__WEBPACK_IMPORTED_MODULE_1__.clusterSetFrameIdHandler, clusterId);\n}\nfunction requestClusterActivation(clusterId, force) {\n return requestMain(_common_ipc_cluster__WEBPACK_IMPORTED_MODULE_1__.clusterActivateHandler, clusterId, force);\n}\nfunction requestClusterDisconnection(clusterId, force) {\n return requestMain(_common_ipc_cluster__WEBPACK_IMPORTED_MODULE_1__.clusterDisconnectHandler, clusterId, force);\n}\nfunction requestSetClusterAsDeleting(clusterId) {\n return requestMain(_common_ipc_cluster__WEBPACK_IMPORTED_MODULE_1__.clusterSetDeletingHandler, clusterId);\n}\nfunction requestClearClusterAsDeleting(clusterId) {\n return requestMain(_common_ipc_cluster__WEBPACK_IMPORTED_MODULE_1__.clusterClearDeletingHandler, clusterId);\n}\nfunction requestDeleteCluster(clusterId) {\n return requestMain(_common_ipc_cluster__WEBPACK_IMPORTED_MODULE_1__.clusterDeleteHandler, clusterId);\n}\nfunction requestInitialClusterStates() {\n return requestMain(_common_ipc_cluster__WEBPACK_IMPORTED_MODULE_1__.clusterStates);\n}\nfunction requestKubectlApplyAll(clusterId, resources, kubectlArgs) {\n return requestMain(_common_ipc_cluster__WEBPACK_IMPORTED_MODULE_1__.clusterKubectlApplyAllHandler, clusterId, resources, kubectlArgs);\n}\nfunction requestKubectlDeleteAll(clusterId, resources, kubectlArgs) {\n return requestMain(_common_ipc_cluster__WEBPACK_IMPORTED_MODULE_1__.clusterKubectlDeleteAllHandler, clusterId, resources, kubectlArgs);\n}\nfunction requestInitialExtensionDiscovery() {\n return requestMain(_common_ipc_extension_handling__WEBPACK_IMPORTED_MODULE_4__.extensionDiscoveryStateChannel);\n}\nfunction requestExtensionLoaderInitialState() {\n return requestMain(_common_ipc_extension_handling__WEBPACK_IMPORTED_MODULE_4__.extensionLoaderFromMainChannel);\n}\n\n\n//# sourceURL=webpack://open-lens/./src/renderer/ipc/index.ts?");
35491
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"emitOpenAppMenuAsContextMenu\": () => (/* binding */ emitOpenAppMenuAsContextMenu),\n/* harmony export */ \"emitWindowLocationChanged\": () => (/* binding */ emitWindowLocationChanged),\n/* harmony export */ \"requestClearClusterAsDeleting\": () => (/* binding */ requestClearClusterAsDeleting),\n/* harmony export */ \"requestClusterActivation\": () => (/* binding */ requestClusterActivation),\n/* harmony export */ \"requestClusterDisconnection\": () => (/* binding */ requestClusterDisconnection),\n/* harmony export */ \"requestDeleteCluster\": () => (/* binding */ requestDeleteCluster),\n/* harmony export */ \"requestExtensionLoaderInitialState\": () => (/* binding */ requestExtensionLoaderInitialState),\n/* harmony export */ \"requestInitialClusterStates\": () => (/* binding */ requestInitialClusterStates),\n/* harmony export */ \"requestInitialExtensionDiscovery\": () => (/* binding */ requestInitialExtensionDiscovery),\n/* harmony export */ \"requestKubectlApplyAll\": () => (/* binding */ requestKubectlApplyAll),\n/* harmony export */ \"requestKubectlDeleteAll\": () => (/* binding */ requestKubectlDeleteAll),\n/* harmony export */ \"requestOpenFilePickingDialog\": () => (/* binding */ requestOpenFilePickingDialog),\n/* harmony export */ \"requestSetClusterAsDeleting\": () => (/* binding */ requestSetClusterAsDeleting),\n/* harmony export */ \"requestSetClusterFrameId\": () => (/* binding */ requestSetClusterFrameId),\n/* harmony export */ \"requestWindowAction\": () => (/* binding */ requestWindowAction)\n/* harmony export */ });\n/* harmony import */ var _common_ipc_cluster__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../common/ipc/cluster */ \"./src/common/ipc/cluster.ts\");\n/* harmony import */ var _common_ipc_window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../common/ipc/window */ \"./src/common/ipc/window.ts\");\n/* harmony import */ var _common_ipc_dialog__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../common/ipc/dialog */ \"./src/common/ipc/dialog.ts\");\n/* harmony import */ var _common_ipc_extension_handling__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../common/ipc/extension-handling */ \"./src/common/ipc/extension-handling.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils */ \"./src/renderer/utils/index.ts\");\n/* harmony import */ var _extensions_as_legacy_globals_for_extension_api_legacy_global_di_for_extension_api__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api */ \"./src/extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api.ts\");\n/* harmony import */ var _utils_channel_ipc_renderer_injectable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/channel/ipc-renderer.injectable */ \"./src/renderer/utils/channel/ipc-renderer.injectable.ts\");\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\n\n\n\n\n\n\n\nfunction requestMain(channel, ...args) {\n const di = (0,_extensions_as_legacy_globals_for_extension_api_legacy_global_di_for_extension_api__WEBPACK_IMPORTED_MODULE_5__.getLegacyGlobalDiForExtensionApi)();\n const ipcRenderer = di.inject(_utils_channel_ipc_renderer_injectable__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n return ipcRenderer.invoke(channel, ...args.map(_utils__WEBPACK_IMPORTED_MODULE_4__.toJS));\n}\nfunction emitToMain(channel, ...args) {\n const di = (0,_extensions_as_legacy_globals_for_extension_api_legacy_global_di_for_extension_api__WEBPACK_IMPORTED_MODULE_5__.getLegacyGlobalDiForExtensionApi)();\n const ipcRenderer = di.inject(_utils_channel_ipc_renderer_injectable__WEBPACK_IMPORTED_MODULE_6__[\"default\"]);\n return ipcRenderer.send(channel, ...args.map(_utils__WEBPACK_IMPORTED_MODULE_4__.toJS));\n}\nfunction emitOpenAppMenuAsContextMenu() {\n emitToMain(_common_ipc_window__WEBPACK_IMPORTED_MODULE_1__.windowOpenAppMenuAsContextMenuChannel);\n}\nfunction emitWindowLocationChanged(location) {\n emitToMain(_common_ipc_window__WEBPACK_IMPORTED_MODULE_1__.windowLocationChangedChannel, location);\n}\nfunction requestWindowAction(type) {\n return requestMain(_common_ipc_window__WEBPACK_IMPORTED_MODULE_1__.windowActionHandleChannel, type);\n}\nfunction requestOpenFilePickingDialog(opts) {\n return requestMain(_common_ipc_dialog__WEBPACK_IMPORTED_MODULE_2__.openFilePickingDialogChannel, opts);\n}\nfunction requestSetClusterFrameId(clusterId) {\n return requestMain(_common_ipc_cluster__WEBPACK_IMPORTED_MODULE_0__.clusterSetFrameIdHandler, clusterId);\n}\nfunction requestClusterActivation(clusterId, force) {\n return requestMain(_common_ipc_cluster__WEBPACK_IMPORTED_MODULE_0__.clusterActivateHandler, clusterId, force);\n}\nfunction requestClusterDisconnection(clusterId, force) {\n return requestMain(_common_ipc_cluster__WEBPACK_IMPORTED_MODULE_0__.clusterDisconnectHandler, clusterId, force);\n}\nfunction requestSetClusterAsDeleting(clusterId) {\n return requestMain(_common_ipc_cluster__WEBPACK_IMPORTED_MODULE_0__.clusterSetDeletingHandler, clusterId);\n}\nfunction requestClearClusterAsDeleting(clusterId) {\n return requestMain(_common_ipc_cluster__WEBPACK_IMPORTED_MODULE_0__.clusterClearDeletingHandler, clusterId);\n}\nfunction requestDeleteCluster(clusterId) {\n return requestMain(_common_ipc_cluster__WEBPACK_IMPORTED_MODULE_0__.clusterDeleteHandler, clusterId);\n}\nfunction requestInitialClusterStates() {\n return requestMain(_common_ipc_cluster__WEBPACK_IMPORTED_MODULE_0__.clusterStates);\n}\nfunction requestKubectlApplyAll(clusterId, resources, kubectlArgs) {\n return requestMain(_common_ipc_cluster__WEBPACK_IMPORTED_MODULE_0__.clusterKubectlApplyAllHandler, clusterId, resources, kubectlArgs);\n}\nfunction requestKubectlDeleteAll(clusterId, resources, kubectlArgs) {\n return requestMain(_common_ipc_cluster__WEBPACK_IMPORTED_MODULE_0__.clusterKubectlDeleteAllHandler, clusterId, resources, kubectlArgs);\n}\nfunction requestInitialExtensionDiscovery() {\n return requestMain(_common_ipc_extension_handling__WEBPACK_IMPORTED_MODULE_3__.extensionDiscoveryStateChannel);\n}\nfunction requestExtensionLoaderInitialState() {\n return requestMain(_common_ipc_extension_handling__WEBPACK_IMPORTED_MODULE_3__.extensionLoaderFromMainChannel);\n}\n\n\n//# sourceURL=webpack://open-lens/./src/renderer/ipc/index.ts?");
35492
35492
 
35493
35493
  /***/ }),
35494
35494
 
@@ -35532,7 +35532,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
35532
35532
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35533
35533
 
35534
35534
  "use strict";
35535
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"KubeWatchApi\": () => (/* binding */ KubeWatchApi)\n/* harmony export */ });\n/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! mobx */ \"./node_modules/mobx/dist/mobx.esm.js\");\n/* harmony import */ var _common_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../common/utils */ \"./src/common/utils/index.ts\");\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\");\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _common_logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../common/logger */ \"./src/common/logger.ts\");\n/* harmony import */ var abort_controller__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! abort-controller */ \"./node_modules/abort-controller/browser.js\");\n/* harmony import */ var abort_controller__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(abort_controller__WEBPACK_IMPORTED_MODULE_3__);\nvar __classPrivateFieldGet = (undefined && undefined.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _WatchCount_data, _KubeWatchApi_watch;\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\n\n\n\n\n\nclass WatchCount {\n constructor() {\n _WatchCount_data.set(this, new Map());\n }\n inc(store) {\n const newCount = (0,_common_utils__WEBPACK_IMPORTED_MODULE_0__.getOrInsert)(__classPrivateFieldGet(this, _WatchCount_data, \"f\"), store, 0) + 1;\n _common_logger__WEBPACK_IMPORTED_MODULE_2__[\"default\"].info(`[KUBE-WATCH-API]: inc() count for ${store.api.apiBase} is now ${newCount}`);\n __classPrivateFieldGet(this, _WatchCount_data, \"f\").set(store, newCount);\n return newCount;\n }\n dec(store) {\n const oldCount = __classPrivateFieldGet(this, _WatchCount_data, \"f\").get(store);\n if (oldCount === undefined) {\n throw new Error(`Cannot dec count for store that has never been inc: ${store.api.kind}`);\n }\n const newCount = oldCount - 1;\n if (newCount < 0) {\n throw new Error(`Cannot dec count more times than it has been inc: ${store.api.kind}`);\n }\n _common_logger__WEBPACK_IMPORTED_MODULE_2__[\"default\"].info(`[KUBE-WATCH-API]: dec() count for ${store.api.apiBase} is now ${newCount}`);\n __classPrivateFieldGet(this, _WatchCount_data, \"f\").set(store, newCount);\n return newCount;\n }\n}\n_WatchCount_data = new WeakMap();\nclass KubeWatchApi {\n constructor(dependencies) {\n Object.defineProperty(this, \"dependencies\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: dependencies\n });\n _KubeWatchApi_watch.set(this, new WatchCount());\n Object.defineProperty(this, \"subscribeStores\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: (stores, { namespaces, onLoadFailure } = {}) => {\n const parent = new abort_controller__WEBPACK_IMPORTED_MODULE_3__.AbortController();\n const unsubscribe = (0,_common_utils__WEBPACK_IMPORTED_MODULE_0__.disposer)(...stores.map(store => this.subscribeStore({\n store,\n parent,\n namespaces,\n onLoadFailure,\n })));\n // unsubscribe\n return (0,lodash__WEBPACK_IMPORTED_MODULE_1__.once)(() => {\n parent.abort();\n unsubscribe();\n });\n }\n });\n }\n subscribeStore({ store, parent, namespaces, onLoadFailure }) {\n var _a, _b;\n const isNamespaceFilterWatch = !namespaces;\n if (isNamespaceFilterWatch && __classPrivateFieldGet(this, _KubeWatchApi_watch, \"f\").inc(store) > 1) {\n // don't load or subscribe to a store more than once\n return () => __classPrivateFieldGet(this, _KubeWatchApi_watch, \"f\").dec(store);\n }\n namespaces !== null && namespaces !== void 0 ? namespaces : (namespaces = (_b = (_a = this.dependencies.clusterFrameContext) === null || _a === void 0 ? void 0 : _a.contextNamespaces) !== null && _b !== void 0 ? _b : []);\n let childController = new _common_utils__WEBPACK_IMPORTED_MODULE_0__.WrappedAbortController(parent);\n const unsubscribe = (0,_common_utils__WEBPACK_IMPORTED_MODULE_0__.disposer)();\n const loadThenSubscribe = async (namespaces) => {\n try {\n await store.loadAll({ namespaces, reqInit: { signal: childController.signal }, onLoadFailure });\n unsubscribe.push(store.subscribe({ onLoadFailure, abortController: childController }));\n }\n catch (error) {\n if (!(error instanceof DOMException)) {\n this.log(Object.assign(new Error(\"Loading stores has failed\"), { cause: error }), {\n meta: { store, namespaces },\n });\n }\n }\n };\n /**\n * We don't want to wait because we want to start reacting to namespace\n * selection changes ASAP\n */\n loadThenSubscribe(namespaces).catch(_common_utils__WEBPACK_IMPORTED_MODULE_0__.noop);\n const cancelReloading = isNamespaceFilterWatch && store.api.isNamespaced\n ? (0,mobx__WEBPACK_IMPORTED_MODULE_4__.reaction)(\n // Note: must slice because reaction won't fire if it isn't there\n () => [this.dependencies.clusterFrameContext.contextNamespaces.slice(), this.dependencies.clusterFrameContext.hasSelectedAll], ([namespaces, curSelectedAll], [prevNamespaces, prevSelectedAll]) => {\n if (curSelectedAll && prevSelectedAll) {\n const action = namespaces.length > prevNamespaces.length ? \"created\" : \"deleted\";\n return console.debug(`[KUBE-WATCH-API]: Not changing watch for ${store.api.apiBase} because a new namespace was ${action} but all namespaces are selected`);\n }\n console.log(`[KUBE-WATCH-API]: changing watch ${store.api.apiBase}`, namespaces);\n childController.abort();\n unsubscribe();\n childController = new _common_utils__WEBPACK_IMPORTED_MODULE_0__.WrappedAbortController(parent);\n loadThenSubscribe(namespaces).catch(_common_utils__WEBPACK_IMPORTED_MODULE_0__.noop);\n }, {\n equals: mobx__WEBPACK_IMPORTED_MODULE_4__.comparer.shallow,\n })\n : _common_utils__WEBPACK_IMPORTED_MODULE_0__.noop; // don't watch namespaces if namespaces were provided\n return () => {\n if (isNamespaceFilterWatch && __classPrivateFieldGet(this, _KubeWatchApi_watch, \"f\").dec(store) === 0) {\n // only stop the subcribe if this is the last one\n cancelReloading();\n childController.abort();\n unsubscribe();\n }\n };\n }\n log(message, meta) {\n const log = message instanceof Error\n ? console.error\n : console.debug;\n log(\"[KUBE-WATCH-API]:\", message, {\n time: new Date().toLocaleString(),\n ...meta,\n });\n }\n}\n_KubeWatchApi_watch = new WeakMap();\n\n\n//# sourceURL=webpack://open-lens/./src/renderer/kube-watch-api/kube-watch-api.ts?");
35535
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"KubeWatchApi\": () => (/* binding */ KubeWatchApi)\n/* harmony export */ });\n/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! mobx */ \"./node_modules/mobx/dist/mobx.esm.js\");\n/* harmony import */ var _common_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../common/utils */ \"./src/common/utils/index.ts\");\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! lodash */ \"./node_modules/lodash/lodash.js\");\n/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _common_logger__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../common/logger */ \"./src/common/logger.ts\");\n/* harmony import */ var abort_controller__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! abort-controller */ \"./node_modules/abort-controller/browser.js\");\n/* harmony import */ var abort_controller__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(abort_controller__WEBPACK_IMPORTED_MODULE_3__);\nvar __classPrivateFieldGet = (undefined && undefined.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _WatchCount_data, _KubeWatchApi_watch;\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\n\n\n\n\n\nclass WatchCount {\n constructor() {\n _WatchCount_data.set(this, new Map());\n }\n inc(store) {\n const newCount = (0,_common_utils__WEBPACK_IMPORTED_MODULE_0__.getOrInsert)(__classPrivateFieldGet(this, _WatchCount_data, \"f\"), store, 0) + 1;\n _common_logger__WEBPACK_IMPORTED_MODULE_2__[\"default\"].info(`[KUBE-WATCH-API]: inc() count for ${store.api.apiBase} is now ${newCount}`);\n __classPrivateFieldGet(this, _WatchCount_data, \"f\").set(store, newCount);\n return newCount;\n }\n dec(store) {\n const oldCount = __classPrivateFieldGet(this, _WatchCount_data, \"f\").get(store);\n if (oldCount === undefined) {\n throw new Error(`Cannot dec count for store that has never been inc: ${store.api.kind}`);\n }\n const newCount = oldCount - 1;\n if (newCount < 0) {\n throw new Error(`Cannot dec count more times than it has been inc: ${store.api.kind}`);\n }\n _common_logger__WEBPACK_IMPORTED_MODULE_2__[\"default\"].info(`[KUBE-WATCH-API]: dec() count for ${store.api.apiBase} is now ${newCount}`);\n __classPrivateFieldGet(this, _WatchCount_data, \"f\").set(store, newCount);\n return newCount;\n }\n}\n_WatchCount_data = new WeakMap();\nclass KubeWatchApi {\n constructor(dependencies) {\n Object.defineProperty(this, \"dependencies\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: dependencies\n });\n _KubeWatchApi_watch.set(this, new WatchCount());\n Object.defineProperty(this, \"subscribeStores\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: (stores, { namespaces, onLoadFailure } = {}) => {\n const parent = new (abort_controller__WEBPACK_IMPORTED_MODULE_3___default())();\n const unsubscribe = (0,_common_utils__WEBPACK_IMPORTED_MODULE_0__.disposer)(...stores.map(store => this.subscribeStore({\n store,\n parent,\n namespaces,\n onLoadFailure,\n })));\n // unsubscribe\n return (0,lodash__WEBPACK_IMPORTED_MODULE_1__.once)(() => {\n parent.abort();\n unsubscribe();\n });\n }\n });\n }\n subscribeStore({ store, parent, namespaces, onLoadFailure }) {\n var _a, _b;\n const isNamespaceFilterWatch = !namespaces;\n if (isNamespaceFilterWatch && __classPrivateFieldGet(this, _KubeWatchApi_watch, \"f\").inc(store) > 1) {\n // don't load or subscribe to a store more than once\n return () => __classPrivateFieldGet(this, _KubeWatchApi_watch, \"f\").dec(store);\n }\n namespaces !== null && namespaces !== void 0 ? namespaces : (namespaces = (_b = (_a = this.dependencies.clusterFrameContext) === null || _a === void 0 ? void 0 : _a.contextNamespaces) !== null && _b !== void 0 ? _b : []);\n let childController = new _common_utils__WEBPACK_IMPORTED_MODULE_0__.WrappedAbortController(parent);\n const unsubscribe = (0,_common_utils__WEBPACK_IMPORTED_MODULE_0__.disposer)();\n const loadThenSubscribe = async (namespaces) => {\n try {\n await store.loadAll({ namespaces, reqInit: { signal: childController.signal }, onLoadFailure });\n unsubscribe.push(store.subscribe({ onLoadFailure, abortController: childController }));\n }\n catch (error) {\n if (!(error instanceof DOMException)) {\n this.log(Object.assign(new Error(\"Loading stores has failed\"), { cause: error }), {\n meta: { store, namespaces },\n });\n }\n }\n };\n /**\n * We don't want to wait because we want to start reacting to namespace\n * selection changes ASAP\n */\n loadThenSubscribe(namespaces).catch(_common_utils__WEBPACK_IMPORTED_MODULE_0__.noop);\n const cancelReloading = isNamespaceFilterWatch && store.api.isNamespaced\n ? (0,mobx__WEBPACK_IMPORTED_MODULE_4__.reaction)(\n // Note: must slice because reaction won't fire if it isn't there\n () => [this.dependencies.clusterFrameContext.contextNamespaces.slice(), this.dependencies.clusterFrameContext.hasSelectedAll], ([namespaces, curSelectedAll], [prevNamespaces, prevSelectedAll]) => {\n if (curSelectedAll && prevSelectedAll) {\n const action = namespaces.length > prevNamespaces.length ? \"created\" : \"deleted\";\n return console.debug(`[KUBE-WATCH-API]: Not changing watch for ${store.api.apiBase} because a new namespace was ${action} but all namespaces are selected`);\n }\n console.log(`[KUBE-WATCH-API]: changing watch ${store.api.apiBase}`, namespaces);\n childController.abort();\n unsubscribe();\n childController = new _common_utils__WEBPACK_IMPORTED_MODULE_0__.WrappedAbortController(parent);\n loadThenSubscribe(namespaces).catch(_common_utils__WEBPACK_IMPORTED_MODULE_0__.noop);\n }, {\n equals: mobx__WEBPACK_IMPORTED_MODULE_4__.comparer.shallow,\n })\n : _common_utils__WEBPACK_IMPORTED_MODULE_0__.noop; // don't watch namespaces if namespaces were provided\n return () => {\n if (isNamespaceFilterWatch && __classPrivateFieldGet(this, _KubeWatchApi_watch, \"f\").dec(store) === 0) {\n // only stop the subcribe if this is the last one\n cancelReloading();\n childController.abort();\n unsubscribe();\n }\n };\n }\n log(message, meta) {\n const log = message instanceof Error\n ? console.error\n : console.debug;\n log(\"[KUBE-WATCH-API]:\", message, {\n time: new Date().toLocaleString(),\n ...meta,\n });\n }\n}\n_KubeWatchApi_watch = new WeakMap();\n\n\n//# sourceURL=webpack://open-lens/./src/renderer/kube-watch-api/kube-watch-api.ts?");
35536
35536
 
35537
35537
  /***/ }),
35538
35538
 
@@ -40307,7 +40307,7 @@ eval("module.exports = JSON.parse('{\"name\":\"winston\",\"description\":\"A log
40307
40307
  /***/ ((module) => {
40308
40308
 
40309
40309
  "use strict";
40310
- eval("module.exports = JSON.parse('{\"name\":\"open-lens\",\"productName\":\"OpenLens\",\"description\":\"OpenLens - Open Source IDE for Kubernetes\",\"homepage\":\"https://github.com/lensapp/lens\",\"version\":\"6.0.0\",\"main\":\"static/build/main.js\",\"copyright\":\"© 2022 OpenLens Authors\",\"license\":\"MIT\",\"author\":{\"name\":\"OpenLens Authors\",\"email\":\"info@k8slens.dev\"},\"scripts\":{\"adr:create\":\"echo \\\\\"What is the title?\\\\\"; read title; adr new \\\\\"$title\\\\\"\",\"adr:change-status\":\"echo \\\\\"Decision number?:\\\\\"; read decision; adr status $decision\",\"adr:update-readme\":\"adr update\",\"adr:list\":\"adr list\",\"dev\":\"concurrently -i -k \\\\\"yarn run dev-run -C\\\\\" yarn:dev:*\",\"dev-build\":\"concurrently yarn:compile:*\",\"debug-build\":\"concurrently yarn:compile:main yarn:compile:extension-types\",\"dev-run\":\"nodemon --watch ./static/build/main.js --exec \\\\\"electron --remote-debugging-port=9223 --inspect .\\\\\"\",\"dev:main\":\"yarn run compile:main --watch --progress\",\"dev:renderer\":\"yarn run ts-node webpack/dev-server.ts\",\"compile\":\"env NODE_ENV=production concurrently yarn:compile:*\",\"compile:main\":\"yarn run webpack --config webpack/main.ts\",\"compile:renderer\":\"yarn run webpack --config webpack/renderer.ts\",\"compile:extension-types\":\"yarn run webpack --config webpack/extensions.ts\",\"npm:fix-build-version\":\"yarn run ts-node build/set_build_version.ts\",\"npm:fix-package-version\":\"yarn run ts-node build/set_npm_version.ts\",\"build:linux\":\"yarn run compile && electron-builder --linux --dir\",\"build:mac\":\"yarn run compile && electron-builder --mac --dir\",\"build:win\":\"yarn run compile && electron-builder --win --dir\",\"integration\":\"jest --runInBand --detectOpenHandles --forceExit integration\",\"test:unit\":\"func() { jest ${1} --watch --testPathIgnorePatterns integration; }; func\",\"test:integration\":\"func() { jest ${1:-xyz} --watch --runInBand --detectOpenHandles --forceExit --modulePaths=[\\\\\"<rootDir>/integration/\\\\\"]; }; func\",\"dist\":\"yarn run compile && electron-builder --publish onTag\",\"dist:dir\":\"yarn run dist --dir -c.compression=store -c.mac.identity=null\",\"download:binaries\":\"yarn run ts-node build/download_binaries.ts\",\"build:tray-icons\":\"yarn run ts-node build/generate-tray-icons.ts\",\"build:theme-vars\":\"yarn run ts-node build/build_theme_vars.ts\",\"lint\":\"PROD=true yarn run eslint --ext js,ts,tsx --max-warnings=0 .\",\"lint:fix\":\"yarn run lint --fix\",\"mkdocs-serve-local\":\"docker build -t mkdocs-serve-local:latest mkdocs/ && docker run --rm -it -p 8000:8000 -v ${PWD}:/docs mkdocs-serve-local:latest\",\"verify-docs\":\"docker build -t mkdocs-serve-local:latest mkdocs/ && docker run --rm -v ${PWD}:/docs mkdocs-serve-local:latest build --strict\",\"typedocs-extensions-api\":\"yarn run typedoc src/extensions/extension-api.ts\",\"version-checkout\":\"cat package.json | jq \\'.version\\' -r | xargs printf \\\\\"release/v%s\\\\\" | xargs git checkout -b\",\"version-commit\":\"cat package.json | jq \\'.version\\' -r | xargs printf \\\\\"release v%s\\\\\" | git commit --no-edit -s -F -\",\"version\":\"yarn run version-checkout && git add package.json && yarn run version-commit\",\"postversion\":\"git push --set-upstream ${GIT_REMOTE:-origin} release/v$npm_package_version\"},\"config\":{\"k8sProxyVersion\":\"0.2.1\",\"bundledKubectlVersion\":\"1.23.3\",\"bundledHelmVersion\":\"3.7.2\",\"sentryDsn\":\"\",\"contentSecurityPolicy\":\"script-src \\'unsafe-eval\\' \\'self\\'; frame-src http://*.localhost:*/; img-src * data:\"},\"engines\":{\"node\":\">=16 <17\"},\"jest\":{\"collectCoverage\":false,\"verbose\":true,\"transform\":{\"^.+\\\\\\\\.(t|j)sx?$\":[\"@swc/jest\"]},\"testEnvironment\":\"jsdom\",\"resolver\":\"<rootDir>/src/jest-28-resolver.js\",\"moduleNameMapper\":{\"\\\\\\\\.(css|scss)$\":\"identity-obj-proxy\",\"\\\\\\\\.(svg|png|jpg|eot|woff2?|ttf)$\":\"<rootDir>/__mocks__/assetMock.ts\"},\"modulePathIgnorePatterns\":[\"<rootDir>/dist\",\"<rootDir>/src/extensions/npm\"],\"setupFiles\":[\"<rootDir>/src/jest.setup.ts\",\"jest-canvas-mock\"],\"globalSetup\":\"<rootDir>/src/jest.timezone.ts\",\"setupFilesAfterEnv\":[\"<rootDir>/src/jest-after-env.setup.ts\"],\"runtime\":\"@side/jest-runtime\"},\"build\":{\"generateUpdatesFilesForAllChannels\":true,\"files\":[\"static/build/main.js\"],\"afterSign\":\"build/notarize.js\",\"extraResources\":[{\"from\":\"locales/\",\"to\":\"locales/\",\"filter\":\"**/*.js\"},{\"from\":\"static/\",\"to\":\"static/\",\"filter\":\"!**/main.js\"},{\"from\":\"build/tray\",\"to\":\"static/icons\",\"filter\":\"*.png\"},{\"from\":\"extensions/\",\"to\":\"./extensions/\",\"filter\":[\"**/*.tgz\",\"**/package.json\",\"!**/node_modules\"]},{\"from\":\"templates/\",\"to\":\"./templates/\",\"filter\":\"**/*.yaml\"},\"LICENSE\"],\"linux\":{\"category\":\"Network\",\"artifactName\":\"${productName}-${version}.${arch}.${ext}\",\"target\":[\"deb\",\"rpm\",\"AppImage\"],\"extraResources\":[{\"from\":\"binaries/client/linux/${arch}/kubectl\",\"to\":\"./${arch}/kubectl\"},{\"from\":\"binaries/client/linux/${arch}/lens-k8s-proxy\",\"to\":\"./${arch}/lens-k8s-proxy\"},{\"from\":\"binaries/client/linux/${arch}/helm\",\"to\":\"./${arch}/helm\"}]},\"rpm\":{\"fpm\":[\"--rpm-rpmbuild-define=%define _build_id_links none\"]},\"mac\":{\"hardenedRuntime\":true,\"gatekeeperAssess\":false,\"entitlements\":\"build/entitlements.mac.plist\",\"entitlementsInherit\":\"build/entitlements.mac.plist\",\"extraResources\":[{\"from\":\"binaries/client/darwin/${arch}/kubectl\",\"to\":\"./${arch}/kubectl\"},{\"from\":\"binaries/client/darwin/${arch}/lens-k8s-proxy\",\"to\":\"./${arch}/lens-k8s-proxy\"},{\"from\":\"binaries/client/darwin/${arch}/helm\",\"to\":\"./${arch}/helm\"}]},\"win\":{\"target\":[\"nsis\"],\"extraResources\":[{\"from\":\"binaries/client/windows/${arch}/kubectl.exe\",\"to\":\"./${arch}/kubectl.exe\"},{\"from\":\"binaries/client/windows/${arch}/lens-k8s-proxy.exe\",\"to\":\"./${arch}/lens-k8s-proxy.exe\"},{\"from\":\"binaries/client/windows/${arch}/helm.exe\",\"to\":\"./${arch}/helm.exe\"}]},\"nsis\":{\"include\":\"build/installer.nsh\",\"oneClick\":false,\"allowElevation\":true,\"createStartMenuShortcut\":true,\"allowToChangeInstallationDirectory\":true},\"protocols\":{\"name\":\"Lens Protocol Handler\",\"schemes\":[\"lens\"],\"role\":\"Viewer\"}},\"resolutions\":{\"@astronautlabs/jsonpath/underscore\":\"^1.12.1\"},\"dependencies\":{\"@astronautlabs/jsonpath\":\"^1.1.0\",\"@hapi/call\":\"^9.0.0\",\"@hapi/subtext\":\"^7.0.4\",\"@kubernetes/client-node\":\"^0.17.0\",\"@material-ui/styles\":\"^4.11.5\",\"@ogre-tools/fp\":\"9.0.1\",\"@ogre-tools/injectable\":\"9.0.2\",\"@ogre-tools/injectable-extension-for-auto-registration\":\"9.0.2\",\"@ogre-tools/injectable-extension-for-mobx\":\"9.0.2\",\"@ogre-tools/injectable-react\":\"9.0.2\",\"@sentry/electron\":\"^3.0.7\",\"@sentry/integrations\":\"^6.19.3\",\"@side/jest-runtime\":\"^1.0.1\",\"@types/circular-dependency-plugin\":\"5.0.5\",\"abort-controller\":\"^3.0.0\",\"auto-bind\":\"^4.0.0\",\"await-lock\":\"^2.2.2\",\"byline\":\"^5.0.0\",\"chokidar\":\"^3.5.3\",\"conf\":\"^7.1.2\",\"crypto-js\":\"^4.1.1\",\"electron-devtools-installer\":\"^3.2.0\",\"electron-updater\":\"^4.6.5\",\"electron-window-state\":\"^5.0.3\",\"filehound\":\"^1.17.6\",\"fs-extra\":\"^9.0.1\",\"glob-to-regexp\":\"^0.4.1\",\"got\":\"^11.8.5\",\"grapheme-splitter\":\"^1.0.4\",\"handlebars\":\"^4.7.7\",\"history\":\"^4.10.1\",\"http-proxy\":\"^1.18.1\",\"immer\":\"^9.0.15\",\"joi\":\"^17.6.0\",\"js-yaml\":\"^4.1.0\",\"jsdom\":\"^16.7.0\",\"lodash\":\"^4.17.15\",\"mac-ca\":\"^1.0.6\",\"marked\":\"^4.0.18\",\"md5-file\":\"^5.0.0\",\"mobx\":\"^6.6.1\",\"mobx-observable-history\":\"^2.0.3\",\"mobx-react\":\"^7.5.2\",\"mobx-utils\":\"^6.0.4\",\"mock-fs\":\"^5.1.4\",\"moment\":\"^2.29.4\",\"moment-timezone\":\"^0.5.34\",\"monaco-editor\":\"^0.29.1\",\"monaco-editor-webpack-plugin\":\"^5.0.0\",\"node-fetch\":\"^2.6.7\",\"node-pty\":\"0.10.1\",\"npm\":\"^6.14.17\",\"p-limit\":\"^3.1.0\",\"path-to-regexp\":\"^6.2.0\",\"proper-lockfile\":\"^4.1.2\",\"react\":\"^17.0.2\",\"react-dom\":\"^17.0.2\",\"react-material-ui-carousel\":\"^2.3.11\",\"react-router\":\"^5.2.0\",\"react-virtualized-auto-sizer\":\"^1.0.6\",\"readable-stream\":\"^3.6.0\",\"request\":\"^2.88.2\",\"request-promise-native\":\"^1.0.9\",\"rfc6902\":\"^4.0.2\",\"selfsigned\":\"^2.0.1\",\"semver\":\"^7.3.7\",\"shell-env\":\"^3.0.1\",\"spdy\":\"^4.0.2\",\"tar\":\"^6.1.11\",\"tcp-port-used\":\"^1.0.2\",\"tempy\":\"1.0.1\",\"typed-regex\":\"^0.0.8\",\"url-parse\":\"^1.5.10\",\"uuid\":\"^8.3.2\",\"win-ca\":\"^3.5.0\",\"winston\":\"^3.8.1\",\"winston-console-format\":\"^1.0.8\",\"winston-transport-browserconsole\":\"^1.0.5\",\"ws\":\"^8.8.1\",\"xterm-link-provider\":\"^1.3.1\"},\"devDependencies\":{\"@async-fn/jest\":\"1.6.4\",\"@material-ui/core\":\"^4.12.3\",\"@material-ui/icons\":\"^4.11.2\",\"@material-ui/lab\":\"^4.0.0-alpha.60\",\"@pmmmwh/react-refresh-webpack-plugin\":\"^0.5.7\",\"@sentry/types\":\"^6.19.7\",\"@swc/core\":\"^1.2.223\",\"@swc/jest\":\"^0.2.22\",\"@testing-library/dom\":\"^7.31.2\",\"@testing-library/jest-dom\":\"^5.16.4\",\"@testing-library/react\":\"^12.1.5\",\"@testing-library/user-event\":\"^13.5.0\",\"@types/byline\":\"^4.2.33\",\"@types/chart.js\":\"^2.9.36\",\"@types/circular-dependency-plugin\":\"5.0.5\",\"@types/cli-progress\":\"^3.11.0\",\"@types/color\":\"^3.0.3\",\"@types/command-line-args\":\"^5.2.0\",\"@types/crypto-js\":\"^3.1.47\",\"@types/dompurify\":\"^2.3.3\",\"@types/electron-devtools-installer\":\"^2.2.1\",\"@types/fs-extra\":\"^9.0.13\",\"@types/glob-to-regexp\":\"^0.4.1\",\"@types/gunzip-maybe\":\"^1.4.0\",\"@types/hapi__call\":\"^9.0.0\",\"@types/hapi__subtext\":\"^7.0.0\",\"@types/html-webpack-plugin\":\"^3.2.6\",\"@types/http-proxy\":\"^1.17.9\",\"@types/jest\":\"^28.1.6\",\"@types/js-yaml\":\"^4.0.5\",\"@types/jsdom\":\"^16.2.14\",\"@types/lodash\":\"^4.14.184\",\"@types/marked\":\"^4.0.3\",\"@types/md5-file\":\"^4.0.2\",\"@types/mini-css-extract-plugin\":\"^2.4.0\",\"@types/mock-fs\":\"^4.13.1\",\"@types/node\":\"^16.11.47\",\"@types/node-fetch\":\"^2.6.2\",\"@types/npm\":\"^2.0.32\",\"@types/proper-lockfile\":\"^4.1.2\",\"@types/randomcolor\":\"^0.5.6\",\"@types/react\":\"^17.0.45\",\"@types/react-beautiful-dnd\":\"^13.1.2\",\"@types/react-dom\":\"^17.0.16\",\"@types/react-router\":\"^5.1.18\",\"@types/react-router-dom\":\"^5.3.3\",\"@types/react-table\":\"^7.7.12\",\"@types/react-virtualized-auto-sizer\":\"^1.0.1\",\"@types/react-window\":\"^1.8.5\",\"@types/readable-stream\":\"^2.3.13\",\"@types/request\":\"^2.48.7\",\"@types/request-promise-native\":\"^1.0.18\",\"@types/semver\":\"^7.3.10\",\"@types/sharp\":\"^0.30.5\",\"@types/spdy\":\"^3.4.5\",\"@types/tar\":\"^4.0.5\",\"@types/tar-stream\":\"^2.2.2\",\"@types/tcp-port-used\":\"^1.0.1\",\"@types/tempy\":\"^0.3.0\",\"@types/triple-beam\":\"^1.3.2\",\"@types/url-parse\":\"^1.4.8\",\"@types/uuid\":\"^8.3.4\",\"@types/webpack\":\"^5.28.0\",\"@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.33.1\",\"@typescript-eslint/parser\":\"^5.31.0\",\"adr\":\"^1.4.1\",\"ansi_up\":\"^5.1.0\",\"chart.js\":\"^2.9.4\",\"circular-dependency-plugin\":\"^5.2.2\",\"cli-progress\":\"^3.11.2\",\"color\":\"^3.2.1\",\"command-line-args\":\"^5.2.1\",\"concurrently\":\"^7.3.0\",\"css-loader\":\"^6.7.1\",\"deepdash\":\"^5.3.9\",\"dompurify\":\"^2.3.10\",\"electron\":\"^19.0.13\",\"electron-builder\":\"^23.3.3\",\"electron-notarize\":\"^0.3.0\",\"esbuild\":\"^0.14.53\",\"esbuild-loader\":\"^2.19.0\",\"eslint\":\"^8.21.0\",\"eslint-plugin-header\":\"^3.1.1\",\"eslint-plugin-import\":\"^2.26.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\",\"fork-ts-checker-webpack-plugin\":\"^6.5.2\",\"gunzip-maybe\":\"^1.4.2\",\"html-webpack-plugin\":\"^5.5.0\",\"identity-obj-proxy\":\"^3.0.0\",\"ignore-loader\":\"^0.1.2\",\"include-media\":\"^1.4.9\",\"jest\":\"^28.1.3\",\"jest-canvas-mock\":\"^2.3.1\",\"jest-environment-jsdom\":\"^28.1.3\",\"jest-fetch-mock\":\"^3.0.3\",\"jest-mock-extended\":\"^2.0.7\",\"make-plural\":\"^6.2.2\",\"mini-css-extract-plugin\":\"^2.6.1\",\"mock-http\":\"^1.1.0\",\"node-gyp\":\"^8.3.0\",\"node-loader\":\"^2.0.0\",\"nodemon\":\"^2.0.19\",\"playwright\":\"^1.24.2\",\"postcss\":\"^8.4.16\",\"postcss-loader\":\"^6.2.1\",\"randomcolor\":\"^0.6.2\",\"react-beautiful-dnd\":\"^13.1.0\",\"react-refresh\":\"^0.14.0\",\"react-refresh-typescript\":\"^2.0.7\",\"react-router-dom\":\"^5.3.3\",\"react-select\":\"^5.4.0\",\"react-select-event\":\"^5.5.1\",\"react-table\":\"^7.8.0\",\"react-window\":\"^1.8.7\",\"sass\":\"^1.54.2\",\"sass-loader\":\"^12.6.0\",\"sharp\":\"^0.30.7\",\"style-loader\":\"^3.3.1\",\"tailwindcss\":\"^3.1.8\",\"tar-stream\":\"^2.2.0\",\"ts-loader\":\"^9.3.1\",\"ts-node\":\"^10.9.1\",\"type-fest\":\"^2.14.0\",\"typed-emitter\":\"^1.4.0\",\"typedoc\":\"0.23.8\",\"typedoc-plugin-markdown\":\"^3.13.1\",\"typescript\":\"^4.7.4\",\"typescript-plugin-css-modules\":\"^3.4.0\",\"webpack\":\"^5.74.0\",\"webpack-cli\":\"^4.9.2\",\"webpack-dev-server\":\"^4.10.0\",\"webpack-node-externals\":\"^3.0.0\",\"xterm\":\"^4.19.0\",\"xterm-addon-fit\":\"^0.5.0\"}}');\n\n//# sourceURL=webpack://open-lens/./package.json?");
40310
+ eval("module.exports = JSON.parse('{\"name\":\"open-lens\",\"productName\":\"OpenLens\",\"description\":\"OpenLens - Open Source IDE for Kubernetes\",\"homepage\":\"https://github.com/lensapp/lens\",\"version\":\"6.0.0\",\"main\":\"static/build/main.js\",\"copyright\":\"© 2022 OpenLens Authors\",\"license\":\"MIT\",\"author\":{\"name\":\"OpenLens Authors\",\"email\":\"info@k8slens.dev\"},\"scripts\":{\"adr:create\":\"echo \\\\\"What is the title?\\\\\"; read title; adr new \\\\\"$title\\\\\"\",\"adr:change-status\":\"echo \\\\\"Decision number?:\\\\\"; read decision; adr status $decision\",\"adr:update-readme\":\"adr update\",\"adr:list\":\"adr list\",\"dev\":\"concurrently -i -k \\\\\"yarn run dev-run -C\\\\\" yarn:dev:*\",\"dev-build\":\"concurrently yarn:compile:*\",\"debug-build\":\"concurrently yarn:compile:main yarn:compile:extension-types\",\"dev-run\":\"nodemon --watch ./static/build/main.js --exec \\\\\"electron --remote-debugging-port=9223 --inspect .\\\\\"\",\"dev:main\":\"yarn run compile:main --watch --progress\",\"dev:renderer\":\"yarn run ts-node webpack/dev-server.ts\",\"compile\":\"env NODE_ENV=production concurrently yarn:compile:*\",\"compile:main\":\"yarn run webpack --config webpack/main.ts\",\"compile:renderer\":\"yarn run webpack --config webpack/renderer.ts\",\"compile:extension-types\":\"yarn run webpack --config webpack/extensions.ts\",\"npm:fix-build-version\":\"yarn run ts-node build/set_build_version.ts\",\"npm:fix-package-version\":\"yarn run ts-node build/set_npm_version.ts\",\"build:linux\":\"yarn run compile && electron-builder --linux --dir\",\"build:mac\":\"yarn run compile && electron-builder --mac --dir\",\"build:win\":\"yarn run compile && electron-builder --win --dir\",\"integration\":\"jest --runInBand --detectOpenHandles --forceExit integration\",\"test:unit\":\"func() { jest ${1} --watch --testPathIgnorePatterns integration; }; func\",\"test:integration\":\"func() { jest ${1:-xyz} --watch --runInBand --detectOpenHandles --forceExit --modulePaths=[\\\\\"<rootDir>/integration/\\\\\"]; }; func\",\"dist\":\"yarn run compile && electron-builder --publish onTag\",\"dist:dir\":\"yarn run dist --dir -c.compression=store -c.mac.identity=null\",\"download:binaries\":\"yarn run ts-node build/download_binaries.ts\",\"build:tray-icons\":\"yarn run ts-node build/generate-tray-icons.ts\",\"build:theme-vars\":\"yarn run ts-node build/build_theme_vars.ts\",\"lint\":\"PROD=true yarn run eslint --ext js,ts,tsx --max-warnings=0 .\",\"lint:fix\":\"yarn run lint --fix\",\"mkdocs-serve-local\":\"docker build -t mkdocs-serve-local:latest mkdocs/ && docker run --rm -it -p 8000:8000 -v ${PWD}:/docs mkdocs-serve-local:latest\",\"verify-docs\":\"docker build -t mkdocs-serve-local:latest mkdocs/ && docker run --rm -v ${PWD}:/docs mkdocs-serve-local:latest build --strict\",\"typedocs-extensions-api\":\"yarn run typedoc src/extensions/extension-api.ts\",\"version-checkout\":\"cat package.json | jq \\'.version\\' -r | xargs printf \\\\\"release/v%s\\\\\" | xargs git checkout -b\",\"version-commit\":\"cat package.json | jq \\'.version\\' -r | xargs printf \\\\\"release v%s\\\\\" | git commit --no-edit -s -F -\",\"version\":\"yarn run version-checkout && git add package.json && yarn run version-commit\",\"postversion\":\"git push --set-upstream ${GIT_REMOTE:-origin} release/v$npm_package_version\"},\"config\":{\"k8sProxyVersion\":\"0.2.1\",\"bundledKubectlVersion\":\"1.23.3\",\"bundledHelmVersion\":\"3.7.2\",\"sentryDsn\":\"\",\"contentSecurityPolicy\":\"script-src \\'unsafe-eval\\' \\'self\\'; frame-src http://*.localhost:*/; img-src * data:\"},\"engines\":{\"node\":\">=16 <17\"},\"jest\":{\"collectCoverage\":false,\"verbose\":true,\"transform\":{\"^.+\\\\\\\\.(t|j)sx?$\":[\"@swc/jest\"]},\"testEnvironment\":\"jsdom\",\"resolver\":\"<rootDir>/src/jest-28-resolver.js\",\"moduleNameMapper\":{\"\\\\\\\\.(css|scss)$\":\"identity-obj-proxy\",\"\\\\\\\\.(svg|png|jpg|eot|woff2?|ttf)$\":\"<rootDir>/__mocks__/assetMock.ts\"},\"modulePathIgnorePatterns\":[\"<rootDir>/dist\",\"<rootDir>/src/extensions/npm\"],\"setupFiles\":[\"<rootDir>/src/jest.setup.ts\",\"jest-canvas-mock\"],\"globalSetup\":\"<rootDir>/src/jest.timezone.ts\",\"setupFilesAfterEnv\":[\"<rootDir>/src/jest-after-env.setup.ts\"],\"runtime\":\"@side/jest-runtime\"},\"build\":{\"generateUpdatesFilesForAllChannels\":true,\"files\":[\"static/build/main.js\"],\"afterSign\":\"build/notarize.js\",\"extraResources\":[{\"from\":\"locales/\",\"to\":\"locales/\",\"filter\":\"**/*.js\"},{\"from\":\"static/\",\"to\":\"static/\",\"filter\":\"!**/main.js\"},{\"from\":\"build/tray\",\"to\":\"static/icons\",\"filter\":\"*.png\"},{\"from\":\"extensions/\",\"to\":\"./extensions/\",\"filter\":[\"**/*.tgz\",\"**/package.json\",\"!**/node_modules\"]},{\"from\":\"templates/\",\"to\":\"./templates/\",\"filter\":\"**/*.yaml\"},\"LICENSE\"],\"linux\":{\"category\":\"Network\",\"artifactName\":\"${productName}-${version}.${arch}.${ext}\",\"target\":[\"deb\",\"rpm\",\"AppImage\"],\"extraResources\":[{\"from\":\"binaries/client/linux/${arch}/kubectl\",\"to\":\"./${arch}/kubectl\"},{\"from\":\"binaries/client/linux/${arch}/lens-k8s-proxy\",\"to\":\"./${arch}/lens-k8s-proxy\"},{\"from\":\"binaries/client/linux/${arch}/helm\",\"to\":\"./${arch}/helm\"}]},\"rpm\":{\"fpm\":[\"--rpm-rpmbuild-define=%define _build_id_links none\"]},\"mac\":{\"hardenedRuntime\":true,\"gatekeeperAssess\":false,\"entitlements\":\"build/entitlements.mac.plist\",\"entitlementsInherit\":\"build/entitlements.mac.plist\",\"extraResources\":[{\"from\":\"binaries/client/darwin/${arch}/kubectl\",\"to\":\"./${arch}/kubectl\"},{\"from\":\"binaries/client/darwin/${arch}/lens-k8s-proxy\",\"to\":\"./${arch}/lens-k8s-proxy\"},{\"from\":\"binaries/client/darwin/${arch}/helm\",\"to\":\"./${arch}/helm\"}]},\"win\":{\"target\":[\"nsis\"],\"extraResources\":[{\"from\":\"binaries/client/windows/${arch}/kubectl.exe\",\"to\":\"./${arch}/kubectl.exe\"},{\"from\":\"binaries/client/windows/${arch}/lens-k8s-proxy.exe\",\"to\":\"./${arch}/lens-k8s-proxy.exe\"},{\"from\":\"binaries/client/windows/${arch}/helm.exe\",\"to\":\"./${arch}/helm.exe\"}]},\"nsis\":{\"include\":\"build/installer.nsh\",\"oneClick\":false,\"allowElevation\":true,\"createStartMenuShortcut\":true,\"allowToChangeInstallationDirectory\":true},\"protocols\":{\"name\":\"Lens Protocol Handler\",\"schemes\":[\"lens\"],\"role\":\"Viewer\"}},\"resolutions\":{\"@astronautlabs/jsonpath/underscore\":\"^1.12.1\"},\"dependencies\":{\"@astronautlabs/jsonpath\":\"^1.1.0\",\"@hapi/call\":\"^9.0.0\",\"@hapi/subtext\":\"^7.0.4\",\"@kubernetes/client-node\":\"^0.17.0\",\"@material-ui/styles\":\"^4.11.5\",\"@ogre-tools/fp\":\"9.0.1\",\"@ogre-tools/injectable\":\"9.0.2\",\"@ogre-tools/injectable-extension-for-auto-registration\":\"9.0.2\",\"@ogre-tools/injectable-extension-for-mobx\":\"9.0.2\",\"@ogre-tools/injectable-react\":\"9.0.2\",\"@sentry/electron\":\"^3.0.7\",\"@sentry/integrations\":\"^6.19.3\",\"@side/jest-runtime\":\"^1.0.1\",\"@types/circular-dependency-plugin\":\"5.0.5\",\"abort-controller\":\"^3.0.0\",\"auto-bind\":\"^4.0.0\",\"await-lock\":\"^2.2.2\",\"byline\":\"^5.0.0\",\"chokidar\":\"^3.5.3\",\"conf\":\"^7.1.2\",\"crypto-js\":\"^4.1.1\",\"electron-devtools-installer\":\"^3.2.0\",\"electron-updater\":\"^4.6.5\",\"electron-window-state\":\"^5.0.3\",\"filehound\":\"^1.17.6\",\"fs-extra\":\"^9.0.1\",\"glob-to-regexp\":\"^0.4.1\",\"got\":\"^11.8.5\",\"grapheme-splitter\":\"^1.0.4\",\"handlebars\":\"^4.7.7\",\"history\":\"^4.10.1\",\"http-proxy\":\"^1.18.1\",\"immer\":\"^9.0.15\",\"joi\":\"^17.6.0\",\"js-yaml\":\"^4.1.0\",\"jsdom\":\"^16.7.0\",\"lodash\":\"^4.17.15\",\"mac-ca\":\"^1.0.6\",\"marked\":\"^4.0.18\",\"md5-file\":\"^5.0.0\",\"mobx\":\"^6.6.1\",\"mobx-observable-history\":\"^2.0.3\",\"mobx-react\":\"^7.5.2\",\"mobx-utils\":\"^6.0.4\",\"mock-fs\":\"^5.1.4\",\"moment\":\"^2.29.4\",\"moment-timezone\":\"^0.5.34\",\"monaco-editor\":\"^0.29.1\",\"monaco-editor-webpack-plugin\":\"^5.0.0\",\"node-fetch\":\"^2.6.7\",\"node-pty\":\"0.10.1\",\"npm\":\"^6.14.17\",\"p-limit\":\"^3.1.0\",\"path-to-regexp\":\"^6.2.0\",\"proper-lockfile\":\"^4.1.2\",\"react\":\"^17.0.2\",\"react-dom\":\"^17.0.2\",\"react-material-ui-carousel\":\"^2.3.11\",\"react-router\":\"^5.2.0\",\"react-virtualized-auto-sizer\":\"^1.0.6\",\"readable-stream\":\"^3.6.0\",\"request\":\"^2.88.2\",\"request-promise-native\":\"^1.0.9\",\"rfc6902\":\"^4.0.2\",\"selfsigned\":\"^2.0.1\",\"semver\":\"^7.3.7\",\"shell-env\":\"^3.0.1\",\"spdy\":\"^4.0.2\",\"tar\":\"^6.1.11\",\"tcp-port-used\":\"^1.0.2\",\"tempy\":\"1.0.1\",\"typed-regex\":\"^0.0.8\",\"url-parse\":\"^1.5.10\",\"uuid\":\"^8.3.2\",\"win-ca\":\"^3.5.0\",\"winston\":\"^3.8.1\",\"winston-console-format\":\"^1.0.8\",\"winston-transport-browserconsole\":\"^1.0.5\",\"ws\":\"^8.8.1\",\"xterm-link-provider\":\"^1.3.1\"},\"devDependencies\":{\"@async-fn/jest\":\"1.6.4\",\"@material-ui/core\":\"^4.12.3\",\"@material-ui/icons\":\"^4.11.2\",\"@material-ui/lab\":\"^4.0.0-alpha.60\",\"@pmmmwh/react-refresh-webpack-plugin\":\"^0.5.7\",\"@sentry/types\":\"^6.19.7\",\"@swc/core\":\"^1.2.241\",\"@swc/jest\":\"^0.2.22\",\"@testing-library/dom\":\"^7.31.2\",\"@testing-library/jest-dom\":\"^5.16.4\",\"@testing-library/react\":\"^12.1.5\",\"@testing-library/user-event\":\"^13.5.0\",\"@types/byline\":\"^4.2.33\",\"@types/chart.js\":\"^2.9.36\",\"@types/circular-dependency-plugin\":\"5.0.5\",\"@types/cli-progress\":\"^3.11.0\",\"@types/color\":\"^3.0.3\",\"@types/command-line-args\":\"^5.2.0\",\"@types/crypto-js\":\"^3.1.47\",\"@types/dompurify\":\"^2.3.3\",\"@types/electron-devtools-installer\":\"^2.2.1\",\"@types/fs-extra\":\"^9.0.13\",\"@types/glob-to-regexp\":\"^0.4.1\",\"@types/gunzip-maybe\":\"^1.4.0\",\"@types/hapi__call\":\"^9.0.0\",\"@types/hapi__subtext\":\"^7.0.0\",\"@types/html-webpack-plugin\":\"^3.2.6\",\"@types/http-proxy\":\"^1.17.9\",\"@types/jest\":\"^28.1.6\",\"@types/js-yaml\":\"^4.0.5\",\"@types/jsdom\":\"^16.2.14\",\"@types/lodash\":\"^4.14.184\",\"@types/marked\":\"^4.0.3\",\"@types/md5-file\":\"^4.0.2\",\"@types/mini-css-extract-plugin\":\"^2.4.0\",\"@types/mock-fs\":\"^4.13.1\",\"@types/node\":\"^16.11.47\",\"@types/node-fetch\":\"^2.6.2\",\"@types/npm\":\"^2.0.32\",\"@types/proper-lockfile\":\"^4.1.2\",\"@types/randomcolor\":\"^0.5.6\",\"@types/react\":\"^17.0.45\",\"@types/react-beautiful-dnd\":\"^13.1.2\",\"@types/react-dom\":\"^17.0.16\",\"@types/react-router\":\"^5.1.18\",\"@types/react-router-dom\":\"^5.3.3\",\"@types/react-table\":\"^7.7.12\",\"@types/react-virtualized-auto-sizer\":\"^1.0.1\",\"@types/react-window\":\"^1.8.5\",\"@types/readable-stream\":\"^2.3.13\",\"@types/request\":\"^2.48.7\",\"@types/request-promise-native\":\"^1.0.18\",\"@types/semver\":\"^7.3.10\",\"@types/sharp\":\"^0.30.5\",\"@types/spdy\":\"^3.4.5\",\"@types/tar\":\"^4.0.5\",\"@types/tar-stream\":\"^2.2.2\",\"@types/tcp-port-used\":\"^1.0.1\",\"@types/tempy\":\"^0.3.0\",\"@types/triple-beam\":\"^1.3.2\",\"@types/url-parse\":\"^1.4.8\",\"@types/uuid\":\"^8.3.4\",\"@types/webpack\":\"^5.28.0\",\"@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.33.1\",\"@typescript-eslint/parser\":\"^5.31.0\",\"adr\":\"^1.4.1\",\"ansi_up\":\"^5.1.0\",\"chart.js\":\"^2.9.4\",\"circular-dependency-plugin\":\"^5.2.2\",\"cli-progress\":\"^3.11.2\",\"color\":\"^3.2.1\",\"command-line-args\":\"^5.2.1\",\"concurrently\":\"^7.3.0\",\"css-loader\":\"^6.7.1\",\"deepdash\":\"^5.3.9\",\"dompurify\":\"^2.3.10\",\"electron\":\"^19.0.13\",\"electron-builder\":\"^23.3.3\",\"electron-notarize\":\"^0.3.0\",\"esbuild\":\"^0.15.5\",\"esbuild-loader\":\"^2.19.0\",\"eslint\":\"^8.21.0\",\"eslint-plugin-header\":\"^3.1.1\",\"eslint-plugin-import\":\"^2.26.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\",\"fork-ts-checker-webpack-plugin\":\"^6.5.2\",\"gunzip-maybe\":\"^1.4.2\",\"html-webpack-plugin\":\"^5.5.0\",\"identity-obj-proxy\":\"^3.0.0\",\"ignore-loader\":\"^0.1.2\",\"include-media\":\"^1.4.9\",\"jest\":\"^28.1.3\",\"jest-canvas-mock\":\"^2.3.1\",\"jest-environment-jsdom\":\"^28.1.3\",\"jest-fetch-mock\":\"^3.0.3\",\"jest-mock-extended\":\"^2.0.7\",\"make-plural\":\"^6.2.2\",\"mini-css-extract-plugin\":\"^2.6.1\",\"mock-http\":\"^1.1.0\",\"node-gyp\":\"^8.3.0\",\"node-loader\":\"^2.0.0\",\"nodemon\":\"^2.0.19\",\"playwright\":\"^1.24.2\",\"postcss\":\"^8.4.16\",\"postcss-loader\":\"^6.2.1\",\"randomcolor\":\"^0.6.2\",\"react-beautiful-dnd\":\"^13.1.0\",\"react-refresh\":\"^0.14.0\",\"react-refresh-typescript\":\"^2.0.7\",\"react-router-dom\":\"^5.3.3\",\"react-select\":\"^5.4.0\",\"react-select-event\":\"^5.5.1\",\"react-table\":\"^7.8.0\",\"react-window\":\"^1.8.7\",\"sass\":\"^1.54.2\",\"sass-loader\":\"^12.6.0\",\"sharp\":\"^0.30.7\",\"style-loader\":\"^3.3.1\",\"tailwindcss\":\"^3.1.8\",\"tar-stream\":\"^2.2.0\",\"ts-loader\":\"^9.3.1\",\"ts-node\":\"^10.9.1\",\"type-fest\":\"^2.14.0\",\"typed-emitter\":\"^1.4.0\",\"typedoc\":\"0.23.8\",\"typedoc-plugin-markdown\":\"^3.13.1\",\"typescript\":\"^4.7.4\",\"typescript-plugin-css-modules\":\"^3.4.0\",\"webpack\":\"^5.74.0\",\"webpack-cli\":\"^4.9.2\",\"webpack-dev-server\":\"^4.10.0\",\"webpack-node-externals\":\"^3.0.0\",\"xterm\":\"^4.19.0\",\"xterm-addon-fit\":\"^0.5.0\"}}');\n\n//# sourceURL=webpack://open-lens/./package.json?");
40311
40311
 
40312
40312
  /***/ }),
40313
40313
 
@@ -9,6 +9,10 @@ import type { ExtensionLoader } from "../extension-loader";
9
9
  import type { LensExtensionId, LensExtensionManifest } from "../lens-extension";
10
10
  import type { ExtensionInstallationStateStore } from "../extension-installation-state-store/extension-installation-state-store";
11
11
  import type { PackageJson } from "type-fest";
12
+ import type { ReadJson } from "../../common/fs/read-json-file.injectable";
13
+ import type { Logger } from "../../common/logger";
14
+ import type { PathExists } from "../../common/fs/path-exists.injectable";
15
+ import type { Watch } from "../../common/fs/watch/watch.injectable";
12
16
  interface Dependencies {
13
17
  extensionLoader: ExtensionLoader;
14
18
  extensionsStore: ExtensionsStore;
@@ -19,6 +23,10 @@ interface Dependencies {
19
23
  installExtensions: (packageJsonPath: string, packagesJson: PackageJson) => Promise<void>;
20
24
  extensionPackageRootDirectory: string;
21
25
  staticFilesDirectory: string;
26
+ readJsonFile: ReadJson;
27
+ pathExists: PathExists;
28
+ watch: Watch;
29
+ logger: Logger;
22
30
  }
23
31
  export interface InstalledExtension {
24
32
  id: LensExtensionId;
@@ -1,5 +1 @@
1
- /**
2
- * Copyright (c) OpenLens Authors. All rights reserved.
3
- * Licensed under MIT License. See LICENSE in root directory for more information.
4
- */
5
1
  export {};
@@ -0,0 +1,7 @@
1
+ export interface ChartCacheEntry {
2
+ data: string;
3
+ mtimeMs: number;
4
+ }
5
+ export declare type HelmChartManagerCache = Map<string, ChartCacheEntry>;
6
+ declare const helmChartManagerCacheInjectable: import("@ogre-tools/injectable").Injectable<HelmChartManagerCache, unknown, void>;
7
+ export default helmChartManagerCacheInjectable;
@@ -5,15 +5,20 @@
5
5
  import type { RepoHelmChartList } from "../../common/k8s-api/endpoints/helm-charts.api";
6
6
  import type { SetRequired } from "type-fest";
7
7
  import type { HelmRepo } from "../../common/helm/helm-repo";
8
+ import type { HelmChartManagerCache } from "./helm-chart-manager-cache.injectable";
9
+ import type { Logger } from "../../common/logger";
8
10
  export interface HelmCacheFile {
9
11
  apiVersion: string;
10
12
  entries: RepoHelmChartList;
11
13
  }
14
+ interface Dependencies {
15
+ cache: HelmChartManagerCache;
16
+ logger: Logger;
17
+ }
12
18
  export declare class HelmChartManager {
13
- #private;
19
+ private dependencies;
14
20
  protected readonly repo: SetRequired<HelmRepo, "cacheFilePath">;
15
- private constructor();
16
- static forRepo(repo: HelmRepo): HelmChartManager;
21
+ constructor(repo: HelmRepo, dependencies: Dependencies);
17
22
  chartVersions(name: string): Promise<import("../../common/k8s-api/endpoints/helm-charts.api").RawHelmChart[]>;
18
23
  charts(): Promise<RepoHelmChartList>;
19
24
  private executeCommand;
@@ -25,3 +30,4 @@ export declare class HelmChartManager {
25
30
  }>;
26
31
  protected cachedYaml(): Promise<RepoHelmChartList>;
27
32
  }
33
+ export {};
@@ -0,0 +1,4 @@
1
+ import type { HelmRepo } from "../../common/helm/helm-repo";
2
+ import { HelmChartManager } from "./helm-chart-manager";
3
+ declare const helmChartManagerInjectable: import("@ogre-tools/injectable").Injectable<HelmChartManager, unknown, HelmRepo>;
4
+ export default helmChartManagerInjectable;
@@ -9,11 +9,13 @@ import type { Cluster } from "../../common/cluster/cluster";
9
9
  import type { SelfSignedCert } from "selfsigned";
10
10
  import type { Spawn } from "../child-process/spawn.injectable";
11
11
  import type { Logger } from "../../common/logger";
12
+ import type { WaitUntilPortIsUsed } from "./wait-until-port-is-used/wait-until-port-is-used.injectable";
12
13
  export interface KubeAuthProxyDependencies {
13
14
  readonly proxyBinPath: string;
14
15
  readonly proxyCert: SelfSignedCert;
15
- spawn: Spawn;
16
+ readonly spawn: Spawn;
16
17
  readonly logger: Logger;
18
+ readonly waitUntilPortIsUsed: WaitUntilPortIsUsed;
17
19
  }
18
20
  export declare class KubeAuthProxy {
19
21
  private readonly dependencies;
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ injectable: import("@ogre-tools/injectable").Injectable<import("./wait-until-port-is-used.injectable").WaitUntilPortIsUsed, unknown, void>;
3
+ overridingInstantiate: import("@ogre-tools/injectable").Instantiate<import("./wait-until-port-is-used.injectable").WaitUntilPortIsUsed, void>;
4
+ };
5
+ export default _default;
@@ -0,0 +1,3 @@
1
+ export declare type WaitUntilPortIsUsed = (port: number, retryAfterMs: number, timeoutAfterMs: number) => Promise<void>;
2
+ declare const waitUntilPortIsUsedInjectable: import("@ogre-tools/injectable").Injectable<WaitUntilPortIsUsed, unknown, void>;
3
+ export default waitUntilPortIsUsedInjectable;
@@ -6,11 +6,13 @@ import * as proto from "../../../common/protocol-handler";
6
6
  import URLParse from "url-parse";
7
7
  import type { LensExtension } from "../../../extensions/lens-extension";
8
8
  import type { LensProtocolRouterDependencies, RouteAttempt } from "../../../common/protocol-handler";
9
+ import type { BroadcastMessage } from "../../../common/ipc/broadcast-message.injectable";
9
10
  export interface FallbackHandler {
10
11
  (name: string): Promise<boolean>;
11
12
  }
12
13
  export interface LensProtocolRouterMainDependencies extends LensProtocolRouterDependencies {
13
14
  showApplicationWindow: () => Promise<void>;
15
+ broadcastMessage: BroadcastMessage;
14
16
  }
15
17
  export declare class LensProtocolRouterMain extends proto.LensProtocolRouter {
16
18
  protected readonly dependencies: LensProtocolRouterMainDependencies;
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ injectable: import("@ogre-tools/injectable").Injectable<Electron.IpcMain, unknown, void>;
3
+ overridingInstantiate: import("@ogre-tools/injectable").Instantiate<Electron.IpcMain, void>;
4
+ };
5
+ export default _default;
@@ -7,11 +7,13 @@ import "../../../../common/catalog-entities";
7
7
  import type { Disposer } from "../../../utils";
8
8
  import { CatalogRunEvent } from "../../../../common/catalog/catalog-run-event";
9
9
  import type { Navigate } from "../../../navigation/navigate.injectable";
10
+ import type { Logger } from "../../../../common/logger";
10
11
  export declare type EntityFilter = (entity: CatalogEntity) => any;
11
12
  export declare type CatalogEntityOnBeforeRun = (event: CatalogRunEvent) => void | Promise<void>;
12
13
  interface Dependencies {
13
14
  navigate: Navigate;
14
15
  readonly categoryRegistry: CatalogCategoryRegistry;
16
+ logger: Logger;
15
17
  }
16
18
  export declare class CatalogEntityRegistry {
17
19
  protected readonly dependencies: Dependencies;
@@ -2,8 +2,9 @@
2
2
  * Copyright (c) OpenLens Authors. All rights reserved.
3
3
  * Licensed under MIT License. See LICENSE in root directory for more information.
4
4
  */
5
+ import React from "react";
5
6
  import type { Cluster } from "../../../../common/cluster/cluster";
6
7
  export interface ClusterLocalTerminalSettingProps {
7
8
  cluster: Cluster;
8
9
  }
9
- export declare const ClusterLocalTerminalSetting: ({ cluster }: ClusterLocalTerminalSettingProps) => JSX.Element | null;
10
+ export declare const ClusterLocalTerminalSetting: React.FunctionComponent<ClusterLocalTerminalSettingProps>;
@@ -3,11 +3,8 @@
3
3
  * Licensed under MIT License. See LICENSE in root directory for more information.
4
4
  */
5
5
  import * as proto from "../../../common/protocol-handler";
6
- import type { ExtensionLoader } from "../../../extensions/extension-loader";
7
- import type { ExtensionsStore } from "../../../extensions/extensions-store/extensions-store";
8
- interface Dependencies {
9
- extensionLoader: ExtensionLoader;
10
- extensionsStore: ExtensionsStore;
6
+ import type { LensProtocolRouterDependencies } from "../../../common/protocol-handler";
7
+ interface Dependencies extends LensProtocolRouterDependencies {
11
8
  }
12
9
  export declare class LensProtocolRouterRenderer extends proto.LensProtocolRouter {
13
10
  protected dependencies: Dependencies;
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ injectable: import("@ogre-tools/injectable").Injectable<Electron.IpcRenderer, unknown, void>;
3
+ overridingInstantiate: import("@ogre-tools/injectable").Instantiate<Electron.IpcRenderer, void>;
4
+ };
5
+ export default _default;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@k8slens/extensions",
3
3
  "productName": "OpenLens extensions",
4
4
  "description": "OpenLens - Open Source Kubernetes IDE: extensions",
5
- "version": "6.0.1-git.436aa3dcda.0",
5
+ "version": "6.0.1-git.4771c7755c.0",
6
6
  "copyright": "© 2022 OpenLens Authors",
7
7
  "license": "MIT",
8
8
  "main": "dist/src/extensions/extension-api.js",
@@ -1,11 +0,0 @@
1
- /**
2
- * Copyright (c) OpenLens Authors. All rights reserved.
3
- * Licensed under MIT License. See LICENSE in root directory for more information.
4
- */
5
- import type { HelmRepo } from "../../../common/helm/helm-repo";
6
- export declare class HelmChartManager {
7
- private repo;
8
- constructor(repo: HelmRepo);
9
- static forRepo(repo: HelmRepo): HelmChartManager;
10
- charts(): Promise<any>;
11
- }