@k8slens/extensions 6.1.1-git.e763786d4b.0 → 6.1.1-git.ed073d6562.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 (102) hide show
  1. package/dist/src/common/cluster/cluster.d.ts +1 -1
  2. package/dist/src/common/cluster-store/get-by-id.injectable.d.ts +5 -0
  3. package/dist/src/common/cluster-types.d.ts +10 -0
  4. package/dist/src/common/fs/create-read-file-stream.injectable.d.ts +19 -0
  5. package/dist/src/common/fs/stat/stat.global-override-for-injectable.d.ts +2 -2
  6. package/dist/src/common/fs/stat/stat.injectable.d.ts +4 -1
  7. package/dist/src/common/fs/watch/watch.injectable.d.ts +120 -2
  8. package/dist/src/common/logger/prefixed-logger.injectable.d.ts +3 -0
  9. package/dist/src/common/runnable/run-many-for.d.ts +2 -1
  10. package/dist/src/common/runnable/run-many-sync-for.d.ts +2 -1
  11. package/dist/src/common/runnable/throw-with-incorrect-hierarchy-for.d.ts +1 -1
  12. package/dist/src/common/user-store/kubeconfig-syncs.injectable.d.ts +2 -0
  13. package/dist/src/common/utils/iter.d.ts +1 -0
  14. package/dist/src/extensions/extension-api.js +5 -5
  15. package/dist/src/main/app-paths/setup-app-paths.injectable.d.ts +1 -0
  16. package/dist/src/main/application-update/emit-current-version-to-analytics.injectable.d.ts +1 -0
  17. package/dist/src/main/application-update/periodical-check-for-updates/start-checking-for-updates.injectable.d.ts +1 -0
  18. package/dist/src/main/application-update/periodical-check-for-updates/stop-checking-for-updates.injectable.d.ts +1 -0
  19. 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
  20. 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
  21. package/dist/src/main/catalog-sources/kubeconfig-sync/compute-diff.injectable.d.ts +6 -0
  22. package/dist/src/main/catalog-sources/kubeconfig-sync/config-to-models.injectable.d.ts +9 -0
  23. package/dist/src/main/catalog-sources/kubeconfig-sync/diff-changed-kubeconfig.injectable.d.ts +15 -0
  24. package/dist/src/main/catalog-sources/kubeconfig-sync/logger.injectable.d.ts +2 -0
  25. package/dist/src/main/catalog-sources/kubeconfig-sync/manager.d.ts +7 -19
  26. package/dist/src/main/catalog-sources/kubeconfig-sync/watch-file-changes.injectable.d.ts +6 -0
  27. package/dist/src/main/catalog-sync-to-renderer/start-catalog-sync.injectable.d.ts +1 -0
  28. package/dist/src/main/catalog-sync-to-renderer/stop-catalog-sync.injectable.d.ts +1 -0
  29. package/dist/src/main/cluster/are-being-deleted.injectable.d.ts +2 -0
  30. package/dist/src/main/cluster/initialize-manager.injectable.d.ts +5 -0
  31. package/dist/src/main/{cluster-manager.d.ts → cluster/manager.d.ts} +11 -10
  32. package/dist/src/main/{cluster-manager.injectable.d.ts → cluster/manager.injectable.d.ts} +1 -1
  33. package/dist/src/main/electron-app/runnables/clean-up-deep-linking.injectable.d.ts +1 -0
  34. package/dist/src/main/electron-app/runnables/dock-visibility/hide-dock-for-last-closed-window.injectable.d.ts +1 -0
  35. package/dist/src/main/electron-app/runnables/dock-visibility/show-dock-for-first-opened-window.injectable.d.ts +1 -0
  36. package/dist/src/main/electron-app/runnables/enforce-single-application-instance.injectable.d.ts +1 -0
  37. package/dist/src/main/electron-app/runnables/setup-application-name.injectable.d.ts +1 -0
  38. package/dist/src/main/electron-app/runnables/setup-deep-linking.injectable.d.ts +1 -0
  39. package/dist/src/main/electron-app/runnables/setup-developer-tools-in-development-environment.injectable.d.ts +1 -0
  40. package/dist/src/main/electron-app/runnables/setup-device-shutdown.injectable.d.ts +1 -0
  41. package/dist/src/main/electron-app/runnables/setup-ipc-main-handlers/setup-ipc-main-handlers.d.ts +5 -3
  42. package/dist/src/main/electron-app/runnables/setup-ipc-main-handlers/setup-ipc-main-handlers.injectable.d.ts +1 -0
  43. package/dist/src/main/electron-app/runnables/setup-main-window-visibility-after-activation.injectable.d.ts +1 -0
  44. package/dist/src/main/electron-app/runnables/setup-runnables-after-window-is-opened.injectable.d.ts +1 -0
  45. package/dist/src/main/electron-app/runnables/setup-runnables-before-closing-of-application.injectable.d.ts +1 -0
  46. package/dist/src/main/lens-proxy/proxy-functions/shell-api-request/shell-api-request.d.ts +1 -1
  47. package/dist/src/main/menu/start-application-menu.injectable.d.ts +1 -0
  48. package/dist/src/main/menu/stop-application-menu.injectable.d.ts +1 -0
  49. package/dist/src/main/start-main-application/lens-window/current-cluster-frame/setup-listener-for-current-cluster-frame.injectable.d.ts +1 -0
  50. package/dist/src/main/start-main-application/runnables/clean-up-shell-sessions.injectable.d.ts +1 -0
  51. package/dist/src/main/start-main-application/runnables/emit-close-to-event-bus.injectable.d.ts +1 -0
  52. package/dist/src/main/start-main-application/runnables/emit-service-start-to-event-bus.injectable.d.ts +1 -0
  53. package/dist/src/main/start-main-application/runnables/flag-renderer/flag-renderer-as-loaded.injectable.d.ts +1 -0
  54. package/dist/src/main/start-main-application/runnables/flag-renderer/flag-renderer-as-not-loaded.injectable.d.ts +1 -0
  55. package/dist/src/main/start-main-application/runnables/initialize-extensions.injectable.d.ts +1 -0
  56. package/dist/src/main/start-main-application/runnables/kube-config-sync/add-source.injectable.d.ts +5 -0
  57. package/dist/src/main/start-main-application/runnables/kube-config-sync/start-kube-config-sync.injectable.d.ts +5 -0
  58. package/dist/src/main/start-main-application/runnables/kube-config-sync/stop-kube-config-sync.injectable.d.ts +1 -0
  59. package/dist/src/main/start-main-application/runnables/sentry/setup.injectable.d.ts +1 -0
  60. package/dist/src/main/start-main-application/runnables/setup-detector-registry.injectable.d.ts +1 -0
  61. package/dist/src/main/start-main-application/runnables/setup-hardware-acceleration.injectable.d.ts +1 -0
  62. package/dist/src/main/start-main-application/runnables/setup-hotbar-store.injectable.d.ts +8 -1
  63. package/dist/src/main/start-main-application/runnables/setup-immer.injectable.d.ts +1 -0
  64. package/dist/src/main/start-main-application/runnables/setup-lens-proxy.injectable.d.ts +1 -0
  65. package/dist/src/main/start-main-application/runnables/setup-mobx.injectable.d.ts +1 -0
  66. package/dist/src/main/start-main-application/runnables/setup-prometheus-registry.injectable.d.ts +1 -0
  67. package/dist/src/main/start-main-application/runnables/setup-proxy-env.injectable.d.ts +1 -0
  68. package/dist/src/main/start-main-application/runnables/setup-reactions-in-user-store.injectable.d.ts +1 -0
  69. package/dist/src/main/start-main-application/runnables/setup-shell.injectable.d.ts +1 -0
  70. package/dist/src/main/start-main-application/runnables/setup-syncing-of-general-catalog-entities.injectable.d.ts +1 -0
  71. package/dist/src/main/start-main-application/runnables/setup-syncing-of-weblinks.injectable.d.ts +1 -0
  72. package/dist/src/main/start-main-application/runnables/setup-system-ca.injectable.d.ts +1 -0
  73. package/dist/src/main/start-main-application/runnables/stop-cluster-manager.injectable.d.ts +1 -0
  74. package/dist/src/main/stores/init-user-store.injectable.d.ts +20 -1
  75. package/dist/src/main/theme/broadcast-theme-change/start-broadcasting-theme-change.injectable.d.ts +1 -0
  76. package/dist/src/main/theme/broadcast-theme-change/stop-broadcasting-theme-change.injectable.d.ts +1 -0
  77. package/dist/src/main/theme/sync-theme-from-os/start-syncing-theme-from-operating-system.injectable.d.ts +1 -0
  78. package/dist/src/main/theme/sync-theme-from-os/stop-syncing-theme-from-operating-system.injectable.d.ts +1 -0
  79. package/dist/src/main/tray/electron-tray/start-tray.injectable.d.ts +1 -0
  80. package/dist/src/main/tray/electron-tray/stop-tray.injectable.d.ts +8 -1
  81. package/dist/src/main/tray/menu-icon/start-reactivity.injectable.d.ts +8 -1
  82. package/dist/src/main/tray/menu-icon/stop-reactivity.injectable.d.ts +1 -0
  83. package/dist/src/main/tray/reactive-tray-menu-items/start-reactive-tray-menu-items.injectable.d.ts +8 -1
  84. package/dist/src/main/tray/reactive-tray-menu-items/stop-reactive-tray-menu-items.injectable.d.ts +1 -0
  85. package/dist/src/main/utils/channel/channel-listeners/start-listening-of-channels.injectable.d.ts +1 -0
  86. package/dist/src/main/vars/build-version/init.injectable.d.ts +3 -2
  87. package/dist/src/main/vars/default-update-channel/init.injectable.d.ts +17 -2
  88. package/dist/src/main/vars/release-channel/init.injectable.d.ts +12 -1
  89. package/dist/src/main/vars/semantic-build-version/init.injectable.d.ts +8 -1
  90. package/dist/src/renderer/api/setup-on-api-errors.injectable.d.ts +1 -0
  91. package/dist/src/renderer/app-paths/setup-app-paths.injectable.d.ts +1 -0
  92. package/dist/src/renderer/components/dock/logs/download-logs-dropdown.d.ts +2 -1
  93. package/dist/src/renderer/components/layout/top-bar/start-state-sync.injectable.d.ts +1 -0
  94. package/dist/src/renderer/frames/root-frame/setup-system-ca.injectable.d.ts +1 -0
  95. package/dist/src/renderer/stores/init-user-store.injectable.d.ts +20 -1
  96. package/dist/src/renderer/utils/channel/channel-listeners/start-listening-of-channels.injectable.d.ts +1 -0
  97. package/dist/src/renderer/utils/sync-box/provide-initial-values-for-sync-boxes.injectable.d.ts +1 -0
  98. package/dist/src/renderer/vars/build-version/init.injectable.d.ts +1 -0
  99. package/dist/src/renderer/vars/default-update-channel/init.injectable.d.ts +17 -2
  100. package/dist/src/renderer/vars/release-channel/init.injectable.d.ts +12 -1
  101. package/dist/src/renderer/vars/semantic-build-version/init.injectable.d.ts +8 -1
  102. package/package.json +3 -3
