@k8slens/extensions 6.1.0-git.dad6dcacda.0 → 6.1.1-git.032e6d968c.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 (116) hide show
  1. package/dist/src/common/certificate-authorities/inject-system-cas.injectable.d.ts +6 -0
  2. package/dist/src/common/certificate-authorities/request-system-cas-token.d.ts +5 -0
  3. package/dist/src/common/certificate-authorities/request-system-cas.injectable.darwin.d.ts +2 -0
  4. package/dist/src/common/certificate-authorities/request-system-cas.injectable.linux.d.ts +2 -0
  5. package/dist/src/common/certificate-authorities/request-system-cas.injectable.testing-env.d.ts +2 -0
  6. package/dist/src/common/certificate-authorities/request-system-cas.injectable.win32.d.ts +2 -0
  7. package/dist/src/common/cluster/cluster.d.ts +1 -1
  8. package/dist/src/common/cluster-store/get-by-id.injectable.d.ts +5 -0
  9. package/dist/src/common/cluster-types.d.ts +10 -0
  10. package/dist/src/common/fs/create-read-file-stream.injectable.d.ts +19 -0
  11. package/dist/src/common/fs/exec-file.injectable.d.ts +5 -1
  12. package/dist/src/common/fs/stat/stat.global-override-for-injectable.d.ts +2 -2
  13. package/dist/src/common/fs/stat/stat.injectable.d.ts +4 -1
  14. package/dist/src/common/fs/watch/watch.injectable.d.ts +120 -2
  15. package/dist/src/common/logger/prefixed-logger.injectable.d.ts +3 -0
  16. package/dist/src/common/runnable/run-many-for.d.ts +2 -1
  17. package/dist/src/common/runnable/run-many-sync-for.d.ts +2 -1
  18. package/dist/src/common/runnable/throw-with-incorrect-hierarchy-for.d.ts +1 -1
  19. package/dist/src/common/user-store/file-name-migration.global-override-for-injectable.d.ts +9 -0
  20. package/dist/src/common/user-store/file-name-migration.injectable.d.ts +2 -1
  21. package/dist/src/common/user-store/kubeconfig-syncs.injectable.d.ts +2 -0
  22. package/dist/src/common/utils/iter.d.ts +1 -0
  23. package/dist/src/common/vars/release-channel.injectable.d.ts +1 -2
  24. package/dist/src/extensions/common-api/utils.d.ts +1 -1
  25. package/dist/src/extensions/extension-api.js +9 -20
  26. package/dist/src/main/app-paths/setup-app-paths.injectable.d.ts +1 -0
  27. package/dist/src/main/application-update/emit-current-version-to-analytics.injectable.d.ts +1 -0
  28. package/dist/src/main/application-update/periodical-check-for-updates/start-checking-for-updates.injectable.d.ts +1 -0
  29. package/dist/src/main/application-update/periodical-check-for-updates/stop-checking-for-updates.injectable.d.ts +1 -0
  30. package/dist/src/main/application-update/watch-if-update-should-happen-on-quit/start-watching-if-update-should-happen-on-quit.injectable.d.ts +1 -0
  31. package/dist/src/main/application-update/watch-if-update-should-happen-on-quit/stop-watching-if-update-should-happen-on-quit.injectable.d.ts +1 -0
  32. package/dist/src/main/catalog-sources/kubeconfig-sync/compute-diff.injectable.d.ts +6 -0
  33. package/dist/src/main/catalog-sources/kubeconfig-sync/config-to-models.injectable.d.ts +9 -0
  34. package/dist/src/main/catalog-sources/kubeconfig-sync/diff-changed-kubeconfig.injectable.d.ts +15 -0
  35. package/dist/src/main/catalog-sources/kubeconfig-sync/logger.injectable.d.ts +2 -0
  36. package/dist/src/main/catalog-sources/kubeconfig-sync/manager.d.ts +7 -19
  37. package/dist/src/main/catalog-sources/kubeconfig-sync/watch-file-changes.injectable.d.ts +6 -0
  38. package/dist/src/main/catalog-sync-to-renderer/start-catalog-sync.injectable.d.ts +1 -0
  39. package/dist/src/main/catalog-sync-to-renderer/stop-catalog-sync.injectable.d.ts +1 -0
  40. package/dist/src/main/cluster/are-being-deleted.injectable.d.ts +2 -0
  41. package/dist/src/main/cluster/initialize-manager.injectable.d.ts +5 -0
  42. package/dist/src/main/{cluster-manager.d.ts → cluster/manager.d.ts} +11 -10
  43. package/dist/src/main/{cluster-manager.injectable.d.ts → cluster/manager.injectable.d.ts} +1 -1
  44. package/dist/src/main/electron-app/runnables/clean-up-deep-linking.injectable.d.ts +1 -0
  45. package/dist/src/main/electron-app/runnables/dock-visibility/hide-dock-for-last-closed-window.injectable.d.ts +1 -0
  46. package/dist/src/main/electron-app/runnables/dock-visibility/show-dock-for-first-opened-window.injectable.d.ts +1 -0
  47. package/dist/src/main/electron-app/runnables/enforce-single-application-instance.injectable.d.ts +1 -0
  48. package/dist/src/main/electron-app/runnables/setup-application-name.injectable.d.ts +1 -0
  49. package/dist/src/main/electron-app/runnables/setup-deep-linking.injectable.d.ts +1 -0
  50. package/dist/src/main/electron-app/runnables/setup-developer-tools-in-development-environment.injectable.d.ts +1 -0
  51. package/dist/src/main/electron-app/runnables/setup-device-shutdown.injectable.d.ts +1 -0
  52. package/dist/src/main/electron-app/runnables/setup-ipc-main-handlers/setup-ipc-main-handlers.d.ts +5 -3
  53. package/dist/src/main/electron-app/runnables/setup-ipc-main-handlers/setup-ipc-main-handlers.injectable.d.ts +1 -0
  54. package/dist/src/main/electron-app/runnables/setup-main-window-visibility-after-activation.injectable.d.ts +1 -0
  55. package/dist/src/main/electron-app/runnables/setup-runnables-after-window-is-opened.injectable.d.ts +1 -0
  56. package/dist/src/main/electron-app/runnables/setup-runnables-before-closing-of-application.injectable.d.ts +1 -0
  57. package/dist/src/main/lens-proxy/proxy-functions/shell-api-request/shell-api-request.d.ts +1 -1
  58. package/dist/src/main/menu/start-application-menu.injectable.d.ts +1 -0
  59. package/dist/src/main/menu/stop-application-menu.injectable.d.ts +1 -0
  60. package/dist/src/main/start-main-application/lens-window/current-cluster-frame/setup-listener-for-current-cluster-frame.injectable.d.ts +1 -0
  61. package/dist/src/main/start-main-application/runnables/clean-up-shell-sessions.injectable.d.ts +1 -0
  62. package/dist/src/main/start-main-application/runnables/emit-close-to-event-bus.injectable.d.ts +1 -0
  63. package/dist/src/main/start-main-application/runnables/emit-service-start-to-event-bus.injectable.d.ts +1 -0
  64. package/dist/src/main/start-main-application/runnables/flag-renderer/flag-renderer-as-loaded.injectable.d.ts +1 -0
  65. package/dist/src/main/start-main-application/runnables/flag-renderer/flag-renderer-as-not-loaded.injectable.d.ts +1 -0
  66. package/dist/src/main/start-main-application/runnables/initialize-extensions.injectable.d.ts +1 -0
  67. package/dist/src/main/start-main-application/runnables/kube-config-sync/add-source.injectable.d.ts +5 -0
  68. package/dist/src/main/start-main-application/runnables/kube-config-sync/start-kube-config-sync.injectable.d.ts +5 -0
  69. package/dist/src/main/start-main-application/runnables/kube-config-sync/stop-kube-config-sync.injectable.d.ts +1 -0
  70. package/dist/src/main/start-main-application/runnables/sentry/setup.injectable.d.ts +1 -0
  71. package/dist/src/main/start-main-application/runnables/setup-detector-registry.injectable.d.ts +1 -0
  72. package/dist/src/main/start-main-application/runnables/setup-hardware-acceleration.injectable.d.ts +1 -0
  73. package/dist/src/main/start-main-application/runnables/setup-hotbar-store.injectable.d.ts +8 -1
  74. package/dist/src/main/start-main-application/runnables/setup-immer.injectable.d.ts +1 -0
  75. package/dist/src/main/start-main-application/runnables/setup-lens-proxy.injectable.d.ts +1 -0
  76. package/dist/src/main/start-main-application/runnables/setup-mobx.injectable.d.ts +1 -0
  77. package/dist/src/main/start-main-application/runnables/setup-prometheus-registry.injectable.d.ts +1 -0
  78. package/dist/src/main/start-main-application/runnables/setup-proxy-env.injectable.d.ts +1 -0
  79. package/dist/src/main/start-main-application/runnables/setup-reactions-in-user-store.injectable.d.ts +1 -0
  80. package/dist/src/main/start-main-application/runnables/setup-shell.injectable.d.ts +1 -0
  81. package/dist/src/main/start-main-application/runnables/setup-syncing-of-general-catalog-entities.injectable.d.ts +1 -0
  82. package/dist/src/main/start-main-application/runnables/setup-syncing-of-weblinks.injectable.d.ts +1 -0
  83. package/dist/src/main/start-main-application/runnables/setup-system-ca.injectable.d.ts +1 -0
  84. package/dist/src/main/start-main-application/runnables/stop-cluster-manager.injectable.d.ts +1 -0
  85. package/dist/src/main/stores/init-user-store.injectable.d.ts +21 -0
  86. package/dist/src/main/theme/broadcast-theme-change/start-broadcasting-theme-change.injectable.d.ts +1 -0
  87. package/dist/src/main/theme/broadcast-theme-change/stop-broadcasting-theme-change.injectable.d.ts +1 -0
  88. package/dist/src/main/theme/sync-theme-from-os/start-syncing-theme-from-operating-system.injectable.d.ts +1 -0
  89. package/dist/src/main/theme/sync-theme-from-os/stop-syncing-theme-from-operating-system.injectable.d.ts +1 -0
  90. package/dist/src/main/tray/electron-tray/start-tray.injectable.d.ts +1 -0
  91. package/dist/src/main/tray/electron-tray/stop-tray.injectable.d.ts +8 -1
  92. package/dist/src/main/tray/menu-icon/start-reactivity.injectable.d.ts +8 -1
  93. package/dist/src/main/tray/menu-icon/stop-reactivity.injectable.d.ts +1 -0
  94. package/dist/src/main/tray/reactive-tray-menu-items/start-reactive-tray-menu-items.injectable.d.ts +8 -1
  95. package/dist/src/main/tray/reactive-tray-menu-items/stop-reactive-tray-menu-items.injectable.d.ts +1 -0
  96. package/dist/src/main/utils/channel/channel-listeners/start-listening-of-channels.injectable.d.ts +1 -0
  97. package/dist/src/main/vars/build-version/init.injectable.d.ts +3 -2
  98. package/dist/src/main/vars/default-update-channel/init.injectable.d.ts +17 -2
  99. package/dist/src/main/vars/release-channel/init.injectable.d.ts +13 -0
  100. package/dist/src/main/vars/semantic-build-version/init.injectable.d.ts +8 -1
  101. package/dist/src/renderer/api/setup-on-api-errors.injectable.d.ts +1 -0
  102. package/dist/src/renderer/app-paths/setup-app-paths.injectable.d.ts +1 -0
  103. package/dist/src/renderer/components/layout/top-bar/start-state-sync.injectable.d.ts +1 -0
  104. package/dist/src/renderer/frames/root-frame/setup-system-ca.injectable.d.ts +1 -0
  105. package/dist/src/renderer/stores/init-user-store.injectable.d.ts +21 -0
  106. package/dist/src/renderer/utils/channel/channel-listeners/start-listening-of-channels.injectable.d.ts +1 -0
  107. package/dist/src/renderer/utils/sync-box/provide-initial-values-for-sync-boxes.injectable.d.ts +1 -0
  108. package/dist/src/renderer/vars/build-version/init.injectable.d.ts +1 -0
  109. package/dist/src/renderer/vars/default-update-channel/init.injectable.d.ts +17 -2
  110. package/dist/src/renderer/vars/release-channel/init.injectable.d.ts +13 -0
  111. package/dist/src/renderer/vars/semantic-build-version/init.injectable.d.ts +8 -1
  112. package/dist/src/test-utils/skippers.d.ts +13 -0
  113. package/package.json +3 -3
  114. package/dist/integration/helpers/utils.d.ts +0 -16
  115. package/dist/src/common/__tests__/system-ca.test.d.ts +0 -1
  116. package/dist/src/common/system-ca.d.ts +0 -24
