From ef32f2b72bd491a17e6c3adc93335ba0f39ed6b8 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 2 Mar 2023 10:33:48 -0500 Subject: [PATCH] Replace all internal uses of utilities with new packages Signed-off-by: Sebastian Malton --- package-lock.json | 378 ++++++++++++++---- packages/core/package.json | 2 + .../core/src/common/base-store/base-store.ts | 3 +- .../base-store/migrations.injectable.ts | 2 +- .../catalog-catalog-entity.injectable.ts | 2 +- .../welcome-catalog-entity.injectable.ts | 2 +- .../core/src/common/catalog/catalog-entity.ts | 4 +- .../src/common/catalog/category-registry.ts | 4 +- packages/core/src/common/cluster/cluster.ts | 9 +- .../cluster/list-namespaces.injectable.ts | 2 +- .../fetch/download-binary.injectable.ts | 4 +- .../src/common/fetch/download-json/impl.ts | 4 +- .../fetch.global-override-for-injectable.ts | 2 +- ...ns-fetch.global-override-for-injectable.ts | 2 +- .../ingresses/ingresses-route.injectable.ts | 2 +- ...xec-file.global-override-for-injectable.ts | 2 +- .../src/common/fs/exec-file.injectable.ts | 8 +- packages/core/src/common/fs/fs.injectable.ts | 2 + .../core/src/common/fs/unlink.injectable.ts | 15 + .../fs/validate-directory.injectable.ts | 6 +- .../src/common/fs/watch/watch.injectable.ts | 2 +- .../helm/add-helm-repository-channel.ts | 2 +- .../get-active-helm-repositories-channel.ts | 2 +- .../helm/remove-helm-repository-channel.ts | 2 +- packages/core/src/common/hotbars/types.ts | 4 +- ...-message.global-override-for-injectable.ts | 2 +- packages/core/src/common/ipc/ipc.ts | 2 +- packages/core/src/common/item.store.ts | 2 +- .../__tests__/kube-object.store.test.ts | 2 +- .../common/k8s-api/api-manager/api-manager.ts | 2 +- .../k8s-api/endpoints/config-map.api.ts | 2 +- .../common/k8s-api/endpoints/cron-job.api.ts | 2 +- .../custom-resource-definition.api.ts | 2 +- .../k8s-api/endpoints/deployment.api.ts | 2 +- .../common/k8s-api/endpoints/endpoint.api.ts | 2 +- .../common/k8s-api/endpoints/events.api.ts | 2 +- .../k8s-api/endpoints/helm-charts.api.ts | 5 +- .../request-charts.injectable.ts | 2 +- .../request-readme.injectable.ts | 6 +- .../request-values.injectable.ts | 6 +- .../request-versions.injectable.ts | 4 +- .../request-configuration.injectable.ts | 2 +- .../request-create.injectable.ts | 2 +- .../request-delete.injectable.ts | 2 +- .../request-details.injectable.ts | 2 +- .../request-history.injectable.ts | 2 +- .../request-releases.injectable.ts | 2 +- .../request-rollback.injectable.ts | 2 +- .../request-update.injectable.ts | 6 +- .../request-values.injectable.ts | 2 +- .../horizontal-pod-autoscaler.api.ts | 26 +- .../common/k8s-api/endpoints/ingress.api.ts | 2 +- .../common/k8s-api/endpoints/metrics.api.ts | 2 +- .../src/common/k8s-api/endpoints/node.api.ts | 2 +- .../endpoints/persistent-volume-claim.api.ts | 2 +- .../endpoints/persistent-volume.api.ts | 2 +- .../src/common/k8s-api/endpoints/pod.api.ts | 2 +- .../request-patch.injectable.ts | 6 +- .../request-update.injectable.ts | 6 +- .../common/k8s-api/endpoints/secret.api.ts | 2 +- .../k8s-api/endpoints/storage-class.api.ts | 2 +- packages/core/src/common/k8s-api/json-api.ts | 31 +- .../core/src/common/k8s-api/kube-api-parse.ts | 4 +- packages/core/src/common/k8s-api/kube-api.ts | 4 +- .../src/common/k8s-api/kube-object.store.ts | 8 +- .../core/src/common/k8s-api/kube-object.ts | 5 +- .../core/src/common/k8s/resource-stack.ts | 4 +- packages/core/src/common/kube-helpers.ts | 2 +- .../core/src/common/kube-helpers/channels.ts | 2 +- ...og-error.global-override-for-injectable.ts | 2 +- .../logger.global-override-for-injectable.ts | 13 +- .../src/common/protocol-handler/router.ts | 2 +- .../file-name-migration.injectable.ts | 2 +- .../core/src/common/user-store/user-store.ts | 3 +- .../src/common/utils/__tests__/iter.test.ts | 68 ---- .../common/utils/__tests__/n-fircate.test.ts | 39 -- packages/core/src/common/utils/toJS.ts | 3 + .../__tests__/extension-loader.test.ts | 2 +- .../core/src/extensions/common-api/utils.ts | 49 ++- .../extension-discovery.test.ts | 2 +- .../extension-discovery.ts | 3 +- .../extension-installation-state-store.ts | 4 +- .../extension-loader/extension-loader.ts | 4 +- .../extension/extension.injectable.ts | 4 +- ...shed-directory-for-extension.injectable.ts | 2 +- .../file-system-provisioner-store.ts | 7 +- .../core/src/extensions/extension-store.ts | 4 +- .../extensions-store/extensions-store.ts | 7 +- .../install-extension.injectable.ts | 2 +- packages/core/src/extensions/ipc/ipc-main.ts | 2 +- .../core/src/extensions/ipc/ipc-registrar.ts | 2 +- .../core/src/extensions/ipc/ipc-renderer.ts | 2 +- .../core/src/extensions/lens-extension.ts | 2 +- .../src/extensions/lens-renderer-extension.ts | 2 +- .../core/src/extensions/main-api/power.ts | 2 +- .../src/extensions/renderer-api/catalog.ts | 2 +- .../src/extensions/renderer-api/navigation.ts | 2 +- .../about-bundled-extensions.injectable.ts | 2 +- .../update-button/update-button.tsx | 2 +- ...-updates.global-override-for-injectable.ts | 2 +- .../check-for-platform-updates.test.ts | 4 +- ...m-update.global-override-for-injectable.ts | 2 +- .../download-platform-update.test.ts | 4 +- .../main/channel-handler.injectable.ts | 2 +- .../delete-channel-listener.injectable.ts | 2 +- ...sitories.global-override-for-injectable.ts | 2 +- ...e-helm-repositories-in-preferences.test.ts | 2 +- .../preferences-catalog-entity.injectable.ts | 2 +- .../kubeconfig-sync/kubeconfig-sync.tsx | 2 +- .../removable-item/removable-item.tsx | 2 +- ...mpute-unix-shell-environment.injectable.ts | 20 +- .../__test__/kubeconfig-sync.test.ts | 2 +- .../diff-changed-kubeconfig.injectable.ts | 4 +- .../kubeconfig-sync/manager.ts | 4 +- .../watch-file-changes.injectable.ts | 4 +- .../core/src/main/catalog-sources/weblinks.ts | 2 +- .../catalog-sync-to-renderer.injectable.ts | 3 +- .../core/src/main/catalog/entity-registry.ts | 2 +- .../detect-cluster-metadata.injectable.ts | 2 +- packages/core/src/main/cluster/manager.ts | 2 +- .../request-api-resources.injectable.ts | 2 +- ...equest-non-core-api-versions.injectable.ts | 2 +- .../5.0.0-beta.10.injectable.ts | 2 +- .../5.0.0-beta.13.injectable.ts | 2 +- ...n-dialog.global-override-for-injectable.ts | 2 +- .../core/src/main/get-metrics.injectable.ts | 2 +- .../main/helm/__tests__/helm-service.test.ts | 6 +- .../core/src/main/helm/helm-chart-manager.ts | 2 +- ...r-kube-resources-by-manifest.injectable.ts | 2 +- .../exec-file-with-input.injectable.ts | 2 +- .../get-helm-release.injectable.ts | 2 +- .../list-helm-charts.injectable.ts | 2 +- .../helm/list-helm-releases.injectable.ts | 4 +- ...get-active-helm-repositories.injectable.ts | 4 +- .../migrations/5.0.0-beta.10.injectable.ts | 2 +- .../kubeconfig-manager/kubeconfig-manager.ts | 2 +- packages/core/src/main/kubectl/kubectl.ts | 94 +++-- .../shell-request-authenticator.ts | 2 +- .../navigate-to-route.injectable.ts | 2 +- packages/core/src/main/prometheus/provider.ts | 2 +- .../protocol-handler/__test__/router.test.ts | 2 +- .../lens-protocol-router-main.ts | 2 +- .../create-handler-for-route.injectable.ts | 2 +- .../metrics/add-metrics-route.injectable.ts | 2 +- .../modify-terminal-shell-env.injectable.ts | 2 +- .../src/main/shell-session/shell-session.ts | 2 +- ...undled-extensions-are-loaded.injectable.ts | 2 +- .../navigate-for-extension.injectable.ts | 2 +- .../lens-window/navigate.injectable.ts | 2 +- .../tray-menu-item-registrator.injectable.ts | 2 +- .../migrations/5.0.3-beta.1.injectable.ts | 2 +- ...ist-request-channel-listener.injectable.ts | 2 +- ...istening-on-request-channels.injectable.ts | 2 +- .../renderer/api/catalog/entity/registry.ts | 4 +- ...or-general-entity-navigation.injectable.ts | 4 +- .../core/src/renderer/api/websocket-api.ts | 2 +- .../persist-state-to-config.injectable.ts | 2 +- .../components/+add-cluster/add-cluster.tsx | 2 +- .../__tests__/catalog-entity-store.test.ts | 2 +- .../+catalog/catalog-add-button.tsx | 4 +- .../+catalog/catalog-entity-drawer-menu.tsx | 2 +- .../catalog-entity.store.tsx | 4 +- .../components/+catalog/catalog-menu.tsx | 2 +- .../renderer/components/+catalog/catalog.tsx | 4 +- .../columns/named-category.injectable.tsx | 2 +- .../custom-category-columns.injectable.tsx | 2 +- .../+catalog/custom-views.injectable.ts | 2 +- .../entity-details/registrator.injectable.ts | 4 +- .../+catalog/entity-details/view.tsx | 2 +- .../components/+cluster/cluster-issues.tsx | 2 +- .../components/+cluster/cluster-metrics.tsx | 2 +- .../+cluster/cluster-no-metrics.tsx | 2 +- .../cluster-overview-store.ts | 4 +- .../components/+cluster/cluster-overview.tsx | 2 +- .../+cluster/cluster-pie-charts.tsx | 2 +- .../hpa-details.tsx | 2 +- .../hpa.tsx | 2 +- .../priority-classes.tsx | 4 +- .../resource-quota-details.tsx | 2 +- .../runtime-classes.tsx | 4 +- .../+config-secrets/add-dialog/view.tsx | 5 +- .../+config-secrets/secret-details.tsx | 2 +- .../vpa-details.tsx | 4 +- .../+config-vertical-pod-autoscalers/vpa.tsx | 2 +- .../components/+custom-resources/crd-list.tsx | 2 +- .../crd-resource-details.tsx | 3 +- .../+custom-resources/definition.store.ts | 2 +- .../components/+events/event-details.tsx | 2 +- .../renderer/components/+events/events.tsx | 4 +- .../components/+events/kube-event-details.tsx | 2 +- .../components/+events/kube-event-icon.tsx | 2 +- .../src/renderer/components/+events/store.ts | 2 +- .../attempt-install-by-info.injectable.tsx | 2 +- .../attempt-install.injectable.tsx | 4 +- .../unpack-extension.injectable.tsx | 4 +- .../attempt-install/validate-package.tsx | 2 +- .../get-message-from-error.ts | 2 +- ...nstall-extension-from-input.injectable.tsx | 2 +- .../components/+extensions/install.tsx | 2 +- .../+extensions/installed-extensions.tsx | 2 +- .../components/+extensions/notice.tsx | 2 +- .../+helm-charts/helm-chart-details.tsx | 5 +- ...ersions-of-chart-for-release.injectable.ts | 2 +- .../release-details-content.tsx | 2 +- .../release-details-drawer.tsx | 2 +- .../+helm-releases/release-menu.tsx | 2 +- .../to-helm-release.injectable.ts | 2 +- .../+namespaces/add-dialog/dialog.tsx | 4 +- .../+namespaces/namespace-details.tsx | 2 +- .../+namespaces/namespace-select-badge.tsx | 2 +- .../namespace-select-filter-model.tsx | 2 +- .../namespace-select-filter.test.tsx | 4 +- .../+namespaces/namespace-select.tsx | 2 +- .../+namespaces/namespace-tree-view.tsx | 2 +- .../renderer/components/+namespaces/store.ts | 5 +- .../+namespaces/subnamespace-badge.tsx | 2 +- .../endpoint-subset-list.tsx | 4 +- .../+network-ingresses/ingress-classes.tsx | 2 +- .../port-forward-details.tsx | 2 +- .../port-forward-menu.tsx | 5 +- .../service-details-endpoint.tsx | 2 +- .../service-port-component.tsx | 2 +- .../src/renderer/components/+nodes/route.tsx | 2 +- .../src/renderer/components/+nodes/store.ts | 2 +- .../volume-claim-details.tsx | 2 +- .../+storage-volume-claims/volume-claims.tsx | 2 +- .../+storage-volumes/volume-details-list.tsx | 2 +- .../+storage-volumes/volume-details.tsx | 2 +- .../components/+storage-volumes/volumes.tsx | 2 +- .../+cluster-role-bindings/details.tsx | 5 +- .../+cluster-role-bindings/dialog/view.tsx | 2 +- .../+cluster-role-bindings/store.ts | 2 +- .../+role-bindings/details.tsx | 2 +- .../+role-bindings/dialog/view.tsx | 2 +- .../+user-management/+role-bindings/store.ts | 2 +- .../+service-accounts/secret.tsx | 2 +- .../trigger-dialog/view.tsx | 2 +- .../deployment-replicasets.tsx | 2 +- .../+workloads-deployments/deployments.tsx | 2 +- .../+workloads-deployments/scale/dialog.tsx | 2 +- .../overview-workload-status.tsx | 2 +- .../details/volumes/variants/projected.tsx | 2 +- .../+workloads-pods/pod-container-env.tsx | 2 +- .../+workloads-pods/pod-container-port.tsx | 2 +- .../+workloads-pods/pod-details-container.tsx | 2 +- .../+workloads-pods/pod-details-list.tsx | 5 +- .../+workloads-pods/pod-details.tsx | 3 +- .../components/+workloads-pods/pods.tsx | 2 +- .../components/+workloads-pods/store.ts | 2 +- .../scale-dialog/dialog.tsx | 2 +- .../+workloads-statefulsets/scale/dialog.tsx | 2 +- .../add-remove-buttons/add-remove-buttons.tsx | 2 +- .../renderer/components/animate/animate.tsx | 2 +- .../src/renderer/components/avatar/avatar.tsx | 4 +- .../src/renderer/components/badge/badge.tsx | 2 +- .../src/renderer/components/button/button.tsx | 2 +- .../renderer/components/chart/bar-chart.tsx | 2 +- .../src/renderer/components/chart/chart.tsx | 2 +- .../src/renderer/components/chart/options.ts | 2 +- .../renderer/components/chart/pie-chart.tsx | 2 +- .../renderer/components/checkbox/checkbox.tsx | 4 +- .../cluster-manager/cluster-frame-handler.ts | 4 +- .../cluster-manager/cluster-manager.tsx | 4 +- .../cluster-manager/cluster-status.tsx | 4 +- .../cluster-settings/icon-settings.tsx | 4 +- .../command-palette/command-dialog.tsx | 2 +- .../confirm-dialog/confirm-dialog.tsx | 2 +- .../components/countdown/countdown.test.tsx | 2 +- .../src/renderer/components/dialog/dialog.tsx | 2 +- .../user-templates.injectable.ts | 2 +- .../components/dock/create-resource/view.tsx | 2 +- .../dock/dock-tab-store/dock-tab.store.ts | 5 +- .../src/renderer/components/dock/dock-tab.tsx | 5 +- .../renderer/components/dock/dock-tabs.tsx | 2 +- .../src/renderer/components/dock/dock.tsx | 2 +- .../renderer/components/dock/dock/store.ts | 4 +- .../call-for-resource.injectable.ts | 2 +- .../edit-resource-model.injectable.tsx | 2 +- .../renderer/components/dock/editor-panel.tsx | 2 +- .../renderer/components/dock/info-panel.tsx | 2 +- .../install-chart-model.injectable.tsx | 4 +- .../components/dock/install-chart/view.tsx | 2 +- .../dock/logs/__test__/to-bottom.test.tsx | 2 +- .../renderer/components/dock/logs/list.tsx | 5 +- .../components/dock/logs/logs-view-model.ts | 2 +- .../renderer/components/dock/logs/store.ts | 6 +- .../renderer/components/dock/logs/view.tsx | 2 +- .../components/dock/terminal/dock-tab.tsx | 5 +- .../dock/terminal/send-command.injectable.ts | 4 +- .../components/dock/terminal/terminal.ts | 2 +- .../components/dock/terminal/view.tsx | 2 +- .../dock/upgrade-chart/tab-data.injectable.ts | 2 +- .../upgrade-chart-model.injectable.ts | 2 +- .../components/dock/upgrade-chart/view.tsx | 2 +- .../components/drawer/drawer-item.tsx | 2 +- .../drawer/drawer-param-toggler.tsx | 2 +- .../components/drawer/drawer-title.tsx | 2 +- .../src/renderer/components/drawer/drawer.tsx | 4 +- .../components/duration/reactive-duration.tsx | 2 +- .../editable-list/editable-list.tsx | 6 +- .../error-boundary/error-boundary.tsx | 2 +- .../src/renderer/components/gutter/gutter.tsx | 2 +- .../horizontal-line/horizontal-line.tsx | 2 +- .../components/hotbar/hotbar-cell.tsx | 2 +- .../components/hotbar/hotbar-entity-icon.tsx | 4 +- .../components/hotbar/hotbar-icon.tsx | 2 +- .../components/hotbar/hotbar-menu.tsx | 4 +- .../components/hotbar/hotbar-selector.tsx | 2 +- .../src/renderer/components/icon/icon.tsx | 2 +- .../components/input/drop-file-input.tsx | 7 +- .../src/renderer/components/input/input.tsx | 10 +- .../components/input/search-input.tsx | 5 +- .../components/item-object-list/content.tsx | 7 +- .../components/item-object-list/header.tsx | 4 +- .../item-object-list/list-layout.tsx | 8 +- .../item-object-list/page-filters/list.tsx | 2 +- .../item-object-list/page-filters/store.ts | 2 +- .../kube-object-list-layout.tsx | 4 +- .../kube-object-menu/kube-object-menu.tsx | 2 +- .../kube-object-status-icon.tsx | 2 +- .../kubeconfig-dialog/kubeconfig-dialog.tsx | 2 +- ...e-account-kube-config-dialog.injectable.ts | 2 +- .../components/layout/main-layout.tsx | 4 +- .../components/layout/setting-layout.tsx | 4 +- .../components/layout/sidebar-item.tsx | 4 +- .../renderer/components/layout/sidebar.tsx | 2 +- .../renderer/components/layout/sub-header.tsx | 4 +- .../renderer/components/layout/sub-title.tsx | 4 +- .../components/layout/tab-layout-2.tsx | 2 +- .../renderer/components/layout/tab-layout.tsx | 4 +- ...e-window.global-override-for-injectable.ts | 2 +- ...ext-menu.global-override-for-injectable.ts | 2 +- .../go-back.global-override-for-injectable.ts | 2 +- ...-forward.global-override-for-injectable.ts | 2 +- ...e-window.global-override-for-injectable.ts | 2 +- ...e-window.global-override-for-injectable.ts | 2 +- .../window-controls/window-controls.tsx | 2 +- .../components/layout/wizard-layout.tsx | 4 +- .../line-progress/line-progress.tsx | 2 +- .../markdown-viewer/markdown-viewer.tsx | 2 +- .../renderer/components/menu/menu-actions.tsx | 5 +- .../src/renderer/components/menu/menu.tsx | 7 +- .../monaco-editor/monaco-editor.tsx | 5 +- .../renderer/components/no-items/no-items.tsx | 4 +- ...tions.store.tsx => notifications.store.ts} | 2 +- .../notifications/notifications.tsx | 4 +- .../show-checked-error.injectable.ts | 2 +- .../components/path-picker/path-picker.tsx | 2 +- .../src/renderer/components/radio/radio.tsx | 4 +- .../components/render-delay/render-delay.tsx | 2 +- .../resizing-anchor/resizing-anchor.tsx | 2 +- .../resource-metrics/resource-metrics.tsx | 2 +- .../src/renderer/components/select/select.tsx | 5 +- .../src/renderer/components/slider/slider.tsx | 2 +- .../renderer/components/spinner/spinner.tsx | 2 +- .../components/status-brick/status-brick.tsx | 2 +- .../renderer/components/stepper/stepper.tsx | 2 +- .../src/renderer/components/switch/switch.tsx | 2 +- .../renderer/components/table/react-table.tsx | 2 +- .../src/renderer/components/table/sorting.ts | 2 +- .../renderer/components/table/table-cell.tsx | 5 +- .../renderer/components/table/table-head.tsx | 2 +- .../table/table-model/table-model.ts | 2 +- .../renderer/components/table/table-row.tsx | 2 +- .../src/renderer/components/table/table.tsx | 5 +- .../src/renderer/components/tabs/tabs.tsx | 5 +- .../renderer/components/tooltip/tooltip.tsx | 7 +- .../components/tooltip/withTooltip.tsx | 2 +- .../components/tree-view/tree-view.tsx | 2 +- .../components/virtual-list/virtual-list.tsx | 2 +- .../src/renderer/components/wizard/wizard.tsx | 2 +- .../frames/cluster-frame/cluster-frame.tsx | 2 +- .../root-frame/init-root-frame.injectable.ts | 2 +- packages/core/src/renderer/ipc/index.ts | 2 +- .../kube-object/handlers.injectable.ts | 2 +- .../renderer/kube-watch-api/kube-watch-api.ts | 4 +- .../port-forward/port-forward-dialog.tsx | 2 +- .../port-forward/port-forward-item.ts | 2 +- .../port-forward-store/port-forward-store.ts | 5 +- .../request-active-port-forward.injectable.ts | 2 +- .../extension-page-parameters.injectable.ts | 2 +- .../routes/navigate-to-route.injectable.ts | 2 +- .../themes/apply-lens-theme.injectable.ts | 2 +- packages/core/src/renderer/utils/rbac.ts | 2 +- .../window/event-listener.injectable.ts | 2 +- .../override-messaging-from-main-to-window.ts | 2 +- .../override-messaging-from-window-to-main.ts | 2 +- .../__tests__/app-preferences.tests.ts | 2 +- .../__tests__/cluster-pages.tests.ts | 2 +- .../__tests__/command-palette.tests.ts | 2 +- .../open-lens/integration/helpers/utils.ts | 2 +- packages/utility-features/test-utils/index.ts | 2 + .../src}/get-global-override-for-function.ts | 0 .../test-utils/src}/get-global-override.ts | 0 packages/utility-features/utilities/index.ts | 10 +- .../utility-features/utilities/src/array.ts | 12 +- .../utility-features/utilities/src/base64.ts | 9 +- .../utilities/src}/buildUrl.ts | 2 +- .../utilities/src}/convert-memory.test.ts | 2 +- .../utilities/src}/formatDuration.test.ts | 2 +- .../utilities/src}/hash-set.test.ts | 6 +- .../utilities/src/isReactNode.ts | 2 +- .../utilities/src/iter.test.ts | 101 +++++ .../utility-features/utilities/src/iter.ts | 65 +-- .../utility-features/utilities/src/object.ts | 20 +- .../utilities/src/sort-compare.ts | 8 +- .../utilities/src}/splitArray.test.ts | 0 .../utilities/src}/tuple.test.ts | 2 +- .../utility-features/utilities/src/tuple.ts | 21 +- .../utilities/src}/union-env-path.test.ts | 0 410 files changed, 1222 insertions(+), 825 deletions(-) create mode 100644 packages/core/src/common/fs/unlink.injectable.ts delete mode 100644 packages/core/src/common/utils/__tests__/iter.test.ts delete mode 100644 packages/core/src/common/utils/__tests__/n-fircate.test.ts rename packages/core/src/renderer/components/notifications/{notifications.store.tsx => notifications.store.ts} (98%) rename packages/{core/src/common/test-utils => utility-features/test-utils/src}/get-global-override-for-function.ts (100%) rename packages/{core/src/common/test-utils => utility-features/test-utils/src}/get-global-override.ts (100%) rename packages/{core/src/common/utils => utility-features/utilities/src}/buildUrl.ts (97%) rename packages/{core/src/common/utils/__tests__ => utility-features/utilities/src}/convert-memory.test.ts (98%) rename packages/{core/src/common/utils/__tests__ => utility-features/utilities/src}/formatDuration.test.ts (97%) rename packages/{core/src/common/utils/__tests__ => utility-features/utilities/src}/hash-set.test.ts (98%) create mode 100644 packages/utility-features/utilities/src/iter.test.ts rename packages/{core/src/common/utils/__tests__ => utility-features/utilities/src}/splitArray.test.ts (100%) rename packages/{core/src/common/utils/__tests__ => utility-features/utilities/src}/tuple.test.ts (96%) rename packages/{core/src/common/utils/__tests__ => utility-features/utilities/src}/union-env-path.test.ts (100%) diff --git a/package-lock.json b/package-lock.json index 9a3fe6b25a..73ea4d6410 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1720,7 +1720,8 @@ "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true }, "node_modules/@hapi/b64": { "version": "5.0.0", @@ -1951,7 +1952,8 @@ "node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==" + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "dev": true }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", @@ -3305,14 +3307,26 @@ "resolved": "packages/release-tool", "link": true }, + "node_modules/@k8slens/run-many": { + "resolved": "packages/utility-features/run-many", + "link": true + }, "node_modules/@k8slens/semver": { "resolved": "packages/semver", "link": true }, + "node_modules/@k8slens/test-utils": { + "resolved": "packages/utility-features/test-utils", + "link": true + }, "node_modules/@k8slens/typescript": { "resolved": "packages/infrastructure/typescript", "link": true }, + "node_modules/@k8slens/utilities": { + "resolved": "packages/utility-features/utilities", + "link": true + }, "node_modules/@k8slens/webpack": { "resolved": "packages/infrastructure/webpack", "link": true @@ -3746,6 +3760,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-5.3.0.tgz", "integrity": "sha512-+rZ9zgL1lnbl8Xbb1NQdMjveOMwj4lIYfcDtyJHHi5x4X8jtR6m8SXooJMZy5vmFVZ8w7A2Bnd/oX9eTuU8w5A==", + "dev": true, "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/installed-package-contents": "^1.0.7", @@ -3793,6 +3808,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "dev": true, "dependencies": { "lru-cache": "^7.5.1" }, @@ -3804,6 +3820,7 @@ "version": "7.18.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.1.tgz", "integrity": "sha512-8/HcIENyQnfUTCDizRu9rrDyG6XG/21M4X7/YEGZeD76ZJilFPAUVb/2zysFf7VVO1LEjCDFyHp8pMMvozIrvg==", + "dev": true, "engines": { "node": ">=12" } @@ -3812,6 +3829,7 @@ "version": "9.1.2", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", + "dev": true, "dependencies": { "hosted-git-info": "^5.0.0", "proc-log": "^2.0.1", @@ -3826,6 +3844,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -3840,6 +3859,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, "dependencies": { "@gar/promisify": "^1.1.3", "semver": "^7.3.5" @@ -3852,6 +3872,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", + "dev": true, "dependencies": { "@npmcli/promise-spawn": "^3.0.0", "lru-cache": "^7.4.4", @@ -3871,6 +3892,7 @@ "version": "7.18.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.1.tgz", "integrity": "sha512-8/HcIENyQnfUTCDizRu9rrDyG6XG/21M4X7/YEGZeD76ZJilFPAUVb/2zysFf7VVO1LEjCDFyHp8pMMvozIrvg==", + "dev": true, "engines": { "node": ">=12" } @@ -3879,6 +3901,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, "dependencies": { "npm-bundled": "^1.1.1", "npm-normalize-package-bin": "^1.0.1" @@ -3894,6 +3917,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-2.0.4.tgz", "integrity": "sha512-bMo0aAfwhVwqoVM5UzX1DJnlvVvzDCHae821jv48L1EsrYwfOZChlqWYXEtto/+BkBXetPbEWgau++/brh4oVg==", + "dev": true, "dependencies": { "@npmcli/name-from-folder": "^1.0.1", "glob": "^8.0.1", @@ -3908,6 +3932,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -3916,6 +3941,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3934,6 +3960,7 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -3945,6 +3972,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-3.1.1.tgz", "integrity": "sha512-n69ygIaqAedecLeVH3KnO39M6ZHiJ2dEv5A7DGvcqCB8q17BGUgW8QaanIkbWUo2aYGZqJaOORTLAlIvKjNDKA==", + "dev": true, "dependencies": { "cacache": "^16.0.0", "json-parse-even-better-errors": "^2.3.1", @@ -3960,6 +3988,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -3972,6 +4001,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -3985,12 +4015,14 @@ "node_modules/@npmcli/name-from-folder": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-1.0.1.tgz", - "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==" + "integrity": "sha512-qq3oEfcLFwNfEYOQ8HLimRGKlD8WSeGEdtUa7hmzpR8Sa7haL1KVQrvgO6wqMjhWFFVjgtrh1gIxDz+P8sjUaA==", + "dev": true }, "node_modules/@npmcli/node-gyp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", + "dev": true, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } @@ -3999,6 +4031,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-2.0.0.tgz", "integrity": "sha512-42jnZ6yl16GzjWSH7vtrmWyJDGVa/LXPdpN2rcUWolFjc9ON2N3uz0qdBbQACfmhuJZ2lbKYtmK5qx68ZPLHMA==", + "dev": true, "dependencies": { "json-parse-even-better-errors": "^2.3.1" }, @@ -4010,6 +4043,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", + "dev": true, "dependencies": { "infer-owner": "^1.0.4" }, @@ -4021,6 +4055,7 @@ "version": "4.1.7", "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.1.7.tgz", "integrity": "sha512-WXr/MyM4tpKA4BotB81NccGAv8B48lNH0gRoILucbcAhTQXLCoi6HflMV3KdXubIqvP9SuLsFn68Z7r4jl+ppw==", + "dev": true, "dependencies": { "@npmcli/node-gyp": "^2.0.0", "@npmcli/promise-spawn": "^3.0.0", @@ -4036,6 +4071,7 @@ "version": "7.18.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.1.tgz", "integrity": "sha512-8/HcIENyQnfUTCDizRu9rrDyG6XG/21M4X7/YEGZeD76ZJilFPAUVb/2zysFf7VVO1LEjCDFyHp8pMMvozIrvg==", + "dev": true, "engines": { "node": ">=12" } @@ -4044,6 +4080,7 @@ "version": "10.2.1", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^16.1.0", @@ -4070,6 +4107,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -4081,6 +4119,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, "dependencies": { "minipass": "^3.1.6", "minipass-sized": "^1.0.3", @@ -4097,6 +4136,7 @@ "version": "9.3.1", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.3.1.tgz", "integrity": "sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg==", + "dev": true, "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", @@ -4120,6 +4160,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, "dependencies": { "abbrev": "^1.0.0" }, @@ -4134,6 +4175,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -4148,6 +4190,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", @@ -4160,7 +4203,8 @@ "node_modules/@npmcli/run-script/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/@nrwl/cli": { "version": "15.8.1", @@ -6910,7 +6954,8 @@ "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, "node_modules/abort-controller": { "version": "3.0.0", @@ -7064,6 +7109,7 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dev": true, "dependencies": { "debug": "^4.1.0", "depd": "^1.1.2", @@ -7176,6 +7222,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -7323,7 +7380,8 @@ "node_modules/aproba": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true }, "node_modules/arch": { "version": "2.2.0", @@ -7349,6 +7407,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -7497,7 +7556,8 @@ "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true }, "node_modules/asar": { "version": "3.2.0", @@ -7986,6 +8046,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-3.0.3.tgz", "integrity": "sha512-zKdnMPWEdh4F5INR07/eBrodC7QrF5JKvqskjz/ZZRXg5YSAZIbn8zGhbhUrElzHBZ2fvEQdOU59RHcTG3GiwA==", + "dev": true, "dependencies": { "cmd-shim": "^5.0.0", "mkdirp-infer-owner": "^2.0.0", @@ -8002,6 +8063,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } @@ -8010,6 +8072,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -8446,6 +8509,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, "dependencies": { "semver": "^7.0.0" } @@ -8480,6 +8544,7 @@ "version": "16.1.3", "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", + "dev": true, "dependencies": { "@npmcli/fs": "^2.1.0", "@npmcli/move-file": "^2.0.0", @@ -8508,6 +8573,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -8516,6 +8582,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -8534,6 +8601,7 @@ "version": "7.18.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.1.tgz", "integrity": "sha512-8/HcIENyQnfUTCDizRu9rrDyG6XG/21M4X7/YEGZeD76ZJilFPAUVb/2zysFf7VVO1LEjCDFyHp8pMMvozIrvg==", + "dev": true, "engines": { "node": ">=12" } @@ -8542,6 +8610,7 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8553,6 +8622,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -8564,6 +8634,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -8578,6 +8649,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8587,6 +8659,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -8606,6 +8679,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -8616,7 +8690,8 @@ "node_modules/cacache/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/cacheable-lookup": { "version": "5.0.4", @@ -9141,6 +9216,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-5.0.0.tgz", "integrity": "sha512-qkCtZ59BidfEwHltnJwkyVZn+XQojdAySM1D1gSeh11Z4pW1Kpolkyo53L5noc0nrxmIvyFwTmJRo4xs7FFLPw==", + "dev": true, "dependencies": { "mkdirp-infer-owner": "^2.0.0" }, @@ -9214,6 +9290,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, "bin": { "color-support": "bin.js" } @@ -9258,6 +9335,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", + "dev": true, "dependencies": { "strip-ansi": "^6.0.1", "wcwidth": "^1.0.0" @@ -9303,7 +9381,8 @@ "node_modules/common-ancestor-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", - "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==" + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true }, "node_modules/common-path-prefix": { "version": "3.0.0", @@ -9539,7 +9618,8 @@ "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true }, "node_modules/content-disposition": { "version": "0.5.4", @@ -10224,6 +10304,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", + "dev": true, "engines": { "node": "*" } @@ -10532,12 +10613,14 @@ "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true }, "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, "engines": { "node": ">= 0.6" } @@ -10610,6 +10693,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, "dependencies": { "asap": "^2.0.0", "wrappy": "1" @@ -11352,6 +11436,7 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -11428,7 +11513,8 @@ "node_modules/err-code": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true }, "node_modules/errno": { "version": "0.1.8", @@ -13846,6 +13932,7 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", @@ -14663,7 +14750,8 @@ "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true }, "node_modules/he": { "version": "1.2.0", @@ -14704,6 +14792,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -14715,6 +14804,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -14725,7 +14815,8 @@ "node_modules/hosted-git-info/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/hpack.js": { "version": "2.1.6", @@ -15034,6 +15125,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, "dependencies": { "ms": "^2.0.0" } @@ -15136,6 +15228,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", + "dev": true, "dependencies": { "minimatch": "^5.0.1" }, @@ -15147,6 +15240,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -15155,6 +15249,7 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -15259,7 +15354,8 @@ "node_modules/infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true }, "node_modules/inflight": { "version": "1.0.6", @@ -15284,6 +15380,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-3.0.2.tgz", "integrity": "sha512-YhlQPEjNFqlGdzrBfDNRLhvoSgX7iQRgSxgsNknRQ9ITXFT7UMfVMWhBTOh2Y+25lRnGrv5Xz8yZwQ3ACR6T3A==", + "dev": true, "dependencies": { "npm-package-arg": "^9.0.1", "promzard": "^0.3.0", @@ -15301,6 +15398,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "dev": true, "dependencies": { "lru-cache": "^7.5.1" }, @@ -15312,6 +15410,7 @@ "version": "7.18.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.1.tgz", "integrity": "sha512-8/HcIENyQnfUTCDizRu9rrDyG6XG/21M4X7/YEGZeD76ZJilFPAUVb/2zysFf7VVO1LEjCDFyHp8pMMvozIrvg==", + "dev": true, "engines": { "node": ">=12" } @@ -15320,6 +15419,7 @@ "version": "9.1.2", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", + "dev": true, "dependencies": { "hosted-git-info": "^5.0.0", "proc-log": "^2.0.1", @@ -15378,7 +15478,8 @@ "node_modules/ip": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", - "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true }, "node_modules/ip-regex": { "version": "4.3.0", @@ -15615,7 +15716,8 @@ "node_modules/is-lambda": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true }, "node_modules/is-map": { "version": "2.0.2", @@ -19089,6 +19191,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", + "dev": true, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -19129,6 +19232,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, "engines": [ "node >= 0.2.0" ] @@ -19338,12 +19442,14 @@ "node_modules/just-diff": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-5.2.0.tgz", - "integrity": "sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw==" + "integrity": "sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw==", + "dev": true }, "node_modules/just-diff-apply": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", - "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==" + "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", + "dev": true }, "node_modules/keyv": { "version": "4.5.2", @@ -19895,6 +20001,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-6.0.3.tgz", "integrity": "sha512-4tkfUZprwvih2VUZYMozL7EMKgQ5q9VW2NtRyxWtQWlkLTAWHRklcAvBN49CVqEkhUw7vTX2fNgB5LzgUucgYg==", + "dev": true, "dependencies": { "aproba": "^2.0.0", "minipass": "^3.1.1", @@ -19909,6 +20016,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "dev": true, "dependencies": { "lru-cache": "^7.5.1" }, @@ -19920,6 +20028,7 @@ "version": "7.18.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.1.tgz", "integrity": "sha512-8/HcIENyQnfUTCDizRu9rrDyG6XG/21M4X7/YEGZeD76ZJilFPAUVb/2zysFf7VVO1LEjCDFyHp8pMMvozIrvg==", + "dev": true, "engines": { "node": ">=12" } @@ -19928,6 +20037,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -19939,6 +20049,7 @@ "version": "9.1.2", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", + "dev": true, "dependencies": { "hosted-git-info": "^5.0.0", "proc-log": "^2.0.1", @@ -19952,12 +20063,14 @@ "node_modules/libnpmaccess/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/libnpmpublish": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-6.0.4.tgz", "integrity": "sha512-lvAEYW8mB8QblL6Q/PI/wMzKNvIrF7Kpujf/4fGS/32a2i3jzUXi04TNyIBcK6dQJ34IgywfaKGh+Jq4HYPFmg==", + "dev": true, "dependencies": { "normalize-package-data": "^4.0.0", "npm-package-arg": "^9.0.1", @@ -19973,6 +20086,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "dev": true, "dependencies": { "lru-cache": "^7.5.1" }, @@ -19984,6 +20098,7 @@ "version": "7.18.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.1.tgz", "integrity": "sha512-8/HcIENyQnfUTCDizRu9rrDyG6XG/21M4X7/YEGZeD76ZJilFPAUVb/2zysFf7VVO1LEjCDFyHp8pMMvozIrvg==", + "dev": true, "engines": { "node": ">=12" } @@ -19992,6 +20107,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", + "dev": true, "dependencies": { "hosted-git-info": "^5.0.0", "is-core-module": "^2.8.1", @@ -20006,6 +20122,7 @@ "version": "9.1.2", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", + "dev": true, "dependencies": { "hosted-git-info": "^5.0.0", "proc-log": "^2.0.1", @@ -20327,6 +20444,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, "dependencies": { "agentkeepalive": "^4.1.3", "cacache": "^15.2.0", @@ -20353,6 +20471,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, "dependencies": { "@gar/promisify": "^1.0.1", "semver": "^7.3.5" @@ -20363,6 +20482,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -20375,6 +20495,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, "engines": { "node": ">= 6" } @@ -20383,6 +20504,7 @@ "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, "dependencies": { "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", @@ -20411,6 +20533,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, "dependencies": { "@tootallnate/once": "1", "agent-base": "6", @@ -20424,6 +20547,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -20435,6 +20559,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -20446,6 +20571,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -20460,6 +20586,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, "dependencies": { "minipass": "^3.1.1" }, @@ -20471,6 +20598,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, "dependencies": { "unique-slug": "^2.0.0" } @@ -20479,6 +20607,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, "dependencies": { "imurmurhash": "^0.1.4" } @@ -20486,7 +20615,8 @@ "node_modules/make-fetch-happen/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/make-plural": { "version": "6.2.2", @@ -21099,6 +21229,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -21110,6 +21241,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -21120,12 +21252,14 @@ "node_modules/minipass-collect/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/minipass-fetch": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, "dependencies": { "minipass": "^3.1.0", "minipass-sized": "^1.0.3", @@ -21142,6 +21276,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -21152,12 +21287,14 @@ "node_modules/minipass-fetch/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/minipass-flush": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -21169,6 +21306,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -21179,12 +21317,14 @@ "node_modules/minipass-flush/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/minipass-json-stream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, "dependencies": { "jsonparse": "^1.3.1", "minipass": "^3.0.0" @@ -21194,6 +21334,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -21204,12 +21345,14 @@ "node_modules/minipass-json-stream/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -21221,6 +21364,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -21231,12 +21375,14 @@ "node_modules/minipass-pipeline/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/minipass-sized": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -21248,6 +21394,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -21258,7 +21405,8 @@ "node_modules/minipass-sized/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/minizlib": { "version": "2.1.2", @@ -21345,6 +21493,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "dev": true, "dependencies": { "chownr": "^2.0.0", "infer-owner": "^1.0.4", @@ -21613,6 +21762,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, "engines": { "node": ">= 0.6" } @@ -21736,6 +21886,7 @@ "version": "8.4.1", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "dev": true, "dependencies": { "env-paths": "^2.2.0", "glob": "^7.1.4", @@ -21770,6 +21921,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -21889,6 +22041,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, "dependencies": { "abbrev": "1" }, @@ -22108,6 +22261,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, "dependencies": { "npm-normalize-package-bin": "^1.0.1" } @@ -22140,6 +22294,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", + "dev": true, "dependencies": { "semver": "^7.1.1" }, @@ -22150,12 +22305,14 @@ "node_modules/npm-normalize-package-bin": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true }, "node_modules/npm-package-arg": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz", "integrity": "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==", + "dev": true, "dependencies": { "hosted-git-info": "^3.0.6", "semver": "^7.0.0", @@ -22168,12 +22325,14 @@ "node_modules/npm-package-arg/node_modules/builtins": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==" + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true }, "node_modules/npm-package-arg/node_modules/hosted-git-info": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -22185,6 +22344,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -22196,6 +22356,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "dev": true, "dependencies": { "builtins": "^1.0.3" } @@ -22203,12 +22364,14 @@ "node_modules/npm-package-arg/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/npm-packlist": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", + "dev": true, "dependencies": { "glob": "^8.0.1", "ignore-walk": "^5.0.1", @@ -22226,6 +22389,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -22234,6 +22398,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -22252,6 +22417,7 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -22263,6 +22429,7 @@ "version": "7.0.2", "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.2.tgz", "integrity": "sha512-gk37SyRmlIjvTfcYl6RzDbSmS9Y4TOBXfsPnoYqTHARNgWbyDiCSMLUpmALDj4jjcTZpURiEfsSHJj9k7EV4Rw==", + "dev": true, "dependencies": { "npm-install-checks": "^5.0.0", "npm-normalize-package-bin": "^2.0.0", @@ -22277,6 +22444,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "dev": true, "dependencies": { "lru-cache": "^7.5.1" }, @@ -22288,6 +22456,7 @@ "version": "7.18.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.1.tgz", "integrity": "sha512-8/HcIENyQnfUTCDizRu9rrDyG6XG/21M4X7/YEGZeD76ZJilFPAUVb/2zysFf7VVO1LEjCDFyHp8pMMvozIrvg==", + "dev": true, "engines": { "node": ">=12" } @@ -22296,6 +22465,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } @@ -22304,6 +22474,7 @@ "version": "9.1.2", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", + "dev": true, "dependencies": { "hosted-git-info": "^5.0.0", "proc-log": "^2.0.1", @@ -22318,6 +22489,7 @@ "version": "13.3.0", "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.0.tgz", "integrity": "sha512-10LJQ/1+VhKrZjIuY9I/+gQTvumqqlgnsCufoXETHAPFTS3+M+Z5CFhZRDHGavmJ6rOye3UvNga88vl8n1r6gg==", + "dev": true, "dependencies": { "make-fetch-happen": "^10.0.6", "minipass": "^3.1.6", @@ -22335,6 +22507,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "dev": true, "dependencies": { "lru-cache": "^7.5.1" }, @@ -22346,6 +22519,7 @@ "version": "7.18.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.1.tgz", "integrity": "sha512-8/HcIENyQnfUTCDizRu9rrDyG6XG/21M4X7/YEGZeD76ZJilFPAUVb/2zysFf7VVO1LEjCDFyHp8pMMvozIrvg==", + "dev": true, "engines": { "node": ">=12" } @@ -22354,6 +22528,7 @@ "version": "10.2.1", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^16.1.0", @@ -22380,6 +22555,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -22391,6 +22567,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, "dependencies": { "minipass": "^3.1.6", "minipass-sized": "^1.0.3", @@ -22407,6 +22584,7 @@ "version": "9.1.2", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", + "dev": true, "dependencies": { "hosted-git-info": "^5.0.0", "proc-log": "^2.0.1", @@ -22421,6 +22599,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", @@ -22433,7 +22612,8 @@ "node_modules/npm-registry-fetch/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/npm-run-path": { "version": "2.0.2", @@ -24653,6 +24833,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", @@ -25461,6 +25642,7 @@ "version": "13.6.1", "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.1.tgz", "integrity": "sha512-L+2BI1ougAPsFjXRyBhcKmfT016NscRFLv6Pz5EiNf1CCFJFU0pSKKQwsZTyAQB+sTuUL4TyFyp6J1Ork3dOqw==", + "dev": true, "dependencies": { "@npmcli/git": "^3.0.0", "@npmcli/installed-package-contents": "^1.0.7", @@ -25495,6 +25677,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "dev": true, "dependencies": { "lru-cache": "^7.5.1" }, @@ -25506,6 +25689,7 @@ "version": "7.18.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.1.tgz", "integrity": "sha512-8/HcIENyQnfUTCDizRu9rrDyG6XG/21M4X7/YEGZeD76ZJilFPAUVb/2zysFf7VVO1LEjCDFyHp8pMMvozIrvg==", + "dev": true, "engines": { "node": ">=12" } @@ -25514,6 +25698,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -25525,6 +25710,7 @@ "version": "9.1.2", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.2.tgz", "integrity": "sha512-pzd9rLEx4TfNJkovvlBSLGhq31gGu2QDexFPWT19yCDh0JgnRhlBLNo5759N0AJmBk+kQ9Y/hXoLnlgFD+ukmg==", + "dev": true, "dependencies": { "hosted-git-info": "^5.0.0", "proc-log": "^2.0.1", @@ -25539,6 +25725,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -25552,7 +25739,8 @@ "node_modules/pacote/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/pako": { "version": "0.2.9", @@ -25584,6 +25772,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-2.0.2.tgz", "integrity": "sha512-jDbRGb00TAPFsKWCpZZOT93SxVP9nONOSgES3AevqRq/CHvavEBvKAjxX9p5Y5F0RZLxH9Ufd9+RwtCsa+lFDA==", + "dev": true, "dependencies": { "json-parse-even-better-errors": "^2.3.1", "just-diff": "^5.0.1", @@ -26600,6 +26789,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "dev": true, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } @@ -26630,6 +26820,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", + "dev": true, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -26638,6 +26829,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.1.tgz", "integrity": "sha512-3+hgaa19jzCGLuSCbieeRsu5C2joKfYn8pY6JAuXFRVfF4IO+L7UPpFWNTeWT9pM7uhskvbPPd/oEOktCn317Q==", + "dev": true, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -26645,12 +26837,14 @@ "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -26675,6 +26869,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", + "dev": true, "dependencies": { "read": "1" } @@ -27274,6 +27469,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, "dependencies": { "mute-stream": "~0.0.4" }, @@ -27294,6 +27490,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-3.0.0.tgz", "integrity": "sha512-KQDVjGqhZk92PPNRj9ZEXEuqg8bUobSKRw+q0YQ3TKI5xkce7bUJobL4Z/OtiEbAAv70yEpYIXp4iQ9L8oPVog==", + "dev": true, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } @@ -27327,6 +27524,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.1.tgz", "integrity": "sha512-MALHuNgYWdGW3gKzuNMuYtcSSZbGQm94fAp16xt8VsYTLBjUSc55bLMKe6gzpWue0Tfi6CBgwCSdDAqutGDhMg==", + "dev": true, "dependencies": { "glob": "^8.0.1", "json-parse-even-better-errors": "^2.3.1", @@ -27341,6 +27539,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, "dependencies": { "json-parse-even-better-errors": "^2.3.0", "npm-normalize-package-bin": "^1.0.1" @@ -27353,6 +27552,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -27361,6 +27561,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -27379,6 +27580,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "dev": true, "dependencies": { "lru-cache": "^7.5.1" }, @@ -27390,6 +27592,7 @@ "version": "7.18.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.1.tgz", "integrity": "sha512-8/HcIENyQnfUTCDizRu9rrDyG6XG/21M4X7/YEGZeD76ZJilFPAUVb/2zysFf7VVO1LEjCDFyHp8pMMvozIrvg==", + "dev": true, "engines": { "node": ">=12" } @@ -27398,6 +27601,7 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -27409,6 +27613,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", + "dev": true, "dependencies": { "hosted-git-info": "^5.0.0", "is-core-module": "^2.8.1", @@ -27632,6 +27837,7 @@ "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, "dependencies": { "debuglog": "^1.0.1", "dezalgo": "^1.0.0", @@ -27991,6 +28197,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.1.3.tgz", "integrity": "sha512-iyzalDLo3l5FZxxaIGUY7xI4Bf90Xt7pCipc1Mr7RsdU7H3538z+M0tlsUDrz0aHeGS9uNqiKHUJyTewwRP91Q==", + "dev": true, "bin": { "rimraf": "dist/cjs/src/bin.js" }, @@ -28491,7 +28698,8 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true }, "node_modules/set-getter": { "version": "0.1.1", @@ -28736,6 +28944,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -28756,6 +28965,7 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, "dependencies": { "ip": "^2.0.0", "smart-buffer": "^4.2.0" @@ -28769,6 +28979,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "dev": true, "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", @@ -28870,6 +29081,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -28878,12 +29090,14 @@ "node_modules/spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -28892,7 +29106,8 @@ "node_modules/spdx-license-ids": { "version": "3.0.12", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==" + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true }, "node_modules/spdy": { "version": "4.0.2", @@ -28988,6 +29203,7 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, "dependencies": { "minipass": "^3.1.1" }, @@ -28999,6 +29215,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -29009,7 +29226,8 @@ "node_modules/ssri/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/stack-trace": { "version": "0.0.10", @@ -30087,7 +30305,8 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true }, "node_modules/through": { "version": "2.3.8", @@ -30349,6 +30568,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-2.0.0.tgz", "integrity": "sha512-N5gJCkLu1aXccpOTtqV6ddSEi6ZmGkh3hjmbu1IjcavJK4qyOVQmi0myQKM7z5jVGmD68SJoliaVrMmVObhj6A==", + "dev": true, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } @@ -30579,11 +30799,11 @@ } }, "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -30775,6 +30995,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", + "dev": true, "dependencies": { "unique-slug": "^3.0.0" }, @@ -30786,6 +31007,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", + "dev": true, "dependencies": { "imurmurhash": "^0.1.4" }, @@ -31017,6 +31239,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -31026,6 +31249,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, "dependencies": { "builtins": "^5.0.0" }, @@ -31128,7 +31352,8 @@ "node_modules/walk-up-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-1.0.0.tgz", - "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==" + "integrity": "sha512-hwj/qMDUEjCU5h0xr90KGCf0tg0/LgJbmOWgrWKYlcJZM7XvquvUJZ0G/HMGr7F7OQMOUuPHWP9JpriinkAlkg==", + "dev": true }, "node_modules/walker": { "version": "1.0.8", @@ -31654,6 +31879,7 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } @@ -32316,6 +32542,8 @@ }, "peerDependencies": { "@k8slens/application": "^6.5.0-alpha.0", + "@k8slens/test-utils": "^1.0.0", + "@k8slens/utilities": "^1.0.0", "@types/byline": "^4.2.33", "@types/chart.js": "^2.9.36", "@types/color": "^3.0.3", @@ -32336,18 +32564,6 @@ "xterm-addon-fit": "^0.5.0" } }, - "packages/core/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "packages/ensure-binaries": { "name": "@k8slens/ensure-binaries", "version": "6.5.0-alpha.0", @@ -34227,18 +34443,6 @@ "node": ">=6" } }, - "packages/open-lens/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "packages/open-lens/node_modules/typescript-plugin-css-modules": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/typescript-plugin-css-modules/-/typescript-plugin-css-modules-4.2.2.tgz", @@ -34617,6 +34821,46 @@ "peerDependencies": { "@ogre-tools/injectable": "^15.1.1" } + }, + "packages/utility-features/run-many": { + "name": "@k8slens/run-many", + "version": "1.0.0", + "license": "MIT", + "peerDependencies": { + "@k8slens/test-utils": "^1.0.0", + "@k8slens/utilities": "^1.0.0", + "@ogre-tools/fp": "^15.1.1", + "@ogre-tools/injectable": "^15.1.1" + } + }, + "packages/utility-features/test-utils": { + "name": "@k8slens/test-utils", + "version": "1.0.0", + "license": "MIT" + }, + "packages/utility-features/types": { + "version": "1.0.0", + "extraneous": true, + "license": "MIT" + }, + "packages/utility-features/utilities": { + "name": "@k8slens/utilities", + "version": "1.0.0", + "license": "MIT", + "peerDependencies": { + "mobx": "^6.8.0", + "type-fest": "^2.19.0" + } + }, + "packages/utility-features/utility-types": { + "name": "@k8slens/utilities", + "version": "1.0.0", + "extraneous": true, + "license": "MIT", + "peerDependencies": { + "mobx": "^6.8.0", + "type-fest": "^2.19.0" + } } } } diff --git a/packages/core/package.json b/packages/core/package.json index bb69a20a29..29272aca72 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -330,6 +330,8 @@ }, "peerDependencies": { "@k8slens/application": "^6.5.0-alpha.0", + "@k8slens/test-utils": "^1.0.0", + "@k8slens/utilities": "^1.0.0", "@types/byline": "^4.2.33", "@types/chart.js": "^2.9.36", "@types/color": "^3.0.3", diff --git a/packages/core/src/common/base-store/base-store.ts b/packages/core/src/common/base-store/base-store.ts index ecdad5bd4d..be7abf1293 100644 --- a/packages/core/src/common/base-store/base-store.ts +++ b/packages/core/src/common/base-store/base-store.ts @@ -7,7 +7,7 @@ import type Config from "conf"; import type { Migrations, Options as ConfOptions } from "conf/dist/source/types"; import type { IEqualsComparer } from "mobx"; import { makeObservable, reaction } from "mobx"; -import { disposer, isPromiseLike, toJS } from "../utils"; +import { disposer, isPromiseLike } from "@k8slens/utilities"; import { broadcastMessage } from "../ipc"; import isEqual from "lodash/isEqual"; import { kebabCase } from "lodash"; @@ -16,6 +16,7 @@ import type { Logger } from "../logger"; import type { PersistStateToConfig } from "./save-to-file"; import type { GetBasenameOfPath } from "../path/get-basename.injectable"; import type { EnlistMessageChannelListener } from "../utils/channel/enlist-message-channel-listener-injection-token"; +import { toJS } from "../utils"; export interface BaseStoreParams extends Omit, "migrations"> { syncOptions?: { diff --git a/packages/core/src/common/base-store/migrations.injectable.ts b/packages/core/src/common/base-store/migrations.injectable.ts index 27f7489dfa..d97abee1ec 100644 --- a/packages/core/src/common/base-store/migrations.injectable.ts +++ b/packages/core/src/common/base-store/migrations.injectable.ts @@ -7,7 +7,7 @@ import { lifecycleEnum, getInjectable } from "@ogre-tools/injectable"; import type Conf from "conf/dist/source"; import type { Migrations } from "conf/dist/source/types"; import loggerInjectable from "../logger.injectable"; -import { getOrInsert, iter } from "../utils"; +import { getOrInsert, iter } from "@k8slens/utilities"; export interface MigrationDeclaration { version: string; diff --git a/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/catalog-catalog-entity.injectable.ts b/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/catalog-catalog-entity.injectable.ts index 15195a4b74..b36be73de6 100644 --- a/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/catalog-catalog-entity.injectable.ts +++ b/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/catalog-catalog-entity.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { generalCatalogEntityInjectionToken } from "../general-catalog-entity-injection-token"; import { GeneralEntity } from "../../index"; -import { buildURL } from "../../../utils/buildUrl"; +import { buildURL } from "@k8slens/utilities"; import catalogRouteInjectable from "../../../front-end-routing/routes/catalog/catalog-route.injectable"; const catalogCatalogEntityInjectable = getInjectable({ diff --git a/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/welcome-catalog-entity.injectable.ts b/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/welcome-catalog-entity.injectable.ts index 363dd73c5f..7b4a327339 100644 --- a/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/welcome-catalog-entity.injectable.ts +++ b/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/welcome-catalog-entity.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { generalCatalogEntityInjectionToken } from "../general-catalog-entity-injection-token"; import { GeneralEntity } from "../../index"; -import { buildURL } from "../../../utils/buildUrl"; +import { buildURL } from "@k8slens/utilities/src/buildUrl"; import welcomeRouteInjectable from "../../../front-end-routing/routes/welcome/welcome-route.injectable"; const welcomeCatalogEntityInjectable = getInjectable({ diff --git a/packages/core/src/common/catalog/catalog-entity.ts b/packages/core/src/common/catalog/catalog-entity.ts index 3a86da757f..8838e83ad4 100644 --- a/packages/core/src/common/catalog/catalog-entity.ts +++ b/packages/core/src/common/catalog/catalog-entity.ts @@ -7,8 +7,8 @@ import EventEmitter from "events"; import type TypedEmitter from "typed-emitter"; import { observable, makeObservable } from "mobx"; import { once } from "lodash"; -import type { Disposer } from "../utils"; -import { iter } from "../utils"; +import type { Disposer } from "@k8slens/utilities"; +import { iter } from "@k8slens/utilities"; import type { CategoryColumnRegistration, TitleCellProps } from "../../renderer/components/+catalog/custom-category-columns"; export type { CategoryColumnRegistration, TitleCellProps }; diff --git a/packages/core/src/common/catalog/category-registry.ts b/packages/core/src/common/catalog/category-registry.ts index 75c33d8a10..439d11bac6 100644 --- a/packages/core/src/common/catalog/category-registry.ts +++ b/packages/core/src/common/catalog/category-registry.ts @@ -5,8 +5,8 @@ import { action, computed, observable, makeObservable } from "mobx"; import { once } from "lodash"; -import { iter, getOrInsertMap, strictSet } from "../utils"; -import type { Disposer } from "../utils"; +import { iter, getOrInsertMap, strictSet } from "@k8slens/utilities"; +import type { Disposer } from "@k8slens/utilities"; import type { CatalogCategory, CatalogEntityData, CatalogEntityKindData } from "./catalog-entity"; export type CategoryFilter = (category: CatalogCategory) => any; diff --git a/packages/core/src/common/cluster/cluster.ts b/packages/core/src/common/cluster/cluster.ts index f00d9c3f89..53c6a8a88b 100644 --- a/packages/core/src/common/cluster/cluster.ts +++ b/packages/core/src/common/cluster/cluster.ts @@ -11,10 +11,10 @@ import type { Kubectl } from "../../main/kubectl/kubectl"; import type { KubeconfigManager } from "../../main/kubeconfig-manager/kubeconfig-manager"; import type { KubeApiResource, KubeApiResourceDescriptor } from "../rbac"; import { formatKubeApiResource } from "../rbac"; -import plimit from "p-limit"; import type { ClusterState, ClusterMetricsResourceType, ClusterId, ClusterMetadata, ClusterModel, ClusterPreferences, ClusterPrometheusPreferences, UpdateClusterModel, KubeAuthUpdate, ClusterConfigData } from "../cluster-types"; import { ClusterMetadataKey, initialNodeShellImage, ClusterStatus, clusterModelIdChecker, updateClusterModelChecker } from "../cluster-types"; -import { disposer, isDefined, isRequestError, toJS } from "../utils"; +import { disposer, isDefined, isRequestError, withConcurrencyLimit } from "@k8slens/utilities"; +import { toJS } from "../utils"; import { clusterListNamespaceForbiddenChannel } from "../ipc/cluster"; import type { CanI } from "./authorization-review.injectable"; import type { ListNamespaces } from "./list-namespaces.injectable"; @@ -683,10 +683,11 @@ export class Cluster implements ClusterModel { return []; } + const apiLimit = withConcurrencyLimit(5); + try { - const apiLimit = plimit(5); // 5 concurrent api requests const canListResourceCheckers = await Promise.all(( - this.allowedNamespaces.map(namespace => apiLimit(() => requestNamespaceListPermissions(namespace))) + this.allowedNamespaces.map(namespace => apiLimit(() => requestNamespaceListPermissions(namespace))()) )); const canListNamespacedResource: CanListResource = (resource) => canListResourceCheckers.some(fn => fn(resource)); diff --git a/packages/core/src/common/cluster/list-namespaces.injectable.ts b/packages/core/src/common/cluster/list-namespaces.injectable.ts index 468ff3ac2e..34f4c52a16 100644 --- a/packages/core/src/common/cluster/list-namespaces.injectable.ts +++ b/packages/core/src/common/cluster/list-namespaces.injectable.ts @@ -5,7 +5,7 @@ import type { KubeConfig } from "@kubernetes/client-node"; import { CoreV1Api } from "@kubernetes/client-node"; import { getInjectable } from "@ogre-tools/injectable"; -import { isDefined } from "../utils"; +import { isDefined } from "@k8slens/utilities"; export type ListNamespaces = () => Promise; diff --git a/packages/core/src/common/fetch/download-binary.injectable.ts b/packages/core/src/common/fetch/download-binary.injectable.ts index b50c4e5782..9f0ce65093 100644 --- a/packages/core/src/common/fetch/download-binary.injectable.ts +++ b/packages/core/src/common/fetch/download-binary.injectable.ts @@ -4,14 +4,14 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import type { RequestInit, Response } from "@k8slens/node-fetch"; -import type { AsyncResult } from "../utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import fetchInjectable from "./fetch.injectable"; export interface DownloadBinaryOptions { signal?: AbortSignal | null | undefined; } -export type DownloadBinary = (url: string, opts?: DownloadBinaryOptions) => Promise>; +export type DownloadBinary = (url: string, opts?: DownloadBinaryOptions) => AsyncResult; const downloadBinaryInjectable = getInjectable({ id: "download-binary", diff --git a/packages/core/src/common/fetch/download-json/impl.ts b/packages/core/src/common/fetch/download-json/impl.ts index bf5cf06a19..f691cc2762 100644 --- a/packages/core/src/common/fetch/download-json/impl.ts +++ b/packages/core/src/common/fetch/download-json/impl.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { AsyncResult } from "../../utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import type { Fetch } from "../fetch.injectable"; import type { RequestInit, Response } from "@k8slens/node-fetch"; @@ -10,7 +10,7 @@ export interface DownloadJsonOptions { signal?: AbortSignal | null | undefined; } -export type DownloadJson = (url: string, opts?: DownloadJsonOptions) => Promise>; +export type DownloadJson = (url: string, opts?: DownloadJsonOptions) => AsyncResult; export const downloadJsonWith = (fetch: Fetch): DownloadJson => async (url, opts) => { let result: Response; diff --git a/packages/core/src/common/fetch/fetch.global-override-for-injectable.ts b/packages/core/src/common/fetch/fetch.global-override-for-injectable.ts index 1a5f80735c..d11e059023 100644 --- a/packages/core/src/common/fetch/fetch.global-override-for-injectable.ts +++ b/packages/core/src/common/fetch/fetch.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverrideForFunction } from "../test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "../../../../utility-features/test-utils/src/get-global-override-for-function"; import fetchInjectable from "./fetch.injectable"; export default getGlobalOverrideForFunction(fetchInjectable); diff --git a/packages/core/src/common/fetch/lens-fetch.global-override-for-injectable.ts b/packages/core/src/common/fetch/lens-fetch.global-override-for-injectable.ts index 0bc144b1be..627aa4c725 100644 --- a/packages/core/src/common/fetch/lens-fetch.global-override-for-injectable.ts +++ b/packages/core/src/common/fetch/lens-fetch.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverrideForFunction } from "../test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "../../../../utility-features/test-utils/src/get-global-override-for-function"; import lensFetchInjectable from "./lens-fetch.injectable"; export default getGlobalOverrideForFunction(lensFetchInjectable); diff --git a/packages/core/src/common/front-end-routing/routes/cluster/network/ingresses/ingresses-route.injectable.ts b/packages/core/src/common/front-end-routing/routes/cluster/network/ingresses/ingresses-route.injectable.ts index 8e01646b82..3a6669d99f 100644 --- a/packages/core/src/common/front-end-routing/routes/cluster/network/ingresses/ingresses-route.injectable.ts +++ b/packages/core/src/common/front-end-routing/routes/cluster/network/ingresses/ingresses-route.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { shouldShowResourceInjectionToken } from "../../../../../cluster-store/allowed-resources-injection-token"; -import { computedOr } from "../../../../../utils/computed-or"; +import { computedOr } from "@k8slens/utilities"; import { frontEndRouteInjectionToken } from "../../../../front-end-route-injection-token"; const ingressesRouteInjectable = getInjectable({ diff --git a/packages/core/src/common/fs/exec-file.global-override-for-injectable.ts b/packages/core/src/common/fs/exec-file.global-override-for-injectable.ts index 162666a130..dc72a7f51a 100644 --- a/packages/core/src/common/fs/exec-file.global-override-for-injectable.ts +++ b/packages/core/src/common/fs/exec-file.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverrideForFunction } from "../test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "../../../../utility-features/test-utils/src/get-global-override-for-function"; import execFileInjectable from "./exec-file.injectable"; export default getGlobalOverrideForFunction(execFileInjectable); diff --git a/packages/core/src/common/fs/exec-file.injectable.ts b/packages/core/src/common/fs/exec-file.injectable.ts index f026e0db3a..9ee0fae78f 100644 --- a/packages/core/src/common/fs/exec-file.injectable.ts +++ b/packages/core/src/common/fs/exec-file.injectable.ts @@ -5,14 +5,14 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { ExecFileException, ExecFileOptions } from "child_process"; import { execFile } from "child_process"; -import type { AsyncResult } from "../utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; export type ExecFileError = ExecFileException & { stderr: string }; export interface ExecFile { - (filePath: string): Promise>; - (filePath: string, argsOrOptions: string[] | ExecFileOptions): Promise>; - (filePath: string, args: string[], options: ExecFileOptions): Promise>; + (filePath: string): AsyncResult; + (filePath: string, argsOrOptions: string[] | ExecFileOptions): AsyncResult; + (filePath: string, args: string[], options: ExecFileOptions): AsyncResult; } const execFileInjectable = getInjectable({ diff --git a/packages/core/src/common/fs/fs.injectable.ts b/packages/core/src/common/fs/fs.injectable.ts index 600e4eaa40..b42a51aad7 100644 --- a/packages/core/src/common/fs/fs.injectable.ts +++ b/packages/core/src/common/fs/fs.injectable.ts @@ -21,6 +21,7 @@ const fsInjectable = getInjectable({ rm, access, stat, + unlink, }, ensureDir, ensureDirSync, @@ -56,6 +57,7 @@ const fsInjectable = getInjectable({ ensureDirSync, createReadStream, stat, + unlink, }; }, causesSideEffects: true, diff --git a/packages/core/src/common/fs/unlink.injectable.ts b/packages/core/src/common/fs/unlink.injectable.ts new file mode 100644 index 0000000000..e13bf35935 --- /dev/null +++ b/packages/core/src/common/fs/unlink.injectable.ts @@ -0,0 +1,15 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectable } from "@ogre-tools/injectable"; +import fsInjectable from "./fs.injectable"; + +export type Unlink = (path: string) => Promise; + +const unlinkInjectable = getInjectable({ + id: "unlink", + instantiate: (di): Unlink => di.inject(fsInjectable).unlink, +}); + +export default unlinkInjectable; diff --git a/packages/core/src/common/fs/validate-directory.injectable.ts b/packages/core/src/common/fs/validate-directory.injectable.ts index efce915238..717caf5ec8 100644 --- a/packages/core/src/common/fs/validate-directory.injectable.ts +++ b/packages/core/src/common/fs/validate-directory.injectable.ts @@ -3,13 +3,13 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import type { AsyncResult } from "../utils/async-result"; -import { isErrnoException } from "../utils"; +import type { AsyncResult } from "@k8slens/utilities"; +import { isErrnoException } from "@k8slens/utilities"; import type { Stats } from "fs-extra"; import { lowerFirst } from "lodash/fp"; import statInjectable from "./stat.injectable"; -export type ValidateDirectory = (path: string) => Promise>; +export type ValidateDirectory = (path: string) => AsyncResult; function getUserReadableFileType(stats: Stats): string { if (stats.isFile()) { diff --git a/packages/core/src/common/fs/watch/watch.injectable.ts b/packages/core/src/common/fs/watch/watch.injectable.ts index 50f96cdf57..084197769d 100644 --- a/packages/core/src/common/fs/watch/watch.injectable.ts +++ b/packages/core/src/common/fs/watch/watch.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { watch } from "chokidar"; import type { Stats } from "fs"; import type TypedEventEmitter from "typed-emitter"; -import type { SingleOrMany } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; export interface AlwaysStatWatcherEvents { add: (path: string, stats: Stats) => void; diff --git a/packages/core/src/common/helm/add-helm-repository-channel.ts b/packages/core/src/common/helm/add-helm-repository-channel.ts index bf5aa19367..258367c7ec 100644 --- a/packages/core/src/common/helm/add-helm-repository-channel.ts +++ b/packages/core/src/common/helm/add-helm-repository-channel.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import type { HelmRepo } from "./helm-repo"; -import type { AsyncResult } from "../utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import type { RequestChannel } from "../utils/channel/request-channel-listener-injection-token"; export type AddHelmRepositoryChannel = RequestChannel>; diff --git a/packages/core/src/common/helm/get-active-helm-repositories-channel.ts b/packages/core/src/common/helm/get-active-helm-repositories-channel.ts index 26720e9a5f..2ea5a80030 100644 --- a/packages/core/src/common/helm/get-active-helm-repositories-channel.ts +++ b/packages/core/src/common/helm/get-active-helm-repositories-channel.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import type { HelmRepo } from "./helm-repo"; -import type { AsyncResult } from "../utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import type { RequestChannel } from "../utils/channel/request-channel-listener-injection-token"; export type GetActiveHelmRepositoriesChannel = RequestChannel>; diff --git a/packages/core/src/common/helm/remove-helm-repository-channel.ts b/packages/core/src/common/helm/remove-helm-repository-channel.ts index 4d479d088c..f1189cb580 100644 --- a/packages/core/src/common/helm/remove-helm-repository-channel.ts +++ b/packages/core/src/common/helm/remove-helm-repository-channel.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { AsyncResult } from "../utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import type { RequestChannel } from "../utils/channel/request-channel-listener-injection-token"; import type { HelmRepo } from "./helm-repo"; diff --git a/packages/core/src/common/hotbars/types.ts b/packages/core/src/common/hotbars/types.ts index 6370fe136d..2925c785a0 100644 --- a/packages/core/src/common/hotbars/types.ts +++ b/packages/core/src/common/hotbars/types.ts @@ -4,8 +4,8 @@ */ import * as uuid from "uuid"; -import type { Tuple } from "../utils"; -import { tuple } from "../utils"; +import type { Tuple } from "@k8slens/utilities"; +import { tuple } from "@k8slens/utilities"; export interface HotbarItem { entity: { diff --git a/packages/core/src/common/ipc/broadcast-message.global-override-for-injectable.ts b/packages/core/src/common/ipc/broadcast-message.global-override-for-injectable.ts index e455b30cdc..669f4ca79f 100644 --- a/packages/core/src/common/ipc/broadcast-message.global-override-for-injectable.ts +++ b/packages/core/src/common/ipc/broadcast-message.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverrideForFunction } from "../test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "../../../../utility-features/test-utils/src/get-global-override-for-function"; import broadcastMessageInjectable from "./broadcast-message.injectable"; export default getGlobalOverrideForFunction(broadcastMessageInjectable); diff --git a/packages/core/src/common/ipc/ipc.ts b/packages/core/src/common/ipc/ipc.ts index e84fcfec56..4815fbfbf1 100644 --- a/packages/core/src/common/ipc/ipc.ts +++ b/packages/core/src/common/ipc/ipc.ts @@ -11,7 +11,7 @@ import { ipcMain, ipcRenderer, webContents } from "electron"; import { toJS } from "../utils/toJS"; import type { ClusterFrameInfo } from "../cluster-frames"; import { clusterFrameMap } from "../cluster-frames"; -import type { Disposer } from "../utils"; +import type { Disposer } from "@k8slens/utilities"; import { getLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import ipcRendererInjectable from "../../renderer/utils/channel/ipc-renderer.injectable"; import loggerInjectable from "../logger.injectable"; diff --git a/packages/core/src/common/item.store.ts b/packages/core/src/common/item.store.ts index 805137e95c..4d7c3343ef 100644 --- a/packages/core/src/common/item.store.ts +++ b/packages/core/src/common/item.store.ts @@ -3,8 +3,8 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ +import autoBind from "auto-bind"; import orderBy from "lodash/orderBy"; -import { autoBind } from "./utils"; import { action, computed, observable, when, makeObservable } from "mobx"; export interface ItemObject { diff --git a/packages/core/src/common/k8s-api/__tests__/kube-object.store.test.ts b/packages/core/src/common/k8s-api/__tests__/kube-object.store.test.ts index 424cffba23..24820648af 100644 --- a/packages/core/src/common/k8s-api/__tests__/kube-object.store.test.ts +++ b/packages/core/src/common/k8s-api/__tests__/kube-object.store.test.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { noop } from "../../utils"; +import { noop } from "@k8slens/utilities"; import type { KubeApi } from "../kube-api"; import { KubeObject } from "../kube-object"; import type { KubeObjectStoreLoadingParams } from "../kube-object.store"; diff --git a/packages/core/src/common/k8s-api/api-manager/api-manager.ts b/packages/core/src/common/k8s-api/api-manager/api-manager.ts index 0dad9a2a21..15148cb45c 100644 --- a/packages/core/src/common/k8s-api/api-manager/api-manager.ts +++ b/packages/core/src/common/k8s-api/api-manager/api-manager.ts @@ -10,7 +10,7 @@ import { autorun, action, observable } from "mobx"; import type { KubeApi } from "../kube-api"; import type { KubeObject, ObjectReference } from "../kube-object"; import { parseKubeApi, createKubeApiURL } from "../kube-api-parse"; -import { chain, find } from "../../utils/iter"; +import { chain, find } from "@k8slens/utilities/src/iter"; export type RegisterableStore = Store extends KubeObjectStore ? Store diff --git a/packages/core/src/common/k8s-api/endpoints/config-map.api.ts b/packages/core/src/common/k8s-api/endpoints/config-map.api.ts index a2860246b1..cf635fb623 100644 --- a/packages/core/src/common/k8s-api/endpoints/config-map.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/config-map.api.ts @@ -8,7 +8,7 @@ import { KubeObject } from "../kube-object"; import type { KubeJsonApiData } from "../kube-json-api"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { autoBind } from "../../utils"; +import autoBind from "auto-bind"; export interface ConfigMapData extends KubeJsonApiData, void, void> { data?: Partial>; diff --git a/packages/core/src/common/k8s-api/endpoints/cron-job.api.ts b/packages/core/src/common/k8s-api/endpoints/cron-job.api.ts index 2ccb8c910c..1ad0c42511 100644 --- a/packages/core/src/common/k8s-api/endpoints/cron-job.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/cron-job.api.ts @@ -6,7 +6,7 @@ import moment from "moment"; import type { NamespaceScopedMetadata, ObjectReference } from "../kube-object"; import { KubeObject } from "../kube-object"; -import { formatDuration } from "../../utils/formatDuration"; +import { formatDuration } from "@k8slens/utilities"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; import type { JobTemplateSpec } from "./types/job-template-spec"; diff --git a/packages/core/src/common/k8s-api/endpoints/custom-resource-definition.api.ts b/packages/core/src/common/k8s-api/endpoints/custom-resource-definition.api.ts index b438f06b3a..6e6db3f9d5 100644 --- a/packages/core/src/common/k8s-api/endpoints/custom-resource-definition.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/custom-resource-definition.api.ts @@ -5,7 +5,7 @@ import { getLegacyGlobalDiForExtensionApi } from "../../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import customResourcesRouteInjectable from "../../front-end-routing/routes/cluster/custom-resources/custom-resources/custom-resources-route.injectable"; -import { buildURL } from "../../utils/buildUrl"; +import { buildURL } from "@k8slens/utilities/src/buildUrl"; import type { BaseKubeObjectCondition, ClusterScopedMetadata } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; diff --git a/packages/core/src/common/k8s-api/endpoints/deployment.api.ts b/packages/core/src/common/k8s-api/endpoints/deployment.api.ts index 31bc55ae76..70e7200e3c 100644 --- a/packages/core/src/common/k8s-api/endpoints/deployment.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/deployment.api.ts @@ -10,7 +10,7 @@ import { KubeApi } from "../kube-api"; import type { PodSpec } from "./pod.api"; import type { KubeObjectStatus, LabelSelector, NamespaceScopedMetadata } from "../kube-object"; import { KubeObject } from "../kube-object"; -import { hasTypedProperty, isNumber, isObject } from "../../utils"; +import { hasTypedProperty, isNumber, isObject } from "@k8slens/utilities"; export class DeploymentApi extends KubeApi { constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) { diff --git a/packages/core/src/common/k8s-api/endpoints/endpoint.api.ts b/packages/core/src/common/k8s-api/endpoints/endpoint.api.ts index c60377a887..1e045e902d 100644 --- a/packages/core/src/common/k8s-api/endpoints/endpoint.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/endpoint.api.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { autoBind } from "../../utils"; +import autoBind from "auto-bind"; import type { KubeObjectMetadata, KubeObjectScope, NamespaceScopedMetadata, ObjectReference } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; diff --git a/packages/core/src/common/k8s-api/endpoints/events.api.ts b/packages/core/src/common/k8s-api/endpoints/events.api.ts index aca77712c8..1da4b6afe8 100644 --- a/packages/core/src/common/k8s-api/endpoints/events.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/events.api.ts @@ -6,7 +6,7 @@ import moment from "moment"; import type { KubeObjectMetadata, KubeObjectScope, ObjectReference } from "../kube-object"; import { KubeObject } from "../kube-object"; -import { formatDuration } from "../../utils/formatDuration"; +import { formatDuration } from "@k8slens/utilities"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; import type { KubeJsonApiData } from "../kube-json-api"; diff --git a/packages/core/src/common/k8s-api/endpoints/helm-charts.api.ts b/packages/core/src/common/k8s-api/endpoints/helm-charts.api.ts index 26da740830..da2d8ab00c 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-charts.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-charts.api.ts @@ -3,7 +3,8 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { autoBind, bifurcateArray } from "../../utils"; +import { array } from "@k8slens/utilities"; +import autoBind from "auto-bind"; import Joi from "joi"; export interface RawHelmChart { @@ -263,7 +264,7 @@ export class HelmChart implements HelmChartData { return new HelmChart(result.value); } - const [actualErrors, unknownDetails] = bifurcateArray(result.error.details, ({ type }) => type === "object.unknown"); + const [actualErrors, unknownDetails] = array.bifurcate(result.error.details, ({ type }) => type === "object.unknown"); if (unknownDetails.length > 0) { console.warn("HelmChart data has unexpected fields", { original: data, unknownFields: unknownDetails.flatMap(d => d.path) }); diff --git a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-charts.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-charts.injectable.ts index 4d9bfc55b1..246b628ea0 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-charts.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-charts.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { RawHelmChart } from "../helm-charts.api"; import { HelmChart } from "../helm-charts.api"; -import { isDefined } from "../../../utils"; +import { isDefined } from "@k8slens/utilities"; import apiBaseInjectable from "../../api-base.injectable"; export type RequestHelmCharts = () => Promise; diff --git a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-readme.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-readme.injectable.ts index fb8eaafa10..d6977fc5ca 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-readme.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-readme.injectable.ts @@ -3,13 +3,13 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import type { AsyncResult } from "../../../utils/async-result"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import type { AsyncResult } from "@k8slens/utilities"; +import { urlBuilderFor } from "@k8slens/utilities"; import apiBaseInjectable from "../../api-base.injectable"; const requestReadmeEndpoint = urlBuilderFor("/v2/charts/:repo/:name/readme"); -export type RequestHelmChartReadme = (repo: string, name: string, version?: string) => Promise>; +export type RequestHelmChartReadme = (repo: string, name: string, version?: string) => AsyncResult; const requestHelmChartReadmeInjectable = getInjectable({ id: "request-helm-chart-readme", diff --git a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-values.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-values.injectable.ts index 71105c9ff9..2d4e77bf33 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-values.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-values.injectable.ts @@ -3,13 +3,13 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import type { AsyncResult } from "../../../utils/async-result"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import type { AsyncResult } from "@k8slens/utilities"; +import { urlBuilderFor } from "@k8slens/utilities"; import apiBaseInjectable from "../../api-base.injectable"; const requestValuesEndpoint = urlBuilderFor("/v2/charts/:repo/:name/values"); -export type RequestHelmChartValues = (repo: string, name: string, version: string) => Promise>; +export type RequestHelmChartValues = (repo: string, name: string, version: string) => AsyncResult; const requestHelmChartValuesInjectable = getInjectable({ id: "request-helm-chart-values", diff --git a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-versions.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-versions.injectable.ts index ab85594ec6..b7c4edf038 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-versions.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-versions.injectable.ts @@ -3,10 +3,10 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities/src/buildUrl"; import { HelmChart } from "../helm-charts.api"; import type { RawHelmChart } from "../helm-charts.api"; -import { isDefined } from "../../../utils"; +import { isDefined } from "@k8slens/utilities"; import apiBaseInjectable from "../../api-base.injectable"; const requestVersionsEndpoint = urlBuilderFor("/v2/charts/:repo/:name/versions"); diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable.ts index e1581c5d76..cca5baf085 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities/src/buildUrl"; import apiBaseInjectable from "../../api-base.injectable"; export type RequestHelmReleaseConfiguration = ( diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-create.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-create.injectable.ts index c1cd09d40f..2e638aaae6 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-create.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-create.injectable.ts @@ -5,7 +5,7 @@ import yaml from "js-yaml"; import { getInjectable } from "@ogre-tools/injectable"; import type { HelmReleaseUpdateDetails } from "../helm-releases.api"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities/src/buildUrl"; import apiBaseInjectable from "../../api-base.injectable"; interface HelmReleaseCreatePayload { diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-delete.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-delete.injectable.ts index 44af4311a9..f16a6b6194 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-delete.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-delete.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities/src/buildUrl"; import apiBaseInjectable from "../../api-base.injectable"; export type RequestDeleteHelmRelease = (name: string, namespace: string) => Promise; diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-details.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-details.injectable.ts index 37f2287377..4b176431ea 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-details.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-details.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import type { KubeJsonApiData } from "../../kube-json-api"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities/src/buildUrl"; import apiBaseInjectable from "../../api-base.injectable"; export interface HelmReleaseDetails { diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-history.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-history.injectable.ts index 58b6a37dbb..73129b2794 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-history.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-history.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities/src/buildUrl"; import apiBaseInjectable from "../../api-base.injectable"; export interface HelmReleaseRevision { diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-releases.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-releases.injectable.ts index ee6503ca99..23a23d9899 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-releases.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-releases.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities/src/buildUrl"; import apiBaseInjectable from "../../api-base.injectable"; import type { HelmReleaseDto } from "../helm-releases.api"; diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-rollback.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-rollback.injectable.ts index 036b399ef2..00fae0ee92 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-rollback.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-rollback.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities/src/buildUrl"; import apiBaseInjectable from "../../api-base.injectable"; export type RequestHelmReleaseRollback = (name: string, namespace: string, revision: number) => Promise; diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-update.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-update.injectable.ts index 715a21cea9..982b6086e4 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-update.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-update.injectable.ts @@ -3,8 +3,8 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { urlBuilderFor } from "../../../utils/buildUrl"; -import type { AsyncResult } from "../../../utils/async-result"; +import { urlBuilderFor } from "@k8slens/utilities/src/buildUrl"; +import type { AsyncResult } from "@k8slens/utilities"; import apiBaseInjectable from "../../api-base.injectable"; interface HelmReleaseUpdatePayload { @@ -18,7 +18,7 @@ export type RequestHelmReleaseUpdate = ( name: string, namespace: string, payload: HelmReleaseUpdatePayload -) => Promise>; +) => AsyncResult; const requestUpdateEndpoint = urlBuilderFor("/v2/releases/:namespace/:name"); diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-values.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-values.injectable.ts index 99f1cc17d0..03e035acb2 100644 --- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-values.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-values.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { urlBuilderFor } from "../../../utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities/src/buildUrl"; import apiBaseInjectable from "../../api-base.injectable"; export type RequestHelmReleaseValues = (name: string, namespace: string, all?: boolean) => Promise; diff --git a/packages/core/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.ts b/packages/core/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.ts index f0bc5d14bc..b3bdbbf21d 100644 --- a/packages/core/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { OptionVarient } from "../../utils"; +import type { OptionVariant } from "@k8slens/utilities"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; import type { BaseKubeObjectCondition, LabelSelector, NamespaceScopedMetadata } from "../kube-object"; @@ -46,7 +46,7 @@ export interface V2Beta1ContainerResourceMetricSource { targetAverageValue?: string; } -export type ContainerResourceMetricSource = +export type ContainerResourceMetricSource = | V2ContainerResourceMetricSource | V2Beta1ContainerResourceMetricSource; @@ -74,7 +74,7 @@ export interface V2Beta1ExternalMetricSource { }; } -export type ExternalMetricSource = +export type ExternalMetricSource = | V2Beta1ExternalMetricSource | V2ExternalMetricSource; @@ -152,11 +152,11 @@ export interface BaseHorizontalPodAutoscalerMetricSpec { } export type HorizontalPodAutoscalerMetricSpec = - | OptionVarient - | OptionVarient - | OptionVarient - | OptionVarient - | OptionVarient; + | OptionVariant + | OptionVariant + | OptionVariant + | OptionVariant + | OptionVariant; interface HorizontalPodAutoscalerBehavior { scaleUp?: HPAScalingRules; @@ -294,11 +294,11 @@ export interface BaseHorizontalPodAutoscalerMetricStatus { } export type HorizontalPodAutoscalerMetricStatus = - | OptionVarient - | OptionVarient - | OptionVarient - | OptionVarient - | OptionVarient; + | OptionVariant + | OptionVariant + | OptionVariant + | OptionVariant + | OptionVariant; export interface HorizontalPodAutoscalerSpec { scaleTargetRef: CrossVersionObjectReference; diff --git a/packages/core/src/common/k8s-api/endpoints/ingress.api.ts b/packages/core/src/common/k8s-api/endpoints/ingress.api.ts index d35cd77c0b..2a9a49ad8e 100644 --- a/packages/core/src/common/k8s-api/endpoints/ingress.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/ingress.api.ts @@ -5,7 +5,7 @@ import type { NamespaceScopedMetadata, TypedLocalObjectReference } from "../kube-object"; import { KubeObject } from "../kube-object"; -import { hasTypedProperty, isString, iter } from "../../utils"; +import { hasTypedProperty, isString, iter } from "@k8slens/utilities"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; import type { RequireExactlyOne } from "type-fest"; diff --git a/packages/core/src/common/k8s-api/endpoints/metrics.api.ts b/packages/core/src/common/k8s-api/endpoints/metrics.api.ts index 406ab1d0b2..69465bbf6e 100644 --- a/packages/core/src/common/k8s-api/endpoints/metrics.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/metrics.api.ts @@ -6,7 +6,7 @@ // Metrics api import moment from "moment"; -import { isDefined, object } from "../../utils"; +import { isDefined, object } from "@k8slens/utilities"; export interface MetricData { status: string; diff --git a/packages/core/src/common/k8s-api/endpoints/node.api.ts b/packages/core/src/common/k8s-api/endpoints/node.api.ts index 158f359a57..31839b24f8 100644 --- a/packages/core/src/common/k8s-api/endpoints/node.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/node.api.ts @@ -5,7 +5,7 @@ import type { BaseKubeObjectCondition, ClusterScopedMetadata } from "../kube-object"; import { KubeObject } from "../kube-object"; -import { cpuUnitsToNumber, unitsToBytes, isObject } from "../../../renderer/utils"; +import { cpuUnitsToNumber, unitsToBytes, isObject } from "@k8slens/utilities"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; import { TypedRegEx } from "typed-regex"; diff --git a/packages/core/src/common/k8s-api/endpoints/persistent-volume-claim.api.ts b/packages/core/src/common/k8s-api/endpoints/persistent-volume-claim.api.ts index 947d9139a3..25e4d63454 100644 --- a/packages/core/src/common/k8s-api/endpoints/persistent-volume-claim.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/persistent-volume-claim.api.ts @@ -8,7 +8,7 @@ import { KubeObject } from "../kube-object"; import type { Pod } from "./pod.api"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; -import { object } from "../../utils"; +import { object } from "@k8slens/utilities"; import type { ResourceRequirements } from "./types/resource-requirements"; export class PersistentVolumeClaimApi extends KubeApi { diff --git a/packages/core/src/common/k8s-api/endpoints/persistent-volume.api.ts b/packages/core/src/common/k8s-api/endpoints/persistent-volume.api.ts index f4d80a82eb..6d6e249db5 100644 --- a/packages/core/src/common/k8s-api/endpoints/persistent-volume.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/persistent-volume.api.ts @@ -5,7 +5,7 @@ import type { ClusterScopedMetadata, LabelSelector, ObjectReference, TypedLocalObjectReference } from "../kube-object"; import { KubeObject } from "../kube-object"; -import { unitsToBytes } from "../../utils"; +import { unitsToBytes } from "@k8slens/utilities"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; import type { ResourceRequirements } from "./types/resource-requirements"; diff --git a/packages/core/src/common/k8s-api/endpoints/pod.api.ts b/packages/core/src/common/k8s-api/endpoints/pod.api.ts index 3a0bed57cd..d0c0178d8d 100644 --- a/packages/core/src/common/k8s-api/endpoints/pod.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/pod.api.ts @@ -10,7 +10,7 @@ import type { KubeObjectMetadata, LocalObjectReference, Affinity, Toleration, Na import type { SecretReference } from "./secret.api"; import type { PersistentVolumeClaimSpec } from "./persistent-volume-claim.api"; import { KubeObject } from "../kube-object"; -import { isDefined } from "../../utils"; +import { isDefined } from "@k8slens/utilities"; import type { PodSecurityContext } from "./types/pod-security-context"; import type { Probe } from "./types/probe"; import type { Container } from "./types/container"; diff --git a/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-patch.injectable.ts b/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-patch.injectable.ts index 49271fb6d2..714340c78a 100644 --- a/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-patch.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-patch.injectable.ts @@ -5,10 +5,10 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { Patch } from "rfc6902"; import apiBaseInjectable from "../../api-base.injectable"; -import type { AsyncResult } from "../../../utils/async-result"; +import type { AsyncResult, Result } from "@k8slens/utilities"; import type { KubeJsonApiData } from "../../kube-json-api"; -export type RequestKubeObjectPatch = (name: string, kind: string, ns: string | undefined, patch: Patch) => Promise>; +export type RequestKubeObjectPatch = (name: string, kind: string, ns: string | undefined, patch: Patch) => AsyncResult; const requestKubeObjectPatchInjectable = getInjectable({ id: "request-kube-object-patch", @@ -23,7 +23,7 @@ const requestKubeObjectPatchInjectable = getInjectable({ ns, patch, }, - }) as AsyncResult; + }) as Result; if (!result.callWasSuccessful) { return result; diff --git a/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-update.injectable.ts b/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-update.injectable.ts index 1891a779cf..211ada1575 100644 --- a/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-update.injectable.ts +++ b/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-update.injectable.ts @@ -4,10 +4,10 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import apiBaseInjectable from "../../api-base.injectable"; -import type { AsyncResult } from "../../../utils/async-result"; +import type { AsyncResult, Result } from "@k8slens/utilities"; import type { KubeJsonApiData } from "../../kube-json-api"; -export type RequestKubeObjectCreation = (resourceDescriptor: string) => Promise>; +export type RequestKubeObjectCreation = (resourceDescriptor: string) => AsyncResult; const requestKubeObjectCreationInjectable = getInjectable({ id: "request-kube-object-creation", @@ -15,7 +15,7 @@ const requestKubeObjectCreationInjectable = getInjectable({ const apiBase = di.inject(apiBaseInjectable); return async (data) => { - const result = await apiBase.post("/stack", { data }) as AsyncResult; + const result = await apiBase.post("/stack", { data }) as Result; if (!result.callWasSuccessful) { return result; diff --git a/packages/core/src/common/k8s-api/endpoints/secret.api.ts b/packages/core/src/common/k8s-api/endpoints/secret.api.ts index a5a3b5eb1c..213aa1ef2b 100644 --- a/packages/core/src/common/k8s-api/endpoints/secret.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/secret.api.ts @@ -6,9 +6,9 @@ import type { KubeObjectMetadata, KubeObjectScope, NamespaceScopedMetadata } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { KubeJsonApiData } from "../kube-json-api"; -import { autoBind } from "../../utils"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; +import autoBind from "auto-bind"; export enum SecretType { Opaque = "Opaque", diff --git a/packages/core/src/common/k8s-api/endpoints/storage-class.api.ts b/packages/core/src/common/k8s-api/endpoints/storage-class.api.ts index bf121e47db..d0b7167876 100644 --- a/packages/core/src/common/k8s-api/endpoints/storage-class.api.ts +++ b/packages/core/src/common/k8s-api/endpoints/storage-class.api.ts @@ -3,12 +3,12 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { autoBind } from "../../utils"; import type { ClusterScopedMetadata, KubeObjectMetadata, KubeObjectScope } from "../kube-object"; import { KubeObject } from "../kube-object"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import { KubeApi } from "../kube-api"; import type { KubeJsonApiData } from "../kube-json-api"; +import autoBind from "auto-bind"; export interface TopologySelectorLabelRequirement { key: string; diff --git a/packages/core/src/common/k8s-api/json-api.ts b/packages/core/src/common/k8s-api/json-api.ts index c99fddf4f6..00325f3853 100644 --- a/packages/core/src/common/k8s-api/json-api.ts +++ b/packages/core/src/common/k8s-api/json-api.ts @@ -15,8 +15,8 @@ import type { PartialDeep, ValueOf } from "type-fest"; import { EventEmitter } from "../../common/event-emitter"; import type { Logger } from "../../common/logger"; import type { Fetch } from "../fetch/fetch.injectable"; -import type { Defaulted } from "../utils"; -import { json } from "../utils"; +import type { Defaulted } from "@k8slens/utilities"; +import { isObject, isString, json } from "@k8slens/utilities"; export interface JsonApiData {} @@ -184,20 +184,17 @@ export class JsonApi = Js const res = await this.dependencies.fetch(reqUrl, reqInit); - return this.parseResponse(res, infoLog); + return await this.parseResponse(res, infoLog) as OutData; } - protected async parseResponse(res: Response, log: JsonApiLog): Promise { + protected async parseResponse(res: Response, log: JsonApiLog): Promise { const { status } = res; const text = await res.text(); - let data: any; - - try { - data = text ? json.parse(text) : ""; // DELETE-requests might not have response-body - } catch (e) { - data = text; - } + const parseResponse = json.parse(text || "{}"); + const data = parseResponse.callWasSuccessful + ? parseResponse.response as Data + : text as Data; if (status >= 200 && status < 300) { this.onData.emit(data, res); @@ -211,7 +208,7 @@ export class JsonApi = Js throw data; } - const error = new JsonApiErrorParsed(data, this.parseError(data, res)); + const error = new JsonApiErrorParsed(data as JsonApiError, this.parseError(data, res)); this.onError.emit(error, res); this.writeLog({ ...log, error }); @@ -219,16 +216,20 @@ export class JsonApi = Js throw error; } - protected parseError(error: JsonApiError | string, res: Response): string[] { - if (typeof error === "string") { + protected parseError(error: unknown, res: Response): string[] { + if (isString(error)) { return [error]; } + if (!isObject(error)) { + return []; + } + if (Array.isArray(error.errors)) { return error.errors.map(error => error.title); } - if (error.message) { + if (isString(error.message)) { return [error.message]; } diff --git a/packages/core/src/common/k8s-api/kube-api-parse.ts b/packages/core/src/common/k8s-api/kube-api-parse.ts index cb5315b50c..2bb397a8be 100644 --- a/packages/core/src/common/k8s-api/kube-api-parse.ts +++ b/packages/core/src/common/k8s-api/kube-api-parse.ts @@ -5,7 +5,7 @@ // Parse kube-api path and get api-version, group, etc. -import { splitArray } from "../utils"; +import { array } from "@k8slens/utilities"; export interface IKubeApiLinkRef { apiPrefix?: string; @@ -26,7 +26,7 @@ export function parseKubeApi(path: string): IKubeApiParsed { const apiPath = new URL(path, "https://localhost").pathname; const [, prefix, ...parts] = apiPath.split("/"); const apiPrefix = `/${prefix}`; - const [left, right, namespaced] = splitArray(parts, "namespaces"); + const [left, right, namespaced] = array.split(parts, "namespaces"); let apiGroup!: string; let apiVersion!: string; let namespace!: string; diff --git a/packages/core/src/common/k8s-api/kube-api.ts b/packages/core/src/common/k8s-api/kube-api.ts index 9db60b5484..95210478a1 100644 --- a/packages/core/src/common/k8s-api/kube-api.ts +++ b/packages/core/src/common/k8s-api/kube-api.ts @@ -13,8 +13,8 @@ import { KubeObject, KubeStatus, isKubeStatusData } from "./kube-object"; import byline from "byline"; import type { IKubeWatchEvent } from "./kube-watch-event"; import type { KubeJsonApiData, KubeJsonApi } from "./kube-json-api"; -import type { Disposer } from "../utils"; -import { isDefined, noop, WrappedAbortController } from "../utils"; +import type { Disposer } from "@k8slens/utilities"; +import { isDefined, noop, WrappedAbortController } from "@k8slens/utilities"; import type { RequestInit, Response } from "@k8slens/node-fetch"; import type { Patch } from "rfc6902"; import assert from "assert"; diff --git a/packages/core/src/common/k8s-api/kube-object.store.ts b/packages/core/src/common/k8s-api/kube-object.store.ts index 571e395a7b..f26b05283e 100644 --- a/packages/core/src/common/k8s-api/kube-object.store.ts +++ b/packages/core/src/common/k8s-api/kube-object.store.ts @@ -4,8 +4,8 @@ */ import { action, computed, makeObservable, observable, reaction } from "mobx"; -import type { Disposer } from "../utils"; -import { waitUntilDefined, autoBind, includes, rejectPromiseBy } from "../utils"; +import type { Disposer } from "@k8slens/utilities"; +import { waitUntilDefined, includes, rejectPromiseBy, object } from "@k8slens/utilities"; import type { KubeJsonApiDataFor, KubeObject } from "./kube-object"; import { KubeStatus } from "./kube-object"; import type { IKubeWatchEvent } from "./kube-watch-event"; @@ -17,9 +17,9 @@ import type { Patch } from "rfc6902"; import type { Logger } from "../logger"; import assert from "assert"; import type { PartialDeep } from "type-fest"; -import { entries } from "../utils/objects"; import AbortController from "abort-controller"; import type { ClusterContext } from "../../renderer/cluster-frame-context/cluster-frame-context"; +import autoBind from "auto-bind"; export type OnLoadFailure = (error: unknown) => void; @@ -179,7 +179,7 @@ export abstract class KubeObjectStore< return this.items.filter((item: K) => { const itemLabels = item.metadata.labels || {}; - return entries(labels) + return object.entries(labels) .every(([key, value]) => itemLabels[key] === value); }); } diff --git a/packages/core/src/common/k8s-api/kube-object.ts b/packages/core/src/common/k8s-api/kube-object.ts index d88c19db89..e700710788 100644 --- a/packages/core/src/common/k8s-api/kube-object.ts +++ b/packages/core/src/common/k8s-api/kube-object.ts @@ -7,7 +7,7 @@ import moment from "moment"; import type { KubeJsonApiData, KubeJsonApiDataList, KubeJsonApiListMetadata } from "./kube-json-api"; -import { autoBind, formatDuration, hasOptionalTypedProperty, hasTypedProperty, isObject, isString, isNumber, bindPredicate, isTypedArray, isRecord, json } from "../utils"; +import { formatDuration, hasOptionalTypedProperty, hasTypedProperty, isObject, isString, isNumber, bindPredicate, isTypedArray, isRecord } from "@k8slens/utilities"; import type { ItemObject } from "../item.store"; import type { Patch } from "rfc6902"; import assert from "assert"; @@ -17,6 +17,7 @@ import { apiKubeInjectionToken } from "./api-kube"; import requestKubeObjectCreationInjectable from "./endpoints/resource-applier.api/request-update.injectable"; import { dump } from "js-yaml"; import { getLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; +import autoBind from "auto-bind"; export type KubeJsonApiDataFor = K extends KubeObject ? KubeJsonApiData @@ -624,7 +625,7 @@ export class KubeObject< } toPlainObject() { - return json.parse(JSON.stringify(this)) as JsonObject; + return JSON.parse(JSON.stringify(this)) as JsonObject; } /** diff --git a/packages/core/src/common/k8s/resource-stack.ts b/packages/core/src/common/k8s/resource-stack.ts index 5bdafdc58d..325358b2d3 100644 --- a/packages/core/src/common/k8s/resource-stack.ts +++ b/packages/core/src/common/k8s/resource-stack.ts @@ -7,13 +7,13 @@ import type { KubernetesCluster } from "../catalog-entities"; import yaml from "js-yaml"; import { getLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import productNameInjectable from "../vars/product-name.injectable"; -import type { AsyncResult } from "../utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import type { Logger } from "../logger"; import type { KubectlApplyAll, KubectlDeleteAll } from "../kube-helpers/channels"; import type { ReadDirectory } from "../fs/read-directory.injectable"; import type { JoinPaths } from "../path/join-paths.injectable"; import type { ReadFile } from "../fs/read-file.injectable"; -import { hasTypedProperty, isObject } from "../utils"; +import { hasTypedProperty, isObject } from "@k8slens/utilities"; export interface ResourceApplyingStack { kubectlApplyFolder(folderPath: string, templateContext?: any, extraArgs?: string[]): Promise; diff --git a/packages/core/src/common/kube-helpers.ts b/packages/core/src/common/kube-helpers.ts index c439c29d16..6deb9ab8a1 100644 --- a/packages/core/src/common/kube-helpers.ts +++ b/packages/core/src/common/kube-helpers.ts @@ -7,7 +7,7 @@ import { KubeConfig } from "@kubernetes/client-node"; import yaml from "js-yaml"; import type { Cluster, Context, User } from "@kubernetes/client-node/dist/config_types"; import { newClusters, newContexts, newUsers } from "@kubernetes/client-node/dist/config_types"; -import { isDefined } from "./utils"; +import { isDefined } from "@k8slens/utilities"; import Joi from "joi"; import type { PartialDeep } from "type-fest"; diff --git a/packages/core/src/common/kube-helpers/channels.ts b/packages/core/src/common/kube-helpers/channels.ts index 4782f64367..b48f9f1f99 100644 --- a/packages/core/src/common/kube-helpers/channels.ts +++ b/packages/core/src/common/kube-helpers/channels.ts @@ -7,7 +7,7 @@ import { getInjectionToken } from "@ogre-tools/injectable"; import type { Asyncify } from "type-fest"; import type { RequestChannelHandler } from "../../main/utils/channel/channel-listeners/listener-tokens"; import type { ClusterId } from "../cluster-types"; -import type { AsyncResult } from "../utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import type { RequestChannel } from "../utils/channel/request-channel-listener-injection-token"; export interface KubectlApplyAllArgs { diff --git a/packages/core/src/common/log-error.global-override-for-injectable.ts b/packages/core/src/common/log-error.global-override-for-injectable.ts index e3a03c2802..95fa0ac16f 100644 --- a/packages/core/src/common/log-error.global-override-for-injectable.ts +++ b/packages/core/src/common/log-error.global-override-for-injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverrideForFunction } from "./test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "@k8slens/test-utils"; import logErrorInjectable from "./log-error.injectable"; // Note: this should remain as it is, and throw if called. Logging error is something diff --git a/packages/core/src/common/logger.global-override-for-injectable.ts b/packages/core/src/common/logger.global-override-for-injectable.ts index cad548cd22..e314316d47 100644 --- a/packages/core/src/common/logger.global-override-for-injectable.ts +++ b/packages/core/src/common/logger.global-override-for-injectable.ts @@ -4,13 +4,12 @@ */ import loggerInjectable from "./logger.injectable"; -import { getGlobalOverride } from "./test-utils/get-global-override"; -import { noop } from "./utils"; +import { getGlobalOverride } from "@k8slens/test-utils"; export default getGlobalOverride(loggerInjectable, () => ({ - warn: noop, - debug: noop, - error: noop, - info: noop, - silly: noop, + warn: () => {}, + debug: () => {}, + error: () => {}, + info: () => {}, + silly: () => {}, })); diff --git a/packages/core/src/common/protocol-handler/router.ts b/packages/core/src/common/protocol-handler/router.ts index 8c9915b287..0018c385c2 100644 --- a/packages/core/src/common/protocol-handler/router.ts +++ b/packages/core/src/common/protocol-handler/router.ts @@ -6,7 +6,7 @@ import type { match } from "react-router"; import { matchPath } from "react-router"; import { countBy } from "lodash"; -import { isDefined, iter } from "../utils"; +import { isDefined, iter } from "@k8slens/utilities"; import { pathToRegexp } from "path-to-regexp"; import type Url from "url-parse"; import { RoutingError, RoutingErrorType } from "./error"; diff --git a/packages/core/src/common/user-store/file-name-migration.injectable.ts b/packages/core/src/common/user-store/file-name-migration.injectable.ts index 106f559ef0..31d5352056 100644 --- a/packages/core/src/common/user-store/file-name-migration.injectable.ts +++ b/packages/core/src/common/user-store/file-name-migration.injectable.ts @@ -5,7 +5,7 @@ import fse from "fs-extra"; import directoryForUserDataInjectable from "../app-paths/directory-for-user-data/directory-for-user-data.injectable"; -import { isErrnoException } from "../utils"; +import { isErrnoException } from "@k8slens/utilities"; import { getInjectable } from "@ogre-tools/injectable"; import joinPathsInjectable from "../path/join-paths.injectable"; diff --git a/packages/core/src/common/user-store/user-store.ts b/packages/core/src/common/user-store/user-store.ts index 8979ba3351..4ffa31fac1 100644 --- a/packages/core/src/common/user-store/user-store.ts +++ b/packages/core/src/common/user-store/user-store.ts @@ -6,7 +6,7 @@ import { action, observable, makeObservable, isObservableArray, isObservableSet, isObservableMap } from "mobx"; import type { BaseStoreDependencies } from "../base-store/base-store"; import { BaseStore } from "../base-store/base-store"; -import { getOrInsertSet, toggle, toJS, object } from "../../renderer/utils"; +import { getOrInsertSet, toggle, object } from "@k8slens/utilities"; import type { UserPreferencesModel, StoreType } from "./preferences-helpers"; import type { EmitAppEvent } from "../app-event-bus/emit-event.injectable"; @@ -14,6 +14,7 @@ import type { EmitAppEvent } from "../app-event-bus/emit-event.injectable"; import type { SelectedUpdateChannel } from "../../features/application-update/common/selected-update-channel/selected-update-channel.injectable"; import type { ReleaseChannel } from "../../features/application-update/common/update-channels"; import type { PreferenceDescriptors } from "./preference-descriptors.injectable"; +import { toJS } from "../utils"; export interface UserStoreModel { preferences: UserPreferencesModel; diff --git a/packages/core/src/common/utils/__tests__/iter.test.ts b/packages/core/src/common/utils/__tests__/iter.test.ts deleted file mode 100644 index db9c61793d..0000000000 --- a/packages/core/src/common/utils/__tests__/iter.test.ts +++ /dev/null @@ -1,68 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { join, nth, reduce, concat } from "@k8slens/utilities/src/iter"; - -describe("iter", () => { - describe("reduce", () => { - it("can reduce a value", () => { - expect(reduce([1, 2, 3], (acc: number[], current: number) => [current, ...acc], [0])).toEqual([3, 2, 1, 0]); - }); - - it("can reduce an empty iterable", () => { - expect(reduce([], (acc: number[], current: number) => [acc[0] + current], [])).toEqual([]); - }); - }); - - describe("join", () => { - it("should not prefix the output by the seperator", () => { - expect(join(["a", "b", "c"].values(), " ")).toBe("a b c"); - }); - - it("should return empty string if iterator is empty", () => { - expect(join([].values(), " ")).toBe(""); - }); - - it("should return just first entry if iterator is of size 1", () => { - expect(join(["d"].values(), " ")).toBe("d"); - }); - }); - - describe("nth", () => { - it("should return undefined past the end of the iterator", () => { - expect(nth(["a"], 123)).toBeUndefined(); - }); - - it("should by 0-indexing the index", () => { - expect(nth(["a", "b"], 0)).toBe("a"); - }); - }); - - describe("concat", () => { - it("should yield undefined for empty args", () => { - const iter = concat(); - - expect(iter.next()).toEqual({ done: true }); - }); - - it("should yield undefined for only empty args", () => { - const iter = concat([].values(), [].values(), [].values(), [].values()); - - expect(iter.next()).toEqual({ done: true }); - }); - - it("should yield all of the first and then all of the second", () => { - const iter = concat([1, 2, 3].values(), [4, 5, 6].values()); - - expect(iter.next()).toEqual({ done: false, value: 1 }); - expect(iter.next()).toEqual({ done: false, value: 2 }); - expect(iter.next()).toEqual({ done: false, value: 3 }); - expect(iter.next()).toEqual({ done: false, value: 4 }); - expect(iter.next()).toEqual({ done: false, value: 5 }); - expect(iter.next()).toEqual({ done: false, value: 6 }); - expect(iter.next()).toEqual({ done: true }); - }); - }); -}); diff --git a/packages/core/src/common/utils/__tests__/n-fircate.test.ts b/packages/core/src/common/utils/__tests__/n-fircate.test.ts deleted file mode 100644 index 7e6f84a095..0000000000 --- a/packages/core/src/common/utils/__tests__/n-fircate.test.ts +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Copyright (c) OpenLens Authors. All rights reserved. - * Licensed under MIT License. See LICENSE in root directory for more information. - */ - -import { nFircate } from "../n-fircate"; - -describe("nFircate", () => { - it("should produce an empty array if no parts are provided", () => { - expect(nFircate([{ a: 1 }, { a: 2 }], "a", []).length).toBe(0); - }); - - it("should ignore non-matching parts", () => { - const res = nFircate([{ a: 1 }, { a: 2 }], "a", [1]); - - expect(res.length).toBe(1); - expect(res[0].length).toBe(1); - }); - - it("should include all matching parts in each type", () => { - const res = nFircate([{ a: 1, b: "a" }, { a: 2, b: "b" }, { a: 1, b: "c" }], "a", [1, 2]); - - expect(res.length).toBe(2); - expect(res[0].length).toBe(2); - expect(res[0][0].b).toBe("a"); - expect(res[0][1].b).toBe("c"); - expect(res[1].length).toBe(1); - expect(res[1][0].b).toBe("b"); - }); - - it("should throw a type error if the same part is provided more than once", () => { - try { - nFircate([{ a: 1, b: "a" }, { a: 2, b: "b" }, { a: 1, b: "c" }], "a", [1, 2, 1]); - fail("Expected error"); - } catch (error) { - expect(error).toBeInstanceOf(TypeError); - } - }); -}); diff --git a/packages/core/src/common/utils/toJS.ts b/packages/core/src/common/utils/toJS.ts index 7a949b46fc..2d70f564cb 100644 --- a/packages/core/src/common/utils/toJS.ts +++ b/packages/core/src/common/utils/toJS.ts @@ -13,6 +13,9 @@ import * as mobx from "mobx"; import { isObservable, observable } from "mobx"; +/** + * @deprecated Switch to doing toJS on each field instead + */ export function toJS(data: T): T { // make data observable for recursive toJS()-output if (typeof data === "object" && !isObservable(data)) { diff --git a/packages/core/src/extensions/__tests__/extension-loader.test.ts b/packages/core/src/extensions/__tests__/extension-loader.test.ts index 1c010f7640..cb0d93b6e1 100644 --- a/packages/core/src/extensions/__tests__/extension-loader.test.ts +++ b/packages/core/src/extensions/__tests__/extension-loader.test.ts @@ -7,7 +7,7 @@ import type { ExtensionLoader } from "../extension-loader"; import extensionLoaderInjectable from "../extension-loader/extension-loader.injectable"; import { runInAction } from "mobx"; import updateExtensionsStateInjectable from "../extension-loader/update-extensions-state/update-extensions-state.injectable"; -import { delay } from "../../renderer/utils"; +import { delay } from "@k8slens/utilities"; import { getDiForUnitTesting } from "../../renderer/getDiForUnitTesting"; import ipcRendererInjectable from "../../renderer/utils/channel/ipc-renderer.injectable"; import type { IpcRenderer } from "electron"; diff --git a/packages/core/src/extensions/common-api/utils.ts b/packages/core/src/extensions/common-api/utils.ts index a129cfda60..40f8e00175 100644 --- a/packages/core/src/extensions/common-api/utils.ts +++ b/packages/core/src/extensions/common-api/utils.ts @@ -8,11 +8,49 @@ import buildVersionInjectable from "../../main/vars/build-version/build-version. import { asLegacyGlobalFunctionForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-function-for-extension-api"; import { getLegacyGlobalDiForExtensionApi } from "../as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; -export { Singleton } from "../../common/utils"; -export { prevDefault, stopPropagation } from "../../renderer/utils/prevDefault"; +export { Singleton } from "../../common/utils/singleton"; -export type { IClassName, IgnoredClassNames } from "../../renderer/utils"; -export { cssNames } from "../../renderer/utils/cssNames"; +export { + /** + * @deprecated Switch to using the `@k8slens/utilities` package + */ + prevDefault, + /** + * @deprecated Switch to using the `@k8slens/utilities` package + */ + stopPropagation, + /** + * @deprecated Switch to using the `@k8slens/utilities` package + */ + cssNames, + /** + * @deprecated Switch to using the `@k8slens/utilities` package + */ + disposer, +} from "@k8slens/utilities"; + +export type { + /** + * @deprecated Switch to using the `@k8slens/utilities` package + */ + IClassName, + /** + * @deprecated Switch to using the `@k8slens/utilities` package + */ + IgnoredClassNames, + /** + * @deprecated Switch to using the `@k8slens/utilities` package + */ + Disposer, + /** + * @deprecated Switch to using the `@k8slens/utilities` package + */ + Disposable, + /** + * @deprecated Switch to using the `@k8slens/utilities` package + */ + ExtendableDisposer, +} from "@k8slens/utilities"; export type { OpenLinkInBrowser } from "../../common/utils/open-link-in-browser.injectable"; @@ -24,6 +62,3 @@ export const getAppVersion = () => { return di.inject(buildVersionInjectable).get(); }; - -export { disposer } from "../../common/utils"; -export type { Disposer, Disposable, ExtendableDisposer } from "../../common/utils"; diff --git a/packages/core/src/extensions/extension-discovery/extension-discovery.test.ts b/packages/core/src/extensions/extension-discovery/extension-discovery.test.ts index 77e9cd0623..8a46dada73 100644 --- a/packages/core/src/extensions/extension-discovery/extension-discovery.test.ts +++ b/packages/core/src/extensions/extension-discovery/extension-discovery.test.ts @@ -9,7 +9,7 @@ import extensionDiscoveryInjectable from "../extension-discovery/extension-disco import type { ExtensionDiscovery } from "../extension-discovery/extension-discovery"; import installExtensionInjectable from "../install-extension/install-extension.injectable"; import directoryForUserDataInjectable from "../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; -import { delay } from "../../renderer/utils"; +import { delay } from "@k8slens/utilities"; import { observable, runInAction, when } from "mobx"; import readJsonFileInjectable from "../../common/fs/read-json-file.injectable"; import pathExistsInjectable from "../../common/fs/path-exists.injectable"; diff --git a/packages/core/src/extensions/extension-discovery/extension-discovery.ts b/packages/core/src/extensions/extension-discovery/extension-discovery.ts index bd9baff2c8..a91bf9e406 100644 --- a/packages/core/src/extensions/extension-discovery/extension-discovery.ts +++ b/packages/core/src/extensions/extension-discovery/extension-discovery.ts @@ -7,7 +7,8 @@ import { ipcRenderer } from "electron"; import { EventEmitter } from "events"; import { makeObservable, observable, reaction, when } from "mobx"; import { broadcastMessage, ipcMainHandle, ipcRendererOn } from "../../common/ipc"; -import { isErrnoException, toJS } from "../../common/utils"; +import { toJS } from "../../common/utils"; +import { isErrnoException } from "@k8slens/utilities"; import type { ExtensionsStore } from "../extensions-store/extensions-store"; import type { ExtensionLoader } from "../extension-loader"; import type { LensExtensionId, LensExtensionManifest } from "../lens-extension"; diff --git a/packages/core/src/extensions/extension-installation-state-store/extension-installation-state-store.ts b/packages/core/src/extensions/extension-installation-state-store/extension-installation-state-store.ts index 093c80934b..8553ce9c40 100644 --- a/packages/core/src/extensions/extension-installation-state-store/extension-installation-state-store.ts +++ b/packages/core/src/extensions/extension-installation-state-store/extension-installation-state-store.ts @@ -4,8 +4,8 @@ */ import { action, computed, observable } from "mobx"; -import { disposer } from "../../renderer/utils"; -import type { ExtendableDisposer } from "../../renderer/utils"; +import { disposer } from "@k8slens/utilities"; +import type { ExtendableDisposer } from "@k8slens/utilities"; import * as uuid from "uuid"; import { broadcastMessage } from "../../common/ipc"; import { ipcRenderer } from "electron"; diff --git a/packages/core/src/extensions/extension-loader/extension-loader.ts b/packages/core/src/extensions/extension-loader/extension-loader.ts index 5dce874e54..b82fe5c159 100644 --- a/packages/core/src/extensions/extension-loader/extension-loader.ts +++ b/packages/core/src/extensions/extension-loader/extension-loader.ts @@ -6,9 +6,9 @@ import { ipcMain, ipcRenderer } from "electron"; import { isEqual } from "lodash"; import type { ObservableMap } from "mobx"; -import { action, computed, makeObservable, observable, observe, reaction, when } from "mobx"; +import { action, computed, makeObservable, toJS, observable, observe, reaction, when } from "mobx"; import { broadcastMessage, ipcMainOn, ipcRendererOn, ipcMainHandle } from "../../common/ipc"; -import { isDefined, toJS } from "../../common/utils"; +import { isDefined } from "@k8slens/utilities"; import type { InstalledExtension } from "../extension-discovery/extension-discovery"; import type { LensExtension, LensExtensionConstructor, LensExtensionId } from "../lens-extension"; import type { LensExtensionState } from "../extensions-store/extensions-store"; diff --git a/packages/core/src/extensions/extension-loader/extension/extension.injectable.ts b/packages/core/src/extensions/extension-loader/extension/extension.injectable.ts index 6b9424cea4..07f054d3fd 100644 --- a/packages/core/src/extensions/extension-loader/extension/extension.injectable.ts +++ b/packages/core/src/extensions/extension-loader/extension/extension.injectable.ts @@ -6,7 +6,7 @@ import type { Injectable } from "@ogre-tools/injectable"; import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; import { difference, find, map } from "lodash"; import { reaction, runInAction } from "mobx"; -import { disposer } from "../../../common/utils/disposer"; +import { disposer } from "@k8slens/utilities"; import type { LensExtension } from "../../lens-extension"; import { extensionRegistratorInjectionToken } from "../extension-registrator-injection-token"; @@ -43,7 +43,7 @@ const extensionInjectable = getInjectable({ reactionDisposer.push( // injectables is either an array or a computed array, in which case - // we need to update the registered injectables with a reaction every time they change + // we need to update the registered injectables with a reaction every time they change reaction( () => Array.isArray(injectables) ? injectables : injectables.get(), (currentInjectables, previousInjectables = []) => { diff --git a/packages/core/src/extensions/extension-loader/file-system-provisioner-store/ensure-hashed-directory-for-extension.injectable.ts b/packages/core/src/extensions/extension-loader/file-system-provisioner-store/ensure-hashed-directory-for-extension.injectable.ts index 50051bf094..90bad89625 100644 --- a/packages/core/src/extensions/extension-loader/file-system-provisioner-store/ensure-hashed-directory-for-extension.injectable.ts +++ b/packages/core/src/extensions/extension-loader/file-system-provisioner-store/ensure-hashed-directory-for-extension.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; -import { getOrInsert } from "../../../common/utils"; +import { getOrInsert } from "@k8slens/utilities"; import randomBytesInjectable from "../../../common/utils/random-bytes.injectable"; import joinPathsInjectable from "../../../common/path/join-paths.injectable"; import directoryForExtensionDataInjectable from "./directory-for-extension-data.injectable"; diff --git a/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.ts b/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.ts index 37bff649ad..86d978d47c 100644 --- a/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.ts +++ b/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.ts @@ -8,7 +8,6 @@ import { action, makeObservable } from "mobx"; import type { BaseStoreDependencies } from "../../../common/base-store/base-store"; import { BaseStore } from "../../../common/base-store/base-store"; import type { LensExtensionId } from "../../lens-extension"; -import { toJS } from "../../../common/utils"; import type { EnsureHashedDirectoryForExtension } from "./ensure-hashed-directory-for-extension.injectable"; interface FSProvisionModel { @@ -46,8 +45,8 @@ export class FileSystemProvisionerStore extends BaseStore { } toJSON(): FSProvisionModel { - return toJS({ - extensions: Object.fromEntries(this.dependencies.registeredExtensions), - }); + return { + extensions: Object.fromEntries(this.dependencies.registeredExtensions.toJSON()), + }; } } diff --git a/packages/core/src/extensions/extension-store.ts b/packages/core/src/extensions/extension-store.ts index e72f394005..cf435fb474 100644 --- a/packages/core/src/extensions/extension-store.ts +++ b/packages/core/src/extensions/extension-store.ts @@ -8,8 +8,8 @@ import { BaseStore } from "../common/base-store/base-store"; import * as path from "path"; import type { LensExtension } from "./lens-extension"; import assert from "assert"; -import type { StaticThis } from "../common/utils"; -import { getOrInsertWith } from "../common/utils"; +import type { StaticThis } from "../common/utils/singleton"; +import { getOrInsertWith } from "@k8slens/utilities"; import { getLegacyGlobalDiForExtensionApi } from "./as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import directoryForUserDataInjectable from "../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; import getConfigurationFileModelInjectable from "../common/get-configuration-file-model/get-configuration-file-model.injectable"; diff --git a/packages/core/src/extensions/extensions-store/extensions-store.ts b/packages/core/src/extensions/extensions-store/extensions-store.ts index 3b2dc80eb1..1a8e5376b6 100644 --- a/packages/core/src/extensions/extensions-store/extensions-store.ts +++ b/packages/core/src/extensions/extensions-store/extensions-store.ts @@ -5,7 +5,6 @@ import type { LensExtensionId } from "../lens-extension"; import { action, computed, makeObservable, observable } from "mobx"; -import { toJS } from "../../common/utils"; import type { BaseStoreDependencies } from "../../common/base-store/base-store"; import { BaseStore } from "../../common/base-store/base-store"; @@ -57,8 +56,8 @@ export class ExtensionsStore extends BaseStore { } toJSON(): LensExtensionsStoreModel { - return toJS({ - extensions: Object.fromEntries(this.state), - }); + return { + extensions: Object.fromEntries(this.state.toJSON()), + }; } } diff --git a/packages/core/src/extensions/install-extension/install-extension.injectable.ts b/packages/core/src/extensions/install-extension/install-extension.injectable.ts index ca46772eb3..6737b7362b 100644 --- a/packages/core/src/extensions/install-extension/install-extension.injectable.ts +++ b/packages/core/src/extensions/install-extension/install-extension.injectable.ts @@ -13,7 +13,7 @@ import joinPathsInjectable from "../../common/path/join-paths.injectable"; import type { PackageJson } from "../common-api"; import writeJsonFileInjectable from "../../common/fs/write-json-file.injectable"; import { once } from "lodash"; -import { isErrnoException } from "../../common/utils"; +import { isErrnoException } from "@k8slens/utilities"; const baseNpmInstallArgs = [ "install", diff --git a/packages/core/src/extensions/ipc/ipc-main.ts b/packages/core/src/extensions/ipc/ipc-main.ts index 8bb0ada63d..a4f4ec14df 100644 --- a/packages/core/src/extensions/ipc/ipc-main.ts +++ b/packages/core/src/extensions/ipc/ipc-main.ts @@ -6,7 +6,7 @@ import { ipcMain } from "electron"; import { IpcPrefix, IpcRegistrar } from "./ipc-registrar"; import { Disposers, lensExtensionDependencies } from "../lens-extension"; import type { LensMainExtension } from "../lens-main-extension"; -import type { Disposer } from "../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; import { once } from "lodash"; import { ipcMainHandle } from "../../common/ipc"; diff --git a/packages/core/src/extensions/ipc/ipc-registrar.ts b/packages/core/src/extensions/ipc/ipc-registrar.ts index 04222bd64b..7fc27ba0fd 100644 --- a/packages/core/src/extensions/ipc/ipc-registrar.ts +++ b/packages/core/src/extensions/ipc/ipc-registrar.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { Singleton } from "../../common/utils"; +import { Singleton } from "../../common/utils/singleton"; import type { LensExtension } from "../lens-extension"; import { createHash } from "crypto"; import { broadcastMessage } from "../../common/ipc"; diff --git a/packages/core/src/extensions/ipc/ipc-renderer.ts b/packages/core/src/extensions/ipc/ipc-renderer.ts index ff61738113..9060a19154 100644 --- a/packages/core/src/extensions/ipc/ipc-renderer.ts +++ b/packages/core/src/extensions/ipc/ipc-renderer.ts @@ -6,7 +6,7 @@ import { ipcRenderer } from "electron"; import { IpcPrefix, IpcRegistrar } from "./ipc-registrar"; import { Disposers } from "../lens-extension"; import type { LensRendererExtension } from "../lens-renderer-extension"; -import type { Disposer } from "../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; import { once } from "lodash"; export abstract class IpcRenderer extends IpcRegistrar { diff --git a/packages/core/src/extensions/lens-extension.ts b/packages/core/src/extensions/lens-extension.ts index 53c9343607..30cf19e4a4 100644 --- a/packages/core/src/extensions/lens-extension.ts +++ b/packages/core/src/extensions/lens-extension.ts @@ -6,7 +6,7 @@ import type { InstalledExtension } from "./extension-discovery/extension-discovery"; import { action, computed, makeObservable, observable } from "mobx"; import type { PackageJson } from "type-fest"; -import { disposer } from "../common/utils"; +import { disposer } from "@k8slens/utilities"; import type { LensExtensionDependencies } from "./lens-extension-set-dependencies"; import type { ProtocolHandlerRegistration } from "../common/protocol-handler/registration"; diff --git a/packages/core/src/extensions/lens-renderer-extension.ts b/packages/core/src/extensions/lens-renderer-extension.ts index aa00fd8ba3..5a64a6ec6c 100644 --- a/packages/core/src/extensions/lens-renderer-extension.ts +++ b/packages/core/src/extensions/lens-renderer-extension.ts @@ -5,7 +5,7 @@ import { Disposers, LensExtension, lensExtensionDependencies } from "./lens-extension"; import type { CatalogEntity, CategoryFilter } from "../common/catalog"; -import type { Disposer } from "../common/utils"; +import type { Disposer } from "@k8slens/utilities"; import type { EntityFilter } from "../renderer/api/catalog/entity/registry"; import type { TopBarRegistration } from "../renderer/components/layout/top-bar/top-bar-registration"; import type { KubernetesCluster } from "../common/catalog-entities"; diff --git a/packages/core/src/extensions/main-api/power.ts b/packages/core/src/extensions/main-api/power.ts index 671308798a..bf9f61b480 100644 --- a/packages/core/src/extensions/main-api/power.ts +++ b/packages/core/src/extensions/main-api/power.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { powerMonitor } from "electron"; -import type { Disposer } from "../../common/utils/disposer"; +import type { Disposer } from "@k8slens/utilities"; /** * Event listener for system power events diff --git a/packages/core/src/extensions/renderer-api/catalog.ts b/packages/core/src/extensions/renderer-api/catalog.ts index 43b840a39a..9de698c725 100644 --- a/packages/core/src/extensions/renderer-api/catalog.ts +++ b/packages/core/src/extensions/renderer-api/catalog.ts @@ -6,7 +6,7 @@ import type { CatalogCategory, CatalogEntity } from "../../common/catalog"; import type { CatalogEntityOnBeforeRun } from "../../renderer/api/catalog/entity/registry"; -import type { Disposer } from "../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; import catalogCategoryRegistryInjectable from "../../common/catalog/category-registry.injectable"; import { asLegacyGlobalForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api"; import catalogEntityRegistryInjectable from "../../renderer/api/catalog/entity/registry.injectable"; diff --git a/packages/core/src/extensions/renderer-api/navigation.ts b/packages/core/src/extensions/renderer-api/navigation.ts index ec7081c948..f28ed9bfd4 100644 --- a/packages/core/src/extensions/renderer-api/navigation.ts +++ b/packages/core/src/extensions/renderer-api/navigation.ts @@ -12,7 +12,7 @@ import navigateInjectable from "../../renderer/navigation/navigate.injectable"; import { asLegacyGlobalFunctionForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-function-for-extension-api"; export type { PageParamInit, PageParam } from "../../renderer/navigation/page-param"; -export type { URLParams } from "../../common/utils/buildUrl"; +export type { URLParams } from "@k8slens/utilities/src/buildUrl"; export const getDetailsUrl = asLegacyGlobalFunctionForExtensionApi(getDetailsUrlInjectable); export const showDetails = asLegacyGlobalFunctionForExtensionApi(showDetailsInjectable); diff --git a/packages/core/src/features/application-menu/main/menu-items/special-menu-for-mac-application/show-about-application/about-bundled-extensions.injectable.ts b/packages/core/src/features/application-menu/main/menu-items/special-menu-for-mac-application/show-about-application/about-bundled-extensions.injectable.ts index e12922c340..59ae1e1491 100644 --- a/packages/core/src/features/application-menu/main/menu-items/special-menu-for-mac-application/show-about-application/about-bundled-extensions.injectable.ts +++ b/packages/core/src/features/application-menu/main/menu-items/special-menu-for-mac-application/show-about-application/about-bundled-extensions.injectable.ts @@ -5,7 +5,7 @@ import { applicationInformationToken } from "@k8slens/application"; import { getInjectable } from "@ogre-tools/injectable"; import { bundledExtensionInjectionToken } from "../../../../../../common/library"; -import { object } from "../../../../../../common/utils"; +import { object } from "@k8slens/utilities"; import buildSemanticVersionInjectable from "../../../../../../common/vars/build-semantic-version.injectable"; const specificVersionsInjectable = getInjectable({ diff --git a/packages/core/src/features/application-update/child-features/application-update-using-top-bar/renderer/update-application-top-bar-item/update-button/update-button.tsx b/packages/core/src/features/application-update/child-features/application-update-using-top-bar/renderer/update-application-top-bar-item/update-button/update-button.tsx index acdd9929f2..a99501128c 100644 --- a/packages/core/src/features/application-update/child-features/application-update-using-top-bar/renderer/update-application-top-bar-item/update-button/update-button.tsx +++ b/packages/core/src/features/application-update/child-features/application-update-using-top-bar/renderer/update-application-top-bar-item/update-button/update-button.tsx @@ -8,7 +8,7 @@ import styles from "./styles.module.scss"; import type { HTMLAttributes } from "react"; import React, { useState } from "react"; import { Menu, MenuItem } from "../../../../../../../renderer/components/menu"; -import { cssNames } from "../../../../../../../renderer/utils"; +import { cssNames } from "@k8slens/utilities"; import type { IconProps } from "../../../../../../../renderer/components/icon"; import { Icon } from "../../../../../../../renderer/components/icon"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.global-override-for-injectable.ts b/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.global-override-for-injectable.ts index 5e271eaa30..e1e31cd113 100644 --- a/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.global-override-for-injectable.ts +++ b/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.global-override-for-injectable.ts @@ -3,6 +3,6 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import checkForPlatformUpdatesInjectable from "./check-for-platform-updates.injectable"; -import { getGlobalOverrideForFunction } from "../../../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "../../../../../../../utility-features/test-utils/src/get-global-override-for-function"; export default getGlobalOverrideForFunction(checkForPlatformUpdatesInjectable); diff --git a/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.test.ts b/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.test.ts index 07875dd728..21e5730e07 100644 --- a/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.test.ts +++ b/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.test.ts @@ -10,9 +10,9 @@ import type { AppUpdater, UpdateCheckResult } from "electron-updater"; import type { CheckForPlatformUpdates } from "./check-for-platform-updates.injectable"; import checkForPlatformUpdatesInjectable from "./check-for-platform-updates.injectable"; import type { UpdateChannel, ReleaseChannel } from "../../../common/update-channels"; -import { getPromiseStatus } from "../../../../../common/test-utils/get-promise-status"; +import { getPromiseStatus } from "@k8slens/test-utils"; import loggerInjectable from "../../../../../common/logger.injectable"; -import { noop } from "../../../../../common/utils"; +import { noop } from "@k8slens/utilities"; describe("check-for-platform-updates", () => { let checkForPlatformUpdates: CheckForPlatformUpdates; diff --git a/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.global-override-for-injectable.ts b/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.global-override-for-injectable.ts index 15df5d835b..49b57565fd 100644 --- a/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.global-override-for-injectable.ts +++ b/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.global-override-for-injectable.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverrideForFunction } from "../../../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "../../../../../../../utility-features/test-utils/src/get-global-override-for-function"; import downloadPlatformUpdateInjectable from "./download-platform-update.injectable"; export default getGlobalOverrideForFunction(downloadPlatformUpdateInjectable); diff --git a/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.test.ts b/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.test.ts index 2cedacb68b..ea4df5d381 100644 --- a/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.test.ts +++ b/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.test.ts @@ -9,10 +9,10 @@ import downloadPlatformUpdateInjectable from "./download-platform-update.injecta import type { AppUpdater } from "electron-updater"; import type { AsyncFnMock } from "@async-fn/jest"; import asyncFn from "@async-fn/jest"; -import { getPromiseStatus } from "../../../../../common/test-utils/get-promise-status"; +import { getPromiseStatus } from "@k8slens/test-utils"; import type { DiContainer } from "@ogre-tools/injectable"; import loggerInjectable from "../../../../../common/logger.injectable"; -import { noop } from "../../../../../common/utils"; +import { noop } from "@k8slens/utilities"; describe("download-platform-update", () => { let downloadPlatformUpdate: DownloadPlatformUpdate; diff --git a/packages/core/src/features/certificate-authorities/main/channel-handler.injectable.ts b/packages/core/src/features/certificate-authorities/main/channel-handler.injectable.ts index 300b69c383..206a68ba94 100644 --- a/packages/core/src/features/certificate-authorities/main/channel-handler.injectable.ts +++ b/packages/core/src/features/certificate-authorities/main/channel-handler.injectable.ts @@ -5,7 +5,7 @@ import { getRequestChannelListenerInjectable } from "../../../main/utils/channel/channel-listeners/listener-tokens"; import { casChannel } from "../common/channel"; import { globalAgent } from "https"; -import { isString } from "../../../common/utils"; +import { isString } from "@k8slens/utilities"; const certificateAuthoritiesChannelListenerInjectable = getRequestChannelListenerInjectable({ channel: casChannel, diff --git a/packages/core/src/features/cluster/delete-dialog/main/delete-channel-listener.injectable.ts b/packages/core/src/features/cluster/delete-dialog/main/delete-channel-listener.injectable.ts index b2ac54d5e4..6b47e33c47 100644 --- a/packages/core/src/features/cluster/delete-dialog/main/delete-channel-listener.injectable.ts +++ b/packages/core/src/features/cluster/delete-dialog/main/delete-channel-listener.injectable.ts @@ -8,7 +8,7 @@ import clusterStoreInjectable from "../../../../common/cluster-store/cluster-sto import directoryForLensLocalStorageInjectable from "../../../../common/directory-for-lens-local-storage/directory-for-lens-local-storage.injectable"; import removePathInjectable from "../../../../common/fs/remove.injectable"; import joinPathsInjectable from "../../../../common/path/join-paths.injectable"; -import { noop } from "../../../../common/utils"; +import { noop } from "@k8slens/utilities"; import { getRequestChannelListenerInjectable } from "../../../../main/utils/channel/channel-listeners/listener-tokens"; import { deleteClusterChannel } from "../common/delete-channel"; diff --git a/packages/core/src/features/helm-charts/child-features/preferences/renderer/adding-of-public-helm-repository/public-helm-repositories/request-public-helm-repositories.global-override-for-injectable.ts b/packages/core/src/features/helm-charts/child-features/preferences/renderer/adding-of-public-helm-repository/public-helm-repositories/request-public-helm-repositories.global-override-for-injectable.ts index 0a1304ac2d..40d68a335a 100644 --- a/packages/core/src/features/helm-charts/child-features/preferences/renderer/adding-of-public-helm-repository/public-helm-repositories/request-public-helm-repositories.global-override-for-injectable.ts +++ b/packages/core/src/features/helm-charts/child-features/preferences/renderer/adding-of-public-helm-repository/public-helm-repositories/request-public-helm-repositories.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverrideForFunction } from "../../../../../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "../../../../../../../../../utility-features/test-utils/src/get-global-override-for-function"; import requestPublicHelmRepositoriesInjectable from "./request-public-helm-repositories.injectable"; export default getGlobalOverrideForFunction(requestPublicHelmRepositoriesInjectable); diff --git a/packages/core/src/features/helm-charts/listing-active-helm-repositories-in-preferences.test.ts b/packages/core/src/features/helm-charts/listing-active-helm-repositories-in-preferences.test.ts index 49a8d0c28e..fd2616817e 100644 --- a/packages/core/src/features/helm-charts/listing-active-helm-repositories-in-preferences.test.ts +++ b/packages/core/src/features/helm-charts/listing-active-helm-repositories-in-preferences.test.ts @@ -16,7 +16,7 @@ import loggerInjectable from "../../common/logger.injectable"; import type { Logger } from "../../common/logger"; import requestPublicHelmRepositoriesInjectable from "./child-features/preferences/renderer/adding-of-public-helm-repository/public-helm-repositories/request-public-helm-repositories.injectable"; import showErrorNotificationInjectable from "../../renderer/components/notifications/show-error-notification.injectable"; -import { noop } from "../../common/utils"; +import { noop } from "@k8slens/utilities"; describe("listing active helm repositories in preferences", () => { let builder: ApplicationBuilder; diff --git a/packages/core/src/features/preferences/common/preferences-catalog-entity.injectable.ts b/packages/core/src/features/preferences/common/preferences-catalog-entity.injectable.ts index e4f3a65a93..66e981fc0b 100644 --- a/packages/core/src/features/preferences/common/preferences-catalog-entity.injectable.ts +++ b/packages/core/src/features/preferences/common/preferences-catalog-entity.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { generalCatalogEntityInjectionToken } from "../../../common/catalog-entities/general-catalog-entities/general-catalog-entity-injection-token"; import { GeneralEntity } from "../../../common/catalog-entities"; -import { buildURL } from "../../../common/utils/buildUrl"; +import { buildURL } from "@k8slens/utilities/src/buildUrl"; import preferencesRouteInjectable from "./preferences-route.injectable"; const preferencesCatalogEntityInjectable = getInjectable({ diff --git a/packages/core/src/features/preferences/renderer/preference-items/kubernetes/kubeconfig-sync/kubeconfig-sync.tsx b/packages/core/src/features/preferences/renderer/preference-items/kubernetes/kubeconfig-sync/kubeconfig-sync.tsx index 94c326c9d3..77642f1082 100644 --- a/packages/core/src/features/preferences/renderer/preference-items/kubernetes/kubeconfig-sync/kubeconfig-sync.tsx +++ b/packages/core/src/features/preferences/renderer/preference-items/kubernetes/kubeconfig-sync/kubeconfig-sync.tsx @@ -8,7 +8,7 @@ import { disposeOnUnmount, observer } from "mobx-react"; import React from "react"; import { Notice } from "../../../../../../renderer/components/+extensions/notice"; import type { UserStore } from "../../../../../../common/user-store"; -import { iter, tuple } from "../../../../../../renderer/utils"; +import { iter, tuple } from "@k8slens/utilities"; import { SubTitle } from "../../../../../../renderer/components/layout/sub-title"; import { PathPicker } from "../../../../../../renderer/components/path-picker/path-picker"; import { Spinner } from "../../../../../../renderer/components/spinner"; diff --git a/packages/core/src/features/preferences/renderer/removable-item/removable-item.tsx b/packages/core/src/features/preferences/renderer/removable-item/removable-item.tsx index ee04f9d76c..4371c9c758 100644 --- a/packages/core/src/features/preferences/renderer/removable-item/removable-item.tsx +++ b/packages/core/src/features/preferences/renderer/removable-item/removable-item.tsx @@ -7,7 +7,7 @@ import styles from "./removable-item.module.scss"; import type { DOMAttributes } from "react"; import React from "react"; -import { cssNames } from "../../../../renderer/utils"; +import { cssNames } from "@k8slens/utilities"; import { Icon } from "../../../../renderer/components/icon"; export interface RemovableItemProps extends DOMAttributes{ diff --git a/packages/core/src/features/shell-sync/main/compute-unix-shell-environment.injectable.ts b/packages/core/src/features/shell-sync/main/compute-unix-shell-environment.injectable.ts index fa6de94b57..7fd78f9f56 100644 --- a/packages/core/src/features/shell-sync/main/compute-unix-shell-environment.injectable.ts +++ b/packages/core/src/features/shell-sync/main/compute-unix-shell-environment.injectable.ts @@ -10,14 +10,14 @@ import randomUUIDInjectable from "../../../main/crypto/random-uuid.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import processExecPathInjectable from "./execPath.injectable"; import processEnvInjectable from "./env.injectable"; -import { object } from "../../../common/utils"; -import type { AsyncResult } from "../../../common/utils/async-result"; +import { object } from "@k8slens/utilities"; +import type { AsyncResult } from "@k8slens/utilities"; export interface UnixShellEnvOptions { signal: AbortSignal; } -export type ComputeUnixShellEnvironment = (shell: string, opts: UnixShellEnvOptions) => Promise>; +export type ComputeUnixShellEnvironment = (shell: string, opts: UnixShellEnvOptions) => AsyncResult; /** * @param src The object containing the current environment variables @@ -36,9 +36,9 @@ const getResetProcessEnv = (src: Partial>, overrides: Par ...overrides, }, resetEnvPairs: (target) => { - for (const [name, orginalValue] of originals) { - if (typeof orginalValue === "string") { - target[name] = orginalValue; + for (const [name, originalValue] of originals) { + if (typeof originalValue === "string") { + target[name] = originalValue; } else { delete target[name]; } @@ -61,7 +61,7 @@ const computeUnixShellEnvironmentInjectable = getInjectable({ const processExecPath = di.inject(processExecPathInjectable); const processEnv = di.inject(processEnvInjectable); - const getShellSpecifices = (shellName: string) => { + const getShellSpecifics = (shellName: string) => { const mark = randomUUID().replace(/-/g, ""); const regex = new RegExp(`${mark}(\\{.*\\})${mark}`); @@ -100,7 +100,7 @@ const computeUnixShellEnvironmentInjectable = getInjectable({ TERM: "screen-256color-bce", // required for fish }); const shellName = getBasenameOfPath(shellPath); - const { command, shellArgs, regex } = getShellSpecifices(shellName); + const { command, shellArgs, regex } = getShellSpecifics(shellName); logger.info(`[UNIX-SHELL-ENV]: running against ${shellPath}`, { command, shellArgs }); @@ -143,7 +143,7 @@ const computeUnixShellEnvironmentInjectable = getInjectable({ if (code || signal) { return resolve({ callWasSuccessful: false, - error: `Shell did not exit sucessfully: ${getErrorContext({ code, signal })}`, + error: `Shell did not exit successfully: ${getErrorContext({ code, signal })}`, }); } @@ -157,7 +157,7 @@ const computeUnixShellEnvironmentInjectable = getInjectable({ if (!matchedOutput) { return resolve({ callWasSuccessful: false, - error: "Something has blocked the shell from producing the environement variables", + error: "Something has blocked the shell from producing the environment variables", }); } diff --git a/packages/core/src/main/catalog-sources/__test__/kubeconfig-sync.test.ts b/packages/core/src/main/catalog-sources/__test__/kubeconfig-sync.test.ts index 6f3a8e3e0b..59e21e1d40 100644 --- a/packages/core/src/main/catalog-sources/__test__/kubeconfig-sync.test.ts +++ b/packages/core/src/main/catalog-sources/__test__/kubeconfig-sync.test.ts @@ -10,7 +10,7 @@ import type { Cluster } from "../../../common/cluster/cluster"; import { getDiForUnitTesting } from "../../getDiForUnitTesting"; import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; import directoryForTempInjectable from "../../../common/app-paths/directory-for-temp/directory-for-temp.injectable"; -import { iter, strictGet } from "../../../common/utils"; +import { iter, strictGet } from "@k8slens/utilities"; import type { ComputeKubeconfigDiff } from "../kubeconfig-sync/compute-diff.injectable"; import computeKubeconfigDiffInjectable from "../kubeconfig-sync/compute-diff.injectable"; import type { ConfigToModels } from "../kubeconfig-sync/config-to-models.injectable"; diff --git a/packages/core/src/main/catalog-sources/kubeconfig-sync/diff-changed-kubeconfig.injectable.ts b/packages/core/src/main/catalog-sources/kubeconfig-sync/diff-changed-kubeconfig.injectable.ts index f17293fc2d..ad03c2563d 100644 --- a/packages/core/src/main/catalog-sources/kubeconfig-sync/diff-changed-kubeconfig.injectable.ts +++ b/packages/core/src/main/catalog-sources/kubeconfig-sync/diff-changed-kubeconfig.injectable.ts @@ -10,8 +10,8 @@ import type { Readable } from "stream"; import type { CatalogEntity } from "../../../common/catalog"; import type { Cluster } from "../../../common/cluster/cluster"; import createReadFileStreamInjectable from "../../../common/fs/create-read-file-stream.injectable"; -import type { Disposer } from "../../../common/utils"; -import { bytesToUnits, noop } from "../../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; +import { bytesToUnits, noop } from "@k8slens/utilities"; import computeKubeconfigDiffInjectable from "./compute-diff.injectable"; import kubeconfigSyncLoggerInjectable from "./logger.injectable"; diff --git a/packages/core/src/main/catalog-sources/kubeconfig-sync/manager.ts b/packages/core/src/main/catalog-sources/kubeconfig-sync/manager.ts index cf05577ae7..77ef96b765 100644 --- a/packages/core/src/main/catalog-sources/kubeconfig-sync/manager.ts +++ b/packages/core/src/main/catalog-sources/kubeconfig-sync/manager.ts @@ -6,8 +6,8 @@ import type { IComputedValue, ObservableMap } from "mobx"; import { action, observable, computed, makeObservable, observe } from "mobx"; import type { CatalogEntity } from "../../../common/catalog"; -import type { Disposer } from "../../../common/utils"; -import { iter } from "../../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; +import { iter } from "@k8slens/utilities"; import type { KubeconfigSyncValue } from "../../../common/user-store"; import type { Logger } from "../../../common/logger"; import type { WatchKubeconfigFileChanges } from "./watch-file-changes.injectable"; diff --git a/packages/core/src/main/catalog-sources/kubeconfig-sync/watch-file-changes.injectable.ts b/packages/core/src/main/catalog-sources/kubeconfig-sync/watch-file-changes.injectable.ts index 244daeec69..a54db19390 100644 --- a/packages/core/src/main/catalog-sources/kubeconfig-sync/watch-file-changes.injectable.ts +++ b/packages/core/src/main/catalog-sources/kubeconfig-sync/watch-file-changes.injectable.ts @@ -13,8 +13,8 @@ import type { Cluster } from "../../../common/cluster/cluster"; import statInjectable from "../../../common/fs/stat.injectable"; import type { Watcher } from "../../../common/fs/watch/watch.injectable"; import watchInjectable from "../../../common/fs/watch/watch.injectable"; -import type { Disposer } from "../../../common/utils"; -import { getOrInsertWith, iter } from "../../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; +import { getOrInsertWith, iter } from "@k8slens/utilities"; import diffChangedKubeconfigInjectable from "./diff-changed-kubeconfig.injectable"; import kubeconfigSyncLoggerInjectable from "./logger.injectable"; diff --git a/packages/core/src/main/catalog-sources/weblinks.ts b/packages/core/src/main/catalog-sources/weblinks.ts index 084654efc0..2ff2b645a1 100644 --- a/packages/core/src/main/catalog-sources/weblinks.ts +++ b/packages/core/src/main/catalog-sources/weblinks.ts @@ -8,7 +8,7 @@ import type { WeblinkStore } from "../../common/weblinks-store/weblink-store"; import { WebLink } from "../../common/catalog-entities"; import type { CatalogEntityRegistry } from "../catalog"; import got from "got"; -import type { Disposer } from "../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; import { random } from "lodash"; async function validateLink(link: WebLink) { diff --git a/packages/core/src/main/catalog-sync-to-renderer/catalog-sync-to-renderer.injectable.ts b/packages/core/src/main/catalog-sync-to-renderer/catalog-sync-to-renderer.injectable.ts index bdcd3034d3..cd77332185 100644 --- a/packages/core/src/main/catalog-sync-to-renderer/catalog-sync-to-renderer.injectable.ts +++ b/packages/core/src/main/catalog-sync-to-renderer/catalog-sync-to-renderer.injectable.ts @@ -6,10 +6,11 @@ import { getInjectable } from "@ogre-tools/injectable"; import { reaction } from "mobx"; import ipcMainInjectionToken from "../../common/ipc/ipc-main-injection-token"; import { catalogInitChannel } from "../../common/ipc/catalog"; -import { disposer, toJS } from "../../common/utils"; +import { disposer } from "@k8slens/utilities"; import { getStartableStoppable } from "../../common/utils/get-startable-stoppable"; import catalogEntityRegistryInjectable from "../catalog/entity-registry.injectable"; import catalogSyncBroadcasterInjectable from "./broadcaster.injectable"; +import { toJS } from "../../common/utils"; const catalogSyncToRendererInjectable = getInjectable({ id: "catalog-sync-to-renderer", diff --git a/packages/core/src/main/catalog/entity-registry.ts b/packages/core/src/main/catalog/entity-registry.ts index 972da73132..99b7a4ccb3 100644 --- a/packages/core/src/main/catalog/entity-registry.ts +++ b/packages/core/src/main/catalog/entity-registry.ts @@ -6,7 +6,7 @@ import { action, computed, type IComputedValue, type IObservableArray, makeObservable, observable } from "mobx"; import type { CatalogEntity } from "../../common/catalog"; import type { HasCategoryForEntity } from "../../common/catalog/has-category-for-entity.injectable"; -import { iter } from "../../common/utils"; +import { iter } from "@k8slens/utilities"; interface Dependencies { readonly hasCategoryForEntity: HasCategoryForEntity; diff --git a/packages/core/src/main/cluster-detectors/detect-cluster-metadata.injectable.ts b/packages/core/src/main/cluster-detectors/detect-cluster-metadata.injectable.ts index cfc492942f..8bb362baa9 100644 --- a/packages/core/src/main/cluster-detectors/detect-cluster-metadata.injectable.ts +++ b/packages/core/src/main/cluster-detectors/detect-cluster-metadata.injectable.ts @@ -8,7 +8,7 @@ import { groupBy, reduce } from "lodash"; import { filter, map } from "lodash/fp"; import type { ClusterMetadata } from "../../common/cluster-types"; import type { Cluster } from "../../common/cluster/cluster"; -import { hasDefinedTupleValue, isDefined, object } from "../../common/utils"; +import { hasDefinedTupleValue, isDefined, object } from "@k8slens/utilities"; import type { ClusterDetectionResult, ClusterMetadataDetector } from "./token"; import { clusterMetadataDetectorInjectionToken } from "./token"; diff --git a/packages/core/src/main/cluster/manager.ts b/packages/core/src/main/cluster/manager.ts index 650a3b7752..7954242e0d 100644 --- a/packages/core/src/main/cluster/manager.ts +++ b/packages/core/src/main/cluster/manager.ts @@ -7,7 +7,7 @@ import "../../common/ipc/cluster"; import type { IObservableValue, ObservableSet } from "mobx"; import { action, makeObservable, observe, reaction, toJS } from "mobx"; import type { Cluster } from "../../common/cluster/cluster"; -import { isErrnoException } from "../../common/utils"; +import { isErrnoException } from "@k8slens/utilities"; import type { KubernetesClusterPrometheusMetrics } from "../../common/catalog-entities/kubernetes-cluster"; import { isKubernetesCluster, KubernetesCluster, LensKubernetesClusterStatus } from "../../common/catalog-entities/kubernetes-cluster"; import { ipcMainOn } from "../../common/ipc"; diff --git a/packages/core/src/main/cluster/request-api-resources.injectable.ts b/packages/core/src/main/cluster/request-api-resources.injectable.ts index 552bd47800..5cc655c394 100644 --- a/packages/core/src/main/cluster/request-api-resources.injectable.ts +++ b/packages/core/src/main/cluster/request-api-resources.injectable.ts @@ -8,7 +8,7 @@ import loggerInjectable from "../../common/logger.injectable"; import type { KubeApiResource } from "../../common/rbac"; import type { Cluster } from "../../common/cluster/cluster"; import { requestApiVersionsInjectionToken } from "./request-api-versions"; -import { withConcurrencyLimit } from "../../common/utils/with-concurrency-limit"; +import { withConcurrencyLimit } from "@k8slens/utilities/src/with-concurrency-limit"; import requestKubeApiResourcesForInjectable from "./request-kube-api-resources-for.injectable"; import type { AsyncResult } from "../../common/utils/async-result"; import { backoffCaller } from "../../common/utils/backoff-caller"; diff --git a/packages/core/src/main/cluster/request-non-core-api-versions.injectable.ts b/packages/core/src/main/cluster/request-non-core-api-versions.injectable.ts index e5b241c75f..c958e22609 100644 --- a/packages/core/src/main/cluster/request-non-core-api-versions.injectable.ts +++ b/packages/core/src/main/cluster/request-non-core-api-versions.injectable.ts @@ -4,7 +4,7 @@ */ import type { V1APIGroupList } from "@kubernetes/client-node"; import { getInjectable } from "@ogre-tools/injectable"; -import { chain } from "../../common/utils/iter"; +import { chain } from "@k8slens/utilities/src/iter"; import k8sRequestInjectable from "../k8s-request.injectable"; import { requestApiVersionsInjectionToken } from "./request-api-versions"; diff --git a/packages/core/src/main/cluster/store-migrations/5.0.0-beta.10.injectable.ts b/packages/core/src/main/cluster/store-migrations/5.0.0-beta.10.injectable.ts index 0199e57c97..7e1acec5b8 100644 --- a/packages/core/src/main/cluster/store-migrations/5.0.0-beta.10.injectable.ts +++ b/packages/core/src/main/cluster/store-migrations/5.0.0-beta.10.injectable.ts @@ -8,7 +8,7 @@ import { clusterStoreMigrationInjectionToken } from "../../../common/cluster-sto import type { ClusterModel } from "../../../common/cluster-types"; import readJsonSyncInjectable from "../../../common/fs/read-json-sync.injectable"; import joinPathsInjectable from "../../../common/path/join-paths.injectable"; -import { isErrnoException } from "../../../common/utils"; +import { isErrnoException } from "@k8slens/utilities"; interface Pre500WorkspaceStoreModel { workspaces: { diff --git a/packages/core/src/main/cluster/store-migrations/5.0.0-beta.13.injectable.ts b/packages/core/src/main/cluster/store-migrations/5.0.0-beta.13.injectable.ts index d8f0368df4..0f44d898a6 100644 --- a/packages/core/src/main/cluster/store-migrations/5.0.0-beta.13.injectable.ts +++ b/packages/core/src/main/cluster/store-migrations/5.0.0-beta.13.injectable.ts @@ -6,7 +6,7 @@ import type { ClusterModel, ClusterPreferences, ClusterPrometheusPreferences } from "../../../common/cluster-types"; import { moveSync, removeSync } from "fs-extra"; import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; -import { isDefined } from "../../../common/utils"; +import { isDefined } from "@k8slens/utilities"; import joinPathsInjectable from "../../../common/path/join-paths.injectable"; function mergePrometheusPreferences(left: ClusterPrometheusPreferences, right: ClusterPrometheusPreferences): ClusterPrometheusPreferences { diff --git a/packages/core/src/main/electron-app/features/show-open-dialog.global-override-for-injectable.ts b/packages/core/src/main/electron-app/features/show-open-dialog.global-override-for-injectable.ts index 94e9afbeb4..232575f9a3 100644 --- a/packages/core/src/main/electron-app/features/show-open-dialog.global-override-for-injectable.ts +++ b/packages/core/src/main/electron-app/features/show-open-dialog.global-override-for-injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getGlobalOverrideForFunction } from "../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "../../../../../utility-features/test-utils/src/get-global-override-for-function"; import showOpenDialogInjectable from "./show-open-dialog.injectable"; export default getGlobalOverrideForFunction(showOpenDialogInjectable); diff --git a/packages/core/src/main/get-metrics.injectable.ts b/packages/core/src/main/get-metrics.injectable.ts index 3731435f6b..9a9141cb9b 100644 --- a/packages/core/src/main/get-metrics.injectable.ts +++ b/packages/core/src/main/get-metrics.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { Cluster } from "../common/cluster/cluster"; import { FormData } from "@k8slens/node-fetch"; import type { RequestMetricsParams } from "../common/k8s-api/endpoints/metrics.api/request-metrics.injectable"; -import { object } from "../common/utils"; +import { object } from "@k8slens/utilities"; import k8sRequestInjectable from "./k8s-request.injectable"; export type GetMetrics = (cluster: Cluster, prometheusPath: string, queryParams: RequestMetricsParams & { query: string }) => Promise; diff --git a/packages/core/src/main/helm/__tests__/helm-service.test.ts b/packages/core/src/main/helm/__tests__/helm-service.test.ts index 78d00b939c..32af6e7258 100644 --- a/packages/core/src/main/helm/__tests__/helm-service.test.ts +++ b/packages/core/src/main/helm/__tests__/helm-service.test.ts @@ -6,14 +6,14 @@ import { getDiForUnitTesting } from "../../getDiForUnitTesting"; import listHelmChartsInjectable from "../helm-service/list-helm-charts.injectable"; import getActiveHelmRepositoriesInjectable from "../repositories/get-active-helm-repositories/get-active-helm-repositories.injectable"; -import type { AsyncResult } from "../../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; import type { HelmRepo } from "../../../common/helm/helm-repo"; -import { sortBySemverVersion } from "../../../common/utils"; +import { sortBySemverVersion } from "@k8slens/utilities"; import helmChartManagerInjectable from "../helm-chart-manager.injectable"; describe("Helm Service tests", () => { let listHelmCharts: () => Promise; - let getActiveHelmRepositoriesMock: jest.Mock>>; + let getActiveHelmRepositoriesMock: jest.Mock>; beforeEach(() => { const di = getDiForUnitTesting({ doGeneralOverrides: true }); diff --git a/packages/core/src/main/helm/helm-chart-manager.ts b/packages/core/src/main/helm/helm-chart-manager.ts index cccf40cbc6..6419e5fc92 100644 --- a/packages/core/src/main/helm/helm-chart-manager.ts +++ b/packages/core/src/main/helm/helm-chart-manager.ts @@ -4,7 +4,7 @@ */ import * as yaml from "js-yaml"; -import { iter, put, sortBySemverVersion } from "../../common/utils"; +import { iter, put, sortBySemverVersion } from "@k8slens/utilities"; import type { HelmRepo } from "../../common/helm/helm-repo"; import type { HelmChartManagerCache } from "./helm-chart-manager-cache.injectable"; import type { Logger } from "../../common/logger"; diff --git a/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/call-for-kube-resources-by-manifest.injectable.ts b/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/call-for-kube-resources-by-manifest.injectable.ts index 71a38abf6b..69ce5cc697 100644 --- a/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/call-for-kube-resources-by-manifest.injectable.ts +++ b/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/call-for-kube-resources-by-manifest.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import type { JsonObject } from "type-fest"; -import { json } from "../../../../../common/utils"; +import { json } from "@k8slens/utilities"; import yaml from "js-yaml"; import execFileWithInputInjectable from "./exec-file-with-input/exec-file-with-input.injectable"; import { getErrorMessage } from "../../../../../common/utils/get-error-message"; diff --git a/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/exec-file-with-input/exec-file-with-input.injectable.ts b/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/exec-file-with-input/exec-file-with-input.injectable.ts index 49a1c644f2..37003964fe 100644 --- a/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/exec-file-with-input/exec-file-with-input.injectable.ts +++ b/packages/core/src/main/helm/helm-service/get-helm-release-resources/call-for-kube-resources-by-manifest/exec-file-with-input/exec-file-with-input.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { AsyncResult } from "../../../../../../common/utils/async-result"; import nonPromiseExecFileInjectable from "./non-promise-exec-file.injectable"; -import { isNumber } from "../../../../../../common/utils"; +import { isNumber } from "@k8slens/utilities"; import assert from "assert"; import type { ChildProcess } from "child_process"; diff --git a/packages/core/src/main/helm/helm-service/get-helm-release.injectable.ts b/packages/core/src/main/helm/helm-service/get-helm-release.injectable.ts index 71d3fe6184..4eab5d8036 100644 --- a/packages/core/src/main/helm/helm-service/get-helm-release.injectable.ts +++ b/packages/core/src/main/helm/helm-service/get-helm-release.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { Cluster } from "../../../common/cluster/cluster"; import loggerInjectable from "../../../common/logger.injectable"; -import { isObject, json } from "../../../common/utils"; +import { isObject, json } from "@k8slens/utilities"; import execHelmInjectable from "../exec-helm/exec-helm.injectable"; import getHelmReleaseResourcesInjectable from "./get-helm-release-resources/get-helm-release-resources.injectable"; diff --git a/packages/core/src/main/helm/helm-service/list-helm-charts.injectable.ts b/packages/core/src/main/helm/helm-service/list-helm-charts.injectable.ts index 93a57e7aff..53918baef1 100644 --- a/packages/core/src/main/helm/helm-service/list-helm-charts.injectable.ts +++ b/packages/core/src/main/helm/helm-service/list-helm-charts.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { object } from "../../../common/utils"; +import { object } from "@k8slens/utilities"; import getActiveHelmRepositoriesInjectable from "../repositories/get-active-helm-repositories/get-active-helm-repositories.injectable"; import type { HelmRepo } from "../../../common/helm/helm-repo"; import helmChartManagerInjectable from "../helm-chart-manager.injectable"; diff --git a/packages/core/src/main/helm/list-helm-releases.injectable.ts b/packages/core/src/main/helm/list-helm-releases.injectable.ts index ff362eb3d2..f12cd2ffd2 100644 --- a/packages/core/src/main/helm/list-helm-releases.injectable.ts +++ b/packages/core/src/main/helm/list-helm-releases.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import execHelmInjectable from "./exec-helm/exec-helm.injectable"; -import { isObject, json, toCamelCase } from "../../common/utils"; +import { toCamelCase, isObject } from "@k8slens/utilities"; export type ListHelmReleases = (pathToKubeconfig: string, namespace?: string) => Promise[]>; @@ -34,7 +34,7 @@ const listHelmReleasesInjectable = getInjectable({ throw result.error; } - const output = json.parse(result.response); + const output = JSON.parse(result.response); if (!Array.isArray(output) || output.length == 0) { return []; diff --git a/packages/core/src/main/helm/repositories/get-active-helm-repositories/get-active-helm-repositories.injectable.ts b/packages/core/src/main/helm/repositories/get-active-helm-repositories/get-active-helm-repositories.injectable.ts index bd05b950d7..fe0690b59d 100644 --- a/packages/core/src/main/helm/repositories/get-active-helm-repositories/get-active-helm-repositories.injectable.ts +++ b/packages/core/src/main/helm/repositories/get-active-helm-repositories/get-active-helm-repositories.injectable.ts @@ -9,7 +9,7 @@ import readYamlFileInjectable from "../../../../common/fs/read-yaml-file.injecta import getHelmEnvInjectable from "../../get-helm-env/get-helm-env.injectable"; import execHelmInjectable from "../../exec-helm/exec-helm.injectable"; import loggerInjectable from "../../../../common/logger.injectable"; -import type { AsyncResult } from "../../../../common/utils/async-result"; +import type { AsyncResult } from "@k8slens/utilities"; interface HelmRepositoryFromYaml { name: string; @@ -38,7 +38,7 @@ const getActiveHelmRepositoriesInjectable = getInjectable({ const getRepositories = getRepositoriesFor(readYamlFile); - return async (): Promise> => { + return async (): AsyncResult => { const envResult = await getHelmEnv(); if (!envResult.callWasSuccessful) { diff --git a/packages/core/src/main/hotbar-store/migrations/5.0.0-beta.10.injectable.ts b/packages/core/src/main/hotbar-store/migrations/5.0.0-beta.10.injectable.ts index ddbda706be..a755a36416 100644 --- a/packages/core/src/main/hotbar-store/migrations/5.0.0-beta.10.injectable.ts +++ b/packages/core/src/main/hotbar-store/migrations/5.0.0-beta.10.injectable.ts @@ -10,7 +10,7 @@ import { defaultHotbarCells, getEmptyHotbar } from "../../../common/hotbars/type import { getLegacyGlobalDiForExtensionApi } from "../../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; import catalogCatalogEntityInjectable from "../../../common/catalog-entities/general-catalog-entities/implementations/catalog-catalog-entity.injectable"; -import { isDefined, isErrnoException } from "../../../common/utils"; +import { isDefined, isErrnoException } from "@k8slens/utilities"; import joinPathsInjectable from "../../../common/path/join-paths.injectable"; import { getInjectable } from "@ogre-tools/injectable"; import { hotbarStoreMigrationInjectionToken } from "../../../common/hotbars/migrations-token"; diff --git a/packages/core/src/main/kubeconfig-manager/kubeconfig-manager.ts b/packages/core/src/main/kubeconfig-manager/kubeconfig-manager.ts index 0486521e21..8c25f2137d 100644 --- a/packages/core/src/main/kubeconfig-manager/kubeconfig-manager.ts +++ b/packages/core/src/main/kubeconfig-manager/kubeconfig-manager.ts @@ -7,7 +7,7 @@ import type { KubeConfig } from "@kubernetes/client-node"; import type { Cluster } from "../../common/cluster/cluster"; import type { ClusterContextHandler } from "../context-handler/context-handler"; import { dumpConfigYaml } from "../../common/kube-helpers"; -import { isErrnoException } from "../../common/utils"; +import { isErrnoException } from "@k8slens/utilities"; import type { PartialDeep } from "type-fest"; import type { Logger } from "../../common/logger"; import type { JoinPaths } from "../../common/path/join-paths.injectable"; diff --git a/packages/core/src/main/kubectl/kubectl.ts b/packages/core/src/main/kubectl/kubectl.ts index 15773a2ef7..ca0fac16e2 100644 --- a/packages/core/src/main/kubectl/kubectl.ts +++ b/packages/core/src/main/kubectl/kubectl.ts @@ -4,7 +4,6 @@ */ import fs from "fs"; -import { promiseExecFile } from "../../common/utils/promise-exec"; import { ensureDir, pathExists } from "fs-extra"; import * as lockFile from "proper-lockfile"; import { SemVer, coerce } from "semver"; @@ -18,6 +17,9 @@ import type { GetDirnameOfPath } from "../../common/path/get-dirname.injectable" import type { GetBasenameOfPath } from "../../common/path/get-basename.injectable"; import type { NormalizedPlatform } from "../../common/vars/normalized-platform.injectable"; import type { Logger } from "../../common/logger"; +import type { ExecFile } from "../../common/fs/exec-file.injectable"; +import { hasTypedProperty, isObject, isString, json } from "@k8slens/utilities"; +import type { Unlink } from "../../common/fs/unlink.injectable"; const initScriptVersionString = "# lens-initscript v3"; @@ -40,6 +42,8 @@ export interface KubectlDependencies { joinPaths: JoinPaths; getDirnameOfPath: GetDirnameOfPath; getBasenameOfPath: GetBasenameOfPath; + execFile: ExecFile; + unlink: Unlink; } export class Kubectl { @@ -145,38 +149,64 @@ export class Kubectl { public async checkBinary(path: string, checkVersion = true) { const exists = await pathExists(path); - if (exists) { - try { - const args = [ - "version", - "--client", - "--output", "json", - ]; - const { stdout } = await promiseExecFile(path, args); - const output = JSON.parse(stdout); - - if (!checkVersion) { - return true; - } - let version: string = output.clientVersion.gitVersion; - - if (version[0] === "v") { - version = version.slice(1); - } - - if (version === this.kubectlVersion) { - this.dependencies.logger.debug(`Local kubectl is version ${this.kubectlVersion}`); - - return true; - } - this.dependencies.logger.error(`Local kubectl is version ${version}, expected ${this.kubectlVersion}, unlinking`); - } catch (error) { - this.dependencies.logger.error(`Local kubectl failed to run properly (${error}), unlinking`); - } - await fs.promises.unlink(this.path); + if (!exists) { + return false; } - return false; + const args = [ + "version", + "--client", + "--output", "json", + ]; + const execResult = await this.dependencies.execFile(path, args); + + if (!execResult.callWasSuccessful) { + this.dependencies.logger.error(`Local kubectl failed to run properly (${execResult.error}), unlinking`); + await this.dependencies.unlink(this.path); + + return; + } + + const parseResult = json.parse(execResult.response); + + if (!parseResult.callWasSuccessful) { + this.dependencies.logger.error(`Local kubectl failed to run properly (${parseResult.error}), unlinking`); + await this.dependencies.unlink(this.path); + + return; + } + + if (!checkVersion) { + return true; + } + + const { response: output } = parseResult; + + if ( + !isObject(output) + || !hasTypedProperty(output, "clientVersion", isObject) + || !hasTypedProperty(output.clientVersion, "gitVersion", isString) + ) { + this.dependencies.logger.error(`Local kubectl failed to return correct shaped response, unlinking`); + await this.dependencies.unlink(this.path); + + return; + } + + const version = output.clientVersion.gitVersion; + + switch (output.clientVersion.gitVersion) { + case this.kubectlVersion: + case `v${this.kubectlVersion}`: + this.dependencies.logger.debug(`Local kubectl is version ${this.kubectlVersion}`); + + return true; + default: + this.dependencies.logger.error(`Local kubectl is version ${version}, expected ${this.kubectlVersion}, unlinking`); + await this.dependencies.unlink(this.path); + + return false; + } } protected async checkBundled(): Promise { @@ -266,7 +296,7 @@ export class Kubectl { await fs.promises.chmod(this.path, 0o755); this.dependencies.logger.debug("kubectl binary download finished"); } catch (error) { - await fs.promises.unlink(this.path).catch(noop); + await this.dependencies.unlink(this.path).catch(noop); throw error; } } diff --git a/packages/core/src/main/lens-proxy/proxy-functions/shell-request-authenticator/shell-request-authenticator.ts b/packages/core/src/main/lens-proxy/proxy-functions/shell-request-authenticator/shell-request-authenticator.ts index ab5e46eb77..91d4161164 100644 --- a/packages/core/src/main/lens-proxy/proxy-functions/shell-request-authenticator/shell-request-authenticator.ts +++ b/packages/core/src/main/lens-proxy/proxy-functions/shell-request-authenticator/shell-request-authenticator.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getOrInsertMap } from "../../../../common/utils"; +import { getOrInsertMap } from "@k8slens/utilities"; import type { ClusterId } from "../../../../common/cluster-types"; import { ipcMainHandle } from "../../../../common/ipc"; import crypto from "crypto"; diff --git a/packages/core/src/main/navigate-to-route/navigate-to-route.injectable.ts b/packages/core/src/main/navigate-to-route/navigate-to-route.injectable.ts index e097bf1569..76fc403a0e 100644 --- a/packages/core/src/main/navigate-to-route/navigate-to-route.injectable.ts +++ b/packages/core/src/main/navigate-to-route/navigate-to-route.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { navigateToUrlInjectionToken } from "../../common/front-end-routing/navigate-to-url-injection-token"; import { navigateToRouteInjectionToken } from "../../common/front-end-routing/navigate-to-route-injection-token"; -import { buildURL } from "../../common/utils/buildUrl"; +import { buildURL } from "@k8slens/utilities/src/buildUrl"; const navigateToRouteInjectable = getInjectable({ id: "navigate-to-route", diff --git a/packages/core/src/main/prometheus/provider.ts b/packages/core/src/main/prometheus/provider.ts index 8944c4c0ed..5bd9588a06 100644 --- a/packages/core/src/main/prometheus/provider.ts +++ b/packages/core/src/main/prometheus/provider.ts @@ -5,7 +5,7 @@ import type { CoreV1Api } from "@kubernetes/client-node"; import { getInjectionToken } from "@ogre-tools/injectable"; -import { isRequestError } from "../../common/utils"; +import { isRequestError } from "@k8slens/utilities"; export interface PrometheusService extends PrometheusServiceInfo { kind: string; diff --git a/packages/core/src/main/protocol-handler/__test__/router.test.ts b/packages/core/src/main/protocol-handler/__test__/router.test.ts index a06c3b057b..6171755616 100644 --- a/packages/core/src/main/protocol-handler/__test__/router.test.ts +++ b/packages/core/src/main/protocol-handler/__test__/router.test.ts @@ -6,7 +6,7 @@ import * as uuid from "uuid"; import { ProtocolHandlerExtension, ProtocolHandlerInternal, ProtocolHandlerInvalid } from "../../../common/protocol-handler"; -import { delay, noop } from "../../../common/utils"; +import { delay, noop } from "@k8slens/utilities"; import type { ExtensionsStore, IsEnabledExtensionDescriptor } from "../../../extensions/extensions-store/extensions-store"; import type { LensProtocolRouterMain } from "../lens-protocol-router-main/lens-protocol-router-main"; import { getDiForUnitTesting } from "../../getDiForUnitTesting"; diff --git a/packages/core/src/main/protocol-handler/lens-protocol-router-main/lens-protocol-router-main.ts b/packages/core/src/main/protocol-handler/lens-protocol-router-main/lens-protocol-router-main.ts index 3beb596e4e..fb0ad71892 100644 --- a/packages/core/src/main/protocol-handler/lens-protocol-router-main/lens-protocol-router-main.ts +++ b/packages/core/src/main/protocol-handler/lens-protocol-router-main/lens-protocol-router-main.ts @@ -9,7 +9,7 @@ import type { LensExtension } from "../../../extensions/lens-extension"; import { observable, when, makeObservable } from "mobx"; import type { LensProtocolRouterDependencies, RouteAttempt } from "../../../common/protocol-handler"; import { ProtocolHandlerInvalid } from "../../../common/protocol-handler"; -import { disposer, noop } from "../../../common/utils"; +import { disposer, noop } from "@k8slens/utilities"; import type { BroadcastMessage } from "../../../common/ipc/broadcast-message.injectable"; export interface FallbackHandler { diff --git a/packages/core/src/main/router/create-handler-for-route.injectable.ts b/packages/core/src/main/router/create-handler-for-route.injectable.ts index 60f62fd282..d007172294 100644 --- a/packages/core/src/main/router/create-handler-for-route.injectable.ts +++ b/packages/core/src/main/router/create-handler-for-route.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { ServerResponse } from "http"; import loggerInjectable from "../../common/logger.injectable"; -import { object } from "../../common/utils"; +import { object } from "@k8slens/utilities"; import type { LensApiRequest, Route } from "./route"; import { contentTypes } from "./router-content-types"; diff --git a/packages/core/src/main/routes/metrics/add-metrics-route.injectable.ts b/packages/core/src/main/routes/metrics/add-metrics-route.injectable.ts index eb59f2840b..8cbd528eea 100644 --- a/packages/core/src/main/routes/metrics/add-metrics-route.injectable.ts +++ b/packages/core/src/main/routes/metrics/add-metrics-route.injectable.ts @@ -10,7 +10,7 @@ import { ClusterMetadataKey } from "../../../common/cluster-types"; import type { Cluster } from "../../../common/cluster/cluster"; import { clusterRoute } from "../../router/route"; import { isObject } from "lodash"; -import { isRequestError, object } from "../../../common/utils"; +import { isRequestError, object } from "@k8slens/utilities"; import type { GetMetrics } from "../../get-metrics.injectable"; import getMetricsInjectable from "../../get-metrics.injectable"; import loggerInjectable from "../../../common/logger.injectable"; diff --git a/packages/core/src/main/shell-session/shell-env-modifier/modify-terminal-shell-env.injectable.ts b/packages/core/src/main/shell-session/shell-env-modifier/modify-terminal-shell-env.injectable.ts index 559dbcf645..908ee8bd30 100644 --- a/packages/core/src/main/shell-session/shell-env-modifier/modify-terminal-shell-env.injectable.ts +++ b/packages/core/src/main/shell-session/shell-env-modifier/modify-terminal-shell-env.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { computed } from "mobx"; import type { ClusterId } from "../../../common/cluster-types"; -import { isDefined } from "../../../common/utils"; +import { isDefined } from "@k8slens/utilities"; import mainExtensionsInjectable from "../../../extensions/main-extensions.injectable"; import catalogEntityRegistryInjectable from "../../catalog/entity-registry.injectable"; diff --git a/packages/core/src/main/shell-session/shell-session.ts b/packages/core/src/main/shell-session/shell-session.ts index 196625f42a..9e7b8a411c 100644 --- a/packages/core/src/main/shell-session/shell-session.ts +++ b/packages/core/src/main/shell-session/shell-session.ts @@ -10,7 +10,7 @@ import { clearKubeconfigEnvVars } from "../utils/clear-kube-env-vars"; import path from "path"; import os from "os"; import type * as pty from "node-pty"; -import { getOrInsertWith } from "../../common/utils"; +import { getOrInsertWith } from "@k8slens/utilities"; import { type TerminalMessage, TerminalChannels } from "../../common/terminal/channels"; import type { Logger } from "../../common/logger"; import type { ComputeShellEnvironment } from "../../features/shell-sync/main/compute-shell-environment.injectable"; diff --git a/packages/core/src/main/start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable.ts b/packages/core/src/main/start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable.ts index 4046db5d9d..b08ae197d4 100644 --- a/packages/core/src/main/start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable.ts +++ b/packages/core/src/main/start-main-application/lens-window/application-window/wait-until-bundled-extensions-are-loaded.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import ipcMainInjectionToken from "../../../../common/ipc/ipc-main-injection-token"; import { bundledExtensionsLoaded } from "../../../../common/ipc/extension-handling"; -import { delay } from "../../../../common/utils"; +import { delay } from "@k8slens/utilities"; const waitUntilBundledExtensionsAreLoadedInjectable = getInjectable({ id: "wait-until-bundled-extensions-are-loaded", diff --git a/packages/core/src/main/start-main-application/lens-window/navigate-for-extension.injectable.ts b/packages/core/src/main/start-main-application/lens-window/navigate-for-extension.injectable.ts index 0a0661148b..dfec478f7d 100644 --- a/packages/core/src/main/start-main-application/lens-window/navigate-for-extension.injectable.ts +++ b/packages/core/src/main/start-main-application/lens-window/navigate-for-extension.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { iter } from "../../../common/utils"; +import { iter } from "@k8slens/utilities"; import clusterFramesInjectable from "../../../common/cluster-frames.injectable"; import showApplicationWindowInjectable from "./show-application-window.injectable"; import getCurrentApplicationWindowInjectable from "./application-window/get-current-application-window.injectable"; diff --git a/packages/core/src/main/start-main-application/lens-window/navigate.injectable.ts b/packages/core/src/main/start-main-application/lens-window/navigate.injectable.ts index 7bcd14072b..8ebfa40303 100644 --- a/packages/core/src/main/start-main-application/lens-window/navigate.injectable.ts +++ b/packages/core/src/main/start-main-application/lens-window/navigate.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { iter } from "../../../common/utils"; +import { iter } from "@k8slens/utilities"; import clusterFramesInjectable from "../../../common/cluster-frames.injectable"; import { IpcRendererNavigationEvents } from "../../../common/ipc/navigation-events"; import showApplicationWindowInjectable from "./show-application-window.injectable"; diff --git a/packages/core/src/main/tray/tray-menu-item/tray-menu-item-registrator.injectable.ts b/packages/core/src/main/tray/tray-menu-item/tray-menu-item-registrator.injectable.ts index 573af2f545..f1eb3e7e50 100644 --- a/packages/core/src/main/tray/tray-menu-item/tray-menu-item-registrator.injectable.ts +++ b/packages/core/src/main/tray/tray-menu-item/tray-menu-item-registrator.injectable.ts @@ -15,7 +15,7 @@ import { withErrorSuppression } from "../../../common/utils/with-error-suppressi import type { WithErrorLoggingFor } from "../../../common/utils/with-error-logging/with-error-logging.injectable"; import withErrorLoggingInjectable from "../../../common/utils/with-error-logging/with-error-logging.injectable"; import getRandomIdInjectable from "../../../common/utils/get-random-id.injectable"; -import { isBoolean, isString } from "../../../common/utils"; +import { isBoolean, isString } from "@k8slens/utilities"; const trayMenuItemRegistratorInjectable = getInjectable({ id: "tray-menu-item-registrator", diff --git a/packages/core/src/main/user-store/migrations/5.0.3-beta.1.injectable.ts b/packages/core/src/main/user-store/migrations/5.0.3-beta.1.injectable.ts index 1367037c6d..7739c67e66 100644 --- a/packages/core/src/main/user-store/migrations/5.0.3-beta.1.injectable.ts +++ b/packages/core/src/main/user-store/migrations/5.0.3-beta.1.injectable.ts @@ -5,7 +5,7 @@ import type { ClusterStoreModel } from "../../../common/cluster-store/cluster-store"; import type { KubeconfigSyncEntry, UserPreferencesModel } from "../../../common/user-store"; -import { isErrnoException } from "../../../common/utils"; +import { isErrnoException } from "@k8slens/utilities"; import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable"; import directoryForKubeConfigsInjectable from "../../../common/app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable"; import joinPathsInjectable from "../../../common/path/join-paths.injectable"; diff --git a/packages/core/src/main/utils/channel/channel-listeners/enlist-request-channel-listener.injectable.ts b/packages/core/src/main/utils/channel/channel-listeners/enlist-request-channel-listener.injectable.ts index 1af1b6fb55..08a600297c 100644 --- a/packages/core/src/main/utils/channel/channel-listeners/enlist-request-channel-listener.injectable.ts +++ b/packages/core/src/main/utils/channel/channel-listeners/enlist-request-channel-listener.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import type { IpcMainInvokeEvent } from "electron"; -import type { Disposer } from "../../../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; import type { RequestChannel } from "../../../../common/utils/channel/request-channel-listener-injection-token"; import type { RequestChannelListener } from "./listener-tokens"; import ipcMainInjectionToken from "../../../../common/ipc/ipc-main-injection-token"; diff --git a/packages/core/src/main/utils/channel/channel-listeners/listening-on-request-channels.injectable.ts b/packages/core/src/main/utils/channel/channel-listeners/listening-on-request-channels.injectable.ts index 80b94fbe0e..1e6d0f296c 100644 --- a/packages/core/src/main/utils/channel/channel-listeners/listening-on-request-channels.injectable.ts +++ b/packages/core/src/main/utils/channel/channel-listeners/listening-on-request-channels.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable } from "@ogre-tools/injectable"; -import { disposer } from "../../../../common/utils"; +import { disposer } from "@k8slens/utilities"; import type { RequestChannel } from "../../../../common/utils/channel/request-channel-listener-injection-token"; import { getStartableStoppable } from "../../../../common/utils/get-startable-stoppable"; import enlistRequestChannelListenerInjectable from "./enlist-request-channel-listener.injectable"; diff --git a/packages/core/src/renderer/api/catalog/entity/registry.ts b/packages/core/src/renderer/api/catalog/entity/registry.ts index 9971be8462..2396d1276e 100644 --- a/packages/core/src/renderer/api/catalog/entity/registry.ts +++ b/packages/core/src/renderer/api/catalog/entity/registry.ts @@ -7,8 +7,8 @@ import { computed, observable, makeObservable, action } from "mobx"; import { ipcRendererOn } from "../../../../common/ipc"; import type { CatalogCategory, CatalogEntity, CatalogEntityData, CatalogCategoryRegistry, CatalogEntityKindData } from "../../../../common/catalog"; import "../../../../common/catalog-entities"; -import { iter } from "../../../utils"; -import type { Disposer } from "../../../utils"; +import { iter } from "@k8slens/utilities"; +import type { Disposer } from "@k8slens/utilities"; import { once } from "lodash"; import { CatalogRunEvent } from "../../../../common/catalog/catalog-run-event"; import { ipcRenderer } from "electron"; diff --git a/packages/core/src/renderer/api/helpers/watch-for-general-entity-navigation.injectable.ts b/packages/core/src/renderer/api/helpers/watch-for-general-entity-navigation.injectable.ts index 0e73acfcd1..70b7a61eae 100644 --- a/packages/core/src/renderer/api/helpers/watch-for-general-entity-navigation.injectable.ts +++ b/packages/core/src/renderer/api/helpers/watch-for-general-entity-navigation.injectable.ts @@ -8,8 +8,8 @@ import type { GeneralEntity } from "../../../common/catalog-entities"; import generalCategoryInjectable from "../../../common/catalog/categories/general.injectable"; import isActiveRouteInjectable from "../../navigation/is-route-active.injectable"; import observableHistoryInjectable from "../../navigation/observable-history.injectable"; -import type { Disposer } from "../../utils"; -import { disposer } from "../../utils"; +import type { Disposer } from "@k8slens/utilities"; +import { disposer } from "@k8slens/utilities"; import catalogEntityRegistryInjectable from "../catalog/entity/registry.injectable"; export type WatchForGeneralEntityNavigation = () => Disposer; diff --git a/packages/core/src/renderer/api/websocket-api.ts b/packages/core/src/renderer/api/websocket-api.ts index b172655dab..eddeda0049 100644 --- a/packages/core/src/renderer/api/websocket-api.ts +++ b/packages/core/src/renderer/api/websocket-api.ts @@ -7,7 +7,7 @@ import { observable, makeObservable } from "mobx"; import EventEmitter from "events"; import type TypedEventEmitter from "typed-emitter"; import type { Arguments } from "typed-emitter"; -import type { Defaulted } from "../utils"; +import type { Defaulted } from "@k8slens/utilities"; import type { DefaultWebsocketApiParams } from "./default-websocket-api-params.injectable"; interface WebsocketApiParams { diff --git a/packages/core/src/renderer/base-store/persist-state-to-config.injectable.ts b/packages/core/src/renderer/base-store/persist-state-to-config.injectable.ts index a1c8c5919a..0cf594062a 100644 --- a/packages/core/src/renderer/base-store/persist-state-to-config.injectable.ts +++ b/packages/core/src/renderer/base-store/persist-state-to-config.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { persistStateToConfigInjectionToken } from "../../common/base-store/save-to-file"; -import { noop } from "../utils"; +import { noop } from "@k8slens/utilities"; const persistStateToConfigInjectable = getInjectable({ id: "persist-state-to-config", diff --git a/packages/core/src/renderer/components/+add-cluster/add-cluster.tsx b/packages/core/src/renderer/components/+add-cluster/add-cluster.tsx index 92fa0b7a03..4ec5ced863 100644 --- a/packages/core/src/renderer/components/+add-cluster/add-cluster.tsx +++ b/packages/core/src/renderer/components/+add-cluster/add-cluster.tsx @@ -14,7 +14,7 @@ import React from "react"; import * as uuid from "uuid"; import { loadConfigFromString, splitConfig } from "../../../common/kube-helpers"; import { docsUrl } from "../../../common/vars"; -import { isDefined, iter } from "../../utils"; +import { isDefined, iter } from "@k8slens/utilities"; import { Button } from "../button"; import type { ShowNotification } from "../notifications"; import { SettingLayout } from "../layout/setting-layout"; diff --git a/packages/core/src/renderer/components/+catalog/__tests__/catalog-entity-store.test.ts b/packages/core/src/renderer/components/+catalog/__tests__/catalog-entity-store.test.ts index 6794fed899..813819e372 100644 --- a/packages/core/src/renderer/components/+catalog/__tests__/catalog-entity-store.test.ts +++ b/packages/core/src/renderer/components/+catalog/__tests__/catalog-entity-store.test.ts @@ -6,7 +6,7 @@ import type { CatalogCategoryMetadata, CatalogCategorySpec } from "../../../../common/catalog"; import { CatalogEntity, categoryVersion } from "../../../../common/catalog"; import { CatalogCategory } from "../../../api/catalog-entity"; -import { noop } from "../../../utils"; +import { noop } from "@k8slens/utilities"; import type { CatalogEntityStore } from "../catalog-entity-store/catalog-entity.store"; import { catalogEntityStore } from "../catalog-entity-store/catalog-entity.store"; diff --git a/packages/core/src/renderer/components/+catalog/catalog-add-button.tsx b/packages/core/src/renderer/components/+catalog/catalog-add-button.tsx index ee7ca30757..0e4531077d 100644 --- a/packages/core/src/renderer/components/+catalog/catalog-add-button.tsx +++ b/packages/core/src/renderer/components/+catalog/catalog-add-button.tsx @@ -9,7 +9,6 @@ import { SpeedDial, SpeedDialAction } from "@material-ui/lab"; import { Icon } from "../icon"; import { observer } from "mobx-react"; import { observable, makeObservable, action } from "mobx"; -import { autoBind } from "../../../common/utils"; import type { CatalogCategory, CatalogEntityAddMenu } from "../../api/catalog-entity"; import { EventEmitter } from "events"; import type { CatalogCategoryRegistry } from "../../../common/catalog"; @@ -17,6 +16,7 @@ import { withInjectables } from "@ogre-tools/injectable-react"; import catalogCategoryRegistryInjectable from "../../../common/catalog/category-registry.injectable"; import type { Navigate } from "../../navigation/navigate.injectable"; import navigateInjectable from "../../navigation/navigate.injectable"; +import autoBindReact from "auto-bind/react"; export interface CatalogAddButtonProps { category: CatalogCategory; @@ -37,7 +37,7 @@ class NonInjectedCatalogAddButton extends React.Component; diff --git a/packages/core/src/renderer/components/+catalog/catalog-menu.tsx b/packages/core/src/renderer/components/+catalog/catalog-menu.tsx index 5947f0a301..ab7ebbf7eb 100644 --- a/packages/core/src/renderer/components/+catalog/catalog-menu.tsx +++ b/packages/core/src/renderer/components/+catalog/catalog-menu.tsx @@ -11,7 +11,7 @@ import type { TreeItemProps } from "@material-ui/lab"; import { TreeItem, TreeView } from "@material-ui/lab"; import { Icon } from "../icon"; import { StylesProvider } from "@material-ui/core"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { CatalogCategory } from "../../api/catalog-entity"; import { observer } from "mobx-react"; import { CatalogCategoryLabel } from "./catalog-category-label"; diff --git a/packages/core/src/renderer/components/+catalog/catalog.tsx b/packages/core/src/renderer/components/+catalog/catalog.tsx index acd5346b17..48d268bbae 100644 --- a/packages/core/src/renderer/components/+catalog/catalog.tsx +++ b/packages/core/src/renderer/components/+catalog/catalog.tsx @@ -17,8 +17,8 @@ import type { CatalogCategory, CatalogCategoryRegistry, CatalogEntity } from ".. import { CatalogAddButton } from "./catalog-add-button"; import type { ShowNotification } from "../notifications"; import { MainLayout } from "../layout/main-layout"; -import type { StorageLayer } from "../../utils"; -import { prevDefault } from "../../utils"; +import type { StorageLayer } from "@k8slens/utilities"; +import { prevDefault } from "@k8slens/utilities"; import { CatalogEntityDetails } from "./entity-details/view"; import { CatalogMenu } from "./catalog-menu"; import { RenderDelay } from "../render-delay/render-delay"; diff --git a/packages/core/src/renderer/components/+catalog/columns/named-category.injectable.tsx b/packages/core/src/renderer/components/+catalog/columns/named-category.injectable.tsx index 1f782d7b6f..0f7544ffc1 100644 --- a/packages/core/src/renderer/components/+catalog/columns/named-category.injectable.tsx +++ b/packages/core/src/renderer/components/+catalog/columns/named-category.injectable.tsx @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import styles from "../catalog.module.scss"; import type { CatalogEntity } from "../../../../common/catalog"; -import { prevDefault } from "../../../utils"; +import { prevDefault } from "@k8slens/utilities"; import { Avatar } from "../../avatar"; import { Icon } from "../../icon"; import React from "react"; diff --git a/packages/core/src/renderer/components/+catalog/custom-category-columns.injectable.tsx b/packages/core/src/renderer/components/+catalog/custom-category-columns.injectable.tsx index 1c0d13964d..da0da81503 100644 --- a/packages/core/src/renderer/components/+catalog/custom-category-columns.injectable.tsx +++ b/packages/core/src/renderer/components/+catalog/custom-category-columns.injectable.tsx @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx"; import { computed } from "mobx"; -import { getOrInsert, getOrInsertMap } from "../../utils"; +import { getOrInsert, getOrInsertMap } from "@k8slens/utilities"; import { customCatalogCategoryColumnInjectionToken } from "./columns/custom-token"; import type { RegisteredAdditionalCategoryColumn } from "./custom-category-columns"; diff --git a/packages/core/src/renderer/components/+catalog/custom-views.injectable.ts b/packages/core/src/renderer/components/+catalog/custom-views.injectable.ts index c6200f80c6..bccb4d75bf 100644 --- a/packages/core/src/renderer/components/+catalog/custom-views.injectable.ts +++ b/packages/core/src/renderer/components/+catalog/custom-views.injectable.ts @@ -8,7 +8,7 @@ import type { IComputedValue } from "mobx"; import { computed } from "mobx"; import type { LensRendererExtension } from "../../../extensions/lens-renderer-extension"; import rendererExtensionsInjectable from "../../../extensions/renderer-extensions.injectable"; -import { getOrInsert, getOrInsertMap } from "../../utils"; +import { getOrInsert, getOrInsertMap } from "@k8slens/utilities"; import type { CustomCategoryViewComponents } from "./custom-views"; interface Dependencies { diff --git a/packages/core/src/renderer/components/+catalog/entity-details/registrator.injectable.ts b/packages/core/src/renderer/components/+catalog/entity-details/registrator.injectable.ts index 02a6a7ed23..9dfb83cce0 100644 --- a/packages/core/src/renderer/components/+catalog/entity-details/registrator.injectable.ts +++ b/packages/core/src/renderer/components/+catalog/entity-details/registrator.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { extensionRegistratorInjectionToken } from "../../../../extensions/extension-loader/extension-registrator-injection-token"; import type { LensRendererExtension } from "../../../../extensions/lens-renderer-extension"; import type { CatalogEntity } from "../../../api/catalog-entity"; -import { getRandId } from "../../../utils"; +import * as uuid from "uuid"; import type { CatalogEntityDetailRegistration } from "./token"; import { catalogEntityDetailItemInjectionToken } from "./token"; @@ -28,7 +28,7 @@ const getRegistratorFor = (extension: LensRendererExtension) => ({ kind, priority, }: CatalogEntityDetailRegistration) => getInjectable({ - id: `catalog-entity-detail-item-for-${extension.sanitizedExtensionId}-${getRandId({ sep: "-" })}`, + id: `catalog-entity-detail-item-for-${extension.sanitizedExtensionId}-${uuid.v4()}`, instantiate: () => ({ apiVersions: new Set(apiVersions), components, diff --git a/packages/core/src/renderer/components/+catalog/entity-details/view.tsx b/packages/core/src/renderer/components/+catalog/entity-details/view.tsx index 6b9b92247d..b846e20009 100644 --- a/packages/core/src/renderer/components/+catalog/entity-details/view.tsx +++ b/packages/core/src/renderer/components/+catalog/entity-details/view.tsx @@ -10,7 +10,7 @@ import { Drawer, DrawerItem } from "../../drawer"; import type { CatalogCategory, CatalogEntity } from "../../../../common/catalog"; import { Icon } from "../../icon"; import { CatalogEntityDrawerMenu } from "../catalog-entity-drawer-menu"; -import { cssNames } from "../../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Avatar } from "../../avatar"; import type { GetLabelBadges } from "../get-label-badges.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/components/+cluster/cluster-issues.tsx b/packages/core/src/renderer/components/+cluster/cluster-issues.tsx index 829d7c5c54..d338f23f73 100644 --- a/packages/core/src/renderer/components/+cluster/cluster-issues.tsx +++ b/packages/core/src/renderer/components/+cluster/cluster-issues.tsx @@ -12,7 +12,7 @@ import { computed, makeObservable } from "mobx"; import { Icon } from "../icon"; import { SubHeader } from "../layout/sub-header"; import { Table, TableCell, TableHead, TableRow } from "../table"; -import { cssNames, prevDefault } from "../../utils"; +import { cssNames, prevDefault } from "@k8slens/utilities"; import type { ItemObject } from "../../../common/item.store"; import { Spinner } from "../spinner"; import type { ApiManager } from "../../../common/k8s-api/api-manager"; diff --git a/packages/core/src/renderer/components/+cluster/cluster-metrics.tsx b/packages/core/src/renderer/components/+cluster/cluster-metrics.tsx index 028885e7f3..726e37d76e 100644 --- a/packages/core/src/renderer/components/+cluster/cluster-metrics.tsx +++ b/packages/core/src/renderer/components/+cluster/cluster-metrics.tsx @@ -11,7 +11,7 @@ import type { ChartOptions, ChartPoint } from "chart.js"; import type { ClusterOverviewStore } from "./cluster-overview-store/cluster-overview-store"; import { MetricType } from "./cluster-overview-store/cluster-overview-store"; import { BarChart } from "../chart"; -import { bytesToUnits, cssNames } from "../../utils"; +import { bytesToUnits, cssNames } from "@k8slens/utilities"; import { Spinner } from "../spinner"; import { ZebraStripesPlugin } from "../chart/zebra-stripes.plugin"; import { ClusterNoMetrics } from "./cluster-no-metrics"; diff --git a/packages/core/src/renderer/components/+cluster/cluster-no-metrics.tsx b/packages/core/src/renderer/components/+cluster/cluster-no-metrics.tsx index ec039835fc..8e90c7f72f 100644 --- a/packages/core/src/renderer/components/+cluster/cluster-no-metrics.tsx +++ b/packages/core/src/renderer/components/+cluster/cluster-no-metrics.tsx @@ -7,7 +7,7 @@ import styles from "./cluster-no-metrics.module.scss"; import React from "react"; import { Icon } from "../icon"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { NavigateToEntitySettings } from "../../../common/front-end-routing/routes/entity-settings/navigate-to-entity-settings.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; import navigateToEntitySettingsInjectable from "../../../common/front-end-routing/routes/entity-settings/navigate-to-entity-settings.injectable"; diff --git a/packages/core/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.ts b/packages/core/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.ts index 943b14dbf9..f417d3219e 100644 --- a/packages/core/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.ts +++ b/packages/core/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.ts @@ -7,12 +7,12 @@ import { action, observable, reaction, when, makeObservable } from "mobx"; import type { KubeObjectStoreDependencies } from "../../../../common/k8s-api/kube-object.store"; import { KubeObjectStore } from "../../../../common/k8s-api/kube-object.store"; import type { Cluster, ClusterApi } from "../../../../common/k8s-api/endpoints"; -import type { StorageLayer } from "../../../utils"; -import { autoBind } from "../../../utils"; +import type { StorageLayer } from "../../../utils/storage-helper"; import type { NodeStore } from "../../+nodes/store"; import type { ClusterMetricData, RequestClusterMetricsByNodeNames } from "../../../../common/k8s-api/endpoints/metrics.api/request-cluster-metrics-by-node-names.injectable"; import type { RequestMetricsParams } from "../../../../common/k8s-api/endpoints/metrics.api/request-metrics.injectable"; import { normalizeMetrics } from "../../../../common/k8s-api/endpoints/metrics.api"; +import autoBind from "auto-bind"; export enum MetricType { MEMORY = "memory", diff --git a/packages/core/src/renderer/components/+cluster/cluster-overview.tsx b/packages/core/src/renderer/components/+cluster/cluster-overview.tsx index f1cb9ad461..4d2710b8ec 100644 --- a/packages/core/src/renderer/components/+cluster/cluster-overview.tsx +++ b/packages/core/src/renderer/components/+cluster/cluster-overview.tsx @@ -10,7 +10,7 @@ import { reaction } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; import type { NodeStore } from "../+nodes/store"; import type { PodStore } from "../+workloads-pods/store"; -import { interval } from "../../utils"; +import { interval } from "@k8slens/utilities"; import { TabLayout } from "../layout/tab-layout"; import { Spinner } from "../spinner"; import { ClusterIssues } from "./cluster-issues"; diff --git a/packages/core/src/renderer/components/+cluster/cluster-pie-charts.tsx b/packages/core/src/renderer/components/+cluster/cluster-pie-charts.tsx index e0203dd878..6ae370f052 100644 --- a/packages/core/src/renderer/components/+cluster/cluster-pie-charts.tsx +++ b/packages/core/src/renderer/components/+cluster/cluster-pie-charts.tsx @@ -15,7 +15,7 @@ import type { NodeStore } from "../+nodes/store"; import type { PieChartData } from "../chart"; import { PieChart } from "../chart"; import { ClusterNoMetrics } from "./cluster-no-metrics"; -import { bytesToUnits, cssNames } from "../../utils"; +import { bytesToUnits, cssNames } from "@k8slens/utilities"; import type { LensTheme } from "../../themes/lens-theme"; import { getMetricLastPoints } from "../../../common/k8s-api/endpoints/metrics.api"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/components/+config-horizontal-pod-autoscalers/hpa-details.tsx b/packages/core/src/renderer/components/+config-horizontal-pod-autoscalers/hpa-details.tsx index 49130991a5..d57c8a3323 100644 --- a/packages/core/src/renderer/components/+config-horizontal-pod-autoscalers/hpa-details.tsx +++ b/packages/core/src/renderer/components/+config-horizontal-pod-autoscalers/hpa-details.tsx @@ -11,7 +11,7 @@ import { Link } from "react-router-dom"; import { DrawerItem, DrawerTitle } from "../drawer"; import { Badge } from "../badge"; import type { KubeObjectDetailsProps } from "../kube-object-details"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { HorizontalPodAutoscalerMetricSpec, HorizontalPodAutoscalerMetricTarget } from "../../../common/k8s-api/endpoints/horizontal-pod-autoscaler.api"; import { HorizontalPodAutoscaler, HpaMetricType } from "../../../common/k8s-api/endpoints/horizontal-pod-autoscaler.api"; import { Table, TableCell, TableHead, TableRow } from "../table"; diff --git a/packages/core/src/renderer/components/+config-horizontal-pod-autoscalers/hpa.tsx b/packages/core/src/renderer/components/+config-horizontal-pod-autoscalers/hpa.tsx index e7a456b3f1..68ee6671d7 100644 --- a/packages/core/src/renderer/components/+config-horizontal-pod-autoscalers/hpa.tsx +++ b/packages/core/src/renderer/components/+config-horizontal-pod-autoscalers/hpa.tsx @@ -10,7 +10,7 @@ import { observer } from "mobx-react"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import type { HorizontalPodAutoscaler } from "../../../common/k8s-api/endpoints/horizontal-pod-autoscaler.api"; import { Badge } from "../badge"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; diff --git a/packages/core/src/renderer/components/+config-priority-classes/priority-classes.tsx b/packages/core/src/renderer/components/+config-priority-classes/priority-classes.tsx index 4706fd0269..23a1dc6267 100644 --- a/packages/core/src/renderer/components/+config-priority-classes/priority-classes.tsx +++ b/packages/core/src/renderer/components/+config-priority-classes/priority-classes.tsx @@ -13,10 +13,10 @@ import type { KubeObjectDetailsProps } from "../kube-object-details"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; -import { autoBind } from "../../../common/utils"; import { withInjectables } from "@ogre-tools/injectable-react"; import priorityClassStoreInjectable from "./store.injectable"; import type { PriorityClassStore } from "./store"; +import autoBindReact from "auto-bind/react"; enum columnId { name = "name", @@ -36,7 +36,7 @@ interface Dependencies { class NonInjectedPriorityClasses extends React.Component { constructor(props: PriorityClassesProps & Dependencies) { super(props); - autoBind(this); + autoBindReact(this); } render() { diff --git a/packages/core/src/renderer/components/+config-resource-quotas/resource-quota-details.tsx b/packages/core/src/renderer/components/+config-resource-quotas/resource-quota-details.tsx index 55ae188cbf..c032de2a25 100644 --- a/packages/core/src/renderer/components/+config-resource-quotas/resource-quota-details.tsx +++ b/packages/core/src/renderer/components/+config-resource-quotas/resource-quota-details.tsx @@ -8,7 +8,7 @@ import React from "react"; import kebabCase from "lodash/kebabCase"; import { observer } from "mobx-react"; import { DrawerItem, DrawerTitle } from "../drawer"; -import { cpuUnitsToNumber, cssNames, unitsToBytes, metricUnitsToNumber, object, hasDefinedTupleValue } from "../../utils"; +import { cpuUnitsToNumber, cssNames, unitsToBytes, metricUnitsToNumber, object, hasDefinedTupleValue } from "@k8slens/utilities"; import type { KubeObjectDetailsProps } from "../kube-object-details"; import { ResourceQuota } from "../../../common/k8s-api/endpoints/resource-quota.api"; import { LineProgress } from "../line-progress"; diff --git a/packages/core/src/renderer/components/+config-runtime-classes/runtime-classes.tsx b/packages/core/src/renderer/components/+config-runtime-classes/runtime-classes.tsx index 990912f2d4..d66c9da92f 100644 --- a/packages/core/src/renderer/components/+config-runtime-classes/runtime-classes.tsx +++ b/packages/core/src/renderer/components/+config-runtime-classes/runtime-classes.tsx @@ -13,10 +13,10 @@ import type { KubeObjectDetailsProps } from "../kube-object-details"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; -import { autoBind } from "../../../common/utils"; import { withInjectables } from "@ogre-tools/injectable-react"; import runtimeClassStoreInjectable from "./store.injectable"; import type { RuntimeClassStore } from "./store"; +import autoBindReact from "auto-bind/react"; enum columnId { name = "name", @@ -35,7 +35,7 @@ interface Dependencies { class NonInjectedRuntimeClasses extends React.Component { constructor(props: RuntimeClassesProps & Dependencies) { super(props); - autoBind(this); + autoBindReact(this); } render() { diff --git a/packages/core/src/renderer/components/+config-secrets/add-dialog/view.tsx b/packages/core/src/renderer/components/+config-secrets/add-dialog/view.tsx index cf68db93be..e25fe172b6 100644 --- a/packages/core/src/renderer/components/+config-secrets/add-dialog/view.tsx +++ b/packages/core/src/renderer/components/+config-secrets/add-dialog/view.tsx @@ -20,9 +20,8 @@ import { SubTitle } from "../../layout/sub-title"; import { NamespaceSelect } from "../../+namespaces/namespace-select"; import { Select } from "../../select"; import { Icon } from "../../icon"; -import { base64, iter } from "../../../utils"; +import { base64, iter, object } from "@k8slens/utilities"; import upperFirst from "lodash/upperFirst"; -import { fromEntries } from "../../../../common/utils/objects"; import type { ShowDetails } from "../../kube-detail-params/show-details.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; import closeAddSecretDialogInjectable from "./close.injectable"; @@ -96,7 +95,7 @@ class NonInjectedAddSecretDialog extends React.Component { diff --git a/packages/core/src/renderer/components/+config-secrets/secret-details.tsx b/packages/core/src/renderer/components/+config-secrets/secret-details.tsx index 6b4873f187..57a7a51063 100644 --- a/packages/core/src/renderer/components/+config-secrets/secret-details.tsx +++ b/packages/core/src/renderer/components/+config-secrets/secret-details.tsx @@ -12,7 +12,7 @@ import { DrawerItem, DrawerTitle } from "../drawer"; import { Input } from "../input"; import { Button } from "../button"; import type { ShowNotification } from "../notifications"; -import { base64, toggle } from "../../utils"; +import { base64, toggle } from "@k8slens/utilities"; import { Icon } from "../icon"; import type { KubeObjectDetailsProps } from "../kube-object-details"; import { Secret } from "../../../common/k8s-api/endpoints"; diff --git a/packages/core/src/renderer/components/+config-vertical-pod-autoscalers/vpa-details.tsx b/packages/core/src/renderer/components/+config-vertical-pod-autoscalers/vpa-details.tsx index f008fe3350..532ecf39aa 100644 --- a/packages/core/src/renderer/components/+config-vertical-pod-autoscalers/vpa-details.tsx +++ b/packages/core/src/renderer/components/+config-vertical-pod-autoscalers/vpa-details.tsx @@ -12,7 +12,7 @@ import { Link } from "react-router-dom"; import { DrawerItem, DrawerTitle } from "../drawer"; import { Badge } from "../badge"; import type { KubeObjectDetailsProps } from "../kube-object-details"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { ContainerScalingMode, ControlledValues, ResourceName, UpdateMode, VerticalPodAutoscaler } from "../../../common/k8s-api/endpoints/vertical-pod-autoscaler.api"; import type { PodUpdatePolicy, PodResourcePolicy, VerticalPodAutoscalerStatus } from "../../../common/k8s-api/endpoints/vertical-pod-autoscaler.api"; import type { ApiManager } from "../../../common/k8s-api/api-manager"; @@ -165,7 +165,7 @@ class NonInjectedVpaDetails extends React.Component ); } - + render() { const { object: vpa, apiManager, getDetailsUrl, logger } = this.props; diff --git a/packages/core/src/renderer/components/+config-vertical-pod-autoscalers/vpa.tsx b/packages/core/src/renderer/components/+config-vertical-pod-autoscalers/vpa.tsx index b2bdb4d249..05e3b8cc47 100644 --- a/packages/core/src/renderer/components/+config-vertical-pod-autoscalers/vpa.tsx +++ b/packages/core/src/renderer/components/+config-vertical-pod-autoscalers/vpa.tsx @@ -9,7 +9,7 @@ import React from "react"; import { observer } from "mobx-react"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import { Badge } from "../badge"; -import { cssNames, prevDefault } from "../../utils"; +import { cssNames, prevDefault } from "@k8slens/utilities"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; import { KubeObjectAge } from "../kube-object/age"; diff --git a/packages/core/src/renderer/components/+custom-resources/crd-list.tsx b/packages/core/src/renderer/components/+custom-resources/crd-list.tsx index 669ca3e374..3008ca175e 100644 --- a/packages/core/src/renderer/components/+custom-resources/crd-list.tsx +++ b/packages/core/src/renderer/components/+custom-resources/crd-list.tsx @@ -9,7 +9,7 @@ import React from "react"; import { computed, makeObservable, observable } from "mobx"; import { observer } from "mobx-react"; import { Link } from "react-router-dom"; -import { iter, stopPropagation } from "../../utils"; +import { iter, stopPropagation } from "@k8slens/utilities"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import { Select } from "../select"; import { Icon } from "../icon"; diff --git a/packages/core/src/renderer/components/+custom-resources/crd-resource-details.tsx b/packages/core/src/renderer/components/+custom-resources/crd-resource-details.tsx index 149812f663..6b899563a9 100644 --- a/packages/core/src/renderer/components/+custom-resources/crd-resource-details.tsx +++ b/packages/core/src/renderer/components/+custom-resources/crd-resource-details.tsx @@ -7,14 +7,13 @@ import "./crd-resource-details.scss"; import React from "react"; import { observer } from "mobx-react"; -import { cssNames } from "../../utils"; +import { cssNames, safeJSONPathValue } from "@k8slens/utilities"; import { Badge } from "../badge"; import { DrawerItem } from "../drawer"; import type { KubeObjectDetailsProps } from "../kube-object-details"; import { Input } from "../input"; import type { AdditionalPrinterColumnsV1 } from "../../../common/k8s-api/endpoints/custom-resource-definition.api"; import { CustomResourceDefinition } from "../../../common/k8s-api/endpoints/custom-resource-definition.api"; -import { safeJSONPathValue } from "../../utils/jsonPath"; import type { KubeObjectMetadata, KubeObjectStatus } from "../../../common/k8s-api/kube-object"; import { KubeObject } from "../../../common/k8s-api/kube-object"; import type { Logger } from "../../../common/logger"; diff --git a/packages/core/src/renderer/components/+custom-resources/definition.store.ts b/packages/core/src/renderer/components/+custom-resources/definition.store.ts index bef5c2323e..310e51709a 100644 --- a/packages/core/src/renderer/components/+custom-resources/definition.store.ts +++ b/packages/core/src/renderer/components/+custom-resources/definition.store.ts @@ -6,11 +6,11 @@ import { computed, reaction, makeObservable } from "mobx"; import type { KubeObjectStoreDependencies, KubeObjectStoreOptions } from "../../../common/k8s-api/kube-object.store"; import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store"; -import { autoBind } from "../../utils"; import type { CustomResourceDefinition, CustomResourceDefinitionApi } from "../../../common/k8s-api/endpoints/custom-resource-definition.api"; import type { KubeObject } from "../../../common/k8s-api/kube-object"; import type TypedEventEmitter from "typed-emitter"; import type { LegacyAutoRegistration } from "../../../common/k8s-api/api-manager/auto-registration-emitter.injectable"; +import autoBind from "auto-bind"; export interface CustomResourceDefinitionStoreDependencies extends KubeObjectStoreDependencies { readonly autoRegistration: TypedEventEmitter; diff --git a/packages/core/src/renderer/components/+events/event-details.tsx b/packages/core/src/renderer/components/+events/event-details.tsx index afe2af1dc5..1e825993c4 100644 --- a/packages/core/src/renderer/components/+events/event-details.tsx +++ b/packages/core/src/renderer/components/+events/event-details.tsx @@ -20,7 +20,7 @@ import { withInjectables } from "@ogre-tools/injectable-react"; import type { GetDetailsUrl } from "../kube-detail-params/get-details-url.injectable"; import apiManagerInjectable from "../../../common/k8s-api/api-manager/manager.injectable"; import getDetailsUrlInjectable from "../kube-detail-params/get-details-url.injectable"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import loggerInjectable from "../../../common/logger.injectable"; export interface EventDetailsProps extends KubeObjectDetailsProps { diff --git a/packages/core/src/renderer/components/+events/events.tsx b/packages/core/src/renderer/components/+events/events.tsx index d68bb21a53..657e10436d 100644 --- a/packages/core/src/renderer/components/+events/events.tsx +++ b/packages/core/src/renderer/components/+events/events.tsx @@ -18,8 +18,8 @@ import type { TableSortCallbacks, TableSortParams } from "../table"; import type { HeaderCustomizer } from "../item-object-list"; import { Tooltip } from "../tooltip"; import { Link } from "react-router-dom"; -import type { IClassName } from "../../utils"; -import { cssNames, stopPropagation } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { cssNames, stopPropagation } from "@k8slens/utilities"; import { Icon } from "../icon"; import type { ApiManager } from "../../../common/k8s-api/api-manager"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/components/+events/kube-event-details.tsx b/packages/core/src/renderer/components/+events/kube-event-details.tsx index 80c6938630..76010a8e14 100644 --- a/packages/core/src/renderer/components/+events/kube-event-details.tsx +++ b/packages/core/src/renderer/components/+events/kube-event-details.tsx @@ -9,7 +9,7 @@ import React from "react"; import { disposeOnUnmount, observer } from "mobx-react"; import { KubeObject } from "../../../common/k8s-api/kube-object"; import { DrawerItem, DrawerTitle } from "../drawer"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { LocaleDate } from "../locale-date"; import type { EventStore } from "./store"; import type { Logger } from "../../../common/logger"; diff --git a/packages/core/src/renderer/components/+events/kube-event-icon.tsx b/packages/core/src/renderer/components/+events/kube-event-icon.tsx index 659a65ae39..7a68d951b4 100644 --- a/packages/core/src/renderer/components/+events/kube-event-icon.tsx +++ b/packages/core/src/renderer/components/+events/kube-event-icon.tsx @@ -8,7 +8,7 @@ import "./kube-event-icon.scss"; import React from "react"; import { Icon } from "../icon"; import type { KubeObject } from "../../../common/k8s-api/kube-object"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { KubeEvent } from "../../../common/k8s-api/endpoints/events.api"; import { KubeObjectAge } from "../kube-object/age"; import type { EventStore } from "./store"; diff --git a/packages/core/src/renderer/components/+events/store.ts b/packages/core/src/renderer/components/+events/store.ts index 3bb9e0b062..7e14110049 100644 --- a/packages/core/src/renderer/components/+events/store.ts +++ b/packages/core/src/renderer/components/+events/store.ts @@ -7,11 +7,11 @@ import groupBy from "lodash/groupBy"; import compact from "lodash/compact"; import type { KubeObjectStoreDependencies, KubeObjectStoreOptions } from "../../../common/k8s-api/kube-object.store"; import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store"; -import { autoBind } from "../../utils"; import type { KubeEvent, KubeEventApi } from "../../../common/k8s-api/endpoints/events.api"; import type { KubeObject } from "../../../common/k8s-api/kube-object"; import { Pod } from "../../../common/k8s-api/endpoints/pod.api"; import type { GetPodById } from "../+workloads-pods/get-pod-by-id.injectable"; +import autoBind from "auto-bind"; export interface EventStoreDependencies extends KubeObjectStoreDependencies { getPodById: GetPodById; diff --git a/packages/core/src/renderer/components/+extensions/attempt-install-by-info.injectable.tsx b/packages/core/src/renderer/components/+extensions/attempt-install-by-info.injectable.tsx index 1f3d65c802..523a91596e 100644 --- a/packages/core/src/renderer/components/+extensions/attempt-install-by-info.injectable.tsx +++ b/packages/core/src/renderer/components/+extensions/attempt-install-by-info.injectable.tsx @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { isObject } from "../../../common/utils"; +import { isObject } from "@k8slens/utilities"; import React from "react"; import { SemVer } from "semver"; import URLParse from "url-parse"; diff --git a/packages/core/src/renderer/components/+extensions/attempt-install/attempt-install.injectable.tsx b/packages/core/src/renderer/components/+extensions/attempt-install/attempt-install.injectable.tsx index 47b18a3772..589c4b704e 100644 --- a/packages/core/src/renderer/components/+extensions/attempt-install/attempt-install.injectable.tsx +++ b/packages/core/src/renderer/components/+extensions/attempt-install/attempt-install.injectable.tsx @@ -12,8 +12,8 @@ import getExtensionDestFolderInjectable from "./get-extension-dest-folder.inject import type { CreateTempFilesAndValidate } from "./create-temp-files-and-validate.injectable"; import createTempFilesAndValidateInjectable from "./create-temp-files-and-validate.injectable"; import extensionInstallationStateStoreInjectable from "../../../../extensions/extension-installation-state-store/extension-installation-state-store.injectable"; -import type { Disposer } from "../../../../common/utils"; -import { disposer } from "../../../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; +import { disposer } from "@k8slens/utilities"; import type { ShowNotification } from "../../notifications"; import { Button } from "../../button"; import type { ExtensionLoader } from "../../../../extensions/extension-loader"; diff --git a/packages/core/src/renderer/components/+extensions/attempt-install/unpack-extension.injectable.tsx b/packages/core/src/renderer/components/+extensions/attempt-install/unpack-extension.injectable.tsx index c81a69f9b0..5317fbfc48 100644 --- a/packages/core/src/renderer/components/+extensions/attempt-install/unpack-extension.injectable.tsx +++ b/packages/core/src/renderer/components/+extensions/attempt-install/unpack-extension.injectable.tsx @@ -6,8 +6,8 @@ import { getInjectable } from "@ogre-tools/injectable"; import extensionLoaderInjectable from "../../../../extensions/extension-loader/extension-loader.injectable"; import getExtensionDestFolderInjectable from "./get-extension-dest-folder.injectable"; import extensionInstallationStateStoreInjectable from "../../../../extensions/extension-installation-state-store/extension-installation-state-store.injectable"; -import type { Disposer } from "../../../../common/utils"; -import { noop } from "../../../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; +import { noop } from "@k8slens/utilities"; import { extensionDisplayName } from "../../../../extensions/lens-extension"; import { getMessageFromError } from "../get-message-from-error/get-message-from-error"; import path from "path"; diff --git a/packages/core/src/renderer/components/+extensions/attempt-install/validate-package.tsx b/packages/core/src/renderer/components/+extensions/attempt-install/validate-package.tsx index e9597b2d10..ee30bda6b4 100644 --- a/packages/core/src/renderer/components/+extensions/attempt-install/validate-package.tsx +++ b/packages/core/src/renderer/components/+extensions/attempt-install/validate-package.tsx @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import type { LensExtensionManifest } from "../../../../extensions/lens-extension"; -import { hasTypedProperty, isObject, isString, listTarEntries, readFileFromTar } from "../../../../common/utils"; +import { hasTypedProperty, isObject, isString, listTarEntries, readFileFromTar } from "@k8slens/utilities"; import { manifestFilename } from "../../../../extensions/extension-discovery/extension-discovery"; import path from "path"; diff --git a/packages/core/src/renderer/components/+extensions/get-message-from-error/get-message-from-error.ts b/packages/core/src/renderer/components/+extensions/get-message-from-error/get-message-from-error.ts index ecbb4f9145..ecebfb6e80 100644 --- a/packages/core/src/renderer/components/+extensions/get-message-from-error/get-message-from-error.ts +++ b/packages/core/src/renderer/components/+extensions/get-message-from-error/get-message-from-error.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { hasTypedProperty, isDefined } from "../../../utils"; +import { hasTypedProperty, isDefined } from "@k8slens/utilities"; export function getMessageFromError(error: unknown): string { if (!error || typeof error !== "object") { diff --git a/packages/core/src/renderer/components/+extensions/install-extension-from-input.injectable.tsx b/packages/core/src/renderer/components/+extensions/install-extension-from-input.injectable.tsx index 3f9e5b0949..e879599299 100644 --- a/packages/core/src/renderer/components/+extensions/install-extension-from-input.injectable.tsx +++ b/packages/core/src/renderer/components/+extensions/install-extension-from-input.injectable.tsx @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import React from "react"; -import type { ExtendableDisposer } from "../../../common/utils"; +import type { ExtendableDisposer } from "@k8slens/utilities"; import { InputValidators } from "../input"; import { getMessageFromError } from "./get-message-from-error/get-message-from-error"; import { getInjectable } from "@ogre-tools/injectable"; diff --git a/packages/core/src/renderer/components/+extensions/install.tsx b/packages/core/src/renderer/components/+extensions/install.tsx index 7572063796..63c09f8b18 100644 --- a/packages/core/src/renderer/components/+extensions/install.tsx +++ b/packages/core/src/renderer/components/+extensions/install.tsx @@ -5,7 +5,7 @@ import styles from "./install.module.scss"; import React from "react"; -import { prevDefault } from "../../utils"; +import { prevDefault } from "@k8slens/utilities"; import { Button } from "../button"; import { Icon } from "../icon"; import { observer } from "mobx-react"; diff --git a/packages/core/src/renderer/components/+extensions/installed-extensions.tsx b/packages/core/src/renderer/components/+extensions/installed-extensions.tsx index 60579ca3ec..8447f0656f 100644 --- a/packages/core/src/renderer/components/+extensions/installed-extensions.tsx +++ b/packages/core/src/renderer/components/+extensions/installed-extensions.tsx @@ -13,7 +13,7 @@ import { Icon } from "../icon"; import { List } from "../list/list"; import { MenuActions, MenuItem } from "../menu"; import { Spinner } from "../spinner"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { observer } from "mobx-react"; import type { Row } from "react-table"; import type { LensExtensionId } from "../../../extensions/lens-extension"; diff --git a/packages/core/src/renderer/components/+extensions/notice.tsx b/packages/core/src/renderer/components/+extensions/notice.tsx index 6626a2233a..af4de297c2 100644 --- a/packages/core/src/renderer/components/+extensions/notice.tsx +++ b/packages/core/src/renderer/components/+extensions/notice.tsx @@ -6,7 +6,7 @@ import styles from "./notice.module.scss"; import type { DOMAttributes } from "react"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export interface NoticeProps extends DOMAttributes { className?: string; diff --git a/packages/core/src/renderer/components/+helm-charts/helm-chart-details.tsx b/packages/core/src/renderer/components/+helm-charts/helm-chart-details.tsx index cf2b781e66..2004a8704c 100644 --- a/packages/core/src/renderer/components/+helm-charts/helm-chart-details.tsx +++ b/packages/core/src/renderer/components/+helm-charts/helm-chart-details.tsx @@ -9,7 +9,7 @@ import React, { Component } from "react"; import type { HelmChart } from "../../../common/k8s-api/endpoints/helm-charts.api"; import { observer } from "mobx-react"; import { Drawer, DrawerItem } from "../drawer"; -import { autoBind, stopPropagation } from "../../utils"; +import { stopPropagation } from "@k8slens/utilities"; import { MarkdownViewer } from "../markdown-viewer"; import { Spinner } from "../spinner"; import { Button } from "../button"; @@ -25,6 +25,7 @@ import versionsOfSelectedHelmChartInjectable from "./details/versions-of-selecte import type { HelmChartDetailsVersionSelection } from "./details/versions/helm-chart-details-version-selection.injectable"; import helmChartDetailsVersionSelectionInjectable from "./details/versions/helm-chart-details-version-selection.injectable"; import assert from "assert"; +import autoBindReact from "auto-bind/react"; export interface HelmChartDetailsProps { hideDetails(): void; @@ -48,7 +49,7 @@ interface Dependencies { class NonInjectedHelmChartDetails extends Component { constructor(props: HelmChartDetailsProps & Dependencies) { super(props); - autoBind(this); + autoBindReact(this); } get chart() { diff --git a/packages/core/src/renderer/components/+helm-charts/helm-charts/request-versions-of-chart-for-release.injectable.ts b/packages/core/src/renderer/components/+helm-charts/helm-charts/request-versions-of-chart-for-release.injectable.ts index b49d94fb10..ab646d3b03 100644 --- a/packages/core/src/renderer/components/+helm-charts/helm-charts/request-versions-of-chart-for-release.injectable.ts +++ b/packages/core/src/renderer/components/+helm-charts/helm-charts/request-versions-of-chart-for-release.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { HelmChart } from "../../../../common/k8s-api/endpoints/helm-charts.api"; import requestHelmChartVersionsInjectable from "../../../../common/k8s-api/endpoints/helm-charts.api/request-versions.injectable"; import type { HelmRelease } from "../../../../common/k8s-api/endpoints/helm-releases.api"; -import { sortBySemverVersion } from "../../../utils"; +import { sortBySemverVersion } from "@k8slens/utilities"; import type { HelmChartVersion } from "./versions"; /** diff --git a/packages/core/src/renderer/components/+helm-releases/release-details/release-details-content.tsx b/packages/core/src/renderer/components/+helm-releases/release-details/release-details-content.tsx index ebfb51c6ef..5f7a3bda70 100644 --- a/packages/core/src/renderer/components/+helm-releases/release-details/release-details-content.tsx +++ b/packages/core/src/renderer/components/+helm-releases/release-details/release-details-content.tsx @@ -9,7 +9,7 @@ import React from "react"; import { Link } from "react-router-dom"; import { DrawerItem, DrawerTitle } from "../../drawer"; -import { stopPropagation } from "../../../utils"; +import { stopPropagation } from "@k8slens/utilities"; import { observer } from "mobx-react"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { ConfigurationInput, MinimalResourceGroup, OnlyUserSuppliedValuesAreShownToggle, ReleaseDetailsModel } from "./release-details-model/release-details-model.injectable"; diff --git a/packages/core/src/renderer/components/+helm-releases/release-details/release-details-drawer.tsx b/packages/core/src/renderer/components/+helm-releases/release-details/release-details-drawer.tsx index 67676ce337..dc740c4c41 100644 --- a/packages/core/src/renderer/components/+helm-releases/release-details/release-details-drawer.tsx +++ b/packages/core/src/renderer/components/+helm-releases/release-details/release-details-drawer.tsx @@ -8,7 +8,7 @@ import "./release-details.scss"; import React from "react"; import { Drawer } from "../../drawer"; -import { cssNames } from "../../../utils"; +import { cssNames } from "@k8slens/utilities"; import { observer } from "mobx-react"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { TargetHelmRelease } from "./target-helm-release.injectable"; diff --git a/packages/core/src/renderer/components/+helm-releases/release-menu.tsx b/packages/core/src/renderer/components/+helm-releases/release-menu.tsx index 694dd69b3c..be40e59b11 100644 --- a/packages/core/src/renderer/components/+helm-releases/release-menu.tsx +++ b/packages/core/src/renderer/components/+helm-releases/release-menu.tsx @@ -5,7 +5,7 @@ import React from "react"; import type { HelmRelease } from "../../../common/k8s-api/endpoints/helm-releases.api"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { MenuActionsProps } from "../menu/menu-actions"; import { MenuActions } from "../menu/menu-actions"; import { MenuItem } from "../menu"; diff --git a/packages/core/src/renderer/components/+helm-releases/to-helm-release.injectable.ts b/packages/core/src/renderer/components/+helm-releases/to-helm-release.injectable.ts index d8b27625e6..d069eb5929 100644 --- a/packages/core/src/renderer/components/+helm-releases/to-helm-release.injectable.ts +++ b/packages/core/src/renderer/components/+helm-releases/to-helm-release.injectable.ts @@ -8,7 +8,7 @@ import { when } from "mobx"; import helmChartVersionsInjectable from "../+helm-charts/helm-charts/versions.injectable"; import type { HelmRelease, HelmReleaseDto } from "../../../common/k8s-api/endpoints/helm-releases.api"; import { getMillisecondsFromUnixEpoch } from "../../../common/utils/date/get-current-date-time"; -import { formatDuration } from "../../utils"; +import { formatDuration } from "@k8slens/utilities"; export type ToHelmRelease = (release: HelmReleaseDto) => HelmRelease; diff --git a/packages/core/src/renderer/components/+namespaces/add-dialog/dialog.tsx b/packages/core/src/renderer/components/+namespaces/add-dialog/dialog.tsx index 6f85253ce9..3dabbdf572 100644 --- a/packages/core/src/renderer/components/+namespaces/add-dialog/dialog.tsx +++ b/packages/core/src/renderer/components/+namespaces/add-dialog/dialog.tsx @@ -20,9 +20,9 @@ import namespaceStoreInjectable from "../store.injectable"; import addNamespaceDialogStateInjectable from "./state.injectable"; import type { NamespaceStore } from "../store"; -import { autoBind } from "../../../utils"; import type { ShowCheckedErrorNotification } from "../../notifications/show-checked-error.injectable"; import showCheckedErrorNotificationInjectable from "../../notifications/show-checked-error.injectable"; +import autoBindReact from "auto-bind/react"; export interface AddNamespaceDialogProps extends DialogProps { onSuccess?(ns: Namespace): void; @@ -42,7 +42,7 @@ class NonInjectedAddNamespaceDialog extends React.Component { id: string; diff --git a/packages/core/src/renderer/components/+network-endpoints/endpoint-subset-list.tsx b/packages/core/src/renderer/components/+network-endpoints/endpoint-subset-list.tsx index 700f1fdbf8..11b353536c 100644 --- a/packages/core/src/renderer/components/+network-endpoints/endpoint-subset-list.tsx +++ b/packages/core/src/renderer/components/+network-endpoints/endpoint-subset-list.tsx @@ -11,11 +11,11 @@ import type { EndpointSubset, Endpoints, EndpointAddress } from "../../../common import { Table, TableCell, TableHead, TableRow } from "../table"; import type { ApiManager } from "../../../common/k8s-api/api-manager"; import { Link } from "react-router-dom"; -import { autoBind } from "../../../common/utils"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { GetDetailsUrl } from "../kube-detail-params/get-details-url.injectable"; import apiManagerInjectable from "../../../common/k8s-api/api-manager/manager.injectable"; import getDetailsUrlInjectable from "../kube-detail-params/get-details-url.injectable"; +import autoBindReact from "auto-bind/react"; export interface EndpointSubsetListProps { subset: Required; @@ -31,7 +31,7 @@ interface Dependencies { class NonInjectedEndpointSubsetList extends React.Component { constructor(props: EndpointSubsetListProps & Dependencies) { super(props); - autoBind(this); + autoBindReact(this); } getAddressTableRow(ip: string) { diff --git a/packages/core/src/renderer/components/+network-ingresses/ingress-classes.tsx b/packages/core/src/renderer/components/+network-ingresses/ingress-classes.tsx index 7b7fe8c0de..a4745e9a8f 100644 --- a/packages/core/src/renderer/components/+network-ingresses/ingress-classes.tsx +++ b/packages/core/src/renderer/components/+network-ingresses/ingress-classes.tsx @@ -13,7 +13,7 @@ import { withInjectables } from "@ogre-tools/injectable-react"; import type { IngressClassStore } from "./ingress-class-store"; import ingressClassStoreInjectable from "./ingress-class-store.injectable"; import type { IngressClass } from "../../../common/k8s-api/endpoints/ingress-class.api"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Icon } from "../icon"; enum columnId { diff --git a/packages/core/src/renderer/components/+network-port-forwards/port-forward-details.tsx b/packages/core/src/renderer/components/+network-port-forwards/port-forward-details.tsx index ba59ad7c10..b36ce40ea1 100644 --- a/packages/core/src/renderer/components/+network-port-forwards/port-forward-details.tsx +++ b/packages/core/src/renderer/components/+network-port-forwards/port-forward-details.tsx @@ -10,7 +10,7 @@ import { Link } from "react-router-dom"; import type { PortForwardItem } from "../../port-forward"; import { portForwardAddress } from "../../port-forward"; import { Drawer, DrawerItem } from "../drawer"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { PodApi, ServiceApi } from "../../../common/k8s-api/endpoints"; import { PortForwardMenu } from "./port-forward-menu"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/components/+network-port-forwards/port-forward-menu.tsx b/packages/core/src/renderer/components/+network-port-forwards/port-forward-menu.tsx index 5fe46e1994..81e15b1746 100644 --- a/packages/core/src/renderer/components/+network-port-forwards/port-forward-menu.tsx +++ b/packages/core/src/renderer/components/+network-port-forwards/port-forward-menu.tsx @@ -4,7 +4,7 @@ */ import React from "react"; -import { autoBind, cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { PortForwardItem, PortForwardStore } from "../../port-forward"; import type { MenuActionsProps } from "../menu/menu-actions"; import { MenuActions } from "../menu/menu-actions"; @@ -17,6 +17,7 @@ import portForwardStoreInjectable from "../../port-forward/port-forward-store/po import type { OpenPortForward } from "../../port-forward/open-port-forward.injectable"; import openPortForwardInjectable from "../../port-forward/open-port-forward.injectable"; import showErrorNotificationInjectable from "../notifications/show-error-notification.injectable"; +import autoBindReact from "auto-bind/react"; export interface PortForwardMenuProps extends MenuActionsProps { portForward: PortForwardItem; @@ -33,7 +34,7 @@ interface Dependencies { class NonInjectedPortForwardMenu extends React.Component { constructor(props: Props) { super(props); - autoBind(this); + autoBindReact(this); } remove() { diff --git a/packages/core/src/renderer/components/+network-services/service-details-endpoint.tsx b/packages/core/src/renderer/components/+network-services/service-details-endpoint.tsx index 7e3eaaf34b..324f035fa7 100644 --- a/packages/core/src/renderer/components/+network-services/service-details-endpoint.tsx +++ b/packages/core/src/renderer/components/+network-services/service-details-endpoint.tsx @@ -6,7 +6,7 @@ import { observer } from "mobx-react"; import React from "react"; import { Table, TableHead, TableCell, TableRow } from "../table"; -import { prevDefault } from "../../utils"; +import { prevDefault } from "@k8slens/utilities"; import type { Logger } from "../../../common/logger"; import { Endpoints } from "../../../common/k8s-api/endpoints"; import type { ShowDetails } from "../kube-detail-params/show-details.injectable"; diff --git a/packages/core/src/renderer/components/+network-services/service-port-component.tsx b/packages/core/src/renderer/components/+network-services/service-port-component.tsx index b81ef1350d..7b2c5bdfba 100644 --- a/packages/core/src/renderer/components/+network-services/service-port-component.tsx +++ b/packages/core/src/renderer/components/+network-services/service-port-component.tsx @@ -9,7 +9,7 @@ import React from "react"; import { disposeOnUnmount, observer } from "mobx-react"; import type { Service, ServicePort } from "../../../common/k8s-api/endpoints"; import { action, makeObservable, observable, reaction } from "mobx"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { ShowNotification } from "../notifications"; import { Button } from "../button"; import type { ForwardedPort, PortForwardStore } from "../../port-forward"; diff --git a/packages/core/src/renderer/components/+nodes/route.tsx b/packages/core/src/renderer/components/+nodes/route.tsx index a868dda39b..e00895ca71 100644 --- a/packages/core/src/renderer/components/+nodes/route.tsx +++ b/packages/core/src/renderer/components/+nodes/route.tsx @@ -6,7 +6,7 @@ import "./nodes.scss"; import React from "react"; import { observer } from "mobx-react"; -import { cssNames, interval } from "../../utils"; +import { cssNames, interval } from "@k8slens/utilities"; import { TabLayout } from "../layout/tab-layout-2"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import type { Node } from "../../../common/k8s-api/endpoints/node.api"; diff --git a/packages/core/src/renderer/components/+nodes/store.ts b/packages/core/src/renderer/components/+nodes/store.ts index 87fafa9256..5c8e8f4f58 100644 --- a/packages/core/src/renderer/components/+nodes/store.ts +++ b/packages/core/src/renderer/components/+nodes/store.ts @@ -8,7 +8,7 @@ import { computed, makeObservable } from "mobx"; import type { Node, NodeApi } from "../../../common/k8s-api/endpoints"; import type { KubeObjectStoreDependencies, KubeObjectStoreOptions } from "../../../common/k8s-api/kube-object.store"; import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store"; -import { autoBind } from "../../utils"; +import { autoBind } from "@k8slens/utilities"; export class NodeStore extends KubeObjectStore { constructor(dependencies: KubeObjectStoreDependencies, api: NodeApi, opts?: KubeObjectStoreOptions) { diff --git a/packages/core/src/renderer/components/+storage-volume-claims/volume-claim-details.tsx b/packages/core/src/renderer/components/+storage-volume-claims/volume-claim-details.tsx index 954bad9bc5..6447faa4f4 100644 --- a/packages/core/src/renderer/components/+storage-volume-claims/volume-claim-details.tsx +++ b/packages/core/src/renderer/components/+storage-volume-claims/volume-claim-details.tsx @@ -19,7 +19,7 @@ import type { GetDetailsUrl } from "../kube-detail-params/get-details-url.inject import type { PodStore } from "../+workloads-pods/store"; import getDetailsUrlInjectable from "../kube-detail-params/get-details-url.injectable"; import podStoreInjectable from "../+workloads-pods/store.injectable"; -import { stopPropagation } from "../../../renderer/utils"; +import { stopPropagation } from "@k8slens/utilities"; import storageClassApiInjectable from "../../../common/k8s-api/endpoints/storage-class.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; diff --git a/packages/core/src/renderer/components/+storage-volume-claims/volume-claims.tsx b/packages/core/src/renderer/components/+storage-volume-claims/volume-claims.tsx index 39ec81f8de..4cc84bbde1 100644 --- a/packages/core/src/renderer/components/+storage-volume-claims/volume-claims.tsx +++ b/packages/core/src/renderer/components/+storage-volume-claims/volume-claims.tsx @@ -10,7 +10,7 @@ import { observer } from "mobx-react"; import { Link } from "react-router-dom"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import { unitsToBytes } from "../../../common/utils/convertMemory"; -import { stopPropagation } from "../../utils"; +import { stopPropagation } from "@k8slens/utilities"; import type { StorageClassApi } from "../../../common/k8s-api/endpoints"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; diff --git a/packages/core/src/renderer/components/+storage-volumes/volume-details-list.tsx b/packages/core/src/renderer/components/+storage-volumes/volume-details-list.tsx index ebc471a933..2d2acfb615 100644 --- a/packages/core/src/renderer/components/+storage-volumes/volume-details-list.tsx +++ b/packages/core/src/renderer/components/+storage-volumes/volume-details-list.tsx @@ -9,7 +9,7 @@ import React from "react"; import { observer } from "mobx-react"; import type { PersistentVolume } from "../../../common/k8s-api/endpoints/persistent-volume.api"; import { TableRow } from "../table/table-row"; -import { cssNames, prevDefault } from "../../utils"; +import { cssNames, prevDefault } from "@k8slens/utilities"; import { TableCell } from "../table/table-cell"; import { Spinner } from "../spinner/spinner"; import { DrawerTitle } from "../drawer/drawer-title"; diff --git a/packages/core/src/renderer/components/+storage-volumes/volume-details.tsx b/packages/core/src/renderer/components/+storage-volumes/volume-details.tsx index 93b3a40195..ab7e1e48b2 100644 --- a/packages/core/src/renderer/components/+storage-volumes/volume-details.tsx +++ b/packages/core/src/renderer/components/+storage-volumes/volume-details.tsx @@ -15,7 +15,7 @@ import type { PersistentVolumeClaimApi, StorageClassApi } from "../../../common/ import { PersistentVolume } from "../../../common/k8s-api/endpoints"; import type { KubeObjectDetailsProps } from "../kube-object-details"; import type { Logger } from "../../../common/logger"; -import { stopPropagation } from "../../../renderer/utils"; +import { stopPropagation } from "@k8slens/utilities"; import { withInjectables } from "@ogre-tools/injectable-react"; import loggerInjectable from "../../../common/logger.injectable"; import type { GetDetailsUrl } from "../kube-detail-params/get-details-url.injectable"; diff --git a/packages/core/src/renderer/components/+storage-volumes/volumes.tsx b/packages/core/src/renderer/components/+storage-volumes/volumes.tsx index ac3bf08e5a..c1cdd3d09a 100644 --- a/packages/core/src/renderer/components/+storage-volumes/volumes.tsx +++ b/packages/core/src/renderer/components/+storage-volumes/volumes.tsx @@ -9,7 +9,7 @@ import React from "react"; import { observer } from "mobx-react"; import { Link } from "react-router-dom"; import { KubeObjectListLayout } from "../kube-object-list-layout"; -import { stopPropagation } from "../../utils"; +import { stopPropagation } from "@k8slens/utilities"; import type { PersistentVolumeClaimApi, StorageClassApi } from "../../../common/k8s-api/endpoints"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; import { SiblingsInTabLayout } from "../layout/siblings-in-tab-layout"; diff --git a/packages/core/src/renderer/components/+user-management/+cluster-role-bindings/details.tsx b/packages/core/src/renderer/components/+user-management/+cluster-role-bindings/details.tsx index 87de375bed..8c0b39f590 100644 --- a/packages/core/src/renderer/components/+user-management/+cluster-role-bindings/details.tsx +++ b/packages/core/src/renderer/components/+user-management/+cluster-role-bindings/details.tsx @@ -10,7 +10,7 @@ import { disposeOnUnmount, observer } from "mobx-react"; import React from "react"; import type { ClusterRoleBinding } from "../../../../common/k8s-api/endpoints"; -import { autoBind, ObservableHashSet, prevDefault } from "../../../utils"; +import { ObservableHashSet, prevDefault } from "@k8slens/utilities"; import { AddRemoveButtons } from "../../add-remove-buttons"; import { DrawerTitle } from "../../drawer"; import type { KubeObjectDetailsProps } from "../../kube-object-details"; @@ -23,6 +23,7 @@ import type { ClusterRoleBindingStore } from "./store"; import type { OpenClusterRoleBindingDialog } from "./dialog/open.injectable"; import openClusterRoleBindingDialogInjectable from "./dialog/open.injectable"; import clusterRoleBindingStoreInjectable from "./store.injectable"; +import autoBindReact from "auto-bind/react"; export interface ClusterRoleBindingDetailsProps extends KubeObjectDetailsProps { } @@ -39,7 +40,7 @@ class NonInjectedClusterRoleBindingDetails extends React.Component { diff --git a/packages/core/src/renderer/components/+user-management/+role-bindings/details.tsx b/packages/core/src/renderer/components/+user-management/+role-bindings/details.tsx index c83caddeec..d95e95131c 100644 --- a/packages/core/src/renderer/components/+user-management/+role-bindings/details.tsx +++ b/packages/core/src/renderer/components/+user-management/+role-bindings/details.tsx @@ -9,7 +9,7 @@ import { reaction } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; import React from "react"; import type { RoleBinding } from "../../../../common/k8s-api/endpoints"; -import { prevDefault } from "../../../utils"; +import { prevDefault } from "@k8slens/utilities"; import { AddRemoveButtons } from "../../add-remove-buttons"; import { DrawerTitle } from "../../drawer"; import type { KubeObjectDetailsProps } from "../../kube-object-details"; diff --git a/packages/core/src/renderer/components/+user-management/+role-bindings/dialog/view.tsx b/packages/core/src/renderer/components/+user-management/+role-bindings/dialog/view.tsx index 77f1724708..003e7e6382 100644 --- a/packages/core/src/renderer/components/+user-management/+role-bindings/dialog/view.tsx +++ b/packages/core/src/renderer/components/+user-management/+role-bindings/dialog/view.tsx @@ -20,7 +20,7 @@ import type { SelectOption } from "../../../select"; import { onMultiSelectFor, Select } from "../../../select"; import { Wizard, WizardStep } from "../../../wizard"; import { Input } from "../../../input"; -import { ObservableHashSet, nFircate } from "../../../../utils"; +import { ObservableHashSet, nFircate } from "@k8slens/utilities"; import type { Subject } from "../../../../../common/k8s-api/endpoints/types/subject"; import type { RoleBindingDialogState } from "./state.injectable"; import type { RoleBindingStore } from "../store"; diff --git a/packages/core/src/renderer/components/+user-management/+role-bindings/store.ts b/packages/core/src/renderer/components/+user-management/+role-bindings/store.ts index 937497113c..f3a4c1e54a 100644 --- a/packages/core/src/renderer/components/+user-management/+role-bindings/store.ts +++ b/packages/core/src/renderer/components/+user-management/+role-bindings/store.ts @@ -6,7 +6,7 @@ import type { RoleBinding, RoleBindingApi, RoleBindingData } from "../../../../common/k8s-api/endpoints"; import type { Subject } from "../../../../common/k8s-api/endpoints/types/subject"; import { KubeObjectStore } from "../../../../common/k8s-api/kube-object.store"; -import { HashSet } from "../../../utils"; +import { HashSet } from "@k8slens/utilities"; import { hashSubject } from "../hashers"; export class RoleBindingStore extends KubeObjectStore { diff --git a/packages/core/src/renderer/components/+user-management/+service-accounts/secret.tsx b/packages/core/src/renderer/components/+user-management/+service-accounts/secret.tsx index 49acaa9ca8..6e645abbf9 100644 --- a/packages/core/src/renderer/components/+user-management/+service-accounts/secret.tsx +++ b/packages/core/src/renderer/components/+user-management/+service-accounts/secret.tsx @@ -9,7 +9,7 @@ import moment from "moment"; import React from "react"; import type { Secret } from "../../../../common/k8s-api/endpoints/secret.api"; -import { prevDefault } from "../../../utils"; +import { prevDefault } from "@k8slens/utilities"; import { Icon } from "../../icon"; export interface ServiceAccountsSecretProps { diff --git a/packages/core/src/renderer/components/+workloads-cronjobs/trigger-dialog/view.tsx b/packages/core/src/renderer/components/+workloads-cronjobs/trigger-dialog/view.tsx index 48ff80dc28..f95d41fc27 100644 --- a/packages/core/src/renderer/components/+workloads-cronjobs/trigger-dialog/view.tsx +++ b/packages/core/src/renderer/components/+workloads-cronjobs/trigger-dialog/view.tsx @@ -14,7 +14,7 @@ import { Dialog } from "../../dialog"; import { Wizard, WizardStep } from "../../wizard"; import type { CronJob, JobApi } from "../../../../common/k8s-api/endpoints"; import type { ShowNotification } from "../../notifications"; -import { cssNames } from "../../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Input } from "../../input"; import { systemName, maxLength } from "../../input/input_validators"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/components/+workloads-deployments/deployment-replicasets.tsx b/packages/core/src/renderer/components/+workloads-deployments/deployment-replicasets.tsx index 655b810780..dae3de03bc 100644 --- a/packages/core/src/renderer/components/+workloads-deployments/deployment-replicasets.tsx +++ b/packages/core/src/renderer/components/+workloads-deployments/deployment-replicasets.tsx @@ -10,7 +10,7 @@ import { observer } from "mobx-react"; import type { ReplicaSet } from "../../../common/k8s-api/endpoints"; import { KubeObjectMenu } from "../kube-object-menu"; import { Spinner } from "../spinner"; -import { prevDefault, stopPropagation } from "../../utils"; +import { prevDefault, stopPropagation } from "@k8slens/utilities"; import { DrawerTitle } from "../drawer"; import { Table, TableCell, TableHead, TableRow } from "../table"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; diff --git a/packages/core/src/renderer/components/+workloads-deployments/deployments.tsx b/packages/core/src/renderer/components/+workloads-deployments/deployments.tsx index 6fa9fff211..83b6ed1f82 100644 --- a/packages/core/src/renderer/components/+workloads-deployments/deployments.tsx +++ b/packages/core/src/renderer/components/+workloads-deployments/deployments.tsx @@ -9,7 +9,7 @@ import React from "react"; import { observer } from "mobx-react"; import type { Deployment } from "../../../common/k8s-api/endpoints"; import { KubeObjectListLayout } from "../kube-object-list-layout"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import kebabCase from "lodash/kebabCase"; import orderBy from "lodash/orderBy"; import { KubeObjectStatusIcon } from "../kube-object-status-icon"; diff --git a/packages/core/src/renderer/components/+workloads-deployments/scale/dialog.tsx b/packages/core/src/renderer/components/+workloads-deployments/scale/dialog.tsx index d6c8b0fcaa..c4e7857a9b 100644 --- a/packages/core/src/renderer/components/+workloads-deployments/scale/dialog.tsx +++ b/packages/core/src/renderer/components/+workloads-deployments/scale/dialog.tsx @@ -15,7 +15,7 @@ import { Wizard, WizardStep } from "../../wizard"; import type { Deployment, DeploymentApi } from "../../../../common/k8s-api/endpoints"; import { Icon } from "../../icon"; import { Slider } from "../../slider"; -import { cssNames } from "../../../utils"; +import { cssNames } from "@k8slens/utilities"; import { withInjectables } from "@ogre-tools/injectable-react"; import deploymentApiInjectable from "../../../../common/k8s-api/endpoints/deployment.api.injectable"; import deploymentScaleDialogStateInjectable from "./dialog-state.injectable"; diff --git a/packages/core/src/renderer/components/+workloads-overview/overview-workload-status.tsx b/packages/core/src/renderer/components/+workloads-overview/overview-workload-status.tsx index 41d947b326..145f6ee103 100644 --- a/packages/core/src/renderer/components/+workloads-overview/overview-workload-status.tsx +++ b/packages/core/src/renderer/components/+workloads-overview/overview-workload-status.tsx @@ -10,7 +10,7 @@ import capitalize from "lodash/capitalize"; import { observer } from "mobx-react"; import type { PieChartData } from "../chart"; import { PieChart } from "../chart"; -import { object } from "../../utils"; +import { object } from "@k8slens/utilities"; import type { LensTheme } from "../../themes/lens-theme"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { PascalCase } from "type-fest"; diff --git a/packages/core/src/renderer/components/+workloads-pods/details/volumes/variants/projected.tsx b/packages/core/src/renderer/components/+workloads-pods/details/volumes/variants/projected.tsx index c7ca22c87f..a0c1751bbc 100644 --- a/packages/core/src/renderer/components/+workloads-pods/details/volumes/variants/projected.tsx +++ b/packages/core/src/renderer/components/+workloads-pods/details/volumes/variants/projected.tsx @@ -4,7 +4,7 @@ */ import React from "react"; -import { displayMode } from "../../../../../utils"; +import { displayMode } from "@k8slens/utilities"; import { DrawerItem, DrawerTitle } from "../../../../drawer"; import type { VolumeVariantComponent } from "../variant-helpers"; diff --git a/packages/core/src/renderer/components/+workloads-pods/pod-container-env.tsx b/packages/core/src/renderer/components/+workloads-pods/pod-container-env.tsx index 88a7667e6b..977c945f18 100644 --- a/packages/core/src/renderer/components/+workloads-pods/pod-container-env.tsx +++ b/packages/core/src/renderer/components/+workloads-pods/pod-container-env.tsx @@ -11,7 +11,7 @@ import type { Container, EnvVarKeySelector, Secret } from "../../../common/k8s-a import { DrawerItem } from "../drawer"; import { autorun } from "mobx"; import { Icon } from "../icon"; -import { base64, cssNames, object } from "../../utils"; +import { base64, cssNames, object } from "@k8slens/utilities"; import _ from "lodash"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { ConfigMapStore } from "../+config-maps/store"; diff --git a/packages/core/src/renderer/components/+workloads-pods/pod-container-port.tsx b/packages/core/src/renderer/components/+workloads-pods/pod-container-port.tsx index eb2464f664..74bced05fb 100644 --- a/packages/core/src/renderer/components/+workloads-pods/pod-container-port.tsx +++ b/packages/core/src/renderer/components/+workloads-pods/pod-container-port.tsx @@ -9,7 +9,7 @@ import React from "react"; import { disposeOnUnmount, observer } from "mobx-react"; import type { ContainerPort, Pod } from "../../../common/k8s-api/endpoints"; import { action, makeObservable, observable, reaction } from "mobx"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { ShowNotification } from "../notifications"; import { Button } from "../button"; import type { ForwardedPort, PortForwardStore } from "../../port-forward"; diff --git a/packages/core/src/renderer/components/+workloads-pods/pod-details-container.tsx b/packages/core/src/renderer/components/+workloads-pods/pod-details-container.tsx index 947dec01ac..93dbd73244 100644 --- a/packages/core/src/renderer/components/+workloads-pods/pod-details-container.tsx +++ b/packages/core/src/renderer/components/+workloads-pods/pod-details-container.tsx @@ -8,7 +8,7 @@ import "./pod-details-container.scss"; import React from "react"; import type { Container, PodContainerStatus, Pod } from "../../../common/k8s-api/endpoints"; import { DrawerItem } from "../drawer"; -import { cssNames, isDefined } from "../../utils"; +import { cssNames, isDefined } from "@k8slens/utilities"; import { StatusBrick } from "../status-brick"; import { Badge } from "../badge"; import { ContainerEnvironment } from "./pod-container-env"; diff --git a/packages/core/src/renderer/components/+workloads-pods/pod-details-list.tsx b/packages/core/src/renderer/components/+workloads-pods/pod-details-list.tsx index 2eb291ac7c..06cfa5a2a7 100644 --- a/packages/core/src/renderer/components/+workloads-pods/pod-details-list.tsx +++ b/packages/core/src/renderer/components/+workloads-pods/pod-details-list.tsx @@ -10,7 +10,7 @@ import kebabCase from "lodash/kebabCase"; import { reaction } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; import type { Pod } from "../../../common/k8s-api/endpoints"; -import { autoBind, bytesToUnits, cssNames, interval, prevDefault } from "../../utils"; +import { bytesToUnits, cssNames, interval, prevDefault } from "@k8slens/utilities"; import { LineProgress } from "../line-progress"; import type { KubeObject } from "../../../common/k8s-api/kube-object"; import { Table, TableCell, TableHead, TableRow } from "../table"; @@ -22,6 +22,7 @@ import { withInjectables } from "@ogre-tools/injectable-react"; import podStoreInjectable from "./store.injectable"; import type { ShowDetails } from "../kube-detail-params/show-details.injectable"; import showDetailsInjectable from "../kube-detail-params/show-details.injectable"; +import autoBindReact from "auto-bind/react"; enum sortBy { name = "name", @@ -47,7 +48,7 @@ interface Dependencies { class NonInjectedPodDetailsList extends React.Component { constructor(props: PodDetailsListProps & Dependencies) { super(props); - autoBind(this); + autoBindReact(this); } private metricsWatcher = interval(120, () => { diff --git a/packages/core/src/renderer/components/+workloads-pods/pod-details.tsx b/packages/core/src/renderer/components/+workloads-pods/pod-details.tsx index 604cec5cd5..7707dd6b1d 100644 --- a/packages/core/src/renderer/components/+workloads-pods/pod-details.tsx +++ b/packages/core/src/renderer/components/+workloads-pods/pod-details.tsx @@ -13,7 +13,7 @@ import { Pod } from "../../../common/k8s-api/endpoints"; import type { NodeApi, PriorityClassApi, RuntimeClassApi, ServiceAccountApi } from "../../../common/k8s-api/endpoints"; import { DrawerItem, DrawerTitle } from "../drawer"; import { Badge } from "../badge"; -import { cssNames, stopPropagation, toJS } from "../../utils"; +import { cssNames, stopPropagation } from "@k8slens/utilities"; import { PodDetailsContainer } from "./pod-details-container"; import { PodDetailsAffinities } from "./pod-details-affinities"; import { PodDetailsTolerations } from "./pod-details-tolerations"; @@ -33,6 +33,7 @@ import priorityClassApiInjectable from "../../../common/k8s-api/endpoints/priori import loggerInjectable from "../../../common/logger.injectable"; import type { PodMetricData } from "../../../common/k8s-api/endpoints/metrics.api/request-pod-metrics.injectable"; import podContainerMetricsInjectable from "./container-metrics.injectable"; +import { toJS } from "../../../common/utils"; export interface PodDetailsProps extends KubeObjectDetailsProps { } diff --git a/packages/core/src/renderer/components/+workloads-pods/pods.tsx b/packages/core/src/renderer/components/+workloads-pods/pods.tsx index ab793359b0..3f310c2b76 100644 --- a/packages/core/src/renderer/components/+workloads-pods/pods.tsx +++ b/packages/core/src/renderer/components/+workloads-pods/pods.tsx @@ -11,7 +11,7 @@ import { Link } from "react-router-dom"; import { KubeObjectListLayout } from "../kube-object-list-layout"; import type { NodeApi, Pod } from "../../../common/k8s-api/endpoints"; import { StatusBrick } from "../status-brick"; -import { cssNames, getConvertedParts, object, stopPropagation } from "../../utils"; +import { cssNames, getConvertedParts, object, stopPropagation } from "@k8slens/utilities"; import startCase from "lodash/startCase"; import kebabCase from "lodash/kebabCase"; import type { ApiManager } from "../../../common/k8s-api/api-manager"; diff --git a/packages/core/src/renderer/components/+workloads-pods/store.ts b/packages/core/src/renderer/components/+workloads-pods/store.ts index 5ce9dca041..18c98fc4ab 100644 --- a/packages/core/src/renderer/components/+workloads-pods/store.ts +++ b/packages/core/src/renderer/components/+workloads-pods/store.ts @@ -7,7 +7,7 @@ import countBy from "lodash/countBy"; import { observable } from "mobx"; import type { KubeObjectStoreDependencies, KubeObjectStoreOptions } from "../../../common/k8s-api/kube-object.store"; import { KubeObjectStore } from "../../../common/k8s-api/kube-object.store"; -import { cpuUnitsToNumber, unitsToBytes } from "../../utils"; +import { cpuUnitsToNumber, unitsToBytes } from "@k8slens/utilities"; import type { Pod, PodMetrics, PodApi, PodMetricsApi } from "../../../common/k8s-api/endpoints"; import type { KubeObject, NamespaceScopedMetadata } from "../../../common/k8s-api/kube-object"; diff --git a/packages/core/src/renderer/components/+workloads-replicasets/scale-dialog/dialog.tsx b/packages/core/src/renderer/components/+workloads-replicasets/scale-dialog/dialog.tsx index 9999917bdb..bb060890e8 100644 --- a/packages/core/src/renderer/components/+workloads-replicasets/scale-dialog/dialog.tsx +++ b/packages/core/src/renderer/components/+workloads-replicasets/scale-dialog/dialog.tsx @@ -14,7 +14,7 @@ import { Dialog } from "../../dialog"; import { Wizard, WizardStep } from "../../wizard"; import { Icon } from "../../icon"; import { Slider } from "../../slider"; -import { cssNames } from "../../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { ReplicaSet, ReplicaSetApi } from "../../../../common/k8s-api/endpoints"; import { withInjectables } from "@ogre-tools/injectable-react"; import replicaSetApiInjectable from "../../../../common/k8s-api/endpoints/replica-set.api.injectable"; diff --git a/packages/core/src/renderer/components/+workloads-statefulsets/scale/dialog.tsx b/packages/core/src/renderer/components/+workloads-statefulsets/scale/dialog.tsx index 39d8969e03..a7ebe915c6 100644 --- a/packages/core/src/renderer/components/+workloads-statefulsets/scale/dialog.tsx +++ b/packages/core/src/renderer/components/+workloads-statefulsets/scale/dialog.tsx @@ -15,7 +15,7 @@ import { Dialog } from "../../dialog"; import { Wizard, WizardStep } from "../../wizard"; import { Icon } from "../../icon"; import { Slider } from "../../slider"; -import { cssNames } from "../../../utils"; +import { cssNames } from "@k8slens/utilities"; import { withInjectables } from "@ogre-tools/injectable-react"; import statefulSetApiInjectable from "../../../../common/k8s-api/endpoints/stateful-set.api.injectable"; import statefulSetDialogStateInjectable from "./dialog-state.injectable"; diff --git a/packages/core/src/renderer/components/add-remove-buttons/add-remove-buttons.tsx b/packages/core/src/renderer/components/add-remove-buttons/add-remove-buttons.tsx index e38e0ffe67..b1d7b68d32 100644 --- a/packages/core/src/renderer/components/add-remove-buttons/add-remove-buttons.tsx +++ b/packages/core/src/renderer/components/add-remove-buttons/add-remove-buttons.tsx @@ -6,7 +6,7 @@ import "./add-remove-buttons.scss"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Button } from "../button"; import { Icon } from "../icon"; diff --git a/packages/core/src/renderer/components/animate/animate.tsx b/packages/core/src/renderer/components/animate/animate.tsx index aa0d673570..6a7870e336 100644 --- a/packages/core/src/renderer/components/animate/animate.tsx +++ b/packages/core/src/renderer/components/animate/animate.tsx @@ -5,7 +5,7 @@ import "./animate.scss"; import React, { useEffect, useState } from "react"; -import { cssNames, noop } from "../../utils"; +import { cssNames, noop } from "@k8slens/utilities"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { RequestAnimationFrame } from "./request-animation-frame.injectable"; import requestAnimationFrameInjectable from "./request-animation-frame.injectable"; diff --git a/packages/core/src/renderer/components/avatar/avatar.tsx b/packages/core/src/renderer/components/avatar/avatar.tsx index a3b9837295..84892b081c 100644 --- a/packages/core/src/renderer/components/avatar/avatar.tsx +++ b/packages/core/src/renderer/components/avatar/avatar.tsx @@ -9,8 +9,8 @@ import type { ImgHTMLAttributes, MouseEventHandler } from "react"; import React from "react"; import randomColor from "randomcolor"; import GraphemeSplitter from "grapheme-splitter"; -import type { SingleOrMany } from "../../utils"; -import { cssNames, isDefined, iter } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; +import { cssNames, isDefined, iter } from "@k8slens/utilities"; export interface AvatarProps { title: string; diff --git a/packages/core/src/renderer/components/badge/badge.tsx b/packages/core/src/renderer/components/badge/badge.tsx index f0efb701bd..4981c008d3 100644 --- a/packages/core/src/renderer/components/badge/badge.tsx +++ b/packages/core/src/renderer/components/badge/badge.tsx @@ -8,7 +8,7 @@ import styles from "./badge.module.scss"; import React, { useEffect, useRef, useState } from "react"; import { action, observable } from "mobx"; import { observer } from "mobx-react"; -import { cssNames } from "../../utils/cssNames"; +import { cssNames } from "@k8slens/utilities/src/cssNames"; import { withTooltip } from "../tooltip"; export interface BadgeProps extends React.HTMLAttributes { diff --git a/packages/core/src/renderer/components/button/button.tsx b/packages/core/src/renderer/components/button/button.tsx index 8168c2abf3..e72a874641 100644 --- a/packages/core/src/renderer/components/button/button.tsx +++ b/packages/core/src/renderer/components/button/button.tsx @@ -6,7 +6,7 @@ import "./button.scss"; import type { ButtonHTMLAttributes } from "react"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { withTooltip } from "../tooltip"; export interface ButtonProps extends ButtonHTMLAttributes { diff --git a/packages/core/src/renderer/components/chart/bar-chart.tsx b/packages/core/src/renderer/components/chart/bar-chart.tsx index e5c0e901d8..49a656cbf7 100644 --- a/packages/core/src/renderer/components/chart/bar-chart.tsx +++ b/packages/core/src/renderer/components/chart/bar-chart.tsx @@ -11,7 +11,7 @@ import { observer } from "mobx-react"; import type { ChartOptions, ChartTooltipCallback, ChartTooltipItem, Scriptable } from "chart.js"; import type { ChartProps } from "./chart"; import { Chart, ChartKind } from "./chart"; -import { bytesToUnits, cssNames, isObject } from "../../utils"; +import { bytesToUnits, cssNames, isObject } from "@k8slens/utilities"; import { ZebraStripesPlugin } from "./zebra-stripes.plugin"; import type { LensTheme } from "../../themes/lens-theme"; import { NoMetrics } from "../resource-metrics/no-metrics"; diff --git a/packages/core/src/renderer/components/chart/chart.tsx b/packages/core/src/renderer/components/chart/chart.tsx index 3d54b90302..27ab820a19 100644 --- a/packages/core/src/renderer/components/chart/chart.tsx +++ b/packages/core/src/renderer/components/chart/chart.tsx @@ -9,7 +9,7 @@ import React from "react"; import type { PluginServiceRegistrationOptions } from "chart.js"; import ChartJS from "chart.js"; import { remove } from "lodash"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { StatusBrick } from "../status-brick"; import { Badge } from "../badge"; diff --git a/packages/core/src/renderer/components/chart/options.ts b/packages/core/src/renderer/components/chart/options.ts index 106664d26d..24a6dc5fd4 100644 --- a/packages/core/src/renderer/components/chart/options.ts +++ b/packages/core/src/renderer/components/chart/options.ts @@ -4,7 +4,7 @@ */ import type { ChartOptions, ChartPoint } from "chart.js"; -import { bytesToUnits, isDefined } from "../../utils"; +import { bytesToUnits, isDefined } from "@k8slens/utilities"; export type MetricsTab = "CPU" | "Memory" | "Disk" | "Pods" | "Network" | "Filesystem" | "Duration"; diff --git a/packages/core/src/renderer/components/chart/pie-chart.tsx b/packages/core/src/renderer/components/chart/pie-chart.tsx index de1461631a..9db4bca62f 100644 --- a/packages/core/src/renderer/components/chart/pie-chart.tsx +++ b/packages/core/src/renderer/components/chart/pie-chart.tsx @@ -10,7 +10,7 @@ import type { ChartOptions } from "chart.js"; import ChartJS from "chart.js"; import type { ChartProps } from "./chart"; import { Chart } from "./chart"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { LensTheme } from "../../themes/lens-theme"; import { withInjectables } from "@ogre-tools/injectable-react"; import type { IComputedValue } from "mobx"; diff --git a/packages/core/src/renderer/components/checkbox/checkbox.tsx b/packages/core/src/renderer/components/checkbox/checkbox.tsx index ecba55378e..4193f1d283 100644 --- a/packages/core/src/renderer/components/checkbox/checkbox.tsx +++ b/packages/core/src/renderer/components/checkbox/checkbox.tsx @@ -5,8 +5,8 @@ import "./checkbox.scss"; import React from "react"; -import type { SingleOrMany } from "../../utils"; -import { cssNames, noop } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; +import { cssNames, noop } from "@k8slens/utilities"; export interface CheckboxProps { className?: string; diff --git a/packages/core/src/renderer/components/cluster-manager/cluster-frame-handler.ts b/packages/core/src/renderer/components/cluster-manager/cluster-frame-handler.ts index f1b169915f..1f52dd7c85 100644 --- a/packages/core/src/renderer/components/cluster-manager/cluster-frame-handler.ts +++ b/packages/core/src/renderer/components/cluster-manager/cluster-frame-handler.ts @@ -5,8 +5,8 @@ import { action, makeObservable, observable, when } from "mobx"; import type { ClusterId } from "../../../common/cluster-types"; -import type { Disposer } from "../../utils"; -import { getClusterFrameUrl, onceDefined } from "../../utils"; +import type { Disposer } from "@k8slens/utilities"; +import { getClusterFrameUrl, onceDefined } from "@k8slens/utilities"; import assert from "assert"; import type { Logger } from "../../../common/logger"; import type { GetClusterById } from "../../../common/cluster-store/get-by-id.injectable"; diff --git a/packages/core/src/renderer/components/cluster-manager/cluster-manager.tsx b/packages/core/src/renderer/components/cluster-manager/cluster-manager.tsx index ab418ec827..1a4fb1a752 100644 --- a/packages/core/src/renderer/components/cluster-manager/cluster-manager.tsx +++ b/packages/core/src/renderer/components/cluster-manager/cluster-manager.tsx @@ -17,8 +17,8 @@ import catalogPreviousActiveTabStorageInjectable from "../+catalog/catalog-previ import type { IComputedValue } from "mobx"; import currentRouteComponentInjectable from "../../routes/current-route-component.injectable"; import welcomeRouteInjectable from "../../../common/front-end-routing/routes/welcome/welcome-route.injectable"; -import { buildURL } from "../../../common/utils/buildUrl"; -import type { StorageLayer } from "../../utils"; +import { buildURL } from "@k8slens/utilities/src/buildUrl"; +import type { StorageLayer } from "@k8slens/utilities"; import type { WatchForGeneralEntityNavigation } from "../../api/helpers/watch-for-general-entity-navigation.injectable"; import watchForGeneralEntityNavigationInjectable from "../../api/helpers/watch-for-general-entity-navigation.injectable"; import currentPathInjectable from "../../routes/current-path.injectable"; diff --git a/packages/core/src/renderer/components/cluster-manager/cluster-status.tsx b/packages/core/src/renderer/components/cluster-manager/cluster-status.tsx index 940218ecad..e8d030bba3 100644 --- a/packages/core/src/renderer/components/cluster-manager/cluster-status.tsx +++ b/packages/core/src/renderer/components/cluster-manager/cluster-status.tsx @@ -10,8 +10,8 @@ import { disposeOnUnmount, observer } from "mobx-react"; import React from "react"; import { ipcRendererOn } from "../../../common/ipc"; import type { Cluster } from "../../../common/cluster/cluster"; -import type { IClassName } from "../../utils"; -import { hasTypedProperty, isObject, isString, cssNames } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { hasTypedProperty, isObject, isString, cssNames } from "@k8slens/utilities"; import { Button } from "../button"; import { Icon } from "../icon"; import { Spinner } from "../spinner"; diff --git a/packages/core/src/renderer/components/cluster-settings/icon-settings.tsx b/packages/core/src/renderer/components/cluster-settings/icon-settings.tsx index 55e4b21828..f5813368e8 100644 --- a/packages/core/src/renderer/components/cluster-settings/icon-settings.tsx +++ b/packages/core/src/renderer/components/cluster-settings/icon-settings.tsx @@ -5,13 +5,13 @@ import React from "react"; import type { Cluster } from "../../../common/cluster/cluster"; -import { autoBind } from "../../utils"; import { observable } from "mobx"; import { observer } from "mobx-react"; import type { KubernetesCluster } from "../../../common/catalog-entities"; import { FilePicker, OverSizeLimitStyle } from "../file-picker"; import { MenuActions, MenuItem } from "../menu"; import { Avatar } from "../avatar"; +import autoBindReact from "auto-bind/react"; enum GeneralInputStatus { CLEAN = "clean", @@ -30,7 +30,7 @@ export class ClusterIconSetting extends React.Component constructor(props: ClusterIconSettingProps) { super(props); - autoBind(this); + autoBindReact(this); } private element = React.createRef(); diff --git a/packages/core/src/renderer/components/command-palette/command-dialog.tsx b/packages/core/src/renderer/components/command-palette/command-dialog.tsx index ba4036f4c5..7a4a44651f 100644 --- a/packages/core/src/renderer/components/command-palette/command-dialog.tsx +++ b/packages/core/src/renderer/components/command-palette/command-dialog.tsx @@ -13,7 +13,7 @@ import type { CatalogEntity } from "../../../common/catalog"; import { broadcastMessage } from "../../../common/ipc"; import { IpcRendererNavigationEvents } from "../../../common/ipc/navigation-events"; import type { RegisteredCommand } from "./registered-commands/commands"; -import { iter } from "../../utils"; +import { iter } from "@k8slens/utilities"; import { withInjectables } from "@ogre-tools/injectable-react"; import registeredCommandsInjectable from "./registered-commands/registered-commands.injectable"; import type { SingleValue } from "react-select"; diff --git a/packages/core/src/renderer/components/confirm-dialog/confirm-dialog.tsx b/packages/core/src/renderer/components/confirm-dialog/confirm-dialog.tsx index d63b8dcc44..3524d33450 100644 --- a/packages/core/src/renderer/components/confirm-dialog/confirm-dialog.tsx +++ b/packages/core/src/renderer/components/confirm-dialog/confirm-dialog.tsx @@ -10,7 +10,7 @@ import React from "react"; import type { IObservableValue } from "mobx"; import { observable, makeObservable, computed } from "mobx"; import { observer } from "mobx-react"; -import { cssNames, noop, prevDefault } from "../../utils"; +import { cssNames, noop, prevDefault } from "@k8slens/utilities"; import type { ButtonProps } from "../button"; import { Button } from "../button"; import type { DialogProps } from "../dialog"; diff --git a/packages/core/src/renderer/components/countdown/countdown.test.tsx b/packages/core/src/renderer/components/countdown/countdown.test.tsx index 6a84e6970e..068dbb8fa7 100644 --- a/packages/core/src/renderer/components/countdown/countdown.test.tsx +++ b/packages/core/src/renderer/components/countdown/countdown.test.tsx @@ -13,7 +13,7 @@ import type { RenderResult } from "@testing-library/react"; import { advanceFakeTime, testUsingFakeTime } from "../../../common/test-utils/use-fake-time"; import type { IComputedValue } from "mobx"; import { observe } from "mobx"; -import { noop } from "../../../common/utils"; +import { noop } from "@k8slens/utilities"; describe("countdown", () => { let di: DiContainer; diff --git a/packages/core/src/renderer/components/dialog/dialog.tsx b/packages/core/src/renderer/components/dialog/dialog.tsx index 0d7bfb24c7..765d9b7317 100644 --- a/packages/core/src/renderer/components/dialog/dialog.tsx +++ b/packages/core/src/renderer/components/dialog/dialog.tsx @@ -10,7 +10,7 @@ import { createPortal } from "react-dom"; import { disposeOnUnmount, observer } from "mobx-react"; import { reaction } from "mobx"; import { Animate } from "../animate"; -import { cssNames, noop, stopPropagation } from "../../utils"; +import { cssNames, noop, stopPropagation } from "@k8slens/utilities"; import type { ObservableHistory } from "mobx-observable-history"; import { withInjectables } from "@ogre-tools/injectable-react"; import observableHistoryInjectable from "../../navigation/observable-history.injectable"; diff --git a/packages/core/src/renderer/components/dock/create-resource/user-templates.injectable.ts b/packages/core/src/renderer/components/dock/create-resource/user-templates.injectable.ts index 65b896f95d..d0b0680ca3 100644 --- a/packages/core/src/renderer/components/dock/create-resource/user-templates.injectable.ts +++ b/packages/core/src/renderer/components/dock/create-resource/user-templates.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { computed, observable } from "mobx"; -import { delay, getOrInsert, isErrnoException, waitForPath } from "../../../utils"; +import { delay, getOrInsert, isErrnoException, waitForPath } from "@k8slens/utilities"; import { readFile } from "fs/promises"; import { hasCorrectExtension } from "./has-correct-extension"; import type { RawTemplates } from "./create-resource-templates.injectable"; diff --git a/packages/core/src/renderer/components/dock/create-resource/view.tsx b/packages/core/src/renderer/components/dock/create-resource/view.tsx index 63db3068ab..73d6989b82 100644 --- a/packages/core/src/renderer/components/dock/create-resource/view.tsx +++ b/packages/core/src/renderer/components/dock/create-resource/view.tsx @@ -16,7 +16,7 @@ import { InfoPanel } from "../info-panel"; import type { ShowNotification } from "../../notifications"; import type { Logger } from "../../../../common/logger"; import type { ApiManager } from "../../../../common/k8s-api/api-manager"; -import { isObject, prevDefault } from "../../../utils"; +import { isObject, prevDefault } from "@k8slens/utilities"; import { withInjectables } from "@ogre-tools/injectable-react"; import createResourceTabStoreInjectable from "./store.injectable"; import createResourceTemplatesInjectable from "./create-resource-templates.injectable"; diff --git a/packages/core/src/renderer/components/dock/dock-tab-store/dock-tab.store.ts b/packages/core/src/renderer/components/dock/dock-tab-store/dock-tab.store.ts index d6ec705d2a..4a713a4a35 100644 --- a/packages/core/src/renderer/components/dock/dock-tab-store/dock-tab.store.ts +++ b/packages/core/src/renderer/components/dock/dock-tab-store/dock-tab.store.ts @@ -4,10 +4,11 @@ */ import { action, observable, reaction } from "mobx"; -import type { StorageLayer } from "../../../utils"; -import { autoBind, toJS } from "../../../utils"; +import type { StorageLayer } from "../../../utils/storage-helper"; import type { CreateStorage } from "../../../utils/create-storage/create-storage.injectable"; import type { TabId } from "../dock/store"; +import autoBind from "auto-bind"; +import { toJS } from "../../../../common/utils"; export interface DockTabStoreOptions { autoInit?: boolean; // load data from storage when `storageKey` is provided and bind events, default: true diff --git a/packages/core/src/renderer/components/dock/dock-tab.tsx b/packages/core/src/renderer/components/dock/dock-tab.tsx index 5a672e2fb3..c65ea76ac9 100644 --- a/packages/core/src/renderer/components/dock/dock-tab.tsx +++ b/packages/core/src/renderer/components/dock/dock-tab.tsx @@ -7,7 +7,7 @@ import styles from "./dock-tab.module.scss"; import React from "react"; import { observer } from "mobx-react"; -import { autoBind, cssNames, prevDefault, isMiddleClick } from "../../utils"; +import { cssNames, prevDefault, isMiddleClick } from "@k8slens/utilities"; import type { DockStore, DockTab as DockTabModel } from "./dock/store"; import type { TabProps } from "../tabs"; import { Tab } from "../tabs"; @@ -18,6 +18,7 @@ import { withInjectables } from "@ogre-tools/injectable-react"; import dockStoreInjectable from "./dock/store.injectable"; import { Tooltip, TooltipPosition } from "../tooltip"; import isMacInjectable from "../../../common/vars/is-mac.injectable"; +import autoBindReact from "auto-bind/react"; export interface DockTabProps extends TabProps { moreActions?: React.ReactNode; @@ -34,7 +35,7 @@ class NonInjectedDockTab extends React.Component { constructor(props: DockTabProps & Dependencies) { super(props); - autoBind(this); + autoBindReact(this); } close(id: string) { diff --git a/packages/core/src/renderer/components/dock/dock-tabs.tsx b/packages/core/src/renderer/components/dock/dock-tabs.tsx index 87b4aa756b..1dd274c4db 100644 --- a/packages/core/src/renderer/components/dock/dock-tabs.tsx +++ b/packages/core/src/renderer/components/dock/dock-tabs.tsx @@ -11,7 +11,7 @@ import { DockTab } from "./dock-tab"; import type { DockTab as DockTabModel } from "./dock/store"; import { TabKind } from "./dock/store"; import { TerminalTab } from "./terminal/dock-tab"; -import { cssVar } from "../../utils"; +import { cssVar } from "@k8slens/utilities"; import { useResizeObserver } from "../../hooks"; export interface DockTabsProps { diff --git a/packages/core/src/renderer/components/dock/dock.tsx b/packages/core/src/renderer/components/dock/dock.tsx index ee4ff542b3..b0e2b010c6 100644 --- a/packages/core/src/renderer/components/dock/dock.tsx +++ b/packages/core/src/renderer/components/dock/dock.tsx @@ -6,7 +6,7 @@ import "./dock.scss"; import React from "react"; import { observer } from "mobx-react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Icon } from "../icon"; import { MenuItem } from "../menu"; import { MenuActions } from "../menu/menu-actions"; diff --git a/packages/core/src/renderer/components/dock/dock/store.ts b/packages/core/src/renderer/components/dock/dock/store.ts index 48e04c3a76..5f68865dba 100644 --- a/packages/core/src/renderer/components/dock/dock/store.ts +++ b/packages/core/src/renderer/components/dock/dock/store.ts @@ -5,8 +5,8 @@ import * as uuid from "uuid"; import { action, comparer, computed, makeObservable, observable, reaction, runInAction } from "mobx"; -import type { StorageLayer } from "../../../utils"; -import { autoBind } from "../../../utils"; +import type { StorageLayer } from "@k8slens/utilities"; +import { autoBind } from "@k8slens/utilities"; import throttle from "lodash/throttle"; export type TabId = string; diff --git a/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-resource/call-for-resource.injectable.ts b/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-resource/call-for-resource.injectable.ts index a74da59c78..43a3789167 100644 --- a/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-resource/call-for-resource.injectable.ts +++ b/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/call-for-resource/call-for-resource.injectable.ts @@ -8,7 +8,7 @@ import { parseKubeApi } from "../../../../../../common/k8s-api/kube-api-parse"; import type { AsyncResult } from "../../../../../../common/utils/async-result"; import { getErrorMessage } from "../../../../../../common/utils/get-error-message"; import apiManagerInjectable from "../../../../../../common/k8s-api/api-manager/manager.injectable"; -import { waitUntilDefined } from "../../../../../../common/utils"; +import { waitUntilDefined } from "@k8slens/utilities"; export type CallForResource = ( selfLink: string diff --git a/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/edit-resource-model.injectable.tsx b/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/edit-resource-model.injectable.tsx index a6ffe22423..7b2386e189 100644 --- a/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/edit-resource-model.injectable.tsx +++ b/packages/core/src/renderer/components/dock/edit-resource/edit-resource-model/edit-resource-model.injectable.tsx @@ -5,7 +5,7 @@ import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; import type { CallForResource } from "./call-for-resource/call-for-resource.injectable"; import callForResourceInjectable from "./call-for-resource/call-for-resource.injectable"; -import { waitUntilDefined } from "../../../../../common/utils"; +import { waitUntilDefined } from "@k8slens/utilities"; import editResourceTabStoreInjectable from "../store.injectable"; import type { EditResourceTabStore } from "../store"; import { action, computed, makeObservable, observable, runInAction } from "mobx"; diff --git a/packages/core/src/renderer/components/dock/editor-panel.tsx b/packages/core/src/renderer/components/dock/editor-panel.tsx index d9eca59159..1d009a356d 100644 --- a/packages/core/src/renderer/components/dock/editor-panel.tsx +++ b/packages/core/src/renderer/components/dock/editor-panel.tsx @@ -9,7 +9,7 @@ import React, { createRef, useEffect } from "react"; import { reaction } from "mobx"; import { observer } from "mobx-react"; import type { DockStore, TabId } from "./dock/store"; -import { cssNames, disposer } from "../../utils"; +import { cssNames, disposer } from "@k8slens/utilities"; import { MonacoEditor } from "../monaco-editor"; import type { MonacoEditorProps, MonacoEditorRef } from "../monaco-editor"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/components/dock/info-panel.tsx b/packages/core/src/renderer/components/dock/info-panel.tsx index 8f1ac32266..0b951d8722 100644 --- a/packages/core/src/renderer/components/dock/info-panel.tsx +++ b/packages/core/src/renderer/components/dock/info-panel.tsx @@ -9,7 +9,7 @@ import type { ReactNode } from "react"; import React, { Component } from "react"; import { computed, observable, reaction, makeObservable } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Button } from "../button"; import { Icon } from "../icon"; import { Spinner } from "../spinner"; diff --git a/packages/core/src/renderer/components/dock/install-chart/install-chart-model.injectable.tsx b/packages/core/src/renderer/components/dock/install-chart/install-chart-model.injectable.tsx index b0bfcfcacc..e9c7f6cbcb 100644 --- a/packages/core/src/renderer/components/dock/install-chart/install-chart-model.injectable.tsx +++ b/packages/core/src/renderer/components/dock/install-chart/install-chart-model.injectable.tsx @@ -4,7 +4,7 @@ */ import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; import installChartTabStoreInjectable from "./store.injectable"; -import { waitUntilDefined } from "../../../../common/utils"; +import { waitUntilDefined } from "@k8slens/utilities"; import type { IChartInstallData, InstallChartTabStore } from "./store"; import type { HelmChart } from "../../../../common/k8s-api/endpoints/helm-charts.api"; import React from "react"; @@ -131,7 +131,7 @@ export class InstallChartModel { if (!chartValuesRequest.callWasSuccessful) { throw chartValuesRequest.error; } - + runInAction(() => { this.configuration.onChange(chartValuesRequest.response); this.configuration.isLoading.set(false); diff --git a/packages/core/src/renderer/components/dock/install-chart/view.tsx b/packages/core/src/renderer/components/dock/install-chart/view.tsx index 714259bd85..d478febd55 100644 --- a/packages/core/src/renderer/components/dock/install-chart/view.tsx +++ b/packages/core/src/renderer/components/dock/install-chart/view.tsx @@ -10,7 +10,7 @@ import { observer } from "mobx-react"; import { InfoPanel } from "../info-panel"; import { Badge } from "../../badge"; import { NamespaceSelect } from "../../+namespaces/namespace-select"; -import { prevDefault } from "../../../utils"; +import { prevDefault } from "@k8slens/utilities"; import { Icon } from "../../icon"; import { Button } from "../../button"; import { LogsDialog } from "../../dialog/logs-dialog"; diff --git a/packages/core/src/renderer/components/dock/logs/__test__/to-bottom.test.tsx b/packages/core/src/renderer/components/dock/logs/__test__/to-bottom.test.tsx index 9e4177c1dd..d7b419d1ad 100644 --- a/packages/core/src/renderer/components/dock/logs/__test__/to-bottom.test.tsx +++ b/packages/core/src/renderer/components/dock/logs/__test__/to-bottom.test.tsx @@ -6,7 +6,7 @@ import React from "react"; import "@testing-library/jest-dom/extend-expect"; import { fireEvent } from "@testing-library/react"; import { ToBottom } from "../to-bottom"; -import { noop } from "../../../../utils"; +import { noop } from "@k8slens/utilities"; import type { DiRender } from "../../../test-utils/renderFor"; import { renderFor } from "../../../test-utils/renderFor"; import { getDiForUnitTesting } from "../../../../getDiForUnitTesting"; diff --git a/packages/core/src/renderer/components/dock/logs/list.tsx b/packages/core/src/renderer/components/dock/logs/list.tsx index 0290049ccc..6b3eded365 100644 --- a/packages/core/src/renderer/components/dock/logs/list.tsx +++ b/packages/core/src/renderer/components/dock/logs/list.tsx @@ -16,7 +16,7 @@ import moment from "moment-timezone"; import type { Align, ListOnScrollProps } from "react-window"; import { SearchStore } from "../../../search-store/search-store"; import type { UserStore } from "../../../../common/user-store"; -import { array, autoBind, cssNames } from "../../../utils"; +import { array, cssNames } from "@k8slens/utilities"; import type { VirtualListRef } from "../../virtual-list"; import { VirtualList } from "../../virtual-list"; import { ToBottom } from "./to-bottom"; @@ -24,6 +24,7 @@ import type { LogTabViewModel } from "../logs/logs-view-model"; import { Spinner } from "../../spinner"; import { withInjectables } from "@ogre-tools/injectable-react"; import userStoreInjectable from "../../../../common/user-store/user-store.injectable"; +import autoBindReact from "auto-bind/react"; export interface LogListProps { model: LogTabViewModel; @@ -51,7 +52,7 @@ class NonForwardedLogList extends React.Component extends React.Component { constructor(props: Props) { super(props); - autoBind(this); + autoBindReact(this); } componentDidMount() { diff --git a/packages/core/src/renderer/components/dock/terminal/send-command.injectable.ts b/packages/core/src/renderer/components/dock/terminal/send-command.injectable.ts index 63902d34e1..74eedfb9d4 100644 --- a/packages/core/src/renderer/components/dock/terminal/send-command.injectable.ts +++ b/packages/core/src/renderer/components/dock/terminal/send-command.injectable.ts @@ -6,8 +6,8 @@ import { getInjectable } from "@ogre-tools/injectable"; import { when } from "mobx"; import loggerInjectable from "../../../../common/logger.injectable"; import { TerminalChannels } from "../../../../common/terminal/channels"; -import { waitUntilDefined } from "../../../../common/utils/wait"; -import { noop } from "../../../utils"; +import { waitUntilDefined } from "@k8slens/utilities/src/wait"; +import { noop } from "@k8slens/utilities"; import showSuccessNotificationInjectable from "../../notifications/show-success-notification.injectable"; import selectDockTabInjectable from "../dock/select-dock-tab.injectable"; import type { TabId } from "../dock/store"; diff --git a/packages/core/src/renderer/components/dock/terminal/terminal.ts b/packages/core/src/renderer/components/dock/terminal/terminal.ts index 5f49882f1c..9e307aa7dc 100644 --- a/packages/core/src/renderer/components/dock/terminal/terminal.ts +++ b/packages/core/src/renderer/components/dock/terminal/terminal.ts @@ -10,7 +10,7 @@ import { Terminal as XTerm } from "xterm"; import { FitAddon } from "xterm-addon-fit"; import type { TabId } from "../dock/store"; import type { TerminalApi } from "../../../api/terminal-api"; -import { disposer } from "../../../utils"; +import { disposer } from "@k8slens/utilities"; import { once } from "lodash"; import { clipboard } from "electron"; import type { Logger } from "../../../../common/logger"; diff --git a/packages/core/src/renderer/components/dock/terminal/view.tsx b/packages/core/src/renderer/components/dock/terminal/view.tsx index b85824cc30..4bdde69f89 100644 --- a/packages/core/src/renderer/components/dock/terminal/view.tsx +++ b/packages/core/src/renderer/components/dock/terminal/view.tsx @@ -7,7 +7,7 @@ import "./terminal-window.scss"; import React from "react"; import { disposeOnUnmount, observer } from "mobx-react"; -import { cssNames } from "../../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { Terminal } from "./terminal"; import type { TerminalStore } from "./store"; import type { LensTheme } from "../../../themes/lens-theme"; diff --git a/packages/core/src/renderer/components/dock/upgrade-chart/tab-data.injectable.ts b/packages/core/src/renderer/components/dock/upgrade-chart/tab-data.injectable.ts index 0189ecf6a7..38c8491fb5 100644 --- a/packages/core/src/renderer/components/dock/upgrade-chart/tab-data.injectable.ts +++ b/packages/core/src/renderer/components/dock/upgrade-chart/tab-data.injectable.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable"; -import { waitUntilDefined } from "../../../utils"; +import { waitUntilDefined } from "@k8slens/utilities"; import upgradeChartTabStoreInjectable from "./store.injectable"; const upgradeChartTabDataInjectable = getInjectable({ diff --git a/packages/core/src/renderer/components/dock/upgrade-chart/upgrade-chart-model.injectable.ts b/packages/core/src/renderer/components/dock/upgrade-chart/upgrade-chart-model.injectable.ts index bf3d9a0214..befd7644f2 100644 --- a/packages/core/src/renderer/components/dock/upgrade-chart/upgrade-chart-model.injectable.ts +++ b/packages/core/src/renderer/components/dock/upgrade-chart/upgrade-chart-model.injectable.ts @@ -14,7 +14,7 @@ import updateReleaseInjectable from "../../+helm-releases/update-release/update- import type { HelmRelease } from "../../../../common/k8s-api/endpoints/helm-releases.api"; import requestHelmReleaseConfigurationInjectable from "../../../../common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable"; import type { AsyncResult } from "../../../../common/utils/async-result"; -import { waitUntilDefined } from "../../../utils"; +import { waitUntilDefined } from "@k8slens/utilities"; import type { SelectOption } from "../../select"; import type { DockTab } from "../dock/store"; import upgradeChartTabDataInjectable from "./tab-data.injectable"; diff --git a/packages/core/src/renderer/components/dock/upgrade-chart/view.tsx b/packages/core/src/renderer/components/dock/upgrade-chart/view.tsx index 35dbd0242b..a28d5fb451 100644 --- a/packages/core/src/renderer/components/dock/upgrade-chart/view.tsx +++ b/packages/core/src/renderer/components/dock/upgrade-chart/view.tsx @@ -7,7 +7,7 @@ import "./upgrade-chart.scss"; import React from "react"; import { observer } from "mobx-react"; -import { cssNames } from "../../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { DockTab } from "../dock/store"; import { InfoPanel } from "../info-panel"; import { Spinner } from "../../spinner"; diff --git a/packages/core/src/renderer/components/drawer/drawer-item.tsx b/packages/core/src/renderer/components/drawer/drawer-item.tsx index 72a311794c..8c17d1ae91 100644 --- a/packages/core/src/renderer/components/drawer/drawer-item.tsx +++ b/packages/core/src/renderer/components/drawer/drawer-item.tsx @@ -5,7 +5,7 @@ import "./drawer-item.scss"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export interface DrawerItemProps extends React.HTMLAttributes { name: React.ReactNode; diff --git a/packages/core/src/renderer/components/drawer/drawer-param-toggler.tsx b/packages/core/src/renderer/components/drawer/drawer-param-toggler.tsx index 42d4c056e9..2c4702fcde 100644 --- a/packages/core/src/renderer/components/drawer/drawer-param-toggler.tsx +++ b/packages/core/src/renderer/components/drawer/drawer-param-toggler.tsx @@ -6,7 +6,7 @@ import "./drawer-param-toggler.scss"; import React from "react"; import { Icon } from "../icon"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export interface DrawerParamTogglerProps { label: string | number; diff --git a/packages/core/src/renderer/components/drawer/drawer-title.tsx b/packages/core/src/renderer/components/drawer/drawer-title.tsx index d920a9cef9..1b3b6d3d0f 100644 --- a/packages/core/src/renderer/components/drawer/drawer-title.tsx +++ b/packages/core/src/renderer/components/drawer/drawer-title.tsx @@ -5,7 +5,7 @@ import styles from "./drawer-title.module.css"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export interface DrawerTitleProps { className?: string; diff --git a/packages/core/src/renderer/components/drawer/drawer.tsx b/packages/core/src/renderer/components/drawer/drawer.tsx index 7a87d1a47f..56d80c9a77 100644 --- a/packages/core/src/renderer/components/drawer/drawer.tsx +++ b/packages/core/src/renderer/components/drawer/drawer.tsx @@ -8,8 +8,8 @@ import "./drawer.scss"; import React from "react"; import { clipboard } from "electron"; import { createPortal } from "react-dom"; -import type { SingleOrMany, StorageLayer } from "../../utils"; -import { cssNames, noop } from "../../utils"; +import type { SingleOrMany, StorageLayer } from "@k8slens/utilities"; +import { cssNames, noop } from "@k8slens/utilities"; import { Icon } from "../icon"; import type { AnimateName } from "../animate"; import { Animate } from "../animate"; diff --git a/packages/core/src/renderer/components/duration/reactive-duration.tsx b/packages/core/src/renderer/components/duration/reactive-duration.tsx index 42a6b0949b..57eed992f7 100644 --- a/packages/core/src/renderer/components/duration/reactive-duration.tsx +++ b/packages/core/src/renderer/components/duration/reactive-duration.tsx @@ -5,7 +5,7 @@ import { observer } from "mobx-react"; import React from "react"; -import { formatDuration } from "../../utils"; +import { formatDuration } from "@k8slens/utilities"; import { reactiveNow } from "../../../common/utils/reactive-now/reactive-now"; export interface ReactiveDurationProps { diff --git a/packages/core/src/renderer/components/editable-list/editable-list.tsx b/packages/core/src/renderer/components/editable-list/editable-list.tsx index 48d19a7006..7a11df7749 100644 --- a/packages/core/src/renderer/components/editable-list/editable-list.tsx +++ b/packages/core/src/renderer/components/editable-list/editable-list.tsx @@ -11,8 +11,8 @@ import React from "react"; import { Icon } from "../icon"; import type { InputProps, InputValidator } from "../input"; import { Input } from "../input"; -import { autoBind } from "../../utils"; -import type { SingleOrMany } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; +import autoBindReact from "auto-bind/react"; export interface EditableListProps { items: T[]; @@ -39,7 +39,7 @@ class DefaultedEditableList extends React.Component & ty constructor(props: EditableListProps & typeof defaultProps) { super(props); - autoBind(this); + autoBindReact(this); } onSubmit(val: string, evt: React.KeyboardEvent) { diff --git a/packages/core/src/renderer/components/error-boundary/error-boundary.tsx b/packages/core/src/renderer/components/error-boundary/error-boundary.tsx index 6e39867109..4d732a3ded 100644 --- a/packages/core/src/renderer/components/error-boundary/error-boundary.tsx +++ b/packages/core/src/renderer/components/error-boundary/error-boundary.tsx @@ -10,7 +10,7 @@ import React from "react"; import { observer } from "mobx-react"; import { Button } from "../button"; import { issuesTrackerUrl, forumsUrl } from "../../../common/vars"; -import type { SingleOrMany } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; import type { ObservableHistory } from "mobx-observable-history"; import { withInjectables } from "@ogre-tools/injectable-react"; import observableHistoryInjectable from "../../navigation/observable-history.injectable"; diff --git a/packages/core/src/renderer/components/gutter/gutter.tsx b/packages/core/src/renderer/components/gutter/gutter.tsx index c0fce2b6ba..0627235bf2 100644 --- a/packages/core/src/renderer/components/gutter/gutter.tsx +++ b/packages/core/src/renderer/components/gutter/gutter.tsx @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import styles from "./gutter.module.scss"; interface GutterProps { diff --git a/packages/core/src/renderer/components/horizontal-line/horizontal-line.tsx b/packages/core/src/renderer/components/horizontal-line/horizontal-line.tsx index 107a269b35..d9861482b0 100644 --- a/packages/core/src/renderer/components/horizontal-line/horizontal-line.tsx +++ b/packages/core/src/renderer/components/horizontal-line/horizontal-line.tsx @@ -4,7 +4,7 @@ */ import React from "react"; import styles from "./horizontal-line.module.scss"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; interface HorizontalLineProps { size?: "sm" | "md" | "xl"; diff --git a/packages/core/src/renderer/components/hotbar/hotbar-cell.tsx b/packages/core/src/renderer/components/hotbar/hotbar-cell.tsx index 90dfc49000..29466a9de5 100644 --- a/packages/core/src/renderer/components/hotbar/hotbar-cell.tsx +++ b/packages/core/src/renderer/components/hotbar/hotbar-cell.tsx @@ -7,7 +7,7 @@ import "./hotbar-menu.scss"; import type { HTMLAttributes, ReactNode } from "react"; import React, { useState } from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export interface HotbarCellProps extends HTMLAttributes { children?: ReactNode; diff --git a/packages/core/src/renderer/components/hotbar/hotbar-entity-icon.tsx b/packages/core/src/renderer/components/hotbar/hotbar-entity-icon.tsx index b3f635acb5..0a1987e576 100644 --- a/packages/core/src/renderer/components/hotbar/hotbar-entity-icon.tsx +++ b/packages/core/src/renderer/components/hotbar/hotbar-entity-icon.tsx @@ -11,8 +11,8 @@ import { observable } from "mobx"; import { observer } from "mobx-react"; import type { CatalogCategoryRegistry, CatalogEntity, CatalogEntityContextMenu } from "../../../common/catalog"; -import type { IClassName } from "../../utils"; -import { cssNames } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; import { Icon } from "../icon"; import { HotbarIcon } from "./hotbar-icon"; import { LensKubernetesClusterStatus } from "../../../common/catalog-entities/kubernetes-cluster"; diff --git a/packages/core/src/renderer/components/hotbar/hotbar-icon.tsx b/packages/core/src/renderer/components/hotbar/hotbar-icon.tsx index 3bbe644c88..ee9d4fb04e 100644 --- a/packages/core/src/renderer/components/hotbar/hotbar-icon.tsx +++ b/packages/core/src/renderer/components/hotbar/hotbar-icon.tsx @@ -8,7 +8,7 @@ import styles from "./hotbar-icon.module.scss"; import React, { useState } from "react"; import type { CatalogEntityContextMenu } from "../../../common/catalog"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Menu, MenuItem } from "../menu"; import { observer } from "mobx-react"; import type { AvatarProps } from "../avatar"; diff --git a/packages/core/src/renderer/components/hotbar/hotbar-menu.tsx b/packages/core/src/renderer/components/hotbar/hotbar-menu.tsx index 53191c2d87..e83848cdfd 100644 --- a/packages/core/src/renderer/components/hotbar/hotbar-menu.tsx +++ b/packages/core/src/renderer/components/hotbar/hotbar-menu.tsx @@ -8,8 +8,8 @@ import "./hotbar-menu.scss"; import React from "react"; import { observer } from "mobx-react"; import { HotbarEntityIcon } from "./hotbar-entity-icon"; -import type { IClassName } from "../../utils"; -import { cssNames } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; import type { CatalogEntityRegistry } from "../../api/catalog/entity/registry"; import type { CatalogEntity } from "../../api/catalog-entity"; import { DragDropContext, Draggable, Droppable, type DropResult } from "react-beautiful-dnd"; diff --git a/packages/core/src/renderer/components/hotbar/hotbar-selector.tsx b/packages/core/src/renderer/components/hotbar/hotbar-selector.tsx index 4d6104b5b3..7e7b609300 100644 --- a/packages/core/src/renderer/components/hotbar/hotbar-selector.tsx +++ b/packages/core/src/renderer/components/hotbar/hotbar-selector.tsx @@ -14,7 +14,7 @@ import { observer } from "mobx-react"; import type { Hotbar } from "../../../common/hotbars/types"; import { withInjectables } from "@ogre-tools/injectable-react"; import commandOverlayInjectable from "../command-palette/command-overlay.injectable"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { HotbarStore } from "../../../common/hotbars/store"; interface Dependencies { diff --git a/packages/core/src/renderer/components/icon/icon.tsx b/packages/core/src/renderer/components/icon/icon.tsx index b51299ba15..6da23f247e 100644 --- a/packages/core/src/renderer/components/icon/icon.tsx +++ b/packages/core/src/renderer/components/icon/icon.tsx @@ -9,7 +9,7 @@ import type { ReactNode } from "react"; import React, { createRef } from "react"; import { NavLink } from "react-router-dom"; import type { LocationDescriptor } from "history"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { withTooltip } from "../tooltip"; import isNumber from "lodash/isNumber"; import Configuration from "./configuration.svg"; diff --git a/packages/core/src/renderer/components/input/drop-file-input.tsx b/packages/core/src/renderer/components/input/drop-file-input.tsx index 41461a27c9..85b3e8d369 100644 --- a/packages/core/src/renderer/components/input/drop-file-input.tsx +++ b/packages/core/src/renderer/components/input/drop-file-input.tsx @@ -5,13 +5,14 @@ import "./drop-file-input.scss"; import React from "react"; -import type { IClassName } from "../../utils"; -import { autoBind, cssNames } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; import { observable, makeObservable } from "mobx"; import { observer } from "mobx-react"; import type { Logger } from "../../../common/logger"; import { withInjectables } from "@ogre-tools/injectable-react"; import loggerInjectable from "../../../common/logger.injectable"; +import autoBindReact from "auto-bind/react"; export interface DropFileInputProps extends React.DOMAttributes { className?: IClassName; @@ -35,7 +36,7 @@ class NonInjectedDropFileInput extends React.Component & Dependencies) { super(props); makeObservable(this); - autoBind(this); + autoBindReact(this); } onDragEnter() { diff --git a/packages/core/src/renderer/components/input/input.tsx b/packages/core/src/renderer/components/input/input.tsx index bbbfa60a86..ef4e52f3ed 100644 --- a/packages/core/src/renderer/components/input/input.tsx +++ b/packages/core/src/renderer/components/input/input.tsx @@ -7,8 +7,8 @@ import "./input.scss"; import type { DOMAttributes, InputHTMLAttributes, TextareaHTMLAttributes } from "react"; import React from "react"; -import type { SingleOrMany } from "../../utils"; -import { autoBind, cssNames, debouncePromise, getRandId, isPromiseSettledFulfilled } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; +import { debouncePromise, isPromiseSettledFulfilled, cssNames } from "@k8slens/utilities"; import { Icon } from "../icon"; import type { TooltipProps } from "../tooltip"; import { Tooltip } from "../tooltip"; @@ -16,6 +16,8 @@ import * as Validators from "./input_validators"; import type { InputValidator, InputValidation, InputValidationResult, SyncValidationMessage } from "./input_validators"; import uniqueId from "lodash/uniqueId"; import { debounce } from "lodash"; +import * as uuid from "uuid"; +import autoBindReact from "auto-bind/react"; const { conditionalValidators, @@ -113,7 +115,7 @@ export class Input extends React.Component { constructor(props: InputProps) { super(props); - autoBind(this); + autoBindReact(this); } componentWillUnmount(): void { @@ -428,7 +430,7 @@ export class Input extends React.Component { ); const componentId = id || showErrorsAsTooltip - ? getRandId({ prefix: "input_tooltip_id" }) + ? `input_tooltip_id_${uuid.v4()}` : undefined; let tooltipError: React.ReactNode; diff --git a/packages/core/src/renderer/components/input/search-input.tsx b/packages/core/src/renderer/components/input/search-input.tsx index 4aff4a6ffa..d0365ba5e9 100644 --- a/packages/core/src/renderer/components/input/search-input.tsx +++ b/packages/core/src/renderer/components/input/search-input.tsx @@ -7,12 +7,13 @@ import "./search-input.scss"; import React, { createRef } from "react"; import { observer } from "mobx-react"; -import { cssNames, autoBind } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Icon } from "../icon"; import type { InputProps } from "./input"; import { Input } from "./input"; import { withInjectables } from "@ogre-tools/injectable-react"; import isMacInjectable from "../../../common/vars/is-mac.injectable"; +import autoBindReact from "auto-bind/react"; export interface SearchInputProps extends InputProps { compact?: boolean; // show only search-icon when not focused @@ -40,7 +41,7 @@ class NonInjectedSearchInput extends React.Component { getFilters: () => Filter[]; @@ -86,7 +87,7 @@ class NonInjectedItemListLayoutContent< constructor(props: ItemListLayoutContentProps & Dependencies) { super(props); makeObservable(this); - autoBind(this); + autoBindReact(this); } @computed get failedToLoad() { diff --git a/packages/core/src/renderer/components/item-object-list/header.tsx b/packages/core/src/renderer/components/item-object-list/header.tsx index 2b60b3858f..6da69312f5 100644 --- a/packages/core/src/renderer/components/item-object-list/header.tsx +++ b/packages/core/src/renderer/components/item-object-list/header.tsx @@ -8,8 +8,8 @@ import "./item-list-layout.scss"; import type { ReactNode } from "react"; import React from "react"; import { observer } from "mobx-react"; -import type { IClassName } from "../../utils"; -import { cssNames, isDefined } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { cssNames, isDefined } from "@k8slens/utilities"; import type { ItemObject } from "../../../common/item.store"; import type { Filter } from "./page-filters/store"; import type { HeaderCustomizer, HeaderPlaceholders, ItemListStore, SearchFilter } from "./list-layout"; diff --git a/packages/core/src/renderer/components/item-object-list/list-layout.tsx b/packages/core/src/renderer/components/item-object-list/list-layout.tsx index 2d3a9ae17b..525558f533 100644 --- a/packages/core/src/renderer/components/item-object-list/list-layout.tsx +++ b/packages/core/src/renderer/components/item-object-list/list-layout.tsx @@ -11,8 +11,8 @@ import type { IComputedValue } from "mobx"; import { computed, makeObservable, untracked } from "mobx"; import type { ConfirmDialogParams } from "../confirm-dialog"; import type { TableCellProps, TableProps, TableRowProps, TableSortCallbacks } from "../table"; -import type { IClassName, SingleOrMany, StorageLayer } from "../../utils"; -import { autoBind, cssNames, noop } from "../../utils"; +import type { IClassName, SingleOrMany } from "@k8slens/utilities"; +import { cssNames, noop } from "@k8slens/utilities"; import type { AddRemoveButtonsProps } from "../add-remove-buttons"; import type { ItemObject } from "../../../common/item.store"; import type { SearchInputUrlProps } from "../input"; @@ -30,6 +30,8 @@ import type { Primitive } from "type-fest"; import type { SubscribableStore } from "../../kube-watch-api/kube-watch-api"; import selectedFilterNamespacesInjectable from "../../../common/k8s-api/selected-filter-namespaces.injectable"; import pageFiltersStoreInjectable from "./page-filters/store.injectable"; +import type { StorageLayer } from "../../utils/storage-helper"; +import autoBindReact from "auto-bind/react"; export type SearchFilter = (item: I) => SingleOrMany; export type SearchFilters = Record>; @@ -176,7 +178,7 @@ class NonInjectedItemListLayout & Dependencies) { super(props); makeObservable(this); - autoBind(this); + autoBindReact(this); } async componentDidMount() { diff --git a/packages/core/src/renderer/components/item-object-list/page-filters/list.tsx b/packages/core/src/renderer/components/item-object-list/page-filters/list.tsx index 58c4463b65..51590adb23 100644 --- a/packages/core/src/renderer/components/item-object-list/page-filters/list.tsx +++ b/packages/core/src/renderer/components/item-object-list/page-filters/list.tsx @@ -7,7 +7,7 @@ import "./list.scss"; import React from "react"; import { observer } from "mobx-react"; import { Badge } from "../../badge"; -import { cssNames } from "../../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { Filter, PageFiltersStore } from "./store"; import { FilterIcon } from "../filter-icon"; import { Icon } from "../../icon"; diff --git a/packages/core/src/renderer/components/item-object-list/page-filters/store.ts b/packages/core/src/renderer/components/item-object-list/page-filters/store.ts index d9a088f539..ca982bc92a 100644 --- a/packages/core/src/renderer/components/item-object-list/page-filters/store.ts +++ b/packages/core/src/renderer/components/item-object-list/page-filters/store.ts @@ -5,7 +5,7 @@ import { computed, observable, reaction, makeObservable, action } from "mobx"; import type { PageParam } from "../../../navigation/page-param"; -import { autoBind } from "../../../utils"; +import { autoBind } from "@k8slens/utilities"; export enum FilterType { SEARCH = "search", diff --git a/packages/core/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx b/packages/core/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx index 82929e788c..cf1e340bef 100644 --- a/packages/core/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx +++ b/packages/core/src/renderer/components/kube-object-list-layout/kube-object-list-layout.tsx @@ -8,8 +8,8 @@ import "./kube-object-list-layout.scss"; import React from "react"; import { computed, observable, reaction } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; -import type { Disposer } from "../../utils"; -import { cssNames, isDefined } from "../../utils"; +import type { Disposer } from "@k8slens/utilities"; +import { cssNames, isDefined } from "@k8slens/utilities"; import type { KubeJsonApiDataFor, KubeObject } from "../../../common/k8s-api/kube-object"; import type { ItemListLayoutProps } from "../item-object-list/list-layout"; import { ItemListLayout } from "../item-object-list/list-layout"; diff --git a/packages/core/src/renderer/components/kube-object-menu/kube-object-menu.tsx b/packages/core/src/renderer/components/kube-object-menu/kube-object-menu.tsx index eb0dc025b9..3593ae2116 100644 --- a/packages/core/src/renderer/components/kube-object-menu/kube-object-menu.tsx +++ b/packages/core/src/renderer/components/kube-object-menu/kube-object-menu.tsx @@ -4,7 +4,7 @@ */ import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { KubeObject } from "../../../common/k8s-api/kube-object"; import type { MenuActionsProps } from "../menu"; import { MenuItem, MenuActions } from "../menu"; diff --git a/packages/core/src/renderer/components/kube-object-status-icon/kube-object-status-icon.tsx b/packages/core/src/renderer/components/kube-object-status-icon/kube-object-status-icon.tsx index dd9e68d3f8..c3a5852e0a 100644 --- a/packages/core/src/renderer/components/kube-object-status-icon/kube-object-status-icon.tsx +++ b/packages/core/src/renderer/components/kube-object-status-icon/kube-object-status-icon.tsx @@ -7,7 +7,7 @@ import "./kube-object-status-icon.scss"; import React from "react"; import { Icon } from "../icon"; -import { cssNames, formatDuration, getOrInsert, isDefined } from "../../utils"; +import { cssNames, formatDuration, getOrInsert, isDefined } from "@k8slens/utilities"; import { withInjectables } from "@ogre-tools/injectable-react"; import kubeObjectStatusTextsForObjectInjectable from "./kube-object-status-texts-for-object.injectable"; import type { KubeObject } from "../../../common/k8s-api/kube-object"; diff --git a/packages/core/src/renderer/components/kubeconfig-dialog/kubeconfig-dialog.tsx b/packages/core/src/renderer/components/kubeconfig-dialog/kubeconfig-dialog.tsx index fd497c9c35..476edf4154 100644 --- a/packages/core/src/renderer/components/kubeconfig-dialog/kubeconfig-dialog.tsx +++ b/packages/core/src/renderer/components/kubeconfig-dialog/kubeconfig-dialog.tsx @@ -7,7 +7,7 @@ import styles from "./kubeconfig-dialog.module.scss"; import React from "react"; import type { IObservableValue } from "mobx"; import { observer } from "mobx-react"; -import { cssNames, saveFileDialog } from "../../utils"; +import { cssNames, saveFileDialog } from "@k8slens/utilities"; import { Button } from "../button"; import type { DialogProps } from "../dialog"; import { Dialog } from "../dialog"; diff --git a/packages/core/src/renderer/components/kubeconfig-dialog/open-service-account-kube-config-dialog.injectable.ts b/packages/core/src/renderer/components/kubeconfig-dialog/open-service-account-kube-config-dialog.injectable.ts index 4c0e4255b1..32e79e4fb3 100644 --- a/packages/core/src/renderer/components/kubeconfig-dialog/open-service-account-kube-config-dialog.injectable.ts +++ b/packages/core/src/renderer/components/kubeconfig-dialog/open-service-account-kube-config-dialog.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import apiBaseInjectable from "../../../common/k8s-api/api-base.injectable"; import type { ServiceAccount } from "../../../common/k8s-api/endpoints"; -import { urlBuilderFor } from "../../../common/utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities/src/buildUrl"; import openKubeconfigDialogInjectable from "./open.injectable"; export type OpenServiceAccountKubeConfigDialog = (account: ServiceAccount) => void; diff --git a/packages/core/src/renderer/components/layout/main-layout.tsx b/packages/core/src/renderer/components/layout/main-layout.tsx index 9a5ff95549..ab0a2a4c09 100755 --- a/packages/core/src/renderer/components/layout/main-layout.tsx +++ b/packages/core/src/renderer/components/layout/main-layout.tsx @@ -7,8 +7,8 @@ import styles from "./main-layout.module.scss"; import React from "react"; import { observer } from "mobx-react"; -import type { StorageLayer } from "../../utils"; -import { cssNames } from "../../utils"; +import type { StorageLayer } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; import { ErrorBoundary } from "../error-boundary"; import { ResizeDirection, ResizeGrowthDirection, ResizeSide, ResizingAnchor } from "../resizing-anchor"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/components/layout/setting-layout.tsx b/packages/core/src/renderer/components/layout/setting-layout.tsx index b6e0e58ec2..09ceba9a5d 100644 --- a/packages/core/src/renderer/components/layout/setting-layout.tsx +++ b/packages/core/src/renderer/components/layout/setting-layout.tsx @@ -7,8 +7,8 @@ import "./setting-layout.scss"; import React from "react"; import { observer } from "mobx-react"; -import type { IClassName } from "../../utils"; -import { cssNames } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; import { CloseButton } from "./close-button"; import { getLegacyGlobalDiForExtensionApi } from "../../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import navigateToCatalogInjectable from "../../../common/front-end-routing/routes/catalog/navigate-to-catalog.injectable"; diff --git a/packages/core/src/renderer/components/layout/sidebar-item.tsx b/packages/core/src/renderer/components/layout/sidebar-item.tsx index f3e171fc4b..53ff7f8d53 100644 --- a/packages/core/src/renderer/components/layout/sidebar-item.tsx +++ b/packages/core/src/renderer/components/layout/sidebar-item.tsx @@ -7,8 +7,8 @@ import styles from "./sidebar-items.module.scss"; import React from "react"; import { computed, makeObservable } from "mobx"; -import type { StorageLayer } from "../../utils"; -import { cssNames } from "../../utils"; +import type { StorageLayer } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; import { observer } from "mobx-react"; import { NavLink } from "react-router-dom"; import { Icon } from "../icon"; diff --git a/packages/core/src/renderer/components/layout/sidebar.tsx b/packages/core/src/renderer/components/layout/sidebar.tsx index 7fcd1b6793..9230ce4b5d 100644 --- a/packages/core/src/renderer/components/layout/sidebar.tsx +++ b/packages/core/src/renderer/components/layout/sidebar.tsx @@ -7,7 +7,7 @@ import styles from "./sidebar.module.scss"; import React from "react"; import { observer } from "mobx-react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { SidebarItem } from "./sidebar-item"; import type { CatalogEntityRegistry } from "../../api/catalog/entity/registry"; import { SidebarCluster } from "./sidebar-cluster"; diff --git a/packages/core/src/renderer/components/layout/sub-header.tsx b/packages/core/src/renderer/components/layout/sub-header.tsx index 0530fef944..7a782d1123 100644 --- a/packages/core/src/renderer/components/layout/sub-header.tsx +++ b/packages/core/src/renderer/components/layout/sub-header.tsx @@ -5,8 +5,8 @@ import "./sub-header.scss"; import React from "react"; -import type { SingleOrMany } from "../../utils"; -import { cssNames } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; export interface SubHeaderProps { className?: string; diff --git a/packages/core/src/renderer/components/layout/sub-title.tsx b/packages/core/src/renderer/components/layout/sub-title.tsx index 3ee50d44e9..90ab8dc3e7 100644 --- a/packages/core/src/renderer/components/layout/sub-title.tsx +++ b/packages/core/src/renderer/components/layout/sub-title.tsx @@ -5,8 +5,8 @@ import "./sub-title.scss"; import React from "react"; -import type { SingleOrMany } from "../../utils"; -import { cssNames } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; export interface SubTitleProps { className?: string; diff --git a/packages/core/src/renderer/components/layout/tab-layout-2.tsx b/packages/core/src/renderer/components/layout/tab-layout-2.tsx index 7d81c58d34..a9f720aef2 100644 --- a/packages/core/src/renderer/components/layout/tab-layout-2.tsx +++ b/packages/core/src/renderer/components/layout/tab-layout-2.tsx @@ -7,7 +7,7 @@ import "./tab-layout.scss"; import React from "react"; import { observer } from "mobx-react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Tab, Tabs } from "../tabs"; import { ErrorBoundary } from "../error-boundary"; import type { HierarchicalSidebarItem } from "./sidebar-items.injectable"; diff --git a/packages/core/src/renderer/components/layout/tab-layout.tsx b/packages/core/src/renderer/components/layout/tab-layout.tsx index ddbbeea691..d91a31d5e8 100644 --- a/packages/core/src/renderer/components/layout/tab-layout.tsx +++ b/packages/core/src/renderer/components/layout/tab-layout.tsx @@ -9,8 +9,8 @@ import type { ReactNode } from "react"; import React from "react"; import { matchPath, Redirect, Route, Switch } from "react-router"; import { observer } from "mobx-react"; -import type { IClassName } from "../../utils"; -import { cssNames } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; import { Tab, Tabs } from "../tabs"; import { ErrorBoundary } from "../error-boundary"; import type { ObservableHistory } from "mobx-observable-history"; diff --git a/packages/core/src/renderer/components/layout/top-bar/toggle-maximize-window/toggle-maximize-window.global-override-for-injectable.ts b/packages/core/src/renderer/components/layout/top-bar/toggle-maximize-window/toggle-maximize-window.global-override-for-injectable.ts index e7584a243b..c9512cb43e 100644 --- a/packages/core/src/renderer/components/layout/top-bar/toggle-maximize-window/toggle-maximize-window.global-override-for-injectable.ts +++ b/packages/core/src/renderer/components/layout/top-bar/toggle-maximize-window/toggle-maximize-window.global-override-for-injectable.ts @@ -3,6 +3,6 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import toggleMaximizeWindowInjectable from "./toggle-maximize-window.injectable"; -import { getGlobalOverrideForFunction } from "../../../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "../../../../../../../utility-features/test-utils/src/get-global-override-for-function"; export default getGlobalOverrideForFunction(toggleMaximizeWindowInjectable); diff --git a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/context-menu/open-app-context-menu/open-app-context-menu.global-override-for-injectable.ts b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/context-menu/open-app-context-menu/open-app-context-menu.global-override-for-injectable.ts index 2dfd22bb5e..3210a9c4f8 100644 --- a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/context-menu/open-app-context-menu/open-app-context-menu.global-override-for-injectable.ts +++ b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/context-menu/open-app-context-menu/open-app-context-menu.global-override-for-injectable.ts @@ -3,6 +3,6 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import openAppContextMenuInjectable from "./open-app-context-menu.injectable"; -import { getGlobalOverrideForFunction } from "../../../../../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "../../../../../../../../../utility-features/test-utils/src/get-global-override-for-function"; export default getGlobalOverrideForFunction(openAppContextMenuInjectable); diff --git a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/navigation-to-back/go-back/go-back.global-override-for-injectable.ts b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/navigation-to-back/go-back/go-back.global-override-for-injectable.ts index f0d421a883..b54321e220 100644 --- a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/navigation-to-back/go-back/go-back.global-override-for-injectable.ts +++ b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/navigation-to-back/go-back/go-back.global-override-for-injectable.ts @@ -3,6 +3,6 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import goBackInjectable from "./go-back.injectable"; -import { getGlobalOverrideForFunction } from "../../../../../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "../../../../../../../../../utility-features/test-utils/src/get-global-override-for-function"; export default getGlobalOverrideForFunction(goBackInjectable); diff --git a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/navigation-to-forward/go-forward/go-forward.global-override-for-injectable.ts b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/navigation-to-forward/go-forward/go-forward.global-override-for-injectable.ts index f4e2520381..3f3d3348c2 100644 --- a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/navigation-to-forward/go-forward/go-forward.global-override-for-injectable.ts +++ b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/navigation-to-forward/go-forward/go-forward.global-override-for-injectable.ts @@ -3,6 +3,6 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import goForwardInjectable from "./go-forward.injectable"; -import { getGlobalOverrideForFunction } from "../../../../../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "../../../../../../../../../utility-features/test-utils/src/get-global-override-for-function"; export default getGlobalOverrideForFunction(goForwardInjectable); diff --git a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/close-window/close-window.global-override-for-injectable.ts b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/close-window/close-window.global-override-for-injectable.ts index f8124bbbe5..ecd45ec1e6 100644 --- a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/close-window/close-window.global-override-for-injectable.ts +++ b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/close-window/close-window.global-override-for-injectable.ts @@ -3,6 +3,6 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import closeWindowInjectable from "./close-window.injectable"; -import { getGlobalOverrideForFunction } from "../../../../../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "../../../../../../../../../utility-features/test-utils/src/get-global-override-for-function"; export default getGlobalOverrideForFunction(closeWindowInjectable); diff --git a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/maximize-window/maximize-window.global-override-for-injectable.ts b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/maximize-window/maximize-window.global-override-for-injectable.ts index e0056a6ee8..3c558b6958 100644 --- a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/maximize-window/maximize-window.global-override-for-injectable.ts +++ b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/maximize-window/maximize-window.global-override-for-injectable.ts @@ -3,6 +3,6 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import maximizeWindowInjectable from "./maximize-window.injectable"; -import { getGlobalOverrideForFunction } from "../../../../../../../common/test-utils/get-global-override-for-function"; +import { getGlobalOverrideForFunction } from "../../../../../../../../../utility-features/test-utils/src/get-global-override-for-function"; export default getGlobalOverrideForFunction(maximizeWindowInjectable); diff --git a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/window-controls.tsx b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/window-controls.tsx index 08cdee837f..7c1665395a 100644 --- a/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/window-controls.tsx +++ b/packages/core/src/renderer/components/layout/top-bar/top-bar-items/window-controls/window-controls.tsx @@ -4,7 +4,7 @@ */ import React from "react"; import { withInjectables } from "@ogre-tools/injectable-react"; -import { cssNames } from "../../../../../utils"; +import { cssNames } from "@k8slens/utilities"; import styles from "../../top-bar.module.scss"; import isLinuxInjectable from "../../../../../../common/vars/is-linux.injectable"; import toggleMaximizeWindowInjectable from "../../toggle-maximize-window/toggle-maximize-window.injectable"; diff --git a/packages/core/src/renderer/components/layout/wizard-layout.tsx b/packages/core/src/renderer/components/layout/wizard-layout.tsx index 9012a0f66f..bcdb47f9c5 100644 --- a/packages/core/src/renderer/components/layout/wizard-layout.tsx +++ b/packages/core/src/renderer/components/layout/wizard-layout.tsx @@ -6,8 +6,8 @@ import "./wizard-layout.scss"; import React from "react"; import { observer } from "mobx-react"; -import type { IClassName } from "../../utils"; -import { cssNames } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; export interface WizardLayoutProps extends React.DOMAttributes { className?: IClassName; diff --git a/packages/core/src/renderer/components/line-progress/line-progress.tsx b/packages/core/src/renderer/components/line-progress/line-progress.tsx index 24ef169176..22e2e6437a 100644 --- a/packages/core/src/renderer/components/line-progress/line-progress.tsx +++ b/packages/core/src/renderer/components/line-progress/line-progress.tsx @@ -5,7 +5,7 @@ import "./line-progress.scss"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { withTooltip } from "../tooltip"; export interface LineProgressProps extends React.HTMLProps { diff --git a/packages/core/src/renderer/components/markdown-viewer/markdown-viewer.tsx b/packages/core/src/renderer/components/markdown-viewer/markdown-viewer.tsx index 66261cd7e4..62b223ccf3 100644 --- a/packages/core/src/renderer/components/markdown-viewer/markdown-viewer.tsx +++ b/packages/core/src/renderer/components/markdown-viewer/markdown-viewer.tsx @@ -10,7 +10,7 @@ import "./markdown-viewer.scss"; import React, { Component } from "react"; import { marked } from "marked"; import DOMPurify from "dompurify"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; DOMPurify.addHook("afterSanitizeAttributes", function (node) { // Set all elements owning target to target=_blank diff --git a/packages/core/src/renderer/components/menu/menu-actions.tsx b/packages/core/src/renderer/components/menu/menu-actions.tsx index 0e77446caf..2eebf36778 100644 --- a/packages/core/src/renderer/components/menu/menu-actions.tsx +++ b/packages/core/src/renderer/components/menu/menu-actions.tsx @@ -8,7 +8,7 @@ import "./menu-actions.scss"; import React, { isValidElement } from "react"; import { observable, makeObservable, reaction } from "mobx"; import { disposeOnUnmount, observer } from "mobx-react"; -import { autoBind, cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { IconProps } from "../icon"; import { Icon } from "../icon"; import type { MenuProps } from "./menu"; @@ -19,6 +19,7 @@ import type { OpenConfirmDialog } from "../confirm-dialog/open.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; import openConfirmDialogInjectable from "../confirm-dialog/open.injectable"; import getRandomIdInjectable from "../../../common/utils/get-random-id.injectable"; +import autoBindReact from "auto-bind/react"; export interface MenuActionsProps extends Partial { className?: string; @@ -61,7 +62,7 @@ class NonInjectedMenuActions extends React.Component(null); export interface MenuContextValue { @@ -78,7 +79,7 @@ class NonInjectedMenu extends React.Component { constructor(props: MenuProps & Dependencies) { super(props); - autoBind(this); + autoBindReact(this); } private opener: HTMLElement | null = null; private elem: HTMLUListElement | null = null; @@ -431,7 +432,7 @@ export class MenuItem extends React.Component { constructor(props: MenuItemProps) { super(props); - autoBind(this); + autoBindReact(this); } get isFocusable() { diff --git a/packages/core/src/renderer/components/monaco-editor/monaco-editor.tsx b/packages/core/src/renderer/components/monaco-editor/monaco-editor.tsx index debb076ab8..d41ab4157b 100644 --- a/packages/core/src/renderer/components/monaco-editor/monaco-editor.tsx +++ b/packages/core/src/renderer/components/monaco-editor/monaco-editor.tsx @@ -12,7 +12,7 @@ import { editor, Uri } from "monaco-editor"; import type { MonacoTheme } from "./monaco-themes"; import { type MonacoValidator, monacoValidators } from "./monaco-validators"; import { debounce, merge } from "lodash"; -import { autoBind, cssNames, disposer } from "../../utils"; +import { cssNames, disposer } from "@k8slens/utilities"; import type { UserStore } from "../../../common/user-store"; import type { LensTheme } from "../../themes/lens-theme"; import { withInjectables } from "@ogre-tools/injectable-react"; @@ -21,6 +21,7 @@ import activeThemeInjectable from "../../themes/active.injectable"; import getEditorHeightFromLinesCountInjectable from "./get-editor-height-from-lines-number.injectable"; import type { Logger } from "../../../common/logger"; import loggerInjectable from "../../../common/logger.injectable"; +import autoBindReact from "auto-bind/react"; export type MonacoEditorId = string; @@ -82,7 +83,7 @@ class NonInjectedMonacoEditor extends React.Component { className?: string; diff --git a/packages/core/src/renderer/components/render-delay/render-delay.tsx b/packages/core/src/renderer/components/render-delay/render-delay.tsx index 5951babe6d..7d65b68071 100644 --- a/packages/core/src/renderer/components/render-delay/render-delay.tsx +++ b/packages/core/src/renderer/components/render-delay/render-delay.tsx @@ -4,7 +4,7 @@ */ import React, { useEffect, useState } from "react"; -import type { SingleOrMany } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; import type { RequestIdleCallback } from "./request-idle-callback.injectable"; import type { CancelIdleCallback } from "./cancel-idle-callback.injectable"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/components/resizing-anchor/resizing-anchor.tsx b/packages/core/src/renderer/components/resizing-anchor/resizing-anchor.tsx index c65d4c4bf8..212366b628 100644 --- a/packages/core/src/renderer/components/resizing-anchor/resizing-anchor.tsx +++ b/packages/core/src/renderer/components/resizing-anchor/resizing-anchor.tsx @@ -7,7 +7,7 @@ import "./resizing-anchor.scss"; import React from "react"; import { action, observable, makeObservable } from "mobx"; import _ from "lodash"; -import { cssNames, noop } from "../../utils"; +import { cssNames, noop } from "@k8slens/utilities"; import { observer } from "mobx-react"; export enum ResizeDirection { diff --git a/packages/core/src/renderer/components/resource-metrics/resource-metrics.tsx b/packages/core/src/renderer/components/resource-metrics/resource-metrics.tsx index c10075ac6d..7c737027e3 100644 --- a/packages/core/src/renderer/components/resource-metrics/resource-metrics.tsx +++ b/packages/core/src/renderer/components/resource-metrics/resource-metrics.tsx @@ -8,7 +8,7 @@ import "./resource-metrics.scss"; import React, { createContext, useState } from "react"; import { Radio, RadioGroup } from "../radio"; import type { KubeObject } from "../../../common/k8s-api/kube-object"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Spinner } from "../spinner"; import type { MetricsTab } from "../chart/options"; import type { MetricData } from "../../../common/k8s-api/endpoints/metrics.api"; diff --git a/packages/core/src/renderer/components/select/select.tsx b/packages/core/src/renderer/components/select/select.tsx index 2d07442b1f..891fa59aa4 100644 --- a/packages/core/src/renderer/components/select/select.tsx +++ b/packages/core/src/renderer/components/select/select.tsx @@ -14,9 +14,10 @@ import { observer } from "mobx-react"; import ReactSelect, { components, createFilter } from "react-select"; import type { Props as ReactSelectProps, GroupBase, MultiValue, OptionsOrGroups, PropsValue, SingleValue } from "react-select"; import type { LensTheme } from "../../themes/lens-theme"; -import { autoBind, cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { withInjectables } from "@ogre-tools/injectable-react"; import activeThemeInjectable from "../../themes/active.injectable"; +import autoBindReact from "auto-bind/react"; const { Menu } = components; @@ -120,7 +121,7 @@ class NonInjectedSelect< constructor(props: SelectProps & Dependencies) { super(props); makeObservable(this); - autoBind(this); + autoBindReact(this); } @computed get themeClass() { diff --git a/packages/core/src/renderer/components/slider/slider.tsx b/packages/core/src/renderer/components/slider/slider.tsx index a026826036..8a696a95df 100644 --- a/packages/core/src/renderer/components/slider/slider.tsx +++ b/packages/core/src/renderer/components/slider/slider.tsx @@ -8,7 +8,7 @@ import "./slider.scss"; import React, { Component } from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import type { SliderClassKey, SliderProps as MaterialSliderProps } from "@material-ui/core/Slider"; import MaterialSlider from "@material-ui/core/Slider"; import assert from "assert"; diff --git a/packages/core/src/renderer/components/spinner/spinner.tsx b/packages/core/src/renderer/components/spinner/spinner.tsx index 3cf46baa9c..20fa9ebfdd 100644 --- a/packages/core/src/renderer/components/spinner/spinner.tsx +++ b/packages/core/src/renderer/components/spinner/spinner.tsx @@ -6,7 +6,7 @@ import "./spinner.scss"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export interface SpinnerProps extends React.HTMLProps { singleColor?: boolean; diff --git a/packages/core/src/renderer/components/status-brick/status-brick.tsx b/packages/core/src/renderer/components/status-brick/status-brick.tsx index a9cc89fed2..858cdd8580 100644 --- a/packages/core/src/renderer/components/status-brick/status-brick.tsx +++ b/packages/core/src/renderer/components/status-brick/status-brick.tsx @@ -6,7 +6,7 @@ import "./status-brick.scss"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { withTooltip } from "../tooltip"; export interface StatusBrickProps extends React.HTMLAttributes { diff --git a/packages/core/src/renderer/components/stepper/stepper.tsx b/packages/core/src/renderer/components/stepper/stepper.tsx index 725cb1d827..301d3716f8 100644 --- a/packages/core/src/renderer/components/stepper/stepper.tsx +++ b/packages/core/src/renderer/components/stepper/stepper.tsx @@ -5,7 +5,7 @@ import "./stepper.scss"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export interface StepperProps extends React.HTMLProps { step: number; diff --git a/packages/core/src/renderer/components/switch/switch.tsx b/packages/core/src/renderer/components/switch/switch.tsx index 2f91faf1a9..7bef386dd5 100644 --- a/packages/core/src/renderer/components/switch/switch.tsx +++ b/packages/core/src/renderer/components/switch/switch.tsx @@ -7,7 +7,7 @@ import styles from "./switch.module.scss"; import type { ChangeEvent, HTMLProps } from "react"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export interface SwitchProps extends Omit, "onChange"> { onChange?: (checked: boolean, event: ChangeEvent) => void; diff --git a/packages/core/src/renderer/components/table/react-table.tsx b/packages/core/src/renderer/components/table/react-table.tsx index e1dcc59ab9..68835e1741 100644 --- a/packages/core/src/renderer/components/table/react-table.tsx +++ b/packages/core/src/renderer/components/table/react-table.tsx @@ -8,7 +8,7 @@ import React, { useCallback, useMemo } from "react"; import type { Row, UseTableOptions } from "react-table"; import { useFlexLayout, useSortBy, useTable } from "react-table"; import { Icon } from "../icon"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export interface ReactTableProps extends UseTableOptions { headless?: boolean; diff --git a/packages/core/src/renderer/components/table/sorting.ts b/packages/core/src/renderer/components/table/sorting.ts index 828ae1e378..81ca0786c9 100644 --- a/packages/core/src/renderer/components/table/sorting.ts +++ b/packages/core/src/renderer/components/table/sorting.ts @@ -4,7 +4,7 @@ */ import type { TableOrderBy, TableSortCallback } from "./table"; -import { Ordering, rectifyOrdering, sortCompare, tuple } from "../../utils"; +import { Ordering, rectifyOrdering, sortCompare, tuple } from "@k8slens/utilities"; export function getSorted(rawItems: T[], sortingCallback: TableSortCallback | undefined, orderBy: TableOrderBy = "asc"): T[] { if (typeof sortingCallback !== "function") { diff --git a/packages/core/src/renderer/components/table/table-cell.tsx b/packages/core/src/renderer/components/table/table-cell.tsx index 758c5cd951..69f45936f8 100644 --- a/packages/core/src/renderer/components/table/table-cell.tsx +++ b/packages/core/src/renderer/components/table/table-cell.tsx @@ -8,9 +8,10 @@ import type { TableSortBy, TableSortParams } from "./table"; import type { ReactNode } from "react"; import React from "react"; -import { autoBind, cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Icon } from "../icon"; import { Checkbox } from "../checkbox"; +import autoBindReact from "auto-bind/react"; export type TableCellElem = React.ReactElement; @@ -75,7 +76,7 @@ export interface TableCellProps extends React.DOMAttributes { export class TableCell extends React.Component { constructor(props: TableCellProps) { super(props); - autoBind(this); + autoBindReact(this); } onClick(evt: React.MouseEvent) { diff --git a/packages/core/src/renderer/components/table/table-head.tsx b/packages/core/src/renderer/components/table/table-head.tsx index 6424d43041..a336c19b5d 100644 --- a/packages/core/src/renderer/components/table/table-head.tsx +++ b/packages/core/src/renderer/components/table/table-head.tsx @@ -6,7 +6,7 @@ import "./table-head.scss"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export type TableHeadElem = React.ReactElement; diff --git a/packages/core/src/renderer/components/table/table-model/table-model.ts b/packages/core/src/renderer/components/table/table-model/table-model.ts index 4349ada20c..2e002be0e4 100644 --- a/packages/core/src/renderer/components/table/table-model/table-model.ts +++ b/packages/core/src/renderer/components/table/table-model/table-model.ts @@ -2,7 +2,7 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import type { StorageLayer } from "../../../utils"; +import type { StorageLayer } from "@k8slens/utilities"; import type { TableSortParams } from "../table"; export interface TableStorageModel { diff --git a/packages/core/src/renderer/components/table/table-row.tsx b/packages/core/src/renderer/components/table/table-row.tsx index 9725c7112d..aaf4a0a2fb 100644 --- a/packages/core/src/renderer/components/table/table-row.tsx +++ b/packages/core/src/renderer/components/table/table-row.tsx @@ -7,7 +7,7 @@ import "./table-row.scss"; import type { CSSProperties } from "react"; import React from "react"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; export type TableRowElem = React.ReactElement>; diff --git a/packages/core/src/renderer/components/table/table.tsx b/packages/core/src/renderer/components/table/table.tsx index b35aae742c..9c1cbcae70 100644 --- a/packages/core/src/renderer/components/table/table.tsx +++ b/packages/core/src/renderer/components/table/table.tsx @@ -7,7 +7,7 @@ import "./table.scss"; import React from "react"; import { observer } from "mobx-react"; -import { autoBind, cssNames, isDefined } from "../../utils"; +import { cssNames, isDefined } from "@k8slens/utilities"; import type { TableRowElem, TableRowProps } from "./table-row"; import { TableRow } from "./table-row"; import type { TableHeadElem } from "./table-head"; @@ -24,6 +24,7 @@ import type { ItemObject } from "../../../common/item.store"; import assert from "assert"; import orderByUrlParamInjectable from "./order-by-url-param.injectable"; import sortByUrlParamInjectable from "./sort-by-url-param.injectable"; +import autoBindReact from "auto-bind/react"; export type TableSortBy = string; export type TableOrderBy = "asc" | "desc"; @@ -97,7 +98,7 @@ class NonInjectedTable extends React.Component & Dependencies) { super(props); makeObservable(this); - autoBind(this); + autoBindReact(this); } componentDidMount() { diff --git a/packages/core/src/renderer/components/tabs/tabs.tsx b/packages/core/src/renderer/components/tabs/tabs.tsx index 7b08b63159..4e76184f3c 100644 --- a/packages/core/src/renderer/components/tabs/tabs.tsx +++ b/packages/core/src/renderer/components/tabs/tabs.tsx @@ -6,8 +6,9 @@ import "./tabs.scss"; import type { DOMAttributes } from "react"; import React from "react"; -import { autoBind, cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import { Icon } from "../icon"; +import autoBindReact from "auto-bind/react"; const TabsContext = React.createContext>({}); @@ -66,7 +67,7 @@ export class Tab extends React.PureComponent> { constructor(props: TabProps) { super(props); - autoBind(this); + autoBindReact(this); } get isActive() { diff --git a/packages/core/src/renderer/components/tooltip/tooltip.tsx b/packages/core/src/renderer/components/tooltip/tooltip.tsx index 7fc1abddbf..5c2f512f2f 100644 --- a/packages/core/src/renderer/components/tooltip/tooltip.tsx +++ b/packages/core/src/renderer/components/tooltip/tooltip.tsx @@ -8,9 +8,10 @@ import "./tooltip.scss"; import React from "react"; import { createPortal } from "react-dom"; import { observer } from "mobx-react"; -import type { IClassName } from "../../utils"; -import { cssNames, autoBind } from "../../utils"; +import type { IClassName } from "@k8slens/utilities"; +import { cssNames } from "@k8slens/utilities"; import { observable, makeObservable, action } from "mobx"; +import autoBindReact from "auto-bind/react"; export enum TooltipPosition { TOP = "top", @@ -61,7 +62,7 @@ export class Tooltip extends React.Component { constructor(props: TooltipProps) { super(props); makeObservable(this); - autoBind(this); + autoBindReact(this); } get targetElem(): HTMLElement | null { diff --git a/packages/core/src/renderer/components/tooltip/withTooltip.tsx b/packages/core/src/renderer/components/tooltip/withTooltip.tsx index 931653dc8e..821e8bbb2f 100644 --- a/packages/core/src/renderer/components/tooltip/withTooltip.tsx +++ b/packages/core/src/renderer/components/tooltip/withTooltip.tsx @@ -11,7 +11,7 @@ import type { TooltipProps } from "./tooltip"; import { Tooltip } from "./tooltip"; import { isReactNode } from "../../utils/isReactNode"; import uniqueId from "lodash/uniqueId"; -import type { SingleOrMany } from "../../utils"; +import type { SingleOrMany } from "@k8slens/utilities"; export interface TooltipDecoratorProps { tooltip?: ReactNode | Omit; diff --git a/packages/core/src/renderer/components/tree-view/tree-view.tsx b/packages/core/src/renderer/components/tree-view/tree-view.tsx index 8672f9597f..c7fc813199 100644 --- a/packages/core/src/renderer/components/tree-view/tree-view.tsx +++ b/packages/core/src/renderer/components/tree-view/tree-view.tsx @@ -9,7 +9,7 @@ import React, { useEffect, useRef } from "react"; import { Icon } from "../icon"; import TreeView from "@material-ui/lab/TreeView"; import TreeItem from "@material-ui/lab/TreeItem"; -import { cssNames } from "../../utils"; +import { cssNames } from "@k8slens/utilities"; import _ from "lodash"; import getDeepDash from "deepdash"; diff --git a/packages/core/src/renderer/components/virtual-list/virtual-list.tsx b/packages/core/src/renderer/components/virtual-list/virtual-list.tsx index 3ea0aebb1c..2a27376a37 100644 --- a/packages/core/src/renderer/components/virtual-list/virtual-list.tsx +++ b/packages/core/src/renderer/components/virtual-list/virtual-list.tsx @@ -12,7 +12,7 @@ import React, { createRef, forwardRef, useCallback, useEffect, useImperativeHand import { observer } from "mobx-react"; import type { Align, ListChildComponentProps, ListOnScrollProps } from "react-window"; import { VariableSizeList } from "react-window"; -import { cssNames, noop } from "../../utils"; +import { cssNames, noop } from "@k8slens/utilities"; import type { TableRowProps } from "../table/table-row"; import isEqual from "lodash/isEqual"; import AutoSizer from "react-virtualized-auto-sizer"; diff --git a/packages/core/src/renderer/components/wizard/wizard.tsx b/packages/core/src/renderer/components/wizard/wizard.tsx index 5a1e5af789..0e58e12ece 100755 --- a/packages/core/src/renderer/components/wizard/wizard.tsx +++ b/packages/core/src/renderer/components/wizard/wizard.tsx @@ -5,7 +5,7 @@ import "./wizard.scss"; import React from "react"; -import { cssNames, prevDefault } from "../../utils"; +import { cssNames, prevDefault } from "@k8slens/utilities"; import { Button } from "../button"; import { Stepper } from "../stepper"; import { SubTitle } from "../layout/sub-title"; diff --git a/packages/core/src/renderer/frames/cluster-frame/cluster-frame.tsx b/packages/core/src/renderer/frames/cluster-frame/cluster-frame.tsx index 097ebbb87c..dd9d087769 100755 --- a/packages/core/src/renderer/frames/cluster-frame/cluster-frame.tsx +++ b/packages/core/src/renderer/frames/cluster-frame/cluster-frame.tsx @@ -9,7 +9,7 @@ import type { NamespaceStore } from "../../components/+namespaces/store"; import { withInjectables } from "@ogre-tools/injectable-react"; import namespaceStoreInjectable from "../../components/+namespaces/store.injectable"; import type { SubscribeStores } from "../../kube-watch-api/kube-watch-api"; -import { disposer } from "../../utils"; +import { disposer } from "@k8slens/utilities"; import subscribeStoresInjectable from "../../kube-watch-api/subscribe-stores.injectable"; import type { ClusterFrameChildComponent } from "./cluster-frame-child-component-injection-token"; import { clusterFrameChildComponentInjectionToken } from "./cluster-frame-child-component-injection-token"; diff --git a/packages/core/src/renderer/frames/root-frame/init-root-frame.injectable.ts b/packages/core/src/renderer/frames/root-frame/init-root-frame.injectable.ts index 8d2c3a43be..f1e3024d80 100644 --- a/packages/core/src/renderer/frames/root-frame/init-root-frame.injectable.ts +++ b/packages/core/src/renderer/frames/root-frame/init-root-frame.injectable.ts @@ -10,7 +10,7 @@ import catalogEntityRegistryInjectable from "../../api/catalog/entity/registry.i import registerIpcListenersInjectable from "../../ipc/register-ipc-listeners.injectable"; import loadExtensionsInjectable from "../load-extensions.injectable"; import loggerInjectable from "../../../common/logger.injectable"; -import { delay } from "../../../common/utils"; +import { delay } from "@k8slens/utilities"; import { broadcastMessage } from "../../../common/ipc"; import { bundledExtensionsLoaded } from "../../../common/ipc/extension-handling"; diff --git a/packages/core/src/renderer/ipc/index.ts b/packages/core/src/renderer/ipc/index.ts index 4bbf473515..84072e0f4c 100644 --- a/packages/core/src/renderer/ipc/index.ts +++ b/packages/core/src/renderer/ipc/index.ts @@ -9,7 +9,7 @@ import { windowActionHandleChannel, windowLocationChangedChannel, windowOpenAppM import { extensionDiscoveryStateChannel, extensionLoaderFromMainChannel } from "../../common/ipc/extension-handling"; import type { InstalledExtension } from "../../extensions/extension-discovery/extension-discovery"; import type { LensExtensionId } from "../../extensions/lens-extension"; -import { toJS } from "../utils"; +import { toJS } from "@k8slens/utilities"; import type { Location } from "history"; import { getLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import ipcRendererInjectable from "../utils/channel/ipc-renderer.injectable"; diff --git a/packages/core/src/renderer/kube-object/handlers.injectable.ts b/packages/core/src/renderer/kube-object/handlers.injectable.ts index 8344d94034..b8827e2f8d 100644 --- a/packages/core/src/renderer/kube-object/handlers.injectable.ts +++ b/packages/core/src/renderer/kube-object/handlers.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { computed } from "mobx"; import rendererExtensionsInjectable from "../../extensions/renderer-extensions.injectable"; -import { getOrInsert, getOrInsertMap, readonly } from "../utils"; +import { getOrInsert, getOrInsertMap, readonly } from "@k8slens/utilities"; import type { KubeObjectHandlerRegistration, KubeObjectHandlers } from "./handler"; import { staticKubeObjectHandlerInjectionToken } from "./handler"; diff --git a/packages/core/src/renderer/kube-watch-api/kube-watch-api.ts b/packages/core/src/renderer/kube-watch-api/kube-watch-api.ts index 04d6ccb32b..b7b055671f 100644 --- a/packages/core/src/renderer/kube-watch-api/kube-watch-api.ts +++ b/packages/core/src/renderer/kube-watch-api/kube-watch-api.ts @@ -3,8 +3,8 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ import { comparer, reaction } from "mobx"; -import type { Disposer } from "../../common/utils"; -import { disposer, getOrInsert, noop, WrappedAbortController } from "../../common/utils"; +import type { Disposer } from "@k8slens/utilities"; +import { disposer, getOrInsert, noop, WrappedAbortController } from "@k8slens/utilities"; import { once } from "lodash"; import type { Logger } from "../../common/logger"; import type { KubeObjectStoreLoadAllParams, KubeObjectStoreSubscribeParams } from "../../common/k8s-api/kube-object.store"; diff --git a/packages/core/src/renderer/port-forward/port-forward-dialog.tsx b/packages/core/src/renderer/port-forward/port-forward-dialog.tsx index 831edd2e70..cb85dfc3a9 100644 --- a/packages/core/src/renderer/port-forward/port-forward-dialog.tsx +++ b/packages/core/src/renderer/port-forward/port-forward-dialog.tsx @@ -12,7 +12,7 @@ import type { DialogProps } from "../components/dialog"; import { Dialog } from "../components/dialog"; import { Wizard, WizardStep } from "../components/wizard"; import { Input } from "../components/input"; -import { cssNames } from "../utils"; +import { cssNames } from "@k8slens/utilities"; import type { PortForwardStore } from "./port-forward-store/port-forward-store"; import { Checkbox } from "../components/checkbox"; import { withInjectables } from "@ogre-tools/injectable-react"; diff --git a/packages/core/src/renderer/port-forward/port-forward-item.ts b/packages/core/src/renderer/port-forward/port-forward-item.ts index 84ad444ecf..65cc07aa0f 100644 --- a/packages/core/src/renderer/port-forward/port-forward-item.ts +++ b/packages/core/src/renderer/port-forward/port-forward-item.ts @@ -5,7 +5,7 @@ import type { ItemObject } from "../../common/item.store"; -import { autoBind } from "../../common/utils"; +import { autoBind } from "@k8slens/utilities"; export type ForwardedPortStatus = "Active" | "Disabled"; export interface ForwardedPort { diff --git a/packages/core/src/renderer/port-forward/port-forward-store/port-forward-store.ts b/packages/core/src/renderer/port-forward/port-forward-store/port-forward-store.ts index 288ccd6e08..eaf1711bf3 100644 --- a/packages/core/src/renderer/port-forward/port-forward-store/port-forward-store.ts +++ b/packages/core/src/renderer/port-forward/port-forward-store/port-forward-store.ts @@ -5,14 +5,15 @@ import { action, makeObservable, observable, reaction } from "mobx"; import { ItemStore } from "../../../common/item.store"; -import type { StorageLayer } from "../../utils"; -import { autoBind, disposer } from "../../utils"; +import type { StorageLayer } from "../../utils/storage-helper"; +import { disposer } from "@k8slens/utilities"; import type { ForwardedPort } from "../port-forward-item"; import { PortForwardItem } from "../port-forward-item"; import { waitUntilFree } from "tcp-port-used"; import type { Logger } from "../../../common/logger"; import type { JsonApi } from "../../../common/k8s-api/json-api"; import type { RequestActivePortForward } from "./request-active-port-forward.injectable"; +import autoBind from "auto-bind"; interface Dependencies { readonly storage: StorageLayer; diff --git a/packages/core/src/renderer/port-forward/port-forward-store/request-active-port-forward.injectable.ts b/packages/core/src/renderer/port-forward/port-forward-store/request-active-port-forward.injectable.ts index 90f91320c8..6a85c1b9c7 100644 --- a/packages/core/src/renderer/port-forward/port-forward-store/request-active-port-forward.injectable.ts +++ b/packages/core/src/renderer/port-forward/port-forward-store/request-active-port-forward.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import apiBaseInjectable from "../../../common/k8s-api/api-base.injectable"; import loggerInjectable from "../../../common/logger.injectable"; -import { urlBuilderFor } from "../../../common/utils/buildUrl"; +import { urlBuilderFor } from "@k8slens/utilities/src/buildUrl"; import type { ForwardedPort } from "../port-forward-item"; export type RequestActivePortForward = (portForward: ForwardedPort) => Promise; diff --git a/packages/core/src/renderer/routes/extension-page-parameters.injectable.ts b/packages/core/src/renderer/routes/extension-page-parameters.injectable.ts index ad6501cd35..d1897f19ab 100644 --- a/packages/core/src/renderer/routes/extension-page-parameters.injectable.ts +++ b/packages/core/src/renderer/routes/extension-page-parameters.injectable.ts @@ -8,7 +8,7 @@ import type { PageParamInit } from "../navigation/page-param"; import type { LensRendererExtension } from "../../extensions/lens-renderer-extension"; import { map } from "lodash/fp"; import createPageParamInjectable from "../navigation/create-page-param.injectable"; -import { object } from "../utils"; +import { object } from "@k8slens/utilities"; import type { PageRegistration } from "./page-registration"; export interface ExtensionPageParametersInstantiationParam { diff --git a/packages/core/src/renderer/routes/navigate-to-route.injectable.ts b/packages/core/src/renderer/routes/navigate-to-route.injectable.ts index 8b57a02613..a9aad5e99e 100644 --- a/packages/core/src/renderer/routes/navigate-to-route.injectable.ts +++ b/packages/core/src/renderer/routes/navigate-to-route.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import { navigateToUrlInjectionToken } from "../../common/front-end-routing/navigate-to-url-injection-token"; import { navigateToRouteInjectionToken } from "../../common/front-end-routing/navigate-to-route-injection-token"; import currentlyInClusterFrameInjectable from "./currently-in-cluster-frame.injectable"; -import { buildURL } from "../../common/utils/buildUrl"; +import { buildURL } from "@k8slens/utilities/src/buildUrl"; const navigateToRouteInjectable = getInjectable({ id: "navigate-to-route", diff --git a/packages/core/src/renderer/themes/apply-lens-theme.injectable.ts b/packages/core/src/renderer/themes/apply-lens-theme.injectable.ts index 72b721aa14..94afd5c531 100644 --- a/packages/core/src/renderer/themes/apply-lens-theme.injectable.ts +++ b/packages/core/src/renderer/themes/apply-lens-theme.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import loggerInjectable from "../../common/logger.injectable"; import userStoreInjectable from "../../common/user-store/user-store.injectable"; -import { object } from "../utils"; +import { object } from "@k8slens/utilities"; import type { LensTheme } from "./lens-theme"; export type ApplyLensTheme = (theme: LensTheme) => void; diff --git a/packages/core/src/renderer/utils/rbac.ts b/packages/core/src/renderer/utils/rbac.ts index 18748bcfac..b4aa9a6a81 100644 --- a/packages/core/src/renderer/utils/rbac.ts +++ b/packages/core/src/renderer/utils/rbac.ts @@ -5,7 +5,7 @@ import type { KubeResource } from "../../common/rbac"; import { apiResourceRecord } from "../../common/rbac"; -import { object } from "../../common/utils"; +import { object } from "@k8slens/utilities"; export const ResourceNames: Record = { "namespaces": "Namespaces", diff --git a/packages/core/src/renderer/window/event-listener.injectable.ts b/packages/core/src/renderer/window/event-listener.injectable.ts index 78a1827e19..631fec116e 100644 --- a/packages/core/src/renderer/window/event-listener.injectable.ts +++ b/packages/core/src/renderer/window/event-listener.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; -import type { Disposer } from "../utils"; +import type { Disposer } from "@k8slens/utilities"; export type AddWindowEventListener = typeof addWindowEventListener; export type WindowEventListener = (this: Window, ev: WindowEventMap[K]) => any; diff --git a/packages/core/src/test-utils/channel-fakes/override-messaging-from-main-to-window.ts b/packages/core/src/test-utils/channel-fakes/override-messaging-from-main-to-window.ts index f9275c18b2..1b69f13016 100644 --- a/packages/core/src/test-utils/channel-fakes/override-messaging-from-main-to-window.ts +++ b/packages/core/src/test-utils/channel-fakes/override-messaging-from-main-to-window.ts @@ -5,7 +5,7 @@ import type { MessageChannelListener } from "../../common/utils/channel/message-channel-listener-injection-token"; import enlistMessageChannelListenerInjectableInRenderer from "../../renderer/utils/channel/channel-listeners/enlist-message-channel-listener.injectable"; import type { DiContainer } from "@ogre-tools/injectable"; -import { getOrInsert, getOrInsertSet } from "../../common/utils"; +import { getOrInsert, getOrInsertSet } from "@k8slens/utilities"; import type { SendToViewArgs } from "../../main/start-main-application/lens-window/application-window/create-lens-window.injectable"; import { deserialize, serialize } from "v8"; diff --git a/packages/core/src/test-utils/channel-fakes/override-messaging-from-window-to-main.ts b/packages/core/src/test-utils/channel-fakes/override-messaging-from-window-to-main.ts index c39731ac8e..8adc35c4d5 100644 --- a/packages/core/src/test-utils/channel-fakes/override-messaging-from-window-to-main.ts +++ b/packages/core/src/test-utils/channel-fakes/override-messaging-from-window-to-main.ts @@ -6,7 +6,7 @@ import type { DiContainer } from "@ogre-tools/injectable"; import { deserialize, serialize } from "v8"; import type { MessageChannel, MessageChannelListener } from "../../common/utils/channel/message-channel-listener-injection-token"; import enlistMessageChannelListenerInjectableInMain from "../../main/utils/channel/channel-listeners/enlist-message-channel-listener.injectable"; -import { getOrInsertSet } from "../../renderer/utils"; +import { getOrInsertSet } from "@k8slens/utilities"; import sendToMainInjectable from "../../renderer/utils/channel/send-to-main.injectable"; export const overrideMessagingFromWindowToMain = (mainDi: DiContainer) => { diff --git a/packages/open-lens/integration/__tests__/app-preferences.tests.ts b/packages/open-lens/integration/__tests__/app-preferences.tests.ts index 1d7d7029fb..08ebfb6a26 100644 --- a/packages/open-lens/integration/__tests__/app-preferences.tests.ts +++ b/packages/open-lens/integration/__tests__/app-preferences.tests.ts @@ -10,7 +10,7 @@ cluster and vice versa. */ import type { ElectronApplication, Page } from "playwright"; -import * as utils from "../helpers/utils"; +import * as utils from "@k8slens/utilities"; describe("preferences page tests", () => { let window: Page; diff --git a/packages/open-lens/integration/__tests__/cluster-pages.tests.ts b/packages/open-lens/integration/__tests__/cluster-pages.tests.ts index c9130c4f59..e511e85454 100644 --- a/packages/open-lens/integration/__tests__/cluster-pages.tests.ts +++ b/packages/open-lens/integration/__tests__/cluster-pages.tests.ts @@ -9,7 +9,7 @@ TEST_NAMESPACE namespace. This is done to minimize destructive impact of the cluster tests on an existing minikube cluster and vice versa. */ -import * as utils from "../helpers/utils"; +import * as utils from "@k8slens/utilities"; import { minikubeReady } from "../helpers/minikube"; import type { Frame, Page } from "playwright"; import { groupBy, toPairs } from "lodash/fp"; diff --git a/packages/open-lens/integration/__tests__/command-palette.tests.ts b/packages/open-lens/integration/__tests__/command-palette.tests.ts index 670a64c679..c5ff9356d1 100644 --- a/packages/open-lens/integration/__tests__/command-palette.tests.ts +++ b/packages/open-lens/integration/__tests__/command-palette.tests.ts @@ -4,7 +4,7 @@ */ import type { ElectronApplication, Page } from "playwright"; -import * as utils from "../helpers/utils"; +import * as utils from "@k8slens/utilities"; describe("Lens command palette", () => { let window: Page; diff --git a/packages/open-lens/integration/helpers/utils.ts b/packages/open-lens/integration/helpers/utils.ts index bbc52e3157..f92a1aad00 100644 --- a/packages/open-lens/integration/helpers/utils.ts +++ b/packages/open-lens/integration/helpers/utils.ts @@ -10,7 +10,7 @@ import * as uuid from "uuid"; import type { ElectronApplication, Frame, Page } from "playwright"; import { _electron as electron } from "playwright"; import { noop } from "lodash"; -import { disposer } from "../../../core/src/common/utils"; +import { disposer } from "@k8slens/utilities"; export const appPaths: Partial> = { "win32": "./dist/win-unpacked/OpenLens.exe", diff --git a/packages/utility-features/test-utils/index.ts b/packages/utility-features/test-utils/index.ts index a9ead8aa59..7b49686f9f 100644 --- a/packages/utility-features/test-utils/index.ts +++ b/packages/utility-features/test-utils/index.ts @@ -1,3 +1,5 @@ export * from "./src/flush-promises"; +export * from "./src/get-global-override-for-function"; +export * from "./src/get-global-override"; export * from "./src/get-promise-status"; export * from "./src/use-fake-time"; diff --git a/packages/core/src/common/test-utils/get-global-override-for-function.ts b/packages/utility-features/test-utils/src/get-global-override-for-function.ts similarity index 100% rename from packages/core/src/common/test-utils/get-global-override-for-function.ts rename to packages/utility-features/test-utils/src/get-global-override-for-function.ts diff --git a/packages/core/src/common/test-utils/get-global-override.ts b/packages/utility-features/test-utils/src/get-global-override.ts similarity index 100% rename from packages/core/src/common/test-utils/get-global-override.ts rename to packages/utility-features/test-utils/src/get-global-override.ts diff --git a/packages/utility-features/utilities/index.ts b/packages/utility-features/utilities/index.ts index ab2940d092..dc8eacdfdd 100644 --- a/packages/utility-features/utilities/index.ts +++ b/packages/utility-features/utilities/index.ts @@ -1,5 +1,8 @@ export * from "./src/abort-controller"; +export * from "./src/array"; export * from "./src/backoff-caller"; +export * from "./src/base64"; +export * from "./src/buildUrl"; export * from "./src/camelCase"; export * from "./src/collection-functions"; export * from "./src/computed-or"; @@ -17,11 +20,13 @@ export * from "./src/interval"; export * from "./src/is-node-falsy"; export * from "./src/isMiddleClick"; export * from "./src/isReactNode"; +export * from "./src/iter"; export * from "./src/json"; export * from "./src/jsonPath"; export * from "./src/metricUnitsToNumber"; export * from "./src/name-parts"; export * from "./src/noop"; +export * from "./src/object"; export * from "./src/observable-crate"; export * from "./src/on-keyboard-shortcut"; export * from "./src/prevDefault"; @@ -38,8 +43,3 @@ export * from "./src/types"; export * from "./src/union-env-path"; export * from "./src/wait"; export * from "./src/with-concurrency-limit"; - -export * as iter from "./src/iter"; -export * as array from "./src/array"; -export * as object from "./src/object"; -export * as base64 from "./src/base64"; diff --git a/packages/utility-features/utilities/src/array.ts b/packages/utility-features/utilities/src/array.ts index c2fe54f3c9..0f7a554318 100644 --- a/packages/utility-features/utilities/src/array.ts +++ b/packages/utility-features/utilities/src/array.ts @@ -8,7 +8,7 @@ * @param length The number of entries * @param value The value of each of the indices */ -export function filled(length: number, value: T): T[] { +function filled(length: number, value: T): T[] { return Array(length).fill(value); } @@ -23,7 +23,7 @@ export function filled(length: number, value: T): T[] { * @returns the left and right sub-arrays which when conjoined with `element` * is the same as `array`, and `true` */ -export function split(src: T[], element: T): [T[], T[], boolean] { +function split(src: T[], element: T): [T[], T[], boolean] { const index = src.indexOf(element); if (index < 0) { @@ -33,7 +33,7 @@ export function split(src: T[], element: T): [T[], T[], boolean] { return [src.slice(0, index), src.slice(index + 1, src.length), true]; } -export function bifurcate(src: T[], condition: (item: T) => any): [falses: T[], trues: T[]] { +function bifurcate(src: T[], condition: (item: T) => any): [falses: T[], trues: T[]] { const trues: T[] = []; const falses: T[] = []; @@ -47,3 +47,9 @@ export function bifurcate(src: T[], condition: (item: T) => any): [falses: T[ return [falses, trues]; } + +export const array = { + bifurcate, + filled, + split, +}; diff --git a/packages/utility-features/utilities/src/base64.ts b/packages/utility-features/utilities/src/base64.ts index c55a5de6a7..1f2aa0810f 100755 --- a/packages/utility-features/utilities/src/base64.ts +++ b/packages/utility-features/utilities/src/base64.ts @@ -12,7 +12,7 @@ import * as Utf8 from "crypto-js/enc-utf8"; * @param data A Base64 encoded string * @returns The original utf-8 string */ -export function decode(data: string): string { +function decode(data: string): string { return Base64.parse(data).toString(Utf8); } @@ -21,6 +21,11 @@ export function decode(data: string): string { * @param data A normal string * @returns A base64 encoded version */ -export function encode(data: string): string { +function encode(data: string): string { return Utf8.parse(data).toString(Base64); } + +export const base64 = { + encode, + decode, +}; diff --git a/packages/core/src/common/utils/buildUrl.ts b/packages/utility-features/utilities/src/buildUrl.ts similarity index 97% rename from packages/core/src/common/utils/buildUrl.ts rename to packages/utility-features/utilities/src/buildUrl.ts index 82d114cd08..b263d0818d 100644 --- a/packages/core/src/common/utils/buildUrl.ts +++ b/packages/utility-features/utilities/src/buildUrl.ts @@ -5,7 +5,7 @@ import { compile } from "path-to-regexp"; import type { RouteProps } from "react-router"; -import { isDefined } from "./type-narrowing"; +import { isDefined } from "@k8slens/utilities"; export interface UrlRouteProps extends RouteProps { path: string; diff --git a/packages/core/src/common/utils/__tests__/convert-memory.test.ts b/packages/utility-features/utilities/src/convert-memory.test.ts similarity index 98% rename from packages/core/src/common/utils/__tests__/convert-memory.test.ts rename to packages/utility-features/utilities/src/convert-memory.test.ts index c69f43a061..ccbb26c4ba 100644 --- a/packages/core/src/common/utils/__tests__/convert-memory.test.ts +++ b/packages/utility-features/utilities/src/convert-memory.test.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { bytesToUnits, unitsToBytes } from "../convertMemory"; +import { bytesToUnits, unitsToBytes } from "./convertMemory"; describe("unitsToBytes", () => { it("without any units, just parse as float", () => { diff --git a/packages/core/src/common/utils/__tests__/formatDuration.test.ts b/packages/utility-features/utilities/src/formatDuration.test.ts similarity index 97% rename from packages/core/src/common/utils/__tests__/formatDuration.test.ts rename to packages/utility-features/utilities/src/formatDuration.test.ts index 3c42db9060..b72b7173f2 100644 --- a/packages/core/src/common/utils/__tests__/formatDuration.test.ts +++ b/packages/utility-features/utilities/src/formatDuration.test.ts @@ -4,7 +4,7 @@ */ import moment from "moment"; -import { formatDuration } from "../formatDuration"; +import { formatDuration } from "./formatDuration"; const second = 1000; const minute = 60 * second; diff --git a/packages/core/src/common/utils/__tests__/hash-set.test.ts b/packages/utility-features/utilities/src/hash-set.test.ts similarity index 98% rename from packages/core/src/common/utils/__tests__/hash-set.test.ts rename to packages/utility-features/utilities/src/hash-set.test.ts index 4e78a1ca4c..2feaab4d9b 100644 --- a/packages/core/src/common/utils/__tests__/hash-set.test.ts +++ b/packages/utility-features/utilities/src/hash-set.test.ts @@ -3,14 +3,14 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { HashSet, ObservableHashSet } from "../hash-set"; +import { HashSet, ObservableHashSet } from "./hash-set"; describe("ObservableHashSet", () => { it("should not throw on creation", () => { expect(() => new ObservableHashSet<{ a: number }>([], item => item.a.toString())).not.toThrowError(); }); - it("should be initializable", () => { + it("should be initialized", () => { const res = new ObservableHashSet([ { a: 1 }, { a: 2 }, @@ -263,7 +263,7 @@ describe("HashSet", () => { expect(() => new HashSet<{ a: number }>([], item => item.a.toString())).not.toThrowError(); }); - it("should be initializable", () => { + it("should be initialized", () => { const res = new HashSet([ { a: 1 }, { a: 2 }, diff --git a/packages/utility-features/utilities/src/isReactNode.ts b/packages/utility-features/utilities/src/isReactNode.ts index 682ac0f93b..275d18bed9 100755 --- a/packages/utility-features/utilities/src/isReactNode.ts +++ b/packages/utility-features/utilities/src/isReactNode.ts @@ -6,7 +6,7 @@ // Type guard for checking valid react node to use in render import type { ReactNode } from "react"; import React from "react"; -import { isObject } from "../../common/utils"; +import { isObject } from "@k8slens/utilities"; export function isReactNode(node: unknown): node is ReactNode { return (isObject(node) && React.isValidElement(node)) diff --git a/packages/utility-features/utilities/src/iter.test.ts b/packages/utility-features/utilities/src/iter.test.ts new file mode 100644 index 0000000000..c1a4837505 --- /dev/null +++ b/packages/utility-features/utilities/src/iter.test.ts @@ -0,0 +1,101 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ + +import { iter } from "./iter"; + +describe("iter", () => { + describe("reduce", () => { + it("can reduce a value", () => { + expect(iter.reduce([1, 2, 3], (acc: number[], current: number) => [current, ...acc], [0])).toEqual([3, 2, 1, 0]); + }); + + it("can reduce an empty iterable", () => { + expect(iter.reduce([], (acc: number[], current: number) => [acc[0] + current], [])).toEqual([]); + }); + }); + + describe("join", () => { + it("should not prefix the output by the separator", () => { + expect(iter.join(["a", "b", "c"].values(), " ")).toBe("a b c"); + }); + + it("should return empty string if iterator is empty", () => { + expect(iter.join([].values(), " ")).toBe(""); + }); + + it("should return just first entry if iterator is of size 1", () => { + expect(iter.join(["d"].values(), " ")).toBe("d"); + }); + }); + + describe("nth", () => { + it("should return undefined past the end of the iterator", () => { + expect(iter.nth(["a"], 123)).toBeUndefined(); + }); + + it("should by 0-indexing the index", () => { + expect(iter.nth(["a", "b"], 0)).toBe("a"); + }); + }); + + describe("concat", () => { + it("should yield undefined for empty args", () => { + const i = iter.concat(); + + expect(i.next()).toEqual({ done: true }); + }); + + it("should yield undefined for only empty args", () => { + const i = iter.concat([].values(), [].values(), [].values(), [].values()); + + expect(i.next()).toEqual({ done: true }); + }); + + it("should yield all of the first and then all of the second", () => { + const i = iter.concat([1, 2, 3].values(), [4, 5, 6].values()); + + expect(i.next()).toEqual({ done: false, value: 1 }); + expect(i.next()).toEqual({ done: false, value: 2 }); + expect(i.next()).toEqual({ done: false, value: 3 }); + expect(i.next()).toEqual({ done: false, value: 4 }); + expect(i.next()).toEqual({ done: false, value: 5 }); + expect(i.next()).toEqual({ done: false, value: 6 }); + expect(i.next()).toEqual({ done: true }); + }); + }); + + describe("nFircate", () => { + it("should produce an empty array if no parts are provided", () => { + expect(iter.nFircate([{ a: 1 }, { a: 2 }], "a", []).length).toBe(0); + }); + + it("should ignore non-matching parts", () => { + const res = iter.nFircate([{ a: 1 }, { a: 2 }], "a", [1]); + + expect(res.length).toBe(1); + expect(res[0].length).toBe(1); + }); + + it("should include all matching parts in each type", () => { + const res = iter.nFircate([{ a: 1, b: "a" }, { a: 2, b: "b" }, { a: 1, b: "c" }], "a", [1, 2]); + + expect(res.length).toBe(2); + expect(res[0].length).toBe(2); + expect(res[0][0].b).toBe("a"); + expect(res[0][1].b).toBe("c"); + expect(res[1].length).toBe(1); + expect(res[1][0].b).toBe("b"); + }); + + it("should throw a type error if the same part is provided more than once", () => { + try { + iter.nFircate([{ a: 1, b: "a" }, { a: 2, b: "b" }, { a: 1, b: "c" }], "a", [1, 2, 1]); + fail("Expected error"); + } catch (error) { + expect(error).toBeInstanceOf(TypeError); + } + }); + }); +}); diff --git a/packages/utility-features/utilities/src/iter.ts b/packages/utility-features/utilities/src/iter.ts index 4da7855959..abbf4cc92d 100644 --- a/packages/utility-features/utilities/src/iter.ts +++ b/packages/utility-features/utilities/src/iter.ts @@ -16,7 +16,7 @@ interface Iterator extends Iterable { join(sep?: string): string; } -export function chain(src: IterableIterator): Iterator { +function chain(src: IterableIterator): Iterator { return { filter: (fn) => chain(filter(src, fn)), filterMap: (fn) => chain(filterMap(src, fn)), @@ -34,7 +34,7 @@ export function chain(src: IterableIterator): Iterator { * Create a new type safe empty Iterable * @returns An `Iterable` that yields 0 items */ -export function* newEmpty(): IterableIterator {} +function* newEmpty(): IterableIterator {} /** * Creates a new `Iterable` that yields at most n items from src. @@ -42,7 +42,7 @@ export function* newEmpty(): IterableIterator {} * @param src An initial iterator * @param n The maximum number of elements to take from src. Yields up to the floor of `n` and 0 items if n < 0 */ -export function* take(src: Iterable, n: number): IterableIterator { +function* take(src: Iterable, n: number): IterableIterator { outer: for (let i = 0; i < n; i += 1) { for (const item of src) { yield item; @@ -60,7 +60,7 @@ export function* take(src: Iterable, n: number): IterableIterator { * @param src A type that can be iterated over * @param fn The function that is called for each value */ -export function* map(src: Iterable, fn: (from: T) => U): IterableIterator { +function* map(src: Iterable, fn: (from: T) => U): IterableIterator { for (const from of src) { yield fn(from); } @@ -71,7 +71,7 @@ export function* map(src: Iterable, fn: (from: T) => U): IterableIterat * @param src A type that can be iterated over * @param fn The function that returns either an iterable over items that should be filtered out or a `Falsy` value indicating that it should be ignored */ -export function* filterFlatMap(src: Iterable, fn: (from: T) => Iterable | Falsy): IterableIterator { +function* filterFlatMap(src: Iterable, fn: (from: T) => Iterable | Falsy): IterableIterator { for (const from of src) { if (!from) { continue; @@ -96,7 +96,7 @@ export function* filterFlatMap(src: Iterable, fn: (from: T) => Iterable * @param src A type that can be iterated over * @param fn A function that returns an iterator */ -export function* flatMap(src: Iterable, fn: (from: T) => Iterable): IterableIterator { +function* flatMap(src: Iterable, fn: (from: T) => Iterable): IterableIterator { for (const from of src) { yield* fn(from); } @@ -108,7 +108,7 @@ export function* flatMap(src: Iterable, fn: (from: T) => Iterable): * @param src A type that can be iterated over * @param fn The function that is called for each value */ -export function* filter(src: Iterable, fn: (from: T) => any): IterableIterator { +function* filter(src: Iterable, fn: (from: T) => any): IterableIterator { for (const from of src) { if (fn(from)) { yield from; @@ -122,7 +122,7 @@ export function* filter(src: Iterable, fn: (from: T) => any): IterableIter * @param src A type that can be iterated over * @param fn The function that is called for each value */ -export function* filterMap(src: Iterable, fn: (from: T) => U | Falsy): IterableIterator { +function* filterMap(src: Iterable, fn: (from: T) => U | Falsy): IterableIterator { for (const from of src) { const res = fn(from); @@ -138,7 +138,7 @@ export function* filterMap(src: Iterable, fn: (from: T) => U | Falsy): * @param src A type that can be iterated over * @param fn The function that is called for each value */ -export function* filterMapStrict(src: Iterable, fn: (from: T) => U | null | undefined): IterableIterator { +function* filterMapStrict(src: Iterable, fn: (from: T) => U | null | undefined): IterableIterator { for (const from of src) { const res = fn(from); @@ -154,7 +154,7 @@ export function* filterMapStrict(src: Iterable, fn: (from: T) => U | nu * @param match A function that should return a truthy value for the item that you want to find * @returns The first entry that `match` returns a truthy value for, or `undefined` */ -export function find(src: Iterable, match: (i: T) => any): T | undefined { +function find(src: Iterable, match: (i: T) => any): T | undefined { for (const from of src) { if (match(from)) { return from; @@ -171,9 +171,9 @@ export function find(src: Iterable, match: (i: T) => any): T | undefined { * @param reducer A function for producing the next item from an accumulation and the current item * @param initial The initial value for the iteration */ -export function reduce>(src: Iterable, reducer: (acc: R, cur: T) => R, initial: R): R; +function reduce>(src: Iterable, reducer: (acc: R, cur: T) => R, initial: R): R; -export function reduce(src: Iterable, reducer: (acc: R, cur: T) => R, initial: R): R { +function reduce(src: Iterable, reducer: (acc: R, cur: T) => R, initial: R): R { let acc = initial; for (const item of src) { @@ -189,7 +189,7 @@ export function reduce(src: Iterable, reducer: (acc: R, cur: T) => * @param connector The string value to intersperse between the yielded values * @returns The concatenated entries of `src` interspersed with copies of `connector` */ -export function join(src: IterableIterator, connector = ","): string { +function join(src: IterableIterator, connector = ","): string { const iterSrc = src[Symbol.iterator](); const first = iterSrc.next(); @@ -205,7 +205,7 @@ export function join(src: IterableIterator, connector = ","): string { * @param src The value to iterate over * @param n The zero-index value for the item to return to. */ -export function nth(src: Iterable, n: number): T | undefined { +function nth(src: Iterable, n: number): T | undefined { const iterator = src[Symbol.iterator](); while (n --> 0) { @@ -219,7 +219,7 @@ export function nth(src: Iterable, n: number): T | undefined { * A convenience function to get the first item of an iterator * @param src The value to iterate over */ -export function first(src: Iterable): T | undefined { +function first(src: Iterable): T | undefined { return nth(src, 0); } @@ -229,7 +229,7 @@ export function first(src: Iterable): T | undefined { * @param src The type to be iterated over * @param fn A function to check each iteration */ -export function every(src: Iterable, fn: (val: T) => any): boolean { +function every(src: Iterable, fn: (val: T) => any): boolean { for (const val of src) { if (!fn(val)) { return false; @@ -239,7 +239,7 @@ export function every(src: Iterable, fn: (val: T) => any): boolean { return true; } -export function* concat(...sources: IterableIterator[]): IterableIterator { +function* concat(...sources: IterableIterator[]): IterableIterator { for (const source of sources) { for (const val of source) { yield val; @@ -254,12 +254,11 @@ export function* concat(...sources: IterableIterator[]): IterableIterator< * @param parts What each array will be filtered to * @returns A `parts.length` tuple of `T[]` where each array has matching `field` values */ -export function nFircate(from: Iterable, field: keyof T, parts: []): []; -export function nFircate(from: Iterable, field: keyof T, parts: [T[typeof field]]): [T[]]; -export function nFircate(from: Iterable, field: keyof T, parts: [T[typeof field], T[typeof field]]): [T[], T[]]; -export function nFircate(from: Iterable, field: keyof T, parts: [T[typeof field], T[typeof field], T[typeof field]]): [T[], T[], T[]]; - -export function nFircate(from: Iterable, field: keyof T, parts: T[typeof field][]): T[][] { +function nFircate(from: Iterable, field: keyof T, parts: []): []; +function nFircate(from: Iterable, field: keyof T, parts: [T[typeof field]]): [T[]]; +function nFircate(from: Iterable, field: keyof T, parts: [T[typeof field], T[typeof field]]): [T[], T[]]; +function nFircate(from: Iterable, field: keyof T, parts: [T[typeof field], T[typeof field], T[typeof field]]): [T[], T[], T[]]; +function nFircate(from: Iterable, field: keyof T, parts: T[typeof field][]): T[][] { if (new Set(parts).size !== parts.length) { throw new TypeError("Duplicate parts entries"); } @@ -278,3 +277,23 @@ export function nFircate(from: Iterable, field: keyof T, parts: T[typeof f return res; } + +export const iter = { + chain, + concat, + every, + filter, + filterFlatMap, + filterMap, + filterMapStrict, + find, + first, + flatMap, + join, + map, + nFircate, + newEmpty, + nth, + reduce, + take, +}; diff --git a/packages/utility-features/utilities/src/object.ts b/packages/utility-features/utilities/src/object.ts index b5836af6ea..51cdfd3904 100644 --- a/packages/utility-features/utilities/src/object.ts +++ b/packages/utility-features/utilities/src/object.ts @@ -7,22 +7,28 @@ * A better typed version of `Object.fromEntries` where the keys are known to * be a specific subset */ -export function fromEntries(entries: Iterable): Record { +function fromEntries(entries: Iterable): Record { return Object.fromEntries(entries) as Record; } -export function keys(obj: Partial>): K[]; -export function keys(obj: Record): K[] { +function keys(obj: Partial>): K[]; +function keys(obj: Record): K[] { return Object.keys(obj) as K[]; } -export function entries(obj: Partial> | null | undefined): [K, V][]; -export function entries(obj: Partial> | null | undefined): [K, V][]; -export function entries(obj: Record | null | undefined): [K, V][]; -export function entries(obj: Record | null | undefined): [K, V][] { +function entries(obj: Partial> | null | undefined): [K, V][]; +function entries(obj: Partial> | null | undefined): [K, V][]; +function entries(obj: Record | null | undefined): [K, V][]; +function entries(obj: Record | null | undefined): [K, V][] { if (obj && typeof obj == "object") { return Object.entries(obj) as never; } return [] as never; } + +export const object = { + entries, + fromEntries, + keys, +}; diff --git a/packages/utility-features/utilities/src/sort-compare.ts b/packages/utility-features/utilities/src/sort-compare.ts index 35d88c01b9..69d77660e4 100644 --- a/packages/utility-features/utilities/src/sort-compare.ts +++ b/packages/utility-features/utilities/src/sort-compare.ts @@ -46,12 +46,12 @@ export function sortCompare(left: T, right: T): Ordering { } /** - * This function sorts of list of items that have what should be a semver version formated string - * as the field `version` but if it is not loosely coercable to semver falls back to sorting them + * This function sorts of list of items that have what should be a semver version formatted string + * as the field `version` but if it is not loosely coercible to semver falls back to sorting them * alphanumerically */ -export function sortBySemverVersion(versioneds: T[]): T[] { - return versioneds +export function sortBySemverVersion(versioned: T[]): T[] { + return versioned .map(versioned => ({ __version: coerce(versioned.version, { loose: true }), raw: versioned, diff --git a/packages/core/src/common/utils/__tests__/splitArray.test.ts b/packages/utility-features/utilities/src/splitArray.test.ts similarity index 100% rename from packages/core/src/common/utils/__tests__/splitArray.test.ts rename to packages/utility-features/utilities/src/splitArray.test.ts diff --git a/packages/core/src/common/utils/__tests__/tuple.test.ts b/packages/utility-features/utilities/src/tuple.test.ts similarity index 96% rename from packages/core/src/common/utils/__tests__/tuple.test.ts rename to packages/utility-features/utilities/src/tuple.test.ts index 73a4ae1e25..e5cdfbea23 100644 --- a/packages/core/src/common/utils/__tests__/tuple.test.ts +++ b/packages/utility-features/utilities/src/tuple.test.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { tuple } from "../../utils"; +import { tuple } from "./tuple"; describe("tuple tests", () => { describe("zip()", () => { diff --git a/packages/utility-features/utilities/src/tuple.ts b/packages/utility-features/utilities/src/tuple.ts index a9ad662e52..ca6284b681 100644 --- a/packages/utility-features/utilities/src/tuple.ts +++ b/packages/utility-features/utilities/src/tuple.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import * as array from "./array"; +import { array } from "./array"; /** * A strict N-tuple of type T @@ -24,11 +24,10 @@ type TupleOfImpl = R["length"] extends * @yields A tuple of the next element from each of the sources * @returns The tuple of all the sources as soon as at least one of the sources is exausted */ -export function zip(...sources: Tuple): Iterator, Tuple>; -export function zip(...sources: Tuple): Iterator, Tuple>; -export function zip(...sources: Tuple): Iterator, Tuple>; - -export function* zip(...sources: Tuple): Iterator, Tuple> { +function zip(...sources: Tuple): Iterator, Tuple>; +function zip(...sources: Tuple): Iterator, Tuple>; +function zip(...sources: Tuple): Iterator, Tuple>; +function* zip(...sources: Tuple): Iterator, Tuple> { const maxSafeLength = Math.min(...sources.map(source => source.length)); for (let i = 0; i < maxSafeLength; i += 1) { @@ -43,13 +42,19 @@ export function* zip(...sources: Tuple): Iterator(length: L, value: T): Tuple { +function filled(length: L, value: T): Tuple { return array.filled(length, value) as Tuple; } /** * A function for converting an explicit array to a tuple but without the `readonly` typing */ -export function from(...args: T): [...T] { +function from(...args: T): [...T] { return args; } + +export const tuple = { + zip, + filled, + from, +}; diff --git a/packages/core/src/common/utils/__tests__/union-env-path.test.ts b/packages/utility-features/utilities/src/union-env-path.test.ts similarity index 100% rename from packages/core/src/common/utils/__tests__/union-env-path.test.ts rename to packages/utility-features/utilities/src/union-env-path.test.ts