@@ -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
 
@@ -31849,7 +31849,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
31849
31849
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31850
31850
 
31851
31851
  "use strict";
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 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?");
31853
31853
 
31854
31854
  /***/ }),
31855
31855
 
@@ -34511,7 +34511,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
34511
34511
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34512
34512
 
34513
34513
  "use strict";
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?");
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?");
34515
34515
 
34516
34516
  /***/ }),
34517
34517
 
@@ -40528,7 +40528,7 @@ eval("module.exports = JSON.parse('{\"name\":\"winston\",\"description\":\"A log
40528
40528
  /***/ ((module) => {
40529
40529
 
40530
40530
  "use strict";
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-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.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.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\",\"mac-ca\":\"^1.0.6\",\"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?");
40532
40532
 
40533
40533
  /***/ }),
40534
40534
 
@@ -1,4 +1,5 @@
1
1
  declare const setupAppPathsInjectable: import("@ogre-tools/injectable").Injectable<{
2
+ id: string;
2
3
  run: () => void;
3
4
  }, import("../../common/runnable/run-many-sync-for").RunnableSync<void>, void>;
4
5
  export default setupAppPathsInjectable;
@@ -1,4 +1,5 @@
1
1
  declare const emitCurrentVersionToAnalyticsInjectable: import("@ogre-tools/injectable").Injectable<{
2
+ id: string;
2
3
  run: () => void;
3
4
  }, import("../../common/runnable/run-many-for").Runnable<void>, void>;