@@ -29627,7 +29627,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
29627
29627
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29628
29628
 
29629
29629
  "use strict";
29630
- 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 _initializable_state_create__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../initializable-state/create */ \"./src/common/initializable-state/create.ts\");\n/* harmony import */ var _vars_release_channel_injectable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../vars/release-channel.injectable */ \"./src/common/vars/release-channel.injectable.ts\");\n/* harmony import */ var _update_channels__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../update-channels */ \"./src/common/application-update/update-channels.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\nconst defaultUpdateChannelInjectable = (0,_initializable_state_create__WEBPACK_IMPORTED_MODULE_0__.createInitializableState)({\n id: \"default-update-channel\",\n init: (di) => _update_channels__WEBPACK_IMPORTED_MODULE_2__.updateChannels[di.inject(_vars_release_channel_injectable__WEBPACK_IMPORTED_MODULE_1__[\"default\"])],\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaultUpdateChannelInjectable);\n\n\n//# sourceURL=webpack://open-lens/./src/common/application-update/selected-update-channel/default-update-channel.injectable.ts?");
29630
+ 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 _initializable_state_create__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../initializable-state/create */ \"./src/common/initializable-state/create.ts\");\n/* harmony import */ var _vars_release_channel_injectable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../vars/release-channel.injectable */ \"./src/common/vars/release-channel.injectable.ts\");\n/* harmony import */ var _update_channels__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../update-channels */ \"./src/common/application-update/update-channels.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\nconst defaultUpdateChannelInjectable = (0,_initializable_state_create__WEBPACK_IMPORTED_MODULE_0__.createInitializableState)({\n id: \"default-update-channel\",\n init: (di) => _update_channels__WEBPACK_IMPORTED_MODULE_2__.updateChannels[di.inject(_vars_release_channel_injectable__WEBPACK_IMPORTED_MODULE_1__[\"default\"]).get()],\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaultUpdateChannelInjectable);\n\n\n//# sourceURL=webpack://open-lens/./src/common/application-update/selected-update-channel/default-update-channel.injectable.ts?");
29631
29631
 
29632
29632
  /***/ }),
29633
29633
 
@@ -29847,7 +29847,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
29847
29847
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29848
29848
 
29849
29849
  "use strict";
29850
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ClusterMetadataKey\": () => (/* binding */ ClusterMetadataKey),\n/* harmony export */ \"ClusterMetricsResourceType\": () => (/* binding */ ClusterMetricsResourceType),\n/* harmony export */ \"ClusterStatus\": () => (/* binding */ ClusterStatus),\n/* harmony export */ \"initialNodeShellImage\": () => (/* binding */ initialNodeShellImage)\n/* harmony export */ });\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 * The options for the status of connection attempts to a cluster\n */\nvar ClusterStatus;\n(function (ClusterStatus) {\n ClusterStatus[ClusterStatus[\"AccessGranted\"] = 2] = \"AccessGranted\";\n ClusterStatus[ClusterStatus[\"AccessDenied\"] = 1] = \"AccessDenied\";\n ClusterStatus[ClusterStatus[\"Offline\"] = 0] = \"Offline\";\n})(ClusterStatus || (ClusterStatus = {}));\n/**\n * The OpenLens known static metadata keys\n */\nvar ClusterMetadataKey;\n(function (ClusterMetadataKey) {\n ClusterMetadataKey[\"VERSION\"] = \"version\";\n ClusterMetadataKey[\"CLUSTER_ID\"] = \"id\";\n ClusterMetadataKey[\"DISTRIBUTION\"] = \"distribution\";\n ClusterMetadataKey[\"NODES_COUNT\"] = \"nodes\";\n ClusterMetadataKey[\"LAST_SEEN\"] = \"lastSeen\";\n ClusterMetadataKey[\"PROMETHEUS\"] = \"prometheus\";\n})(ClusterMetadataKey || (ClusterMetadataKey = {}));\n/**\n * A shorthand enum for resource types that have metrics attached to them via OpenLens metrics stack\n */\nvar ClusterMetricsResourceType;\n(function (ClusterMetricsResourceType) {\n ClusterMetricsResourceType[\"Cluster\"] = \"Cluster\";\n ClusterMetricsResourceType[\"Node\"] = \"Node\";\n ClusterMetricsResourceType[\"Pod\"] = \"Pod\";\n ClusterMetricsResourceType[\"Deployment\"] = \"Deployment\";\n ClusterMetricsResourceType[\"StatefulSet\"] = \"StatefulSet\";\n ClusterMetricsResourceType[\"Container\"] = \"Container\";\n ClusterMetricsResourceType[\"Ingress\"] = \"Ingress\";\n ClusterMetricsResourceType[\"VolumeClaim\"] = \"VolumeClaim\";\n ClusterMetricsResourceType[\"ReplicaSet\"] = \"ReplicaSet\";\n ClusterMetricsResourceType[\"DaemonSet\"] = \"DaemonSet\";\n ClusterMetricsResourceType[\"Job\"] = \"Job\";\n ClusterMetricsResourceType[\"Namespace\"] = \"Namespace\";\n})(ClusterMetricsResourceType || (ClusterMetricsResourceType = {}));\n/**\n * The default node shell image\n */\nconst initialNodeShellImage = \"docker.io/alpine:3.13\";\n\n\n//# sourceURL=webpack://open-lens/./src/common/cluster-types.ts?");
29850
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ClusterMetadataKey\": () => (/* binding */ ClusterMetadataKey),\n/* harmony export */ \"ClusterMetricsResourceType\": () => (/* binding */ ClusterMetricsResourceType),\n/* harmony export */ \"ClusterStatus\": () => (/* binding */ ClusterStatus),\n/* harmony export */ \"clusterModelIdChecker\": () => (/* binding */ clusterModelIdChecker),\n/* harmony export */ \"initialNodeShellImage\": () => (/* binding */ initialNodeShellImage),\n/* harmony export */ \"updateClusterModelChecker\": () => (/* binding */ updateClusterModelChecker)\n/* harmony export */ });\n/* harmony import */ var joi__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! joi */ \"./node_modules/joi/dist/joi-browser.min.js\");\n/* harmony import */ var joi__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(joi__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 * A type validator for `UpdateClusterModel` so that only expected types are present\n */\nconst updateClusterModelChecker = joi__WEBPACK_IMPORTED_MODULE_0___default().object({\n kubeConfigPath: joi__WEBPACK_IMPORTED_MODULE_0___default().string()\n .required()\n .min(1),\n contextName: joi__WEBPACK_IMPORTED_MODULE_0___default().string()\n .required()\n .min(1),\n workspace: joi__WEBPACK_IMPORTED_MODULE_0___default().string()\n .optional(),\n workspaces: joi__WEBPACK_IMPORTED_MODULE_0___default().array()\n .items(joi__WEBPACK_IMPORTED_MODULE_0___default().string()),\n preferences: joi__WEBPACK_IMPORTED_MODULE_0___default().object(),\n metadata: joi__WEBPACK_IMPORTED_MODULE_0___default().object(),\n accessibleNamespaces: joi__WEBPACK_IMPORTED_MODULE_0___default().array()\n .items(joi__WEBPACK_IMPORTED_MODULE_0___default().string()),\n labels: joi__WEBPACK_IMPORTED_MODULE_0___default().object().pattern(joi__WEBPACK_IMPORTED_MODULE_0___default().string(), joi__WEBPACK_IMPORTED_MODULE_0___default().string()),\n});\n/**\n * A type validator for just the `id` fields of `ClusterModel`. The rest is\n * covered by `updateClusterModelChecker`\n */\nconst clusterModelIdChecker = joi__WEBPACK_IMPORTED_MODULE_0___default().object({\n id: joi__WEBPACK_IMPORTED_MODULE_0___default().string()\n .required()\n .min(1),\n});\n/**\n * The options for the status of connection attempts to a cluster\n */\nvar ClusterStatus;\n(function (ClusterStatus) {\n ClusterStatus[ClusterStatus[\"AccessGranted\"] = 2] = \"AccessGranted\";\n ClusterStatus[ClusterStatus[\"AccessDenied\"] = 1] = \"AccessDenied\";\n ClusterStatus[ClusterStatus[\"Offline\"] = 0] = \"Offline\";\n})(ClusterStatus || (ClusterStatus = {}));\n/**\n * The OpenLens known static metadata keys\n */\nvar ClusterMetadataKey;\n(function (ClusterMetadataKey) {\n ClusterMetadataKey[\"VERSION\"] = \"version\";\n ClusterMetadataKey[\"CLUSTER_ID\"] = \"id\";\n ClusterMetadataKey[\"DISTRIBUTION\"] = \"distribution\";\n ClusterMetadataKey[\"NODES_COUNT\"] = \"nodes\";\n ClusterMetadataKey[\"LAST_SEEN\"] = \"lastSeen\";\n ClusterMetadataKey[\"PROMETHEUS\"] = \"prometheus\";\n})(ClusterMetadataKey || (ClusterMetadataKey = {}));\n/**\n * A shorthand enum for resource types that have metrics attached to them via OpenLens metrics stack\n */\nvar ClusterMetricsResourceType;\n(function (ClusterMetricsResourceType) {\n ClusterMetricsResourceType[\"Cluster\"] = \"Cluster\";\n ClusterMetricsResourceType[\"Node\"] = \"Node\";\n ClusterMetricsResourceType[\"Pod\"] = \"Pod\";\n ClusterMetricsResourceType[\"Deployment\"] = \"Deployment\";\n ClusterMetricsResourceType[\"StatefulSet\"] = \"StatefulSet\";\n ClusterMetricsResourceType[\"Container\"] = \"Container\";\n ClusterMetricsResourceType[\"Ingress\"] = \"Ingress\";\n ClusterMetricsResourceType[\"VolumeClaim\"] = \"VolumeClaim\";\n ClusterMetricsResourceType[\"ReplicaSet\"] = \"ReplicaSet\";\n ClusterMetricsResourceType[\"DaemonSet\"] = \"DaemonSet\";\n ClusterMetricsResourceType[\"Job\"] = \"Job\";\n ClusterMetricsResourceType[\"Namespace\"] = \"Namespace\";\n})(ClusterMetricsResourceType || (ClusterMetricsResourceType = {}));\n/**\n * The default node shell image\n */\nconst initialNodeShellImage = \"docker.io/alpine:3.13\";\n\n\n//# sourceURL=webpack://open-lens/./src/common/cluster-types.ts?");
29851
29851
 
29852
29852
  /***/ }),
29853
29853
 
@@ -29858,7 +29858,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
29858
29858
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29859
29859
 
29860
29860
  "use strict";
29861
- 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?");
29861
+ 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, { id, ...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 const { error } = _cluster_types__WEBPACK_IMPORTED_MODULE_4__.clusterModelIdChecker.validate({ id });\n if (error) {\n throw error;\n }\n this.id = 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 const { error } = _cluster_types__WEBPACK_IMPORTED_MODULE_4__.updateClusterModelChecker.validate(model, { allowUnknown: true });\n if (error) {\n throw error;\n }\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?");
29862
29862
 
29863
29863
  /***/ }),
29864
29864
 
@@ -31523,17 +31523,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
31523
31523
 
31524
31524
  /***/ }),
31525
31525
 
31526
- /***/ "./src/common/user-store/file-name-migration.injectable.ts":
31527
- /*!*****************************************************************!*\
31528
- !*** ./src/common/user-store/file-name-migration.injectable.ts ***!
31529
- \*****************************************************************/
31530
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31531
-
31532
- "use strict";
31533
- 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 fs_extra__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fs-extra */ \"./node_modules/fs-extra/lib/index.js\");\n/* harmony import */ var fs_extra__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fs_extra__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! path */ \"path\");\n/* harmony import */ var path__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _app_paths_directory_for_user_data_directory_for_user_data_injectable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../app-paths/directory-for-user-data/directory-for-user-data.injectable */ \"./src/common/app-paths/directory-for-user-data/directory-for-user-data.injectable.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ \"./src/common/utils/index.ts\");\n/* harmony import */ var _ogre_tools_injectable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ogre-tools/injectable */ \"./node_modules/@ogre-tools/injectable/build/index.js\");\n/* harmony import */ var _ogre_tools_injectable__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_ogre_tools_injectable__WEBPACK_IMPORTED_MODULE_4__);\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 userStoreFileNameMigrationInjectable = (0,_ogre_tools_injectable__WEBPACK_IMPORTED_MODULE_4__.getInjectable)({\n id: \"user-store-file-name-migration\",\n instantiate: (di) => {\n const userDataPath = di.inject(_app_paths_directory_for_user_data_directory_for_user_data_injectable__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n const configJsonPath = path__WEBPACK_IMPORTED_MODULE_1___default().join(userDataPath, \"config.json\");\n const lensUserStoreJsonPath = path__WEBPACK_IMPORTED_MODULE_1___default().join(userDataPath, \"lens-user-store.json\");\n try {\n fs_extra__WEBPACK_IMPORTED_MODULE_0___default().moveSync(configJsonPath, lensUserStoreJsonPath);\n }\n catch (error) {\n if (error instanceof Error && error.message === \"dest already exists.\") {\n fs_extra__WEBPACK_IMPORTED_MODULE_0___default().removeSync(configJsonPath);\n }\n else if ((0,_utils__WEBPACK_IMPORTED_MODULE_3__.isErrnoException)(error) && error.code === \"ENOENT\" && error.path === configJsonPath) {\n // (No such file or directory)\n return; // file already moved\n }\n else {\n // pass other errors along\n throw error;\n }\n }\n },\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (userStoreFileNameMigrationInjectable);\n\n\n//# sourceURL=webpack://open-lens/./src/common/user-store/file-name-migration.injectable.ts?");
31534
-
31535
- /***/ }),
31536
-
31537
31526
  /***/ "./src/common/user-store/index.ts":
31538
31527
  /*!****************************************!*\
31539
31528
  !*** ./src/common/user-store/index.ts ***!
@@ -31585,7 +31574,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
31585
31574
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31586
31575
 
31587
31576
  "use strict";
31588
- 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 electron__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! electron */ \"electron\");\n/* harmony import */ var electron__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(electron__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _file_name_migration_injectable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./file-name-migration.injectable */ \"./src/common/user-store/file-name-migration.injectable.ts\");\n/* harmony import */ var _user_store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./user-store */ \"./src/common/user-store/user-store.ts\");\n/* harmony import */ var _application_update_selected_update_channel_selected_update_channel_injectable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../application-update/selected-update-channel/selected-update-channel.injectable */ \"./src/common/application-update/selected-update-channel/selected-update-channel.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 userStoreInjectable = (0,_ogre_tools_injectable__WEBPACK_IMPORTED_MODULE_0__.getInjectable)({\n id: \"user-store\",\n instantiate: (di) => {\n _user_store__WEBPACK_IMPORTED_MODULE_3__.UserStore.resetInstance();\n if (electron__WEBPACK_IMPORTED_MODULE_1__.ipcMain) {\n di.inject(_file_name_migration_injectable__WEBPACK_IMPORTED_MODULE_2__[\"default\"]);\n }\n return _user_store__WEBPACK_IMPORTED_MODULE_3__.UserStore.createInstance({\n selectedUpdateChannel: di.inject(_application_update_selected_update_channel_selected_update_channel_injectable__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n });\n },\n causesSideEffects: true,\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (userStoreInjectable);\n\n\n//# sourceURL=webpack://open-lens/./src/common/user-store/user-store.injectable.ts?");
31577
+ 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 _user_store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./user-store */ \"./src/common/user-store/user-store.ts\");\n/* harmony import */ var _application_update_selected_update_channel_selected_update_channel_injectable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../application-update/selected-update-channel/selected-update-channel.injectable */ \"./src/common/application-update/selected-update-channel/selected-update-channel.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\nconst userStoreInjectable = (0,_ogre_tools_injectable__WEBPACK_IMPORTED_MODULE_0__.getInjectable)({\n id: \"user-store\",\n instantiate: (di) => {\n _user_store__WEBPACK_IMPORTED_MODULE_1__.UserStore.resetInstance();\n return _user_store__WEBPACK_IMPORTED_MODULE_1__.UserStore.createInstance({\n selectedUpdateChannel: di.inject(_application_update_selected_update_channel_selected_update_channel_injectable__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n });\n },\n causesSideEffects: true,\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (userStoreInjectable);\n\n\n//# sourceURL=webpack://open-lens/./src/common/user-store/user-store.injectable.ts?");
31589
31578
 
31590
31579
  /***/ }),
31591
31580
 
@@ -31596,7 +31585,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
31596
31585
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31597
31586
 
31598
31587
  "use strict";