4
5
  export default emitCurrentVersionToAnalyticsInjectable;
@@ -1,4 +1,5 @@
1
1
  declare const startCheckingForUpdatesInjectable: import("@ogre-tools/injectable").Injectable<{
2
+ id: string;
2
3
  run: () => Promise<void>;
3
4
  }, import("../../../common/runnable/run-many-for").Runnable<void>, void>;
4
5
  export default startCheckingForUpdatesInjectable;
@@ -1,4 +1,5 @@
1
1
  declare const stopCheckingForUpdatesInjectable: import("@ogre-tools/injectable").Injectable<{
2
+ id: string;
2
3
  run: () => Promise<void>;
3
4
  }, import("../../../common/runnable/run-many-sync-for").RunnableSync<void>, void>;
4
5
  export default stopCheckingForUpdatesInjectable;
@@ -1,4 +1,5 @@
1
1
  declare const startWatchingIfUpdateShouldHappenOnQuitInjectable: import("@ogre-tools/injectable").Injectable<{
2
+ id: string;
2
3
  run: () => void;
3
4
  }, import("../../../common/runnable/run-many-for").Runnable<void>, void>;
4
5
  export default startWatchingIfUpdateShouldHappenOnQuitInjectable;
@@ -1,4 +1,5 @@
1
1
  declare const stopWatchingIfUpdateShouldHappenOnQuitInjectable: import("@ogre-tools/injectable").Injectable<{
2
+ id: string;
2
3
  run: () => void;
3
4
  }, import("../../../common/runnable/run-many-sync-for").RunnableSync<void>, void>;