31599
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"UserStore\": () => (/* binding */ UserStore)\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 mobx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! mobx */ \"./node_modules/mobx/dist/mobx.esm.js\");\n/* harmony import */ var _base_store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../base-store */ \"./src/common/base-store.ts\");\n/* harmony import */ var _migrations_user_store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../migrations/user-store */ \"./src/migrations/user-store/index.ts\");\n/* harmony import */ var _kube_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../kube-helpers */ \"./src/common/kube-helpers.ts\");\n/* harmony import */ var _renderer_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../renderer/utils */ \"./src/renderer/utils/index.ts\");\n/* harmony import */ var _preferences_helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./preferences-helpers */ \"./src/common/user-store/preferences-helpers.ts\");\n/* harmony import */ var _main_logger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../main/logger */ \"./src/main/logger.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\nclass UserStore extends _base_store__WEBPACK_IMPORTED_MODULE_1__.BaseStore /* implements UserStoreFlatModel (when strict null is enabled) */ {\n constructor(dependencies) {\n super({\n configName: \"lens-user-store\",\n migrations: _migrations_user_store__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n });\n Object.defineProperty(this, \"dependencies\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: dependencies\n });\n Object.defineProperty(this, \"displayName\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: \"UserStore\"\n });\n Object.defineProperty(this, \"lastSeenAppVersion\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: \"0.0.0\"\n });\n /**\n * used in add-cluster page for providing context\n * @deprecated No longer used\n */\n Object.defineProperty(this, \"kubeConfigPath\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: _kube_helpers__WEBPACK_IMPORTED_MODULE_3__.kubeConfigDefaultPath\n });\n /**\n * @deprecated No longer used\n */\n Object.defineProperty(this, \"seenContexts\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: mobx__WEBPACK_IMPORTED_MODULE_7__.observable.set()\n });\n /**\n * @deprecated No longer used\n */\n Object.defineProperty(this, \"newContexts\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: mobx__WEBPACK_IMPORTED_MODULE_7__.observable.set()\n });\n Object.defineProperty(this, \"allowErrorReporting\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"allowUntrustedCAs\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"colorTheme\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"terminalTheme\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"localeTimezone\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"downloadMirror\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"httpsProxy\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"shell\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"downloadBinariesPath\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"kubectlBinariesPath\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"terminalCopyOnSelect\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"terminalConfig\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"extensionRegistryUrl\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * Download kubectl binaries matching cluster version\n */\n Object.defineProperty(this, \"downloadKubectlBinaries\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * Whether the application should open itself at login.\n */\n Object.defineProperty(this, \"openAtLogin\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * The column IDs under each configurable table ID that have been configured\n * to not be shown\n */\n Object.defineProperty(this, \"hiddenTableColumns\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * Monaco editor configs\n */\n Object.defineProperty(this, \"editorConfiguration\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * The set of file/folder paths to be synced\n */\n Object.defineProperty(this, \"syncKubeconfigEntries\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n (0,mobx__WEBPACK_IMPORTED_MODULE_7__.makeObservable)(this);\n this.load();\n }\n get resolvedShell() {\n return this.shell || process.env.SHELL || process.env.PTYSHELL;\n }\n startMainReactions() {\n // open at system start-up\n (0,mobx__WEBPACK_IMPORTED_MODULE_7__.reaction)(() => this.openAtLogin, openAtLogin => {\n electron__WEBPACK_IMPORTED_MODULE_0__.app.setLoginItemSettings({\n openAtLogin,\n openAsHidden: true,\n args: [\"--hidden\"],\n });\n }, {\n fireImmediately: true,\n });\n }\n /**\n * Checks if a column (by ID) for a table (by ID) is configured to be hidden\n * @param tableId The ID of the table to be checked against\n * @param columnIds The list of IDs the check if one is hidden\n * @returns true if at least one column under the table is set to hidden\n */\n isTableColumnHidden(tableId, ...columnIds) {\n if (columnIds.length === 0) {\n return false;\n }\n const config = this.hiddenTableColumns.get(tableId);\n if (!config) {\n return false;\n }\n return columnIds.some(columnId => columnId && config.has(columnId));\n }\n /**\n * Toggles the hidden configuration of a table's column\n */\n toggleTableColumnVisibility(tableId, columnId) {\n (0,_renderer_utils__WEBPACK_IMPORTED_MODULE_4__.toggle)((0,_renderer_utils__WEBPACK_IMPORTED_MODULE_4__.getOrInsertSet)(this.hiddenTableColumns, tableId), columnId);\n }\n resetTheme() {\n this.colorTheme = _preferences_helpers__WEBPACK_IMPORTED_MODULE_5__.DESCRIPTORS.colorTheme.fromStore(undefined);\n }\n fromStore({ lastSeenAppVersion, preferences } = {}) {\n var _a;\n _main_logger__WEBPACK_IMPORTED_MODULE_6__[\"default\"].debug(\"UserStore.fromStore()\", { lastSeenAppVersion, preferences });\n if (lastSeenAppVersion) {\n this.lastSeenAppVersion = lastSeenAppVersion;\n }\n for (const [key, { fromStore }] of _renderer_utils__WEBPACK_IMPORTED_MODULE_4__.object.entries(_preferences_helpers__WEBPACK_IMPORTED_MODULE_5__.DESCRIPTORS)) {\n const curVal = this[key];\n const newVal = fromStore((_a = (preferences)) === null || _a === void 0 ? void 0 : _a[key]);\n if ((0,mobx__WEBPACK_IMPORTED_MODULE_7__.isObservableArray)(curVal)) {\n curVal.replace(newVal);\n }\n else if ((0,mobx__WEBPACK_IMPORTED_MODULE_7__.isObservableSet)(curVal) || (0,mobx__WEBPACK_IMPORTED_MODULE_7__.isObservableMap)(curVal)) {\n curVal.replace(newVal);\n }\n else {\n this[key] = newVal;\n }\n }\n // TODO: Switch to action-based saving instead saving stores by reaction\n if (preferences === null || preferences === void 0 ? void 0 : preferences.updateChannel) {\n this.dependencies.selectedUpdateChannel.setValue(preferences === null || preferences === void 0 ? void 0 : preferences.updateChannel);\n }\n }\n toJSON() {\n const preferences = _renderer_utils__WEBPACK_IMPORTED_MODULE_4__.object.fromEntries(_renderer_utils__WEBPACK_IMPORTED_MODULE_4__.object.entries(_preferences_helpers__WEBPACK_IMPORTED_MODULE_5__.DESCRIPTORS)\n .map(([key, { toStore }]) => [key, toStore(this[key])]));\n return (0,_renderer_utils__WEBPACK_IMPORTED_MODULE_4__.toJS)({\n lastSeenAppVersion: this.lastSeenAppVersion,\n preferences: {\n ...preferences,\n updateChannel: this.dependencies.selectedUpdateChannel.value.get().id,\n },\n });\n }\n}\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"lastSeenAppVersion\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"kubeConfigPath\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"seenContexts\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"newContexts\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"allowErrorReporting\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"allowUntrustedCAs\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"colorTheme\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"terminalTheme\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"localeTimezone\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"downloadMirror\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"httpsProxy\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"shell\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"downloadBinariesPath\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"kubectlBinariesPath\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"terminalCopyOnSelect\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"terminalConfig\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"extensionRegistryUrl\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"downloadKubectlBinaries\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"openAtLogin\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"hiddenTableColumns\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"editorConfiguration\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"syncKubeconfigEntries\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.computed,\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [])\n], UserStore.prototype, \"resolvedShell\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n], UserStore.prototype, \"resetTheme\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], UserStore.prototype, \"fromStore\", null);\n\n\n//# sourceURL=webpack://open-lens/./src/common/user-store/user-store.ts?");
31588
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"UserStore\": () => (/* binding */ UserStore)\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 mobx__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! mobx */ \"./node_modules/mobx/dist/mobx.esm.js\");\n/* harmony import */ var _base_store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../base-store */ \"./src/common/base-store.ts\");\n/* harmony import */ var _migrations_user_store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../migrations/user-store */ \"./src/migrations/user-store/index.ts\");\n/* harmony import */ var _kube_helpers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../kube-helpers */ \"./src/common/kube-helpers.ts\");\n/* harmony import */ var _renderer_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../renderer/utils */ \"./src/renderer/utils/index.ts\");\n/* harmony import */ var _preferences_helpers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./preferences-helpers */ \"./src/common/user-store/preferences-helpers.ts\");\n/* harmony import */ var _main_logger__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../main/logger */ \"./src/main/logger.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\nclass UserStore extends _base_store__WEBPACK_IMPORTED_MODULE_1__.BaseStore /* implements UserStoreFlatModel (when strict null is enabled) */ {\n constructor(dependencies) {\n super({\n configName: \"lens-user-store\",\n migrations: _migrations_user_store__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n });\n Object.defineProperty(this, \"dependencies\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: dependencies\n });\n Object.defineProperty(this, \"displayName\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: \"UserStore\"\n });\n Object.defineProperty(this, \"lastSeenAppVersion\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: \"0.0.0\"\n });\n /**\n * used in add-cluster page for providing context\n * @deprecated No longer used\n */\n Object.defineProperty(this, \"kubeConfigPath\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: _kube_helpers__WEBPACK_IMPORTED_MODULE_3__.kubeConfigDefaultPath\n });\n /**\n * @deprecated No longer used\n */\n Object.defineProperty(this, \"seenContexts\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: mobx__WEBPACK_IMPORTED_MODULE_7__.observable.set()\n });\n /**\n * @deprecated No longer used\n */\n Object.defineProperty(this, \"newContexts\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: mobx__WEBPACK_IMPORTED_MODULE_7__.observable.set()\n });\n Object.defineProperty(this, \"allowErrorReporting\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"allowUntrustedCAs\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"colorTheme\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"terminalTheme\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"localeTimezone\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"downloadMirror\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"httpsProxy\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"shell\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"downloadBinariesPath\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"kubectlBinariesPath\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"terminalCopyOnSelect\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"terminalConfig\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"extensionRegistryUrl\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * Download kubectl binaries matching cluster version\n */\n Object.defineProperty(this, \"downloadKubectlBinaries\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * Whether the application should open itself at login.\n */\n Object.defineProperty(this, \"openAtLogin\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * The column IDs under each configurable table ID that have been configured\n * to not be shown\n */\n Object.defineProperty(this, \"hiddenTableColumns\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * Monaco editor configs\n */\n Object.defineProperty(this, \"editorConfiguration\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n /**\n * The set of file/folder paths to be synced\n */\n Object.defineProperty(this, \"syncKubeconfigEntries\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n (0,mobx__WEBPACK_IMPORTED_MODULE_7__.makeObservable)(this);\n }\n get resolvedShell() {\n return this.shell || process.env.SHELL || process.env.PTYSHELL;\n }\n startMainReactions() {\n // open at system start-up\n (0,mobx__WEBPACK_IMPORTED_MODULE_7__.reaction)(() => this.openAtLogin, openAtLogin => {\n electron__WEBPACK_IMPORTED_MODULE_0__.app.setLoginItemSettings({\n openAtLogin,\n openAsHidden: true,\n args: [\"--hidden\"],\n });\n }, {\n fireImmediately: true,\n });\n }\n /**\n * Checks if a column (by ID) for a table (by ID) is configured to be hidden\n * @param tableId The ID of the table to be checked against\n * @param columnIds The list of IDs the check if one is hidden\n * @returns true if at least one column under the table is set to hidden\n */\n isTableColumnHidden(tableId, ...columnIds) {\n if (columnIds.length === 0) {\n return false;\n }\n const config = this.hiddenTableColumns.get(tableId);\n if (!config) {\n return false;\n }\n return columnIds.some(columnId => columnId && config.has(columnId));\n }\n /**\n * Toggles the hidden configuration of a table's column\n */\n toggleTableColumnVisibility(tableId, columnId) {\n (0,_renderer_utils__WEBPACK_IMPORTED_MODULE_4__.toggle)((0,_renderer_utils__WEBPACK_IMPORTED_MODULE_4__.getOrInsertSet)(this.hiddenTableColumns, tableId), columnId);\n }\n resetTheme() {\n this.colorTheme = _preferences_helpers__WEBPACK_IMPORTED_MODULE_5__.DESCRIPTORS.colorTheme.fromStore(undefined);\n }\n fromStore({ lastSeenAppVersion, preferences } = {}) {\n var _a;\n _main_logger__WEBPACK_IMPORTED_MODULE_6__[\"default\"].debug(\"UserStore.fromStore()\", { lastSeenAppVersion, preferences });\n if (lastSeenAppVersion) {\n this.lastSeenAppVersion = lastSeenAppVersion;\n }\n for (const [key, { fromStore }] of _renderer_utils__WEBPACK_IMPORTED_MODULE_4__.object.entries(_preferences_helpers__WEBPACK_IMPORTED_MODULE_5__.DESCRIPTORS)) {\n const curVal = this[key];\n const newVal = fromStore((_a = (preferences)) === null || _a === void 0 ? void 0 : _a[key]);\n if ((0,mobx__WEBPACK_IMPORTED_MODULE_7__.isObservableArray)(curVal)) {\n curVal.replace(newVal);\n }\n else if ((0,mobx__WEBPACK_IMPORTED_MODULE_7__.isObservableSet)(curVal) || (0,mobx__WEBPACK_IMPORTED_MODULE_7__.isObservableMap)(curVal)) {\n curVal.replace(newVal);\n }\n else {\n this[key] = newVal;\n }\n }\n // TODO: Switch to action-based saving instead saving stores by reaction\n if (preferences === null || preferences === void 0 ? void 0 : preferences.updateChannel) {\n this.dependencies.selectedUpdateChannel.setValue(preferences === null || preferences === void 0 ? void 0 : preferences.updateChannel);\n }\n }\n toJSON() {\n const preferences = _renderer_utils__WEBPACK_IMPORTED_MODULE_4__.object.fromEntries(_renderer_utils__WEBPACK_IMPORTED_MODULE_4__.object.entries(_preferences_helpers__WEBPACK_IMPORTED_MODULE_5__.DESCRIPTORS)\n .map(([key, { toStore }]) => [key, toStore(this[key])]));\n return (0,_renderer_utils__WEBPACK_IMPORTED_MODULE_4__.toJS)({\n lastSeenAppVersion: this.lastSeenAppVersion,\n preferences: {\n ...preferences,\n updateChannel: this.dependencies.selectedUpdateChannel.value.get().id,\n },\n });\n }\n}\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"lastSeenAppVersion\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"kubeConfigPath\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"seenContexts\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"newContexts\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"allowErrorReporting\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"allowUntrustedCAs\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"colorTheme\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"terminalTheme\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"localeTimezone\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"downloadMirror\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"httpsProxy\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"shell\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"downloadBinariesPath\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"kubectlBinariesPath\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"terminalCopyOnSelect\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"terminalConfig\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"extensionRegistryUrl\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"downloadKubectlBinaries\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"openAtLogin\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"hiddenTableColumns\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"editorConfiguration\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.observable,\n __metadata(\"design:type\", Object)\n], UserStore.prototype, \"syncKubeconfigEntries\", void 0);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.computed,\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [])\n], UserStore.prototype, \"resolvedShell\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", []),\n __metadata(\"design:returntype\", void 0)\n], UserStore.prototype, \"resetTheme\", null);\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_7__.action,\n __metadata(\"design:type\", Function),\n __metadata(\"design:paramtypes\", [Object]),\n __metadata(\"design:returntype\", void 0)\n], UserStore.prototype, \"fromStore\", null);\n\n\n//# sourceURL=webpack://open-lens/./src/common/user-store/user-store.ts?");
31600
31589
 
31601
31590
  /***/ }),
31602
31591
 
@@ -31860,7 +31849,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
31860
31849
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31861
31850
 
31862
31851
  "use strict";
31863
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"every\": () => (/* binding */ every),\n/* harmony export */ \"filter\": () => (/* binding */ filter),\n/* harmony export */ \"filterFlatMap\": () => (/* binding */ filterFlatMap),\n/* harmony export */ \"filterMap\": () => (/* binding */ filterMap),\n/* harmony export */ \"filterMapStrict\": () => (/* binding */ filterMapStrict),\n/* harmony export */ \"find\": () => (/* binding */ find),\n/* harmony export */ \"first\": () => (/* binding */ first),\n/* harmony export */ \"flatMap\": () => (/* binding */ flatMap),\n/* harmony export */ \"join\": () => (/* binding */ join),\n/* harmony export */ \"map\": () => (/* binding */ map),\n/* harmony export */ \"newEmpty\": () => (/* binding */ newEmpty),\n/* harmony export */ \"nth\": () => (/* binding */ nth),\n/* harmony export */ \"pipeline\": () => (/* binding */ pipeline),\n/* harmony export */ \"reduce\": () => (/* binding */ reduce),\n/* harmony export */ \"take\": () => (/* binding */ take)\n/* harmony export */ });\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\nfunction pipeline(src) {\n return {\n filter: (fn) => pipeline(filter(src, fn)),\n filterMap: (fn) => pipeline(filterMap(src, fn)),\n map: (fn) => pipeline(map(src, fn)),\n find: (fn) => find(src, fn),\n join: (sep) => join(src, sep),\n collect: (fn) => fn(src),\n };\n}\n/**\n * Create a new type safe empty Iterable\n * @returns An `Iterable` that yields 0 items\n */\nfunction* newEmpty() { }\n/**\n * Creates a new `Iterable` that yields at most n items from src.\n * Does not modify `src` which can be used later.\n * @param src An initial iterator\n * @param n The maximum number of elements to take from src. Yields up to the floor of `n` and 0 items if n < 0\n */\nfunction* take(src, n) {\n outer: for (let i = 0; i < n; i += 1) {\n for (const item of src) {\n yield item;\n continue outer;\n }\n // if we are here that means that `src` has been exhausted. Don't bother trying again.\n break outer;\n }\n}\n/**\n * Creates a new iterator that iterates (lazily) over its input and yields the\n * result of `fn` for each item.\n * @param src A type that can be iterated over\n * @param fn The function that is called for each value\n */\nfunction* map(src, fn) {\n for (const from of src) {\n yield fn(from);\n }\n}\n/**\n * The single layer flattening of an iterator, discarding `Falsey` values.\n * @param src A type that can be iterated over\n * @param fn The function that returns either an iterable over items that should be filtered out or a `Falsey` value indicating that it should be ignored\n */\nfunction* filterFlatMap(src, fn) {\n for (const from of src) {\n if (!from) {\n continue;\n }\n const mapping = fn(from);\n if (!mapping) {\n continue;\n }\n for (const mapped of mapping) {\n if (mapped) {\n yield mapped;\n }\n }\n }\n}\n/**\n * Returns a new iterator that yields the items that each call to `fn` would produce\n * @param src A type that can be iterated over\n * @param fn A function that returns an iterator\n */\nfunction* flatMap(src, fn) {\n for (const from of src) {\n yield* fn(from);\n }\n}\n/**\n * Creates a new iterator that iterates (lazily) over its input and yields the\n * items that return a `truthy` value from `fn`.\n * @param src A type that can be iterated over\n * @param fn The function that is called for each value\n */\nfunction* filter(src, fn) {\n for (const from of src) {\n if (fn(from)) {\n yield from;\n }\n }\n}\n/**\n * Creates a new iterator that iterates (lazily) over its input and yields the\n * result of `fn` when it is `truthy`\n * @param src A type that can be iterated over\n * @param fn The function that is called for each value\n */\nfunction* filterMap(src, fn) {\n for (const from of src) {\n const res = fn(from);\n if (res) {\n yield res;\n }\n }\n}\n/**\n * Creates a new iterator that iterates (lazily) over its input and yields the\n * result of `fn` when it is not null or undefined\n * @param src A type that can be iterated over\n * @param fn The function that is called for each value\n */\nfunction* filterMapStrict(src, fn) {\n for (const from of src) {\n const res = fn(from);\n if (res != null) {\n yield res;\n }\n }\n}\n/**\n * Iterate through `src` until `match` returns a truthy value\n * @param src A type that can be iterated over\n * @param match A function that should return a truthy value for the item that you want to find\n * @returns The first entry that `match` returns a truthy value for, or `undefined`\n */\nfunction find(src, match) {\n for (const from of src) {\n if (match(from)) {\n return from;\n }\n }\n return void 0;\n}\nfunction reduce(src, reducer, initial) {\n let acc = initial;\n for (const item of src) {\n acc = reducer(acc, item);\n }\n return acc;\n}\n/**\n * A convenience function for reducing over an iterator of strings and concatenating them together\n * @param src The value to iterate over\n * @param connector The string value to intersperse between the yielded values\n * @returns The concatenated entries of `src` interspersed with copies of `connector`\n */\nfunction join(src, connector = \",\") {\n const iterSrc = src[Symbol.iterator]();\n const first = iterSrc.next();\n if (first.done === true) {\n return \"\";\n }\n return reduce(iterSrc, (acc, cur) => `${acc}${connector}${cur}`, `${first.value}`);\n}\n/**\n * Iterate `n` times and then return the next value.\n * @param src The value to iterate over\n * @param n The zero-index value for the item to return to.\n */\nfunction nth(src, n) {\n const iterator = src[Symbol.iterator]();\n while (n-- > 0) {\n iterator.next();\n }\n return iterator.next().value;\n}\n/**\n * A convenience function to get the first item of an iterator\n * @param src The value to iterate over\n */\nfunction first(src) {\n return nth(src, 0);\n}\n/**\n * Iterate through `src` and return `true` if `fn` returns a thruthy value for every yielded value.\n * Otherwise, return `false`. This function short circuits.\n * @param src The type to be iterated over\n * @param fn A function to check each iteration\n */\nfunction every(src, fn) {\n for (const val of src) {\n if (!fn(val)) {\n return false;\n }\n }\n return true;\n}\n\n\n//# sourceURL=webpack://open-lens/./src/common/utils/iter.ts?");
31852
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"every\": () => (/* binding */ every),\n/* harmony export */ \"filter\": () => (/* binding */ filter),\n/* harmony export */ \"filterFlatMap\": () => (/* binding */ filterFlatMap),\n/* harmony export */ \"filterMap\": () => (/* binding */ filterMap),\n/* harmony export */ \"filterMapStrict\": () => (/* binding */ filterMapStrict),\n/* harmony export */ \"find\": () => (/* binding */ find),\n/* harmony export */ \"first\": () => (/* binding */ first),\n/* harmony export */ \"flatMap\": () => (/* binding */ flatMap),\n/* harmony export */ \"join\": () => (/* binding */ join),\n/* harmony export */ \"map\": () => (/* binding */ map),\n/* harmony export */ \"newEmpty\": () => (/* binding */ newEmpty),\n/* harmony export */ \"nth\": () => (/* binding */ nth),\n/* harmony export */ \"pipeline\": () => (/* binding */ pipeline),\n/* harmony export */ \"reduce\": () => (/* binding */ reduce),\n/* harmony export */ \"take\": () => (/* binding */ take)\n/* harmony export */ });\n/**\n * Copyright (c) OpenLens Authors. All rights reserved.\n * Licensed under MIT License. See LICENSE in root directory for more information.\n */\nfunction pipeline(src) {\n return {\n filter: (fn) => pipeline(filter(src, fn)),\n filterMap: (fn) => pipeline(filterMap(src, fn)),\n map: (fn) => pipeline(map(src, fn)),\n flatMap: (fn) => pipeline(flatMap(src, fn)),\n find: (fn) => find(src, fn),\n join: (sep) => join(src, sep),\n collect: (fn) => fn(src),\n };\n}\n/**\n * Create a new type safe empty Iterable\n * @returns An `Iterable` that yields 0 items\n */\nfunction* newEmpty() { }\n/**\n * Creates a new `Iterable` that yields at most n items from src.\n * Does not modify `src` which can be used later.\n * @param src An initial iterator\n * @param n The maximum number of elements to take from src. Yields up to the floor of `n` and 0 items if n < 0\n */\nfunction* take(src, n) {\n outer: for (let i = 0; i < n; i += 1) {\n for (const item of src) {\n yield item;\n continue outer;\n }\n // if we are here that means that `src` has been exhausted. Don't bother trying again.\n break outer;\n }\n}\n/**\n * Creates a new iterator that iterates (lazily) over its input and yields the\n * result of `fn` for each item.\n * @param src A type that can be iterated over\n * @param fn The function that is called for each value\n */\nfunction* map(src, fn) {\n for (const from of src) {\n yield fn(from);\n }\n}\n/**\n * The single layer flattening of an iterator, discarding `Falsey` values.\n * @param src A type that can be iterated over\n * @param fn The function that returns either an iterable over items that should be filtered out or a `Falsey` value indicating that it should be ignored\n */\nfunction* filterFlatMap(src, fn) {\n for (const from of src) {\n if (!from) {\n continue;\n }\n const mapping = fn(from);\n if (!mapping) {\n continue;\n }\n for (const mapped of mapping) {\n if (mapped) {\n yield mapped;\n }\n }\n }\n}\n/**\n * Returns a new iterator that yields the items that each call to `fn` would produce\n * @param src A type that can be iterated over\n * @param fn A function that returns an iterator\n */\nfunction* flatMap(src, fn) {\n for (const from of src) {\n yield* fn(from);\n }\n}\n/**\n * Creates a new iterator that iterates (lazily) over its input and yields the\n * items that return a `truthy` value from `fn`.\n * @param src A type that can be iterated over\n * @param fn The function that is called for each value\n */\nfunction* filter(src, fn) {\n for (const from of src) {\n if (fn(from)) {\n yield from;\n }\n }\n}\n/**\n * Creates a new iterator that iterates (lazily) over its input and yields the\n * result of `fn` when it is `truthy`\n * @param src A type that can be iterated over\n * @param fn The function that is called for each value\n */\nfunction* filterMap(src, fn) {\n for (const from of src) {\n const res = fn(from);\n if (res) {\n yield res;\n }\n }\n}\n/**\n * Creates a new iterator that iterates (lazily) over its input and yields the\n * result of `fn` when it is not null or undefined\n * @param src A type that can be iterated over\n * @param fn The function that is called for each value\n */\nfunction* filterMapStrict(src, fn) {\n for (const from of src) {\n const res = fn(from);\n if (res != null) {\n yield res;\n }\n }\n}\n/**\n * Iterate through `src` until `match` returns a truthy value\n * @param src A type that can be iterated over\n * @param match A function that should return a truthy value for the item that you want to find\n * @returns The first entry that `match` returns a truthy value for, or `undefined`\n */\nfunction find(src, match) {\n for (const from of src) {\n if (match(from)) {\n return from;\n }\n }\n return void 0;\n}\nfunction reduce(src, reducer, initial) {\n let acc = initial;\n for (const item of src) {\n acc = reducer(acc, item);\n }\n return acc;\n}\n/**\n * A convenience function for reducing over an iterator of strings and concatenating them together\n * @param src The value to iterate over\n * @param connector The string value to intersperse between the yielded values\n * @returns The concatenated entries of `src` interspersed with copies of `connector`\n */\nfunction join(src, connector = \",\") {\n const iterSrc = src[Symbol.iterator]();\n const first = iterSrc.next();\n if (first.done === true) {\n return \"\";\n }\n return reduce(iterSrc, (acc, cur) => `${acc}${connector}${cur}`, `${first.value}`);\n}\n/**\n * Iterate `n` times and then return the next value.\n * @param src The value to iterate over\n * @param n The zero-index value for the item to return to.\n */\nfunction nth(src, n) {\n const iterator = src[Symbol.iterator]();\n while (n-- > 0) {\n iterator.next();\n }\n return iterator.next().value;\n}\n/**\n * A convenience function to get the first item of an iterator\n * @param src The value to iterate over\n */\nfunction first(src) {\n return nth(src, 0);\n}\n/**\n * Iterate through `src` and return `true` if `fn` returns a thruthy value for every yielded value.\n * Otherwise, return `false`. This function short circuits.\n * @param src The type to be iterated over\n * @param fn A function to check each iteration\n */\nfunction every(src, fn) {\n for (const val of src) {\n if (!fn(val)) {\n return false;\n }\n }\n return true;\n}\n\n\n//# sourceURL=webpack://open-lens/./src/common/utils/iter.ts?");
31864
31853
 
31865
31854
  /***/ }),
31866
31855
 
@@ -32278,7 +32267,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
32278
32267
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32279
32268
 
32280
32269
  "use strict";