4
5
  export default stopWatchingIfUpdateShouldHappenOnQuitInjectable;
@@ -0,0 +1,6 @@
1
+ import type { ObservableMap } from "mobx";
2
+ import type { CatalogEntity } from "../../../common/catalog";
3
+ import type { Cluster } from "../../../common/cluster/cluster";
4
+ export declare type ComputeKubeconfigDiff = (contents: string, source: ObservableMap<string, [Cluster, CatalogEntity]>, filePath: string) => void;
5
+ declare const computeKubeconfigDiffInjectable: import("@ogre-tools/injectable").Injectable<ComputeKubeconfigDiff, unknown, void>;
6
+ export default computeKubeconfigDiffInjectable;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Copyright (c) OpenLens Authors. All rights reserved.
3
+ * Licensed under MIT License. See LICENSE in root directory for more information.
4
+ */
5
+ import type { KubeConfig } from "@kubernetes/client-node";
6
+ import type { ClusterConfigData, UpdateClusterModel } from "../../../common/cluster-types";
7
+ export declare type ConfigToModels = (rootConfig: KubeConfig, filePath: string) => [UpdateClusterModel, ClusterConfigData][];
8
+ declare const configToModelsInjectable: import("@ogre-tools/injectable").Injectable<ConfigToModels, unknown, void>;
9
+ export default configToModelsInjectable;
@@ -0,0 +1,15 @@
1
+ /// <reference types="node" />
2
+ import type { Stats } from "fs";
3
+ import type { ObservableMap } from "mobx";
4
+ import type { CatalogEntity } from "../../../common/catalog";
5
+ import type { Cluster } from "../../../common/cluster/cluster";
6
+ import type { Disposer } from "../../../common/utils";
7
+ export interface DiffChangedKubeconfigArgs {
8
+ filePath: string;
9
+ source: ObservableMap<string, [Cluster, CatalogEntity]>;
10
+ stats: Stats;
11
+ maxAllowedFileReadSize: number;
12
+ }
13
+ export declare type DiffChangedKubeconfig = (args: DiffChangedKubeconfigArgs) => Disposer;
14
+ declare const diffChangedKubeconfigInjectable: import("@ogre-tools/injectable").Injectable<DiffChangedKubeconfig, unknown, void>;
15
+ export default diffChangedKubeconfigInjectable;
@@ -0,0 +1,2 @@
1
+ declare const kubeconfigSyncLoggerInjectable: import("@ogre-tools/injectable").Injectable<import("../../../common/logger").Logger, unknown, void>;
2
+ export default kubeconfigSyncLoggerInjectable;
@@ -5,36 +5,24 @@
5
5
  import type { IComputedValue, ObservableMap } from "mobx";