32281
- 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 _build_semantic_version_injectable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./build-semantic-version.injectable */ \"./src/common/vars/build-semantic-version.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\nconst releaseChannelInjectable = (0,_ogre_tools_injectable__WEBPACK_IMPORTED_MODULE_0__.getInjectable)({\n id: \"release-channel\",\n instantiate: (di) => {\n const buildSemanticVersion = di.inject(_build_semantic_version_injectable__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n const currentReleaseChannel = buildSemanticVersion.get().prerelease[0];\n switch (currentReleaseChannel) {\n case \"latest\":\n case \"beta\":\n case \"alpha\":\n return currentReleaseChannel;\n default:\n return \"latest\";\n }\n },\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (releaseChannelInjectable);\n\n\n//# sourceURL=webpack://open-lens/./src/common/vars/release-channel.injectable.ts?");
32270
+ 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 _initializable_state_create__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../initializable-state/create */ \"./src/common/initializable-state/create.ts\");\n/* harmony import */ var _build_semantic_version_injectable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./build-semantic-version.injectable */ \"./src/common/vars/build-semantic-version.injectable.ts\");\n\n\nconst releaseChannelInjectable = (0,_initializable_state_create__WEBPACK_IMPORTED_MODULE_0__.createInitializableState)({\n id: \"release-channel\",\n init: (di) => {\n const buildSemanticVersion = di.inject(_build_semantic_version_injectable__WEBPACK_IMPORTED_MODULE_1__[\"default\"]);\n const currentReleaseChannel = buildSemanticVersion.get().prerelease[0];\n switch (currentReleaseChannel) {\n case \"latest\":\n case \"beta\":\n case \"alpha\":\n return currentReleaseChannel;\n default:\n return \"latest\";\n }\n },\n});\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (releaseChannelInjectable);\n\n\n//# sourceURL=webpack://open-lens/./src/common/vars/release-channel.injectable.ts?");
32282
32271
 
32283
32272
  /***/ }),
32284
32273
 
@@ -34522,7 +34511,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
34522
34511
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34523
34512
 
34524
34513
  "use strict";