6
6
  import type { CatalogEntity } from "../../../common/catalog";
7
7
  import type { Disposer } from "../../../common/utils";
8
- import type { KubeConfig } from "@kubernetes/client-node";
9
- import type { ClusterManager } from "../../cluster-manager";
10
- import type { ClusterConfigData, UpdateClusterModel } from "../../../common/cluster-types";
11
- import type { Cluster } from "../../../common/cluster/cluster";
12
- import type { CatalogEntityRegistry } from "../../catalog/entity-registry";
13
- import type { CreateCluster } from "../../../common/cluster/create-cluster-injection-token";
8
+ import type { KubeconfigSyncValue } from "../../../common/user-store";
9
+ import type { Logger } from "../../../common/logger";
10
+ import type { WatchKubeconfigFileChanges } from "./watch-file-changes.injectable";
14
11
  interface KubeconfigSyncManagerDependencies {
15
12
  readonly directoryForKubeConfigs: string;
16
- readonly entityRegistry: CatalogEntityRegistry;
17
- readonly clusterManager: ClusterManager;
18
- createCluster: CreateCluster;
13
+ readonly logger: Logger;
14
+ readonly kubeconfigSyncs: ObservableMap<string, KubeconfigSyncValue>;
15
+ watchKubeconfigFileChanges: WatchKubeconfigFileChanges;
19
16
  }
20
17
  export declare class KubeconfigSyncManager {
21
18
  protected readonly dependencies: KubeconfigSyncManagerDependencies;
22
19
  protected readonly sources: ObservableMap<string, [IComputedValue<CatalogEntity<import("../../../common/catalog").CatalogEntityMetadata, import("../../../common/catalog").CatalogEntityStatus, import("../../../common/catalog").CatalogEntitySpec>[]>, Disposer]>;
23
- protected syncing: boolean;
24
20
  protected syncListDisposer?: Disposer;
25
21
  constructor(dependencies: KubeconfigSyncManagerDependencies);
22
+ readonly source: IComputedValue<CatalogEntity<import("../../../common/catalog").CatalogEntityMetadata, import("../../../common/catalog").CatalogEntityStatus, import("../../../common/catalog").CatalogEntitySpec>[]>;
26
23
  startSync(): void;
27
24
  stopSync(): void;
28
25
  protected startNewSync(filePath: string): void;
29
26
  protected stopOldSync(filePath: string): void;
30
27
  }
31
- export declare function configToModels(rootConfig: KubeConfig, filePath: string): [UpdateClusterModel, ClusterConfigData][];
32
- declare type RootSourceValue = [Cluster, CatalogEntity];
33
- declare type RootSource = ObservableMap<string, RootSourceValue>;
34
- interface ComputeDiffDependencies {
35
- directoryForKubeConfigs: string;
36
- createCluster: CreateCluster;
37
- clusterManager: ClusterManager;
38
- }
39
- export declare const computeDiff: ({ directoryForKubeConfigs, createCluster, clusterManager }: ComputeDiffDependencies) => (contents: string, source: RootSource, filePath: string) => void;
40
28
  export {};
@@ -0,0 +1,6 @@
1
+ import type { IComputedValue } from "mobx";
2
+ import type { CatalogEntity } from "../../../common/catalog";
3
+ import type { Disposer } from "../../../common/utils";
4
+ export declare type WatchKubeconfigFileChanges = (filepath: string) => [IComputedValue<CatalogEntity[]>, Disposer];
5
+ declare const watchKubeconfigFileChangesInjectable: import("@ogre-tools/injectable").Injectable<WatchKubeconfigFileChanges, unknown, void>;
6
+ export default watchKubeconfigFileChangesInjectable;
@@ -1,4 +1,5 @@
1
1
  declare const startCatalogSyncInjectable: import("@ogre-tools/injectable").Injectable<{
2
+ id: string;
2
3
  run: () => Promise<void>;
3
4
  }, import("../../common/runnable/run-many-for").Runnable<void>, void>;
4
5
  export default startCatalogSyncInjectable;