34525
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ItemListLayoutContent\": () => (/* binding */ ItemListLayoutContent)\n/* harmony export */ });\n/* harmony import */ var _item_list_layout_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./item-list-layout.scss */ \"./src/renderer/components/item-object-list/item-list-layout.scss\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! mobx */ \"./node_modules/mobx/dist/mobx.esm.js\");\n/* harmony import */ var mobx_react__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! mobx-react */ \"./node_modules/mobx-react-lite/es/index.js\");\n/* harmony import */ var mobx_react__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! mobx-react */ \"./node_modules/mobx-react/dist/mobxreact.esm.js\");\n/* harmony import */ var _table__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../table */ \"./src/renderer/components/table/index.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils */ \"./src/renderer/utils/index.ts\");\n/* harmony import */ var _add_remove_buttons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../add-remove-buttons */ \"./src/renderer/components/add-remove-buttons/index.ts\");\n/* harmony import */ var _no_items__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../no-items */ \"./src/renderer/components/no-items/index.ts\");\n/* harmony import */ var _spinner__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../spinner */ \"./src/renderer/components/spinner/index.ts\");\n/* harmony import */ var _menu_menu_actions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../menu/menu-actions */ \"./src/renderer/components/menu/menu-actions.tsx\");\n/* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../menu */ \"./src/renderer/components/menu/index.ts\");\n/* harmony import */ var _checkbox__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../checkbox */ \"./src/renderer/components/checkbox/index.ts\");\n/* harmony import */ var _ogre_tools_injectable_react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @ogre-tools/injectable-react */ \"./node_modules/@ogre-tools/injectable-react/build/index.js\");\n/* harmony import */ var _ogre_tools_injectable_react__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_ogre_tools_injectable_react__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _common_user_store_user_store_injectable__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../common/user-store/user-store.injectable */ \"./src/common/user-store/user-store.injectable.ts\");\n/* harmony import */ var _page_filters_store_injectable__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./page-filters/store.injectable */ \"./src/renderer/components/item-object-list/page-filters/store.injectable.ts\");\n/* harmony import */ var _confirm_dialog_open_injectable__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../confirm-dialog/open.injectable */ \"./src/renderer/components/confirm-dialog/open.injectable.ts\");\n/* harmony import */ var _themes_active_injectable__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../themes/active.injectable */ \"./src/renderer/themes/active.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 */\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\n\n\n\n\nlet NonInjectedItemListLayoutContent = class NonInjectedItemListLayoutContent extends react__WEBPACK_IMPORTED_MODULE_1__.Component {\n constructor(props) {\n super(props);\n (0,mobx__WEBPACK_IMPORTED_MODULE_15__.makeObservable)(this);\n (0,_utils__WEBPACK_IMPORTED_MODULE_3__.autoBind)(this);\n }\n get failedToLoad() {\n return this.props.store.failedLoading;\n }\n renderRow(item) {\n return this.getTableRow(item);\n }\n getTableRow(item) {\n const { isSelectable, renderTableHeader, renderTableContents, renderItemMenu, store, hasDetailsView, onDetails, copyClassNameFromHeadCells, customizeTableRowProps = () => ({}), detailsItem, } = this.props;\n const { isSelected } = store;\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_2__.TableRow, { nowrap: true, searchItem: item, sortItem: item, selected: detailsItem && detailsItem.getId() === item.getId(), onClick: hasDetailsView ? (0,_utils__WEBPACK_IMPORTED_MODULE_3__.prevDefault)(() => onDetails === null || onDetails === void 0 ? void 0 : onDetails(item)) : undefined, ...customizeTableRowProps(item) },\n isSelectable && (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_2__.TableCell, { checkbox: true, isChecked: isSelected(item), onClick: (0,_utils__WEBPACK_IMPORTED_MODULE_3__.prevDefault)(() => store.toggleSelection(item)) })),\n renderTableContents(item).map((content, index) => {\n const cellProps = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.isReactNode)(content)\n ? { children: content }\n : content;\n const headCell = renderTableHeader === null || renderTableHeader === void 0 ? void 0 : renderTableHeader[index];\n if (copyClassNameFromHeadCells && headCell) {\n cellProps.className = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.cssNames)(cellProps.className, headCell.className);\n }\n if (!headCell || this.showColumn(headCell)) {\n return react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_2__.TableCell, { key: index, ...cellProps });\n }\n return null;\n }),\n renderItemMenu && (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_2__.TableCell, { className: \"menu\" },\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"div\", { onClick: _utils__WEBPACK_IMPORTED_MODULE_3__.stopPropagation }, renderItemMenu(item, store))))));\n }\n getRow(uid) {\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"div\", { key: uid },\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(mobx_react__WEBPACK_IMPORTED_MODULE_16__.Observer, null, () => {\n const item = this.props.getItems().find(item => item.getId() === uid);\n if (!item)\n return null;\n return this.getTableRow(item);\n })));\n }\n removeItemsDialog(selectedItems) {\n const { customizeRemoveDialog, store, openConfirmDialog } = this.props;\n const visibleMaxNamesCount = 5;\n const selectedNames = selectedItems.map(ns => ns.getName()).slice(0, visibleMaxNamesCount).join(\", \");\n const dialogCustomProps = customizeRemoveDialog ? customizeRemoveDialog(selectedItems) : {};\n const selectedCount = selectedItems.length;\n const tailCount = selectedCount > visibleMaxNamesCount\n ? selectedCount - visibleMaxNamesCount\n : 0;\n const tail = tailCount > 0\n ? (react__WEBPACK_IMPORTED_MODULE_1__.createElement(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, null,\n \", and \",\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"b\", null, tailCount),\n \" more\"))\n : null;\n const message = selectedCount <= 1\n ? (react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"p\", null,\n \"Remove item \",\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"b\", null, selectedNames),\n \"?\"))\n : (react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"p\", null,\n \"Remove\",\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"b\", null, selectedCount),\n \" items \",\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"b\", null, selectedNames),\n tail,\n \"?\"));\n const { removeSelectedItems, removeItems } = store;\n const onConfirm = typeof removeItems === \"function\"\n ? () => removeItems.apply(store, [selectedItems])\n : typeof removeSelectedItems === \"function\"\n ? removeSelectedItems.bind(store)\n : _utils__WEBPACK_IMPORTED_MODULE_3__.noop;\n openConfirmDialog({\n ok: onConfirm,\n labelOk: \"Remove\",\n message,\n ...dialogCustomProps,\n });\n }\n renderNoItems() {\n if (this.failedToLoad) {\n return react__WEBPACK_IMPORTED_MODULE_1__.createElement(_no_items__WEBPACK_IMPORTED_MODULE_5__.NoItems, null, this.props.failedToLoadMessage);\n }\n if (!this.props.getIsReady()) {\n return react__WEBPACK_IMPORTED_MODULE_1__.createElement(_spinner__WEBPACK_IMPORTED_MODULE_6__.Spinner, { center: true, \"data-testid\": this.props.spinnerTestId });\n }\n if (this.props.getFilters().length > 0) {\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_no_items__WEBPACK_IMPORTED_MODULE_5__.NoItems, null,\n \"No items found.\",\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"p\", null,\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"a\", { onClick: () => this.props.pageFiltersStore.reset(), className: \"contrast\" }, \"Reset filters?\"))));\n }\n return react__WEBPACK_IMPORTED_MODULE_1__.createElement(_no_items__WEBPACK_IMPORTED_MODULE_5__.NoItems, null);\n }\n renderItems() {\n if (this.props.virtual) {\n return null;\n }\n return this.props.getItems().map(item => this.getRow(item.getId()));\n }\n renderTableHeader() {\n const { customizeTableRowProps, renderTableHeader, isSelectable, isConfigurable, store } = this.props;\n if (!renderTableHeader) {\n return null;\n }\n const enabledItems = this.props.getItems().filter(item => !(customizeTableRowProps === null || customizeTableRowProps === void 0 ? void 0 : customizeTableRowProps(item).disabled));\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_2__.TableHead, { showTopLine: true, nowrap: true },\n isSelectable && (react__WEBPACK_IMPORTED_MODULE_1__.createElement(mobx_react__WEBPACK_IMPORTED_MODULE_16__.Observer, null, () => (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_2__.TableCell, { checkbox: true, isChecked: store.isSelectedAll(enabledItems), onClick: (0,_utils__WEBPACK_IMPORTED_MODULE_3__.prevDefault)(() => store.toggleSelectionAll(enabledItems)) })))),\n renderTableHeader\n .filter(_utils__WEBPACK_IMPORTED_MODULE_3__.isDefined)\n .map((cellProps, index) => {\n var _a;\n return (this.showColumn(cellProps) && (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_2__.TableCell, { key: (_a = cellProps.id) !== null && _a !== void 0 ? _a : index, ...cellProps })));\n }),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_2__.TableCell, { className: \"menu\" }, isConfigurable && this.renderColumnVisibilityMenu())));\n }\n render() {\n const { store, hasDetailsView, addRemoveButtons = {}, virtual, sortingCallbacks, detailsItem, className, tableProps = {}, tableId, getItems, activeTheme, } = this.props;\n const selectedItemId = detailsItem && detailsItem.getId();\n const classNames = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.cssNames)(className, \"box\", \"grow\", activeTheme.get().type);\n const items = getItems();\n const selectedItems = store.pickOnlySelected(items);\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"div\", { className: \"items box grow flex column\" },\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_2__.Table, { tableId: tableId, virtual: virtual, selectable: hasDetailsView, sortable: sortingCallbacks, getTableRow: this.getRow, renderRow: virtual ? undefined : this.renderRow, items: items, selectedItemId: selectedItemId, noItems: this.renderNoItems(), className: classNames, ...tableProps },\n this.renderTableHeader(),\n this.renderItems()),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(mobx_react__WEBPACK_IMPORTED_MODULE_16__.Observer, null, () => (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_add_remove_buttons__WEBPACK_IMPORTED_MODULE_4__.AddRemoveButtons, { onRemove: (store.removeItems || store.removeSelectedItems) && selectedItems.length > 0\n ? () => this.removeItemsDialog(selectedItems)\n : undefined, removeTooltip: `Remove selected items (${selectedItems.length})`, ...addRemoveButtons })))));\n }\n showColumn({ id: columnId, showWithColumn }) {\n const { tableId, isConfigurable } = this.props;\n return !isConfigurable || !tableId || !this.props.userStore.isTableColumnHidden(tableId, columnId, showWithColumn);\n }\n renderColumnVisibilityMenu() {\n const { renderTableHeader = [], tableId } = this.props;\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_menu_menu_actions__WEBPACK_IMPORTED_MODULE_7__.MenuActions, { id: \"menu-actions-for-item-object-list-content\", className: \"ItemListLayoutVisibilityMenu\", toolbar: false, autoCloseOnSelect: false }, renderTableHeader\n .filter(_utils__WEBPACK_IMPORTED_MODULE_3__.isDefined)\n .map((cellProps, index) => {\n var _a;\n return (!cellProps.showWithColumn && (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_menu__WEBPACK_IMPORTED_MODULE_8__.MenuItem, { key: index, className: \"input\" },\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_checkbox__WEBPACK_IMPORTED_MODULE_9__.Checkbox, { label: (_a = cellProps.title) !== null && _a !== void 0 ? _a : `<${cellProps.className}>`, value: this.showColumn(cellProps), onChange: (tableId\n ? (() => cellProps.id && this.props.userStore.toggleTableColumnVisibility(tableId, cellProps.id))\n : undefined) }))));\n })));\n }\n};\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_15__.computed,\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [])\n], NonInjectedItemListLayoutContent.prototype, \"failedToLoad\", null);\nNonInjectedItemListLayoutContent = __decorate([\n mobx_react__WEBPACK_IMPORTED_MODULE_17__.observer,\n __metadata(\"design:paramtypes\", [Object])\n], NonInjectedItemListLayoutContent);\nconst ItemListLayoutContent = (0,_ogre_tools_injectable_react__WEBPACK_IMPORTED_MODULE_10__.withInjectables)(NonInjectedItemListLayoutContent, {\n getProps: (di, props) => ({\n ...props,\n activeTheme: di.inject(_themes_active_injectable__WEBPACK_IMPORTED_MODULE_14__[\"default\"]),\n userStore: di.inject(_common_user_store_user_store_injectable__WEBPACK_IMPORTED_MODULE_11__[\"default\"]),\n pageFiltersStore: di.inject(_page_filters_store_injectable__WEBPACK_IMPORTED_MODULE_12__[\"default\"]),\n openConfirmDialog: di.inject(_confirm_dialog_open_injectable__WEBPACK_IMPORTED_MODULE_13__[\"default\"]),\n }),\n});\n\n\n//# sourceURL=webpack://open-lens/./src/renderer/components/item-object-list/content.tsx?");
34514
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"ItemListLayoutContent\": () => (/* binding */ ItemListLayoutContent)\n/* harmony export */ });\n/* harmony import */ var _item_list_layout_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./item-list-layout.scss */ \"./src/renderer/components/item-object-list/item-list-layout.scss\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! mobx */ \"./node_modules/mobx/dist/mobx.esm.js\");\n/* harmony import */ var mobx_react__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! mobx-react */ \"./node_modules/mobx-react-lite/es/index.js\");\n/* harmony import */ var mobx_react__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! mobx-react */ \"./node_modules/mobx-react/dist/mobxreact.esm.js\");\n/* harmony import */ var _table__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../table */ \"./src/renderer/components/table/index.ts\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils */ \"./src/renderer/utils/index.ts\");\n/* harmony import */ var _add_remove_buttons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../add-remove-buttons */ \"./src/renderer/components/add-remove-buttons/index.ts\");\n/* harmony import */ var _no_items__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../no-items */ \"./src/renderer/components/no-items/index.ts\");\n/* harmony import */ var _spinner__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../spinner */ \"./src/renderer/components/spinner/index.ts\");\n/* harmony import */ var _menu_menu_actions__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../menu/menu-actions */ \"./src/renderer/components/menu/menu-actions.tsx\");\n/* harmony import */ var _menu__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../menu */ \"./src/renderer/components/menu/index.ts\");\n/* harmony import */ var _checkbox__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../checkbox */ \"./src/renderer/components/checkbox/index.ts\");\n/* harmony import */ var _ogre_tools_injectable_react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @ogre-tools/injectable-react */ \"./node_modules/@ogre-tools/injectable-react/build/index.js\");\n/* harmony import */ var _ogre_tools_injectable_react__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(_ogre_tools_injectable_react__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _common_user_store_user_store_injectable__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../../common/user-store/user-store.injectable */ \"./src/common/user-store/user-store.injectable.ts\");\n/* harmony import */ var _page_filters_store_injectable__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./page-filters/store.injectable */ \"./src/renderer/components/item-object-list/page-filters/store.injectable.ts\");\n/* harmony import */ var _confirm_dialog_open_injectable__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../confirm-dialog/open.injectable */ \"./src/renderer/components/confirm-dialog/open.injectable.ts\");\n/* harmony import */ var _themes_active_injectable__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../themes/active.injectable */ \"./src/renderer/themes/active.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 */\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\n\n\n\n\nlet NonInjectedItemListLayoutContent = class NonInjectedItemListLayoutContent extends react__WEBPACK_IMPORTED_MODULE_1__.Component {\n constructor(props) {\n super(props);\n (0,mobx__WEBPACK_IMPORTED_MODULE_15__.makeObservable)(this);\n (0,_utils__WEBPACK_IMPORTED_MODULE_3__.autoBind)(this);\n }\n get failedToLoad() {\n return this.props.store.failedLoading;\n }\n renderRow(item) {\n return this.getTableRow(item);\n }\n getTableRow(item) {\n const { isSelectable, renderTableHeader, renderTableContents, renderItemMenu, store, hasDetailsView, onDetails, copyClassNameFromHeadCells, customizeTableRowProps = () => ({}), detailsItem, } = this.props;\n const { isSelected } = store;\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_2__.TableRow, { nowrap: true, searchItem: item, sortItem: item, selected: detailsItem && detailsItem.getId() === item.getId(), onClick: hasDetailsView ? (0,_utils__WEBPACK_IMPORTED_MODULE_3__.prevDefault)(() => onDetails === null || onDetails === void 0 ? void 0 : onDetails(item)) : undefined, ...customizeTableRowProps(item) },\n isSelectable && (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_2__.TableCell, { checkbox: true, isChecked: isSelected(item), onClick: (0,_utils__WEBPACK_IMPORTED_MODULE_3__.prevDefault)(() => store.toggleSelection(item)) })),\n renderTableContents(item).map((content, index) => {\n const cellProps = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.isReactNode)(content)\n ? { children: content }\n : content;\n const headCell = renderTableHeader === null || renderTableHeader === void 0 ? void 0 : renderTableHeader[index];\n if (copyClassNameFromHeadCells && headCell) {\n cellProps.className = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.cssNames)(cellProps.className, headCell.className);\n }\n if (!headCell || this.showColumn(headCell)) {\n return react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_2__.TableCell, { key: index, ...cellProps });\n }\n return null;\n }),\n renderItemMenu && (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_2__.TableCell, { className: \"menu\" },\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"div\", { onClick: _utils__WEBPACK_IMPORTED_MODULE_3__.stopPropagation }, renderItemMenu(item, store))))));\n }\n getRow(uid) {\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"div\", { key: uid },\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(mobx_react__WEBPACK_IMPORTED_MODULE_16__.Observer, null, () => {\n const item = this.props.getItems().find(item => item.getId() === uid);\n if (!item)\n return null;\n return this.getTableRow(item);\n })));\n }\n removeItemsDialog(selectedItems) {\n const { customizeRemoveDialog, store, openConfirmDialog } = this.props;\n const visibleMaxNamesCount = 5;\n const selectedNames = selectedItems.map(ns => ns.getName()).slice(0, visibleMaxNamesCount).join(\", \");\n const dialogCustomProps = customizeRemoveDialog ? customizeRemoveDialog(selectedItems) : {};\n const selectedCount = selectedItems.length;\n const tailCount = selectedCount > visibleMaxNamesCount\n ? selectedCount - visibleMaxNamesCount\n : 0;\n const tail = tailCount > 0\n ? (react__WEBPACK_IMPORTED_MODULE_1__.createElement(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, null,\n \", and \",\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"b\", null, tailCount),\n \" more\"))\n : null;\n const message = selectedCount <= 1\n ? (react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"p\", null,\n \"Remove item \",\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"b\", null, selectedNames),\n \"?\"))\n : (react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"p\", null,\n \"Remove \",\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"b\", null, selectedCount),\n \" items \",\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"b\", null, selectedNames),\n tail,\n \"?\"));\n const { removeSelectedItems, removeItems } = store;\n const onConfirm = typeof removeItems === \"function\"\n ? () => removeItems.apply(store, [selectedItems])\n : typeof removeSelectedItems === \"function\"\n ? removeSelectedItems.bind(store)\n : _utils__WEBPACK_IMPORTED_MODULE_3__.noop;\n openConfirmDialog({\n ok: onConfirm,\n labelOk: \"Remove\",\n message,\n ...dialogCustomProps,\n });\n }\n renderNoItems() {\n if (this.failedToLoad) {\n return react__WEBPACK_IMPORTED_MODULE_1__.createElement(_no_items__WEBPACK_IMPORTED_MODULE_5__.NoItems, null, this.props.failedToLoadMessage);\n }\n if (!this.props.getIsReady()) {\n return react__WEBPACK_IMPORTED_MODULE_1__.createElement(_spinner__WEBPACK_IMPORTED_MODULE_6__.Spinner, { center: true, \"data-testid\": this.props.spinnerTestId });\n }\n if (this.props.getFilters().length > 0) {\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_no_items__WEBPACK_IMPORTED_MODULE_5__.NoItems, null,\n \"No items found.\",\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"p\", null,\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"a\", { onClick: () => this.props.pageFiltersStore.reset(), className: \"contrast\" }, \"Reset filters?\"))));\n }\n return react__WEBPACK_IMPORTED_MODULE_1__.createElement(_no_items__WEBPACK_IMPORTED_MODULE_5__.NoItems, null);\n }\n renderItems() {\n if (this.props.virtual) {\n return null;\n }\n return this.props.getItems().map(item => this.getRow(item.getId()));\n }\n renderTableHeader() {\n const { customizeTableRowProps, renderTableHeader, isSelectable, isConfigurable, store } = this.props;\n if (!renderTableHeader) {\n return null;\n }\n const enabledItems = this.props.getItems().filter(item => !(customizeTableRowProps === null || customizeTableRowProps === void 0 ? void 0 : customizeTableRowProps(item).disabled));\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_2__.TableHead, { showTopLine: true, nowrap: true },\n isSelectable && (react__WEBPACK_IMPORTED_MODULE_1__.createElement(mobx_react__WEBPACK_IMPORTED_MODULE_16__.Observer, null, () => (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_2__.TableCell, { checkbox: true, isChecked: store.isSelectedAll(enabledItems), onClick: (0,_utils__WEBPACK_IMPORTED_MODULE_3__.prevDefault)(() => store.toggleSelectionAll(enabledItems)) })))),\n renderTableHeader\n .filter(_utils__WEBPACK_IMPORTED_MODULE_3__.isDefined)\n .map((cellProps, index) => {\n var _a;\n return (this.showColumn(cellProps) && (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_2__.TableCell, { key: (_a = cellProps.id) !== null && _a !== void 0 ? _a : index, ...cellProps })));\n }),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_2__.TableCell, { className: \"menu\" }, isConfigurable && this.renderColumnVisibilityMenu())));\n }\n render() {\n const { store, hasDetailsView, addRemoveButtons = {}, virtual, sortingCallbacks, detailsItem, className, tableProps = {}, tableId, getItems, activeTheme, } = this.props;\n const selectedItemId = detailsItem && detailsItem.getId();\n const classNames = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.cssNames)(className, \"box\", \"grow\", activeTheme.get().type);\n const items = getItems();\n const selectedItems = store.pickOnlySelected(items);\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(\"div\", { className: \"items box grow flex column\" },\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_table__WEBPACK_IMPORTED_MODULE_2__.Table, { tableId: tableId, virtual: virtual, selectable: hasDetailsView, sortable: sortingCallbacks, getTableRow: this.getRow, renderRow: virtual ? undefined : this.renderRow, items: items, selectedItemId: selectedItemId, noItems: this.renderNoItems(), className: classNames, ...tableProps },\n this.renderTableHeader(),\n this.renderItems()),\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(mobx_react__WEBPACK_IMPORTED_MODULE_16__.Observer, null, () => (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_add_remove_buttons__WEBPACK_IMPORTED_MODULE_4__.AddRemoveButtons, { onRemove: (store.removeItems || store.removeSelectedItems) && selectedItems.length > 0\n ? () => this.removeItemsDialog(selectedItems)\n : undefined, removeTooltip: `Remove selected items (${selectedItems.length})`, ...addRemoveButtons })))));\n }\n showColumn({ id: columnId, showWithColumn }) {\n const { tableId, isConfigurable } = this.props;\n return !isConfigurable || !tableId || !this.props.userStore.isTableColumnHidden(tableId, columnId, showWithColumn);\n }\n renderColumnVisibilityMenu() {\n const { renderTableHeader = [], tableId } = this.props;\n return (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_menu_menu_actions__WEBPACK_IMPORTED_MODULE_7__.MenuActions, { id: \"menu-actions-for-item-object-list-content\", className: \"ItemListLayoutVisibilityMenu\", toolbar: false, autoCloseOnSelect: false }, renderTableHeader\n .filter(_utils__WEBPACK_IMPORTED_MODULE_3__.isDefined)\n .map((cellProps, index) => {\n var _a;\n return (!cellProps.showWithColumn && (react__WEBPACK_IMPORTED_MODULE_1__.createElement(_menu__WEBPACK_IMPORTED_MODULE_8__.MenuItem, { key: index, className: \"input\" },\n react__WEBPACK_IMPORTED_MODULE_1__.createElement(_checkbox__WEBPACK_IMPORTED_MODULE_9__.Checkbox, { label: (_a = cellProps.title) !== null && _a !== void 0 ? _a : `<${cellProps.className}>`, value: this.showColumn(cellProps), onChange: (tableId\n ? (() => cellProps.id && this.props.userStore.toggleTableColumnVisibility(tableId, cellProps.id))\n : undefined) }))));\n })));\n }\n};\n__decorate([\n mobx__WEBPACK_IMPORTED_MODULE_15__.computed,\n __metadata(\"design:type\", Object),\n __metadata(\"design:paramtypes\", [])\n], NonInjectedItemListLayoutContent.prototype, \"failedToLoad\", null);\nNonInjectedItemListLayoutContent = __decorate([\n mobx_react__WEBPACK_IMPORTED_MODULE_17__.observer,\n __metadata(\"design:paramtypes\", [Object])\n], NonInjectedItemListLayoutContent);\nconst ItemListLayoutContent = (0,_ogre_tools_injectable_react__WEBPACK_IMPORTED_MODULE_10__.withInjectables)(NonInjectedItemListLayoutContent, {\n getProps: (di, props) => ({\n ...props,\n activeTheme: di.inject(_themes_active_injectable__WEBPACK_IMPORTED_MODULE_14__[\"default\"]),\n userStore: di.inject(_common_user_store_user_store_injectable__WEBPACK_IMPORTED_MODULE_11__[\"default\"]),\n pageFiltersStore: di.inject(_page_filters_store_injectable__WEBPACK_IMPORTED_MODULE_12__[\"default\"]),\n openConfirmDialog: di.inject(_confirm_dialog_open_injectable__WEBPACK_IMPORTED_MODULE_13__[\"default\"]),\n }),\n});\n\n\n//# sourceURL=webpack://open-lens/./src/renderer/components/item-object-list/content.tsx?");
34526
34515
 
34527
34516
  /***/ }),
34528
34517
 
@@ -40539,7 +40528,7 @@ eval("module.exports = JSON.parse('{\"name\":\"winston\",\"description\":\"A log
40539
40528
  /***/ ((module) => {
40540
40529
 
40541
40530
  "use strict";
40542
- 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.1.0-alpha.1\",\"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\",\"precreate-release-pr\":\"npx swc ./scripts/create-release-pr.ts -o ./scripts/create-release-pr.mjs\",\"create-release-pr\":\"node ./scripts/create-release-pr.mjs\"},\"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:\",\"welcomeRoute\":\"/welcome\"},\"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.1\",\"@material-ui/styles\":\"^4.11.5\",\"@ogre-tools/fp\":\"10.1.0\",\"@ogre-tools/injectable\":\"10.1.0\",\"@ogre-tools/injectable-extension-for-auto-registration\":\"10.1.0\",\"@ogre-tools/injectable-extension-for-mobx\":\"10.1.0\",\"@ogre-tools/injectable-react\":\"10.1.0\",\"@sentry/electron\":\"^3.0.8\",\"@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.1.0\",\"md5-file\":\"^5.0.0\",\"mobx\":\"^6.6.2\",\"mobx-observable-history\":\"^2.0.3\",\"mobx-react\":\"^7.5.3\",\"mobx-utils\":\"^6.0.4\",\"mock-fs\":\"^5.1.4\",\"moment\":\"^2.29.4\",\"moment-timezone\":\"^0.5.37\",\"monaco-editor\":\"^0.29.1\",\"monaco-editor-webpack-plugin\":\"^5.0.0\",\"node-fetch\":\"^2.6.7\",\"node-pty\":\"0.10.1\",\"npm\":\"^8.19.2\",\"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.7\",\"readable-stream\":\"^3.6.0\",\"request\":\"^2.88.2\",\"request-promise-native\":\"^1.0.9\",\"rfc6902\":\"^4.0.2\",\"selfsigned\":\"^2.1.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.2\",\"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/cli\":\"^0.1.57\",\"@swc/core\":\"^1.3.1\",\"@swc/jest\":\"^0.2.22\",\"@testing-library/dom\":\"^7.31.2\",\"@testing-library/jest-dom\":\"^5.16.5\",\"@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.4\",\"@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.185\",\"@types/marked\":\"^4.0.7\",\"@types/md5-file\":\"^4.0.2\",\"@types/mini-css-extract-plugin\":\"^2.4.0\",\"@types/mock-fs\":\"^4.13.1\",\"@types/node\":\"^16.11.59\",\"@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.12\",\"@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.18.0\",\"@types/webpack-node-externals\":\"^2.5.3\",\"@typescript-eslint/eslint-plugin\":\"^5.37.0\",\"@typescript-eslint/parser\":\"^5.37.0\",\"adr\":\"^1.4.2\",\"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.4.0\",\"css-loader\":\"^6.7.1\",\"deepdash\":\"^5.3.9\",\"dompurify\":\"^2.4.0\",\"electron\":\"^19.0.17\",\"electron-builder\":\"^23.3.3\",\"electron-notarize\":\"^0.3.0\",\"esbuild\":\"^0.15.7\",\"esbuild-loader\":\"^2.20.0\",\"eslint\":\"^8.23.1\",\"eslint-plugin-header\":\"^3.1.1\",\"eslint-plugin-import\":\"^2.26.0\",\"eslint-plugin-react\":\"7.31.8\",\"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.9\",\"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.25.2\",\"postcss\":\"^8.4.16\",\"postcss-loader\":\"^6.2.1\",\"query-string\":\"^7.1.1\",\"randomcolor\":\"^0.6.2\",\"react-beautiful-dnd\":\"^13.1.1\",\"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.9\",\"sass-loader\":\"^12.6.0\",\"sharp\":\"^0.31.0\",\"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.14\",\"typedoc-plugin-markdown\":\"^3.13.1\",\"typescript\":\"^4.8.3\",\"typescript-plugin-css-modules\":\"^3.4.0\",\"webpack\":\"^5.74.0\",\"webpack-cli\":\"^4.9.2\",\"webpack-dev-server\":\"^4.11.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?");
40531
+ 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.1.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-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\",\"precreate-release-pr\":\"npx swc ./scripts/create-release-pr.ts -o ./scripts/create-release-pr.mjs\",\"create-release-pr\":\"node ./scripts/create-release-pr.mjs\"},\"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:\",\"welcomeRoute\":\"/welcome\"},\"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.1\",\"@material-ui/styles\":\"^4.11.5\",\"@ogre-tools/fp\":\"10.1.0\",\"@ogre-tools/injectable\":\"10.1.0\",\"@ogre-tools/injectable-extension-for-auto-registration\":\"10.1.0\",\"@ogre-tools/injectable-extension-for-mobx\":\"10.1.0\",\"@ogre-tools/injectable-react\":\"10.1.0\",\"@sentry/electron\":\"^3.0.8\",\"@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\",\"marked\":\"^4.1.1\",\"md5-file\":\"^5.0.0\",\"mobx\":\"^6.6.2\",\"mobx-observable-history\":\"^2.0.3\",\"mobx-react\":\"^7.5.3\",\"mobx-utils\":\"^6.0.4\",\"mock-fs\":\"^5.1.4\",\"moment\":\"^2.29.4\",\"moment-timezone\":\"^0.5.37\",\"monaco-editor\":\"^0.29.1\",\"monaco-editor-webpack-plugin\":\"^5.0.0\",\"node-fetch\":\"^2.6.7\",\"node-pty\":\"0.10.1\",\"npm\":\"^8.19.2\",\"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.7\",\"readable-stream\":\"^3.6.0\",\"request\":\"^2.88.2\",\"request-promise-native\":\"^1.0.9\",\"rfc6902\":\"^4.0.2\",\"selfsigned\":\"^2.1.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.2\",\"winston-console-format\":\"^1.0.8\",\"winston-transport-browserconsole\":\"^1.0.5\",\"ws\":\"^8.9.0\",\"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/cli\":\"^0.1.57\",\"@swc/core\":\"^1.3.1\",\"@swc/jest\":\"^0.2.22\",\"@testing-library/dom\":\"^7.31.2\",\"@testing-library/jest-dom\":\"^5.16.5\",\"@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.4\",\"@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.185\",\"@types/marked\":\"^4.0.7\",\"@types/md5-file\":\"^4.0.2\",\"@types/mini-css-extract-plugin\":\"^2.4.0\",\"@types/mock-fs\":\"^4.13.1\",\"@types/node\":\"^16.11.63\",\"@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.12\",\"@types/sharp\":\"^0.31.0\",\"@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.18.0\",\"@types/webpack-node-externals\":\"^2.5.3\",\"@typescript-eslint/eslint-plugin\":\"^5.37.0\",\"@typescript-eslint/parser\":\"^5.37.0\",\"adr\":\"^1.4.2\",\"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.4.0\",\"css-loader\":\"^6.7.1\",\"deepdash\":\"^5.3.9\",\"dompurify\":\"^2.4.0\",\"electron\":\"^19.1.1\",\"electron-builder\":\"^23.3.3\",\"electron-notarize\":\"^0.3.0\",\"esbuild\":\"^0.15.10\",\"esbuild-loader\":\"^2.20.0\",\"eslint\":\"^8.23.1\",\"eslint-plugin-header\":\"^3.1.1\",\"eslint-plugin-import\":\"^2.26.0\",\"eslint-plugin-react\":\"7.31.8\",\"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.9\",\"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.20\",\"playwright\":\"^1.25.2\",\"postcss\":\"^8.4.16\",\"postcss-loader\":\"^6.2.1\",\"query-string\":\"^7.1.1\",\"randomcolor\":\"^0.6.2\",\"react-beautiful-dnd\":\"^13.1.1\",\"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.9\",\"sass-loader\":\"^12.6.0\",\"sharp\":\"^0.31.0\",\"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.15\",\"typedoc-plugin-markdown\":\"^3.13.6\",\"typescript\":\"^4.8.3\",\"typescript-plugin-css-modules\":\"^3.4.0\",\"webpack\":\"^5.74.0\",\"webpack-cli\":\"^4.9.2\",\"webpack-dev-server\":\"^4.11.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?");
40543
40532
 
40544
40533
  /***/ }),
40545
40534