1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Compare commits

..

No commits in common. "master" and "v6.5.0-alpha.15" have entirely different histories.

1018 changed files with 25102 additions and 31091 deletions

3
.gitignore vendored
View File

@ -9,6 +9,3 @@ lerna-debug.log
coverage coverage
dist dist
node_modules node_modules
.linkable.json
yalc.lock
.yalc

View File

@ -1,3 +1,3 @@
# Contributing to Lens # Contributing to Lens
See [Contributing to Lens](https://docs.k8slens.dev/contributing/contribute-to-lens/) documentation. See [Contributing to Lens](https://docs.k8slens.dev/contributing/) documentation.

View File

@ -3,108 +3,6 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# 6.5.0 (2023-05-26)
# 6.5.0-alpha.16 (2023-05-25)
### Bug Fixes
* Make application size not blow up by consolidating dependencies in core package to peerDependencies ([738985c](https://github.com/lensapp/lens/commit/738985c9b7406ef0722c3994c560f0337e3c5b7c))
# 6.5.0-alpha.15 (2023-05-23)
# 6.5.0-alpha.14 (2023-05-23)
### Reverts
* Revert "chore: Extract sidebar item injection token into separate package" ([8f4aa49](https://github.com/lensapp/lens/commit/8f4aa497cc54655f83813d57c224f77dd1472141))
* Revert "chore: Update integration tests to new testid format" ([be1fbcf](https://github.com/lensapp/lens/commit/be1fbcf8c3642fbf5a5ee06c3b03ac1756e4b1dd))
* Revert "chore: Improve title formatting for Horizontal/Vertical Pod Autoscalers" ([d4c12be](https://github.com/lensapp/lens/commit/d4c12becfc9020009d64f48e4c8f9dd3b7725bb6))
* Revert "chore: Fix integration tests failing due to helm testid's changing" ([96b7ecb](https://github.com/lensapp/lens/commit/96b7ecbaddedd45cc667cc2d6c25fdc0813557ec))
# 6.5.0-alpha.13 (2023-05-16)
### Bug Fixes
* Copy fonts from @k8slens/core to open-lens correctly ([33a9f3e](https://github.com/lensapp/lens/commit/33a9f3ea3501c04738c8d74b82725bbe83e148bb))
# 6.5.0-alpha.12 (2023-05-16)
# 6.5.0-alpha.11 (2023-05-11)
### Bug Fixes
* Add missing styles to fix terminal resizing ([6902851](https://github.com/lensapp/lens/commit/6902851026e74428f515fc5f3e01e6dc8a4c2d50))
# 6.5.0-alpha.17 (2023-05-25)
### Bug Fixes
* Make application size not blow up by consolidating dependencies in core package to peerDependencies ([738985c](https://github.com/lensapp/lens/commit/738985c9b7406ef0722c3994c560f0337e3c5b7c))
# 6.5.0-alpha.15 (2023-05-23)
# 6.5.0-alpha.14 (2023-05-23)
### Reverts
* Revert "chore: Extract sidebar item injection token into separate package" ([8f4aa49](https://github.com/lensapp/lens/commit/8f4aa497cc54655f83813d57c224f77dd1472141))
* Revert "chore: Update integration tests to new testid format" ([be1fbcf](https://github.com/lensapp/lens/commit/be1fbcf8c3642fbf5a5ee06c3b03ac1756e4b1dd))
* Revert "chore: Improve title formatting for Horizontal/Vertical Pod Autoscalers" ([d4c12be](https://github.com/lensapp/lens/commit/d4c12becfc9020009d64f48e4c8f9dd3b7725bb6))
* Revert "chore: Fix integration tests failing due to helm testid's changing" ([96b7ecb](https://github.com/lensapp/lens/commit/96b7ecbaddedd45cc667cc2d6c25fdc0813557ec))
# 6.5.0-alpha.13 (2023-05-16)
### Bug Fixes
* Copy fonts from @k8slens/core to open-lens correctly ([33a9f3e](https://github.com/lensapp/lens/commit/33a9f3ea3501c04738c8d74b82725bbe83e148bb))
# 6.5.0-alpha.12 (2023-05-16)
# 6.5.0-alpha.11 (2023-05-11)
### Bug Fixes
* Add missing styles to fix terminal resizing ([6902851](https://github.com/lensapp/lens/commit/6902851026e74428f515fc5f3e01e6dc8a4c2d50))
# 6.5.0-alpha.16 (2023-05-23) # 6.5.0-alpha.16 (2023-05-23)

View File

@ -2,7 +2,7 @@
* Copyright (c) OpenLens Authors. All rights reserved. * Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information. * Licensed under MIT License. See LICENSE in root directory for more information.
*/ */
const { notarize } = require("@electron/notarize"); const { notarize } = require("electron-notarize");
exports.default = async function notarizing(context) { exports.default = async function notarizing(context) {
const { electronPlatformName, appOutDir } = context; const { electronPlatformName, appOutDir } = context;
@ -22,8 +22,6 @@ exports.default = async function notarizing(context) {
appPath: `${appOutDir}/${appName}.app`, appPath: `${appOutDir}/${appName}.app`,
appleId: process.env.APPLEID, appleId: process.env.APPLEID,
appleIdPassword: process.env.APPLEIDPASS, appleIdPassword: process.env.APPLEIDPASS,
ascProvider: process.env.ASCPROVIDER, ascProvider:process.env.ASCPROVIDER,
teamId: process.env.APPLETEAMID,
tool: process.env.NOTARIZE_TOOL || "legacy",
}); });
}; };

View File

@ -172,219 +172,219 @@ const scenarios = [
{ {
expectedSelector: "div[data-testid='cluster-overview-page'] div.label", expectedSelector: "div[data-testid='cluster-overview-page'] div.label",
parentSidebarItemTestId: null, parentSidebarItemTestId: null,
sidebarItemTestId: "link-for-sidebar-item-cluster-overview", sidebarItemTestId: "sidebar-item-link-for-cluster-overview",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: null, parentSidebarItemTestId: null,
sidebarItemTestId: "link-for-sidebar-item-nodes", sidebarItemTestId: "sidebar-item-link-for-nodes",
}, },
{ {
expectedSelector: 'h5 >> text="Overview"', expectedSelector: 'h5 >> text="Overview"',
parentSidebarItemTestId: "link-for-sidebar-item-workloads", parentSidebarItemTestId: "sidebar-item-link-for-workloads",
sidebarItemTestId: "link-for-sidebar-item-workloads-overview", sidebarItemTestId: "sidebar-item-link-for-overview",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-workloads", parentSidebarItemTestId: "sidebar-item-link-for-workloads",
sidebarItemTestId: "link-for-sidebar-item-pods", sidebarItemTestId: "sidebar-item-link-for-pods",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-workloads", parentSidebarItemTestId: "sidebar-item-link-for-workloads",
sidebarItemTestId: "link-for-sidebar-item-deployments", sidebarItemTestId: "sidebar-item-link-for-deployments",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-workloads", parentSidebarItemTestId: "sidebar-item-link-for-workloads",
sidebarItemTestId: "link-for-sidebar-item-daemon-sets", sidebarItemTestId: "sidebar-item-link-for-daemon-sets",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-workloads", parentSidebarItemTestId: "sidebar-item-link-for-workloads",
sidebarItemTestId: "link-for-sidebar-item-stateful-sets", sidebarItemTestId: "sidebar-item-link-for-stateful-sets",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-workloads", parentSidebarItemTestId: "sidebar-item-link-for-workloads",
sidebarItemTestId: "link-for-sidebar-item-replica-sets", sidebarItemTestId: "sidebar-item-link-for-replica-sets",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-workloads", parentSidebarItemTestId: "sidebar-item-link-for-workloads",
sidebarItemTestId: "link-for-sidebar-item-jobs", sidebarItemTestId: "sidebar-item-link-for-jobs",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-workloads", parentSidebarItemTestId: "sidebar-item-link-for-workloads",
sidebarItemTestId: "link-for-sidebar-item-cron-jobs", sidebarItemTestId: "sidebar-item-link-for-cron-jobs",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-config", parentSidebarItemTestId: "sidebar-item-link-for-config",
sidebarItemTestId: "link-for-sidebar-item-config-maps", sidebarItemTestId: "sidebar-item-link-for-config-maps",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-config", parentSidebarItemTestId: "sidebar-item-link-for-config",
sidebarItemTestId: "link-for-sidebar-item-secrets", sidebarItemTestId: "sidebar-item-link-for-secrets",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-config", parentSidebarItemTestId: "sidebar-item-link-for-config",
sidebarItemTestId: "link-for-sidebar-item-resource-quotas", sidebarItemTestId: "sidebar-item-link-for-resource-quotas",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-config", parentSidebarItemTestId: "sidebar-item-link-for-config",
sidebarItemTestId: "link-for-sidebar-item-limit-ranges", sidebarItemTestId: "sidebar-item-link-for-limit-ranges",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-config", parentSidebarItemTestId: "sidebar-item-link-for-config",
sidebarItemTestId: "link-for-sidebar-item-horizontal-pod-autoscalers", sidebarItemTestId: "sidebar-item-link-for-horizontal-pod-auto-scalers",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-config", parentSidebarItemTestId: "sidebar-item-link-for-config",
sidebarItemTestId: "link-for-sidebar-item-pod-disruption-budgets", sidebarItemTestId: "sidebar-item-link-for-pod-disruption-budgets",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-network", parentSidebarItemTestId: "sidebar-item-link-for-network",
sidebarItemTestId: "link-for-sidebar-item-services", sidebarItemTestId: "sidebar-item-link-for-services",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-network", parentSidebarItemTestId: "sidebar-item-link-for-network",
sidebarItemTestId: "link-for-sidebar-item-endpoints", sidebarItemTestId: "sidebar-item-link-for-endpoints",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-network", parentSidebarItemTestId: "sidebar-item-link-for-network",
sidebarItemTestId: "link-for-sidebar-item-ingresses", sidebarItemTestId: "sidebar-item-link-for-ingresses",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-network", parentSidebarItemTestId: "sidebar-item-link-for-network",
sidebarItemTestId: "link-for-sidebar-item-network-policies", sidebarItemTestId: "sidebar-item-link-for-network-policies",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-storage", parentSidebarItemTestId: "sidebar-item-link-for-storage",
sidebarItemTestId: "link-for-sidebar-item-persistent-volume-claims", sidebarItemTestId: "sidebar-item-link-for-persistent-volume-claims",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-storage", parentSidebarItemTestId: "sidebar-item-link-for-storage",
sidebarItemTestId: "link-for-sidebar-item-persistent-volumes", sidebarItemTestId: "sidebar-item-link-for-persistent-volumes",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-storage", parentSidebarItemTestId: "sidebar-item-link-for-storage",
sidebarItemTestId: "link-for-sidebar-item-storage-classes", sidebarItemTestId: "sidebar-item-link-for-storage-classes",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: null, parentSidebarItemTestId: null,
sidebarItemTestId: "link-for-sidebar-item-namespaces", sidebarItemTestId: "sidebar-item-link-for-namespaces",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: null, parentSidebarItemTestId: null,
sidebarItemTestId: "link-for-sidebar-item-events", sidebarItemTestId: "sidebar-item-link-for-events",
}, },
{ {
expectedSelector: "div.HelmCharts input", expectedSelector: "div.HelmCharts input",
parentSidebarItemTestId: "link-for-sidebar-item-helm", parentSidebarItemTestId: "sidebar-item-link-for-helm",
sidebarItemTestId: "link-for-sidebar-item-helm-charts", sidebarItemTestId: "sidebar-item-link-for-charts",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-helm", parentSidebarItemTestId: "sidebar-item-link-for-helm",
sidebarItemTestId: "link-for-sidebar-item-helm-releases", sidebarItemTestId: "sidebar-item-link-for-releases",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-user-management", parentSidebarItemTestId: "sidebar-item-link-for-user-management",
sidebarItemTestId: "link-for-sidebar-item-service-accounts", sidebarItemTestId: "sidebar-item-link-for-service-accounts",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-user-management", parentSidebarItemTestId: "sidebar-item-link-for-user-management",
sidebarItemTestId: "link-for-sidebar-item-cluster-roles", sidebarItemTestId: "sidebar-item-link-for-cluster-roles",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-user-management", parentSidebarItemTestId: "sidebar-item-link-for-user-management",
sidebarItemTestId: "link-for-sidebar-item-roles", sidebarItemTestId: "sidebar-item-link-for-roles",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-user-management", parentSidebarItemTestId: "sidebar-item-link-for-user-management",
sidebarItemTestId: "link-for-sidebar-item-cluster-role-bindings", sidebarItemTestId: "sidebar-item-link-for-cluster-role-bindings",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-user-management", parentSidebarItemTestId: "sidebar-item-link-for-user-management",
sidebarItemTestId: "link-for-sidebar-item-role-bindings", sidebarItemTestId: "sidebar-item-link-for-role-bindings",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: null, parentSidebarItemTestId: null,
sidebarItemTestId: "link-for-sidebar-item-custom-resources", sidebarItemTestId: "sidebar-item-link-for-custom-resources",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-config", parentSidebarItemTestId: "sidebar-item-link-for-config",
sidebarItemTestId: "link-for-sidebar-item-validating-webhook-configurations", sidebarItemTestId: "sidebar-item-link-for-validating-webhook-configurations",
}, },
{ {
expectedSelector: "h5.title", expectedSelector: "h5.title",
parentSidebarItemTestId: "link-for-sidebar-item-config", parentSidebarItemTestId: "sidebar-item-link-for-config",
sidebarItemTestId: "link-for-sidebar-item-mutating-webhook-configurations", sidebarItemTestId: "sidebar-item-link-for-mutating-webhook-configurations",
}, },
]; ];
const navigateToPods = async (frame: Frame) => { const navigateToPods = async (frame: Frame) => {
await frame.click(`[data-testid="link-for-sidebar-item-workloads"]`); await frame.click(`[data-testid="sidebar-item-link-for-workloads"]`);
await frame.click(`[data-testid="link-for-sidebar-item-pods"]`); await frame.click(`[data-testid="sidebar-item-link-for-pods"]`);
}; };
const navigateToNamespaces = async (frame: Frame) => { const navigateToNamespaces = async (frame: Frame) => {
await frame.click(`[data-testid="link-for-sidebar-item-namespaces"]`); await frame.click(`[data-testid="sidebar-item-link-for-namespaces"]`);
}; };

View File

@ -4,7 +4,7 @@
"productName": "OpenLens", "productName": "OpenLens",
"description": "OpenLens - Open Source IDE for Kubernetes", "description": "OpenLens - Open Source IDE for Kubernetes",
"homepage": "https://github.com/lensapp/lens", "homepage": "https://github.com/lensapp/lens",
"version": "6.5.0", "version": "6.5.0-alpha.16",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/lensapp/lens.git" "url": "git+https://github.com/lensapp/lens.git"
@ -30,7 +30,7 @@
"dev:main": "cross-env NODE_ENV=development webpack --config webpack/main.ts --progress --watch", "dev:main": "cross-env NODE_ENV=development webpack --config webpack/main.ts --progress --watch",
"dev:renderer": "cross-env NODE_ENV=development ts-node ./webpack/dev-server.ts", "dev:renderer": "cross-env NODE_ENV=development ts-node ./webpack/dev-server.ts",
"test:integration": "jest -xyz --runInBand --modulePaths=[\"<rootDir>/integration/\"];", "test:integration": "jest -xyz --runInBand --modulePaths=[\"<rootDir>/integration/\"];",
"build:tray-icons": "npm run --workspace @k8slens/generate-tray-icons generate -- --output static/build/tray --input @k8slens/icon/icons/logo-lens.svg --notice-icon @k8slens/icon/icons/notice.svg --spinner-icon @k8slens/icon/icons/arrow-spinner.svg", "build:tray-icons": "npm run --workspace @k8slens/generate-tray-icons generate -- --output static/build/tray --input @k8slens/core/icons/logo-lens.svg --notice-icon @k8slens/core/icons/notice.svg --spinner-icon @k8slens/core/icons/arrow-spinner.svg",
"download:binaries": "npm run --workspace @k8slens/ensure-binaries ensure -- --package package.json --base-dir binaries/client", "download:binaries": "npm run --workspace @k8slens/ensure-binaries ensure -- --package package.json --base-dir binaries/client",
"postinstall": "electron-rebuild" "postinstall": "electron-rebuild"
}, },
@ -177,132 +177,39 @@
} }
}, },
"dependencies": { "dependencies": {
"@astronautlabs/jsonpath": "^1.1.0", "@k8slens/application": "^6.5.0-alpha.9",
"@hapi/call": "^9.0.1", "@k8slens/application-for-electron-main": "^6.5.0-alpha.8",
"@hapi/subtext": "^7.1.0", "@k8slens/core": "^6.5.0-alpha.15",
"@k8slens/application": "^6.5.0", "@k8slens/ensure-binaries": "^6.5.0-alpha.7",
"@k8slens/application-for-electron-main": "^6.5.0", "@k8slens/event-emitter": "^1.0.0-alpha.6",
"@k8slens/button": "^1.0.0", "@k8slens/feature-core": "^6.5.0-alpha.8",
"@k8slens/cluster-settings": "^6.5.0", "@k8slens/keyboard-shortcuts": "^1.0.0-alpha.8",
"@k8slens/cluster-sidebar": "^1.0.0", "@k8slens/kube-object": "^1.0.0-alpha.6",
"@k8slens/core": "^6.5.0", "@k8slens/kubectl-versions": "^1.0.0-alpha.9",
"@k8slens/ensure-binaries": "^6.5.0", "@k8slens/legacy-extension-example": "^1.0.0-alpha.13",
"@k8slens/error-boundary": "^1.0.0", "@k8slens/legacy-extensions": "^1.0.0-alpha.8",
"@k8slens/event-emitter": "^1.0.0", "@k8slens/legacy-global-di": "^1.0.0-alpha.5",
"@k8slens/feature-core": "^6.5.0", "@k8slens/logger": "^1.0.0-alpha.7",
"@k8slens/json-api": "^1.0.0-alpha.3", "@k8slens/messaging": "^1.0.0-alpha.8",
"@k8slens/keyboard-shortcuts": "^1.0.0", "@k8slens/messaging-for-main": "^1.0.0-alpha.8",
"@k8slens/kube-api": "^1.0.0-alpha.1", "@k8slens/messaging-for-renderer": "^1.0.0-alpha.8",
"@k8slens/kube-api-specifics": "^1.0.0", "@k8slens/node-fetch": "^6.5.0-alpha.3",
"@k8slens/kube-object": "^1.0.0", "@k8slens/react-application": "^1.0.0-alpha.7",
"@k8slens/kubectl-versions": "^1.0.0", "@k8slens/resizing-anchor": "^1.0.0-alpha.10",
"@k8slens/legacy-extension-example": "^1.0.0", "@k8slens/run-many": "^1.0.0-alpha.8",
"@k8slens/legacy-extensions": "^1.0.0", "@k8slens/startable-stoppable": "^1.0.0-alpha.7",
"@k8slens/legacy-global-di": "^1.0.0", "@k8slens/utilities": "^1.0.0-alpha.7",
"@k8slens/list-layout": "^1.0.0", "@ogre-tools/fp": "^16.1.0",
"@k8slens/logger": "^1.0.0", "@ogre-tools/injectable": "^16.1.0",
"@k8slens/messaging": "^1.0.0", "@ogre-tools/injectable-extension-for-auto-registration": "^16.1.0",
"@k8slens/messaging-for-main": "^1.0.0", "@ogre-tools/injectable-extension-for-mobx": "^16.1.0",
"@k8slens/messaging-for-renderer": "^1.0.0", "@ogre-tools/injectable-react": "^16.1.0",
"@k8slens/metrics": "^6.5.0", "mobx": "^6.9.0"
"@k8slens/node-fetch": "^6.5.0",
"@k8slens/prometheus": "^1.0.0",
"@k8slens/random": "^1.0.0",
"@k8slens/react-application": "^1.0.0",
"@k8slens/resizing-anchor": "^1.0.0",
"@k8slens/resource-templates": "^1.0.0",
"@k8slens/routing": "^1.0.0",
"@k8slens/run-many": "^1.0.0",
"@k8slens/startable-stoppable": "^1.0.0",
"@k8slens/tooltip": "^1.0.0",
"@k8slens/utilities": "^1.0.0",
"@kubernetes/client-node": "^0.18.1",
"@material-ui/core": "^4.12.3",
"@material-ui/lab": "^4.0.0-alpha.60",
"@ogre-tools/fp": "^17.2.0",
"@ogre-tools/injectable": "^17.2.0",
"@ogre-tools/injectable-extension-for-auto-registration": "^17.2.0",
"@ogre-tools/injectable-extension-for-mobx": "^17.2.0",
"@ogre-tools/injectable-react": "^17.2.0",
"@sentry/electron": "^3.0.8",
"@sentry/integrations": "^6.19.3",
"ansi_up": "^5.2.1",
"auto-bind": "^4.0.0",
"await-lock": "^2.2.2",
"byline": "^5.0.0",
"chalk": "^4.1.2",
"chart.js": "^2.9.4",
"chokidar": "^3.5.3",
"color": "^3.2.1",
"conf": "^10.2.0",
"crypto-js": "^4.1.1",
"dompurify": "^2.4.4",
"electron-devtools-installer": "^3.2.0",
"electron-updater": "^4.6.5",
"electron-window-state": "^5.0.3",
"fs-extra": "^9.0.1",
"glob-to-regexp": "^0.4.1",
"grapheme-splitter": "^1.0.4",
"handlebars": "^4.7.7",
"history": "^4.10.1",
"hpagent": "^1.2.0",
"http-proxy": "^1.18.1",
"immer": "^9.0.21",
"joi": "^17.9.1",
"js-yaml": "^4.1.0",
"lodash": "^4.17.15",
"marked": "^4.2.12",
"mobx": "^6.9.0",
"mobx-observable-history": "^2.0.3",
"mobx-react": "^7.6.0",
"mobx-utils": "^6.0.4",
"moment": "^2.29.4",
"moment-timezone": "^0.5.40",
"monaco-editor": "^0.38.0",
"node-pty": "0.10.1",
"npm": "^9.6.7",
"p-limit": "^3.1.0",
"path-to-regexp": "^6.2.0",
"proper-lockfile": "^4.1.2",
"query-string": "^7.1.3",
"randomcolor": "^0.6.2",
"react": "^17.0.2",
"react-beautiful-dnd": "^13.1.1",
"react-dom": "^17.0.2",
"react-material-ui-carousel": "^2.3.11",
"react-router": "^5.3.4",
"react-router-dom": "^5.3.4",
"react-select": "^5.7.0",
"react-select-event": "^5.5.1",
"react-table": "^7.8.0",
"react-virtualized-auto-sizer": "^1.0.7",
"react-window": "^1.8.8",
"readable-stream": "^3.6.2",
"rfc6902": "^5.0.1",
"selfsigned": "^2.1.1",
"semver": "^7.3.8",
"stoppable": "^1.1.0",
"tar": "^6.1.13",
"tcp-port-used": "^1.0.2",
"tempy": "1.0.1",
"type-fest": "^2.14.0",
"typed-emitter": "^1.4.0",
"typed-regex": "^0.0.8",
"url-parse": "^1.5.10",
"uuid": "^8.3.2",
"win-ca": "^3.5.0",
"winston": "^3.8.2",
"winston-transport-browserconsole": "^1.0.5",
"ws": "^8.12.1",
"xterm": "^4.19.0",
"xterm-addon-fit": "^0.5.0",
"xterm-link-provider": "^1.3.1"
}, },
"devDependencies": { "devDependencies": {
"@electron/notarize": "^1.2.3",
"@electron/rebuild": "^3.2.10", "@electron/rebuild": "^3.2.10",
"@k8slens/generate-tray-icons": "^6.5.0", "@k8slens/generate-tray-icons": "^6.5.0-alpha.7",
"@k8slens/test-utils": "^1.0.0", "@k8slens/test-utils": "^1.0.0-alpha.8",
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.10", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.10",
"@swc/cli": "^0.1.62", "@swc/cli": "^0.1.62",
"@swc/core": "^1.3.53", "@swc/core": "^1.3.53",
@ -331,8 +238,8 @@
"copy-webpack-plugin": "^11.0.0", "copy-webpack-plugin": "^11.0.0",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"css-loader": "^6.7.2", "css-loader": "^6.7.2",
"electron": "^22.3.10",
"electron-builder": "^23.6.0", "electron-builder": "^23.6.0",
"electron-notarize": "^0.3.0",
"esbuild-loader": "^2.20.0", "esbuild-loader": "^2.20.0",
"fork-ts-checker-webpack-plugin": "^7.3.0", "fork-ts-checker-webpack-plugin": "^7.3.0",
"html-webpack-plugin": "^5.5.1", "html-webpack-plugin": "^5.5.1",

View File

@ -12,9 +12,6 @@ import { applicationFeature, startApplicationInjectionToken } from '@k8slens/app
import { applicationFeatureForElectronMain } from '@k8slens/application-for-electron-main' import { applicationFeatureForElectronMain } from '@k8slens/application-for-electron-main'
import { messagingFeatureForMain } from "@k8slens/messaging-for-main"; import { messagingFeatureForMain } from "@k8slens/messaging-for-main";
import { loggerFeature } from "@k8slens/logger"; import { loggerFeature } from "@k8slens/logger";
import { randomFeature } from "@k8slens/random";
import { kubeApiSpecificsFeature } from "@k8slens/kube-api-specifics";
import { prometheusFeature } from "@k8slens/prometheus";
const environment = "main"; const environment = "main";
@ -27,15 +24,14 @@ registerMobX(di);
runInAction(() => { runInAction(() => {
registerLensCore(di, environment); registerLensCore(di, environment);
registerFeature( registerFeature(di,
di,
loggerFeature, loggerFeature,
prometheusFeature, );
registerFeature(di,
applicationFeature, applicationFeature,
applicationFeatureForElectronMain, applicationFeatureForElectronMain,
messagingFeatureForMain, messagingFeatureForMain,
randomFeature,
kubeApiSpecificsFeature,
); );
try { try {

View File

@ -3,17 +3,13 @@ import "@k8slens/button/styles";
import "@k8slens/error-boundary/styles"; import "@k8slens/error-boundary/styles";
import "@k8slens/tooltip/styles"; import "@k8slens/tooltip/styles";
import "@k8slens/resizing-anchor/styles"; import "@k8slens/resizing-anchor/styles";
import "@k8slens/icon/styles";
import "@k8slens/animate/styles";
import "@k8slens/notifications/styles";
import "@k8slens/spinner/styles";
import { runInAction } from "mobx"; import { runInAction } from "mobx";
import { import {
rendererExtensionApi as Renderer, rendererExtensionApi as Renderer,
commonExtensionApi as Common, commonExtensionApi as Common,
registerLensCore, registerLensCore,
metricsFeature, metricsFeature
} from "@k8slens/core/renderer"; } from "@k8slens/core/renderer";
import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration"; import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration";
import { registerFeature } from "@k8slens/feature-core"; import { registerFeature } from "@k8slens/feature-core";
@ -29,11 +25,6 @@ import { keyboardShortcutsFeature } from "@k8slens/keyboard-shortcuts";
import { reactApplicationFeature } from "@k8slens/react-application"; import { reactApplicationFeature } from "@k8slens/react-application";
import { routingFeature } from "@k8slens/routing"; import { routingFeature } from "@k8slens/routing";
import { loggerFeature } from "@k8slens/logger"; import { loggerFeature } from "@k8slens/logger";
import { animateFeature } from "@k8slens/animate";
import { clusterSidebarFeature } from "@k8slens/cluster-sidebar";
import { randomFeature } from "@k8slens/random";
import { kubeApiSpecificsFeature } from "@k8slens/kube-api-specifics";
import { notificationsFeature } from "@k8slens/notifications";
const environment = "renderer"; const environment = "renderer";
@ -58,12 +49,7 @@ runInAction(() => {
keyboardShortcutsFeature, keyboardShortcutsFeature,
reactApplicationFeature, reactApplicationFeature,
routingFeature, routingFeature,
metricsFeature, metricsFeature
animateFeature,
clusterSidebarFeature,
randomFeature,
kubeApiSpecificsFeature,
notificationsFeature,
); );
autoRegister({ autoRegister({

1204
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -21,13 +21,11 @@
"postdev": "lerna watch -- lerna run build --stream --include-dependents --scope \\$LERNA_PACKAGE_NAME", "postdev": "lerna watch -- lerna run build --stream --include-dependents --scope \\$LERNA_PACKAGE_NAME",
"prestart-dev": "cd ./open-lens && npm run build:tray-icons && npm run download:binaries", "prestart-dev": "cd ./open-lens && npm run build:tray-icons && npm run download:binaries",
"start-dev": "lerna run start", "start-dev": "lerna run start",
"postinstall": "linkable",
"lint": "lerna run lint --stream --no-bail", "lint": "lerna run lint --stream --no-bail",
"lint:fix": "lerna run lint:fix --stream", "lint:fix": "lerna run lint:fix --stream",
"mkdocs:serve-local": "docker build -t mkdocs-serve-local:latest mkdocs/ && docker run --rm -it -p 8000:8000 -v ${PWD}:/docs mkdocs-serve-local:latest", "mkdocs:serve-local": "docker build -t mkdocs-serve-local:latest mkdocs/ && docker run --rm -it -p 8000:8000 -v ${PWD}:/docs mkdocs-serve-local:latest",
"mkdocs:verify": "docker build -t mkdocs-serve-local:latest mkdocs/ && docker run --rm -v ${PWD}:/docs mkdocs-serve-local:latest build --strict", "mkdocs:verify": "docker build -t mkdocs-serve-local:latest mkdocs/ && docker run --rm -v ${PWD}:/docs mkdocs-serve-local:latest build --strict",
"test:unit": "lerna run --stream test:unit --no-bail", "test:unit": "lerna run --stream test:unit --no-bail",
"test:unit:updatesnapshot": "lerna run --stream test:unit --no-bail -- -u",
"test:unit:watch": "jest --watch", "test:unit:watch": "jest --watch",
"test:integration": "lerna run --stream test:integration --no-bail", "test:integration": "lerna run --stream test:integration --no-bail",
"bump-version": "lerna version --no-git-tag-version --no-push", "bump-version": "lerna version --no-git-tag-version --no-push",
@ -40,7 +38,7 @@
"@types/react": "^17" "@types/react": "^17"
}, },
"devDependencies": { "devDependencies": {
"@ogre-tools/linkable": "^17.2.0", "@ogre-tools/linkable": "^16.1.0",
"adr": "^1.4.3", "adr": "^1.4.3",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"lerna": "^6.6.1", "lerna": "^6.6.1",

View File

@ -3,45 +3,6 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# 1.0.0 (2023-05-26)
# 6.5.0-alpha.14 (2023-05-23)
# 6.5.0-alpha.13 (2023-05-16)
# 6.5.0-alpha.12 (2023-05-16)
### Bug Fixes
* Don't crash when hovering hotbar menu index ([9d51ef2](https://github.com/lensapp/lens/commit/9d51ef2aa69c6c9df0fd57281b25131a10efd27a))
# 6.5.0-alpha.11 (2023-05-11)
# 6.5.0-alpha.9 (2023-05-04)
# 6.5.0-alpha.5 (2023-04-12)
# 6.5.0-alpha.4 (2023-04-12)
# 1.0.0-alpha.7 (2023-05-16) # 1.0.0-alpha.7 (2023-05-16)

View File

@ -1,7 +1,7 @@
{ {
"name": "@k8slens/keyboard-shortcuts", "name": "@k8slens/keyboard-shortcuts",
"private": false, "private": false,
"version": "1.0.0", "version": "1.0.0-alpha.8",
"description": "Keyboard shortcuts for Lens", "description": "Keyboard shortcuts for Lens",
"type": "commonjs", "type": "commonjs",
"files": [ "files": [
@ -33,17 +33,17 @@
"peerDependencies": { "peerDependencies": {
"@k8slens/feature-core": "^6.5.0-alpha.0", "@k8slens/feature-core": "^6.5.0-alpha.0",
"@k8slens/react-application": "^1.0.0-alpha.0", "@k8slens/react-application": "^1.0.0-alpha.0",
"@ogre-tools/fp": "^17.2.0", "@ogre-tools/fp": "^16.1.0",
"@ogre-tools/injectable": "^17.2.0", "@ogre-tools/injectable": "^16.1.0",
"@ogre-tools/injectable-extension-for-auto-registration": "^17.2.0", "@ogre-tools/injectable-extension-for-auto-registration": "^16.1.0",
"@ogre-tools/injectable-react": "^17.2.0", "@ogre-tools/injectable-react": "^16.1.0",
"lodash": "^4.17.21", "lodash": "^4.17.21",
"react": "^17 || ^18" "react": "^17 || ^18"
}, },
"devDependencies": { "devDependencies": {
"@async-fn/jest": "^1.6.4", "@async-fn/jest": "^1.6.4",
"@k8slens/eslint-config": "^6.5.0", "@k8slens/eslint-config": "^6.5.0-alpha.3",
"@k8slens/react-testing-library-discovery": "^1.0.0", "@k8slens/react-testing-library-discovery": "^1.0.0-alpha.4",
"@k8slens/webpack": "^6.5.0" "@k8slens/webpack": "^6.5.0-alpha.9"
} }
} }

View File

@ -3,41 +3,6 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# 6.5.0 (2023-05-26)
# 6.5.0-alpha.14 (2023-05-23)
# 6.5.0-alpha.13 (2023-05-16)
# 6.5.0-alpha.12 (2023-05-16)
# 6.5.0-alpha.11 (2023-05-11)
# 6.5.0-alpha.9 (2023-05-04)
### Features
* Compute the kubectl download version map at build time ([0bd7b1f](https://github.com/lensapp/lens/commit/0bd7b1fe92a173379c8a5a1ab7e13cf9e4f8223b))
# 6.5.0-alpha.4 (2023-04-12)
# 6.5.0-alpha.7 (2023-05-16) # 6.5.0-alpha.7 (2023-05-16)

View File

@ -1,6 +1,6 @@
{ {
"name": "@k8slens/cluster-settings", "name": "@k8slens/cluster-settings",
"version": "6.5.0", "version": "6.5.0-alpha.8",
"description": "Injection token exporter for cluster settings configuration", "description": "Injection token exporter for cluster settings configuration",
"license": "MIT", "license": "MIT",
"type": "commonjs", "type": "commonjs",
@ -19,10 +19,10 @@
"build": "lens-webpack-build" "build": "lens-webpack-build"
}, },
"devDependencies": { "devDependencies": {
"@k8slens/webpack": "^6.5.0", "@k8slens/webpack": "^6.5.0-alpha.9",
"rimraf": "^4.4.1" "rimraf": "^4.4.1"
}, },
"peerDependencies": { "peerDependencies": {
"@ogre-tools/injectable": "^17.2.0" "@ogre-tools/injectable": "^16.1.0"
} }
} }

View File

@ -1,6 +0,0 @@
module.exports = {
extends: "@k8slens/eslint-config/eslint",
parserOptions: {
project: "./tsconfig.json",
},
};

View File

@ -1 +0,0 @@
"@k8slens/eslint-config/prettier"

View File

@ -1,8 +0,0 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
export * from "./src/tokens";
export * from "./src/feature";
export { default as sidebarItemsInjectable } from "./src/sidebar-items.injectable";

View File

@ -1 +0,0 @@
module.exports = require("@k8slens/jest").monorepoPackageConfig(__dirname).configForReact;

View File

@ -1,48 +0,0 @@
{
"name": "@k8slens/cluster-sidebar",
"private": false,
"version": "1.0.0",
"description": "Injection tokens for adding new sidebar items within the Cluster View",
"type": "commonjs",
"publishConfig": {
"access": "public",
"registry": "https://registry.npmjs.org/"
},
"files": [
"dist"
],
"repository": {
"type": "git",
"url": "git+https://github.com/lensapp/lens.git"
},
"main": "dist/index.js",
"types": "dist/index.d.ts",
"author": {
"name": "OpenLens Authors",
"email": "info@k8slens.dev"
},
"license": "MIT",
"homepage": "https://github.com/lensapp/lens",
"scripts": {
"build": "lens-webpack-build",
"clean": "rimraf dist/",
"test": "jest --coverage --runInBand",
"lint": "lens-lint",
"lint:fix": "lens-lint --fix"
},
"peerDependencies": {
"@k8slens/feature-core": "^6.5.0-alpha.4",
"@k8slens/utilities": "^1.0.0-alpha.3",
"@ogre-tools/injectable": "^17.2.0",
"@ogre-tools/injectable-extension-for-auto-registration": "^17.2.0",
"@ogre-tools/injectable-extension-for-mobx": "^17.2.0",
"mobx": "^6.9.0",
"react": "^17.0.2"
},
"devDependencies": {
"@k8slens/eslint-config": "^6.5.0-alpha.3",
"@k8slens/jest": "^6.5.0-alpha.5",
"@k8slens/typescript": "^6.5.0-alpha.2",
"@k8slens/webpack": "^6.5.0-alpha.5"
}
}

View File

@ -1,14 +0,0 @@
import { getFeature } from "@k8slens/feature-core";
import { autoRegister } from "@ogre-tools/injectable-extension-for-auto-registration";
export const clusterSidebarFeature = getFeature({
id: "cluster-side-feature",
register: (di) => {
autoRegister({
di,
targetModule: module,
getRequireContexts: () => [require.context("./", true, /\.injectable\.(ts|tsx)$/)],
});
},
});

View File

@ -1,174 +0,0 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { createContainer, DiContainer, getInjectable } from "@ogre-tools/injectable";
import { computed, IComputedValue } from "mobx";
import { noop } from "lodash/fp";
import sidebarItemsInjectable from "./sidebar-items.injectable";
import { SidebarItemDeclaration, sidebarItemInjectionToken } from "./tokens";
import { registerMobX } from "@ogre-tools/injectable-extension-for-mobx";
import { clusterSidebarFeature } from "./feature";
const someParentSidebarItemInjectable = getInjectable({
id: "sidebar-item-some-parent",
instantiate: () => ({
parentId: null,
title: "Some parent",
onClick: noop,
orderNumber: 42,
}),
injectionToken: sidebarItemInjectionToken,
});
const someOtherParentSidebarItemInjectable = getInjectable({
id: "sidebar-item-some-other-parent",
instantiate: () => ({
parentId: null,
title: "Some other parent",
onClick: noop,
orderNumber: 126,
}),
injectionToken: sidebarItemInjectionToken,
});
const someAnotherParentSidebarItemInjectable = getInjectable({
id: "sidebar-item-some-another-parent",
instantiate: () => ({
parentId: null,
title: "Some another parent",
onClick: noop,
orderNumber: 84,
}),
injectionToken: sidebarItemInjectionToken,
});
const someForthParentSidebarItemInjectable = getInjectable({
id: "sidebar-item-some-forth-parent",
instantiate: () => ({
parentId: null,
title: "Some another parent",
onClick: noop,
orderNumber: 84,
isVisible: computed(() => false),
isActive: computed(() => true),
}),
injectionToken: sidebarItemInjectionToken,
});
const someChildSidebarItemInjectable = getInjectable({
id: "sidebar-item-some-child",
instantiate: () => ({
parentId: someParentSidebarItemInjectable.id,
title: "Some child",
onClick: noop,
orderNumber: 168,
}),
injectionToken: sidebarItemInjectionToken,
});
const someOtherChildSidebarItemInjectable = getInjectable({
id: "sidebar-item-some-other-child",
instantiate: () => ({
parentId: someParentSidebarItemInjectable.id,
title: "Some other child",
onClick: noop,
orderNumber: 252,
}),
injectionToken: sidebarItemInjectionToken,
});
const someAnotherChildSidebarItemInjectable = getInjectable({
id: "sidebar-item-some-another-child",
instantiate: () => ({
parentId: someParentSidebarItemInjectable.id,
title: "Some another child",
onClick: noop,
orderNumber: 210,
}),
injectionToken: sidebarItemInjectionToken,
});
describe("order of sidebar items", () => {
let di: DiContainer;
let sidebarItems: IComputedValue<SidebarItemDeclaration[]>;
beforeEach(() => {
di = createContainer("test");
di.register(
someParentSidebarItemInjectable,
someOtherParentSidebarItemInjectable,
someAnotherParentSidebarItemInjectable,
someChildSidebarItemInjectable,
someOtherChildSidebarItemInjectable,
someAnotherChildSidebarItemInjectable,
someForthParentSidebarItemInjectable,
);
clusterSidebarFeature.register(di);
registerMobX(di);
sidebarItems = di.inject(sidebarItemsInjectable);
});
it("has parent items in order", () => {
const actual = sidebarItems.get().map((item) => item.id);
expect(actual).toEqual([
"sidebar-item-some-parent",
"sidebar-item-some-another-parent",
"sidebar-item-some-forth-parent",
"sidebar-item-some-other-parent",
]);
});
it("an item with no children and no isVisible configuration by default is visible", () => {
const item = sidebarItems.get().find((item) => item.id === someAnotherParentSidebarItemInjectable.id);
expect(item?.isVisible.get()).toBe(true);
});
it("an item with no children and an isVisible configuration is whatever the configuration specifies", () => {
const item = sidebarItems.get().find((item) => item.id === someForthParentSidebarItemInjectable.id);
expect(item?.isVisible.get()).toBe(false);
});
it("an item with children is visible if at least one of the children is visible", () => {
const item = sidebarItems.get().find((item) => item.id === "sidebar-item-some-parent");
expect(item?.isVisible.get()).toBe(true);
});
it("an item with no children and no isActive configuration by default is not active", () => {
const item = sidebarItems.get().find((item) => item.id === someAnotherParentSidebarItemInjectable.id);
expect(item?.isActive.get()).toBe(false);
});
it("an item with no children and an isActive configuration is whatever the configuration specifies", () => {
const item = sidebarItems.get().find((item) => item.id === someForthParentSidebarItemInjectable.id);
expect(item?.isActive.get()).toBe(true);
});
it("an item with children is active if at least one of the children is active", () => {
const item = sidebarItems.get().find((item) => item.id === "sidebar-item-some-parent");
expect(item?.isActive.get()).toBe(false);
});
it("has child items in order", () => {
const actual = sidebarItems
.get()
.find((item) => item.id === "sidebar-item-some-parent")
?.children.map((item) => item.id);
expect(actual).toEqual([
"sidebar-item-some-child",
"sidebar-item-some-another-child",
"sidebar-item-some-other-child",
]);
});
});

View File

@ -1,60 +0,0 @@
import { getInjectable, InjectionInstanceWithMeta } from "@ogre-tools/injectable";
import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx";
import { SidebarItemDeclaration, sidebarItemInjectionToken, SidebarItemRegistration } from "./tokens";
import { computed } from "mobx";
import { byOrderNumber } from "@k8slens/utilities";
const getSidebarItemsHierarchy = (
registrations: InjectionInstanceWithMeta<SidebarItemRegistration>[],
parentId: string | null,
): SidebarItemDeclaration[] =>
registrations
.filter(({ instance }) => instance.parentId === parentId)
.map(({ instance: { isActive, isVisible, ...registration }, meta: { id } }) => {
const children = getSidebarItemsHierarchy(registrations, id);
return {
...registration,
id,
children,
isVisible: computed(() => {
if (children.length === 0) {
if (isVisible) {
return isVisible.get();
}
return true;
}
return children.some((child) => child.isVisible.get());
}),
isActive: computed(() => {
if (children.length === 0) {
if (isActive) {
return isActive.get();
}
return false;
}
return children.some((child) => child.isActive.get());
}),
};
})
.sort(byOrderNumber);
const sidebarItemsInjectable = getInjectable({
id: "sidebar-items",
instantiate: (di) => {
const computedInjectMany = di.inject(computedInjectManyInjectable);
const sidebarItemRegistrations = computedInjectMany(sidebarItemInjectionToken);
return computed(() => {
void sidebarItemRegistrations.get();
return getSidebarItemsHierarchy(di.injectManyWithMeta(sidebarItemInjectionToken), null);
});
},
});
export default sidebarItemsInjectable;

View File

@ -1,34 +0,0 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectionToken } from "@ogre-tools/injectable";
import type { IComputedValue } from "mobx";
import type { StrictReactNode } from "@k8slens/utilities";
export interface SidebarItemRegistration {
id?: undefined;
parentId: string | null;
title: StrictReactNode;
onClick: () => void;
getIcon?: () => StrictReactNode;
isActive?: IComputedValue<boolean>;
isVisible?: IComputedValue<boolean>;
orderNumber: number;
}
export interface SidebarItemDeclaration {
id: string;
parentId: string | null;
title: StrictReactNode;
onClick: () => void;
getIcon?: () => StrictReactNode;
isActive: IComputedValue<boolean>;
isVisible: IComputedValue<boolean>;
children: SidebarItemDeclaration[];
}
export const sidebarItemInjectionToken = getInjectionToken<SidebarItemRegistration>({
id: "sidebar-item-injection-token",
});

View File

@ -1,4 +0,0 @@
{
"extends": "@k8slens/typescript/config/base.json",
"include": ["**/*.ts"]
}

View File

@ -1 +0,0 @@
module.exports = require("@k8slens/webpack").configForReact;

View File

@ -3,410 +3,6 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
# 6.5.0 (2023-05-26)
# 6.5.0-alpha.16 (2023-05-25)
### Bug Fixes
* Handle log responses as text ([#7776](https://github.com/lensapp/lens/issues/7776)) ([90c449c](https://github.com/lensapp/lens/commit/90c449cc0dd68ef46eb3c32bae170c3386238db9))
* Make application size not blow up by consolidating dependencies in core package to peerDependencies ([738985c](https://github.com/lensapp/lens/commit/738985c9b7406ef0722c3994c560f0337e3c5b7c))
# 6.5.0-alpha.15 (2023-05-23)
# 6.5.0-alpha.14 (2023-05-23)
### Bug Fixes
* Use correct path for node-shell shell PTY ([99e6b77](https://github.com/lensapp/lens/commit/99e6b77fc1c5a74cfef90981b8b0162b46ecfb43))
### Reverts
* Revert "chore: Extract sidebar item injection token into separate package" ([8f4aa49](https://github.com/lensapp/lens/commit/8f4aa497cc54655f83813d57c224f77dd1472141))
* Revert "chore: Rename sidebar item injectable files" ([cb0e876](https://github.com/lensapp/lens/commit/cb0e8764aca9e0d28e6e23c5ae87a5ab6d414065))
* Revert "chore: Convert sidebarItemInjectionToken to use InjectWithMetadata instead of duplicating the IDs" ([93bc41f](https://github.com/lensapp/lens/commit/93bc41f9a3f47f5c777c882c9241f4fd5e3f1952))
* Revert "chore: Fixup tests snapshots to match new testid behaviour" ([9276df0](https://github.com/lensapp/lens/commit/9276df05924794d30d7d97bc79cf701a6106e8ec))
* Revert "chore: Fix lint" ([d90bdf6](https://github.com/lensapp/lens/commit/d90bdf6f1497cb25f17788a4170feba31d366b74))
* Revert "chore: Fix more lint" ([813705f](https://github.com/lensapp/lens/commit/813705fe9097012cd7fc62a8d543d1f7bc2be2ed))
* Revert "chore: Fix IDs for some sidebar items" ([753c8bf](https://github.com/lensapp/lens/commit/753c8bfa85ccc74980553bb512b5038ff18767a2))
* Revert "chore: Improve title formatting for Horizontal/Vertical Pod Autoscalers" ([d4c12be](https://github.com/lensapp/lens/commit/d4c12becfc9020009d64f48e4c8f9dd3b7725bb6))
* Revert "fix: Fix formatting of custom resource sidebar items" ([5608a19](https://github.com/lensapp/lens/commit/5608a199be1067039403b85abe776fab928a956c))
* Revert "chore: Fix integration tests failing due to helm testid's changing" ([96b7ecb](https://github.com/lensapp/lens/commit/96b7ecbaddedd45cc667cc2d6c25fdc0813557ec))
* Revert "chore: Fix tests after rebase" ([1b43de5](https://github.com/lensapp/lens/commit/1b43de50fe6431367bf259799f5e0b42f6b38ad9))
* Revert "fix: Custom Resource Definitions should be the first entry in the side bar" ([1099e65](https://github.com/lensapp/lens/commit/1099e65c52c62153b3d28d0654fffaaa6f6715a7))
* Revert "fix: Custom Resource Definitions sidebar item should navigate to the correct route" ([7d46cb8](https://github.com/lensapp/lens/commit/7d46cb845d0f1748c0f83a8dc34bbe783270ca2c))
* Revert "chore: Cleanup custom resource route definition" ([40f1180](https://github.com/lensapp/lens/commit/40f118057925a3b946f5dcc60162bad7e8b12e58))
* Revert "chore: Factor out NavigateToCustomResources type" ([d3cf708](https://github.com/lensapp/lens/commit/d3cf7088d6c37860984ce0295a3d8a5c528c2a66))
* Revert "chore: Move around Custom Resource and Custom Resource Definition files to simplify names" ([5f4cdbc](https://github.com/lensapp/lens/commit/5f4cdbc51950c04804139e9b961cfe394ad4ae30))
# 6.5.0-alpha.13 (2023-05-16)
### Bug Fixes
* Switch to using IAsyncComputed to resolve bad setState error within ClusterOverview from react ([4f8e470](https://github.com/lensapp/lens/commit/4f8e4707f929eee04ff1345c9e93f00d50ac0a92))
# 6.5.0-alpha.12 (2023-05-16)
### Bug Fixes
* Don't crash when hovering hotbar menu index ([9d51ef2](https://github.com/lensapp/lens/commit/9d51ef2aa69c6c9df0fd57281b25131a10efd27a))
# 6.5.0-alpha.11 (2023-05-11)
### Bug Fixes
* Add test as repro, and fix bug about kube API details not opening ([bb400ae](https://github.com/lensapp/lens/commit/bb400ae66797fe160567e6b728d85d5e79caef4d))
* Bring back search filters for pods which were accidentally removed previously ([9c7be39](https://github.com/lensapp/lens/commit/9c7be39eb135b747945f76f61811695d2f96c761))
* Do not crash when opening details of a helm release ([40af0d3](https://github.com/lensapp/lens/commit/40af0d31c529e252a45c7370852755c4e63067a7))
* Kludge cluster settings not opening when extension introduces new settings without ID when title contains spaces ([e8491ca](https://github.com/lensapp/lens/commit/e8491ca2d39971d06842f6741eae042554fbc9a0))
# 6.5.0-alpha.10 (2023-05-09)
# 6.5.0-alpha.9 (2023-05-04)
### Bug Fixes
* Add checks to KubeObject constructor to ensure shape ([bf6af58](https://github.com/lensapp/lens/commit/bf6af58d80552a16be7a547f772902b138a12fbd))
* add routingFeature to getDiForUnitTesting ([b33a8b4](https://github.com/lensapp/lens/commit/b33a8b49607935450f70b1d5535431ba416fc22e))
* change class name behaviour to limit snapshot diffs ([bfb2b8e](https://github.com/lensapp/lens/commit/bfb2b8e6591891b529d5cf0f8757ff8b7080e004))
* **core:** hide update button if downloading of an update fails ([f697742](https://github.com/lensapp/lens/commit/f6977428daa3f61482e7066689ebf7092b0fb2b1))
* Fix selfLink being missing from requestKubeResource ([b90e04e](https://github.com/lensapp/lens/commit/b90e04e02dfd18896d5f08f1bc36f90179635797))
* lint:fix ([76c11aa](https://github.com/lensapp/lens/commit/76c11aa697e3ada81c876fe8a3ac6e33b4ce8cb9))
* observableHistoryInjectionToken and 1 revert for GlobalOverride ([8c0220c](https://github.com/lensapp/lens/commit/8c0220c353c9047a2a4df570b598c31868b5f7e2))
* Only show Update Channel preferences when applicable ([43cedae](https://github.com/lensapp/lens/commit/43cedae7b05eaa7f932f2718939f7b856a1b86c5))
* Remove incorrect timeout on standard info notifications ([bcf95a6](https://github.com/lensapp/lens/commit/bcf95a65f1d2be91fa613f0da9d0ae978faaef75))
* removed as-legacy-globals-for-extension-api ([f1f2634](https://github.com/lensapp/lens/commit/f1f26344900b99c70b2bed2f453ed27574d7b417))
* removed dependencies: [reactApplicationFeature], ([0dae159](https://github.com/lensapp/lens/commit/0dae1594baabbd06e798f9a1b4c132cee998bb65))
### Features
* Add deleting subNamespaces to contextMenu ([89cf491](https://github.com/lensapp/lens/commit/89cf491bc0aa80ee398f8b5dc39ec7c69d00c7bb))
* Add removing subNamespaces to Namespace route ([aa95002](https://github.com/lensapp/lens/commit/aa950026a3162abf6322afb4b5c5bf56f9f7e10f))
* Adjust container status colors to be distinguable with red/green filter ([#7621](https://github.com/lensapp/lens/issues/7621)) ([3532fc1](https://github.com/lensapp/lens/commit/3532fc1dab918190fa76199a9d7b04d6efe40c47))
* Compute the kubectl download version map at build time ([0bd7b1f](https://github.com/lensapp/lens/commit/0bd7b1fe92a173379c8a5a1ab7e13cf9e4f8223b))
* Improve formatting error messages from apiKube ([3439472](https://github.com/lensapp/lens/commit/3439472065e6b850e286f6a34bccc23b827b8e28))
* Introduce API for changing the status bar colour ([06a0dce](https://github.com/lensapp/lens/commit/06a0dce612b67084f8f36ba552ea23f8ac071201))
* Introduce injectables to remove subNamespaces ([c557225](https://github.com/lensapp/lens/commit/c5572257bd6a32a2f05fc78f54ece428f54389fe))
* Never auto-close error notifications ([561d8db](https://github.com/lensapp/lens/commit/561d8dbc09581ff21aa79e85f3903c45e99ac33b))
# 6.5.0-alpha.6 (2023-04-12)
# 6.5.0-alpha.5 (2023-04-12)
# 6.5.0-alpha.4 (2023-04-12)
### Bug Fixes
* Fix tests by recreating non-specific injection token ([c0ebe60](https://github.com/lensapp/lens/commit/c0ebe605c4d36c0d98454e25565818f75ffb1b69))
* Referencing apiManager should not throw ([#7468](https://github.com/lensapp/lens/issues/7468)) ([351f9d4](https://github.com/lensapp/lens/commit/351f9d492f6e52e9e97d17d71e2bbdbbde4ea2db))
* remove platform specific injectable file names ([9b0318b](https://github.com/lensapp/lens/commit/9b0318b493fe2e49a34b8a4cb3d0bef1600759b8))
### Features
* Allow built versions to specify an environment ([#7495](https://github.com/lensapp/lens/issues/7495)) ([128b05d](https://github.com/lensapp/lens/commit/128b05d4d46344a511398f654865c133c6e36514))
### Reverts
* Revert "Renderer file logging through IPC" (#7393) ([5409324](https://github.com/lensapp/lens/commit/54093242367717292312df01905d052b66017953)), closes [#7393](https://github.com/lensapp/lens/issues/7393)
# 6.5.0-alpha.3 (2023-03-15)
# 6.5.0-alpha.2 (2023-03-14)
# 6.5.0-alpha.1 (2023-03-14)
### Reverts
* Revert "Renderer file logging transport (#6795)" (#7245) ([ec81af4](https://github.com/lensapp/lens/commit/ec81af4e6c5f8d0c25469a56dfa602894f85734b)), closes [#6795](https://github.com/lensapp/lens/issues/6795) [#7245](https://github.com/lensapp/lens/issues/7245) [#544](https://github.com/lensapp/lens/issues/544)
# 6.4.0-beta.13 (2023-02-03)
# 6.4.0-beta.12 (2023-02-01)
# 6.4.0-beta.11 (2023-02-01)
# 6.4.0-beta.10 (2023-01-27)
# 6.4.0-beta.9 (2023-01-27)
# 6.4.0-beta.8 (2023-01-27)
# 6.4.0-beta.7 (2023-01-27)
# 6.4.0-beta.6 (2023-01-26)
# 6.4.0-beta.5 (2023-01-26)
# 6.4.0-beta.4 (2023-01-26)
# 6.4.0-beta.3 (2023-01-26)
# 6.5.0-alpha.16 (2023-05-25)
### Bug Fixes
* Handle log responses as text ([#7776](https://github.com/lensapp/lens/issues/7776)) ([90c449c](https://github.com/lensapp/lens/commit/90c449cc0dd68ef46eb3c32bae170c3386238db9))
* Make application size not blow up by consolidating dependencies in core package to peerDependencies ([738985c](https://github.com/lensapp/lens/commit/738985c9b7406ef0722c3994c560f0337e3c5b7c))
# 6.5.0-alpha.15 (2023-05-23)
# 6.5.0-alpha.14 (2023-05-23)
### Bug Fixes
* Use correct path for node-shell shell PTY ([99e6b77](https://github.com/lensapp/lens/commit/99e6b77fc1c5a74cfef90981b8b0162b46ecfb43))
### Reverts
* Revert "chore: Extract sidebar item injection token into separate package" ([8f4aa49](https://github.com/lensapp/lens/commit/8f4aa497cc54655f83813d57c224f77dd1472141))
* Revert "chore: Rename sidebar item injectable files" ([cb0e876](https://github.com/lensapp/lens/commit/cb0e8764aca9e0d28e6e23c5ae87a5ab6d414065))
* Revert "chore: Convert sidebarItemInjectionToken to use InjectWithMetadata instead of duplicating the IDs" ([93bc41f](https://github.com/lensapp/lens/commit/93bc41f9a3f47f5c777c882c9241f4fd5e3f1952))
* Revert "chore: Fixup tests snapshots to match new testid behaviour" ([9276df0](https://github.com/lensapp/lens/commit/9276df05924794d30d7d97bc79cf701a6106e8ec))
* Revert "chore: Fix lint" ([d90bdf6](https://github.com/lensapp/lens/commit/d90bdf6f1497cb25f17788a4170feba31d366b74))
* Revert "chore: Fix more lint" ([813705f](https://github.com/lensapp/lens/commit/813705fe9097012cd7fc62a8d543d1f7bc2be2ed))
* Revert "chore: Fix IDs for some sidebar items" ([753c8bf](https://github.com/lensapp/lens/commit/753c8bfa85ccc74980553bb512b5038ff18767a2))
* Revert "chore: Improve title formatting for Horizontal/Vertical Pod Autoscalers" ([d4c12be](https://github.com/lensapp/lens/commit/d4c12becfc9020009d64f48e4c8f9dd3b7725bb6))
* Revert "fix: Fix formatting of custom resource sidebar items" ([5608a19](https://github.com/lensapp/lens/commit/5608a199be1067039403b85abe776fab928a956c))
* Revert "chore: Fix integration tests failing due to helm testid's changing" ([96b7ecb](https://github.com/lensapp/lens/commit/96b7ecbaddedd45cc667cc2d6c25fdc0813557ec))
* Revert "chore: Fix tests after rebase" ([1b43de5](https://github.com/lensapp/lens/commit/1b43de50fe6431367bf259799f5e0b42f6b38ad9))
* Revert "fix: Custom Resource Definitions should be the first entry in the side bar" ([1099e65](https://github.com/lensapp/lens/commit/1099e65c52c62153b3d28d0654fffaaa6f6715a7))
* Revert "fix: Custom Resource Definitions sidebar item should navigate to the correct route" ([7d46cb8](https://github.com/lensapp/lens/commit/7d46cb845d0f1748c0f83a8dc34bbe783270ca2c))
* Revert "chore: Cleanup custom resource route definition" ([40f1180](https://github.com/lensapp/lens/commit/40f118057925a3b946f5dcc60162bad7e8b12e58))
* Revert "chore: Factor out NavigateToCustomResources type" ([d3cf708](https://github.com/lensapp/lens/commit/d3cf7088d6c37860984ce0295a3d8a5c528c2a66))
* Revert "chore: Move around Custom Resource and Custom Resource Definition files to simplify names" ([5f4cdbc](https://github.com/lensapp/lens/commit/5f4cdbc51950c04804139e9b961cfe394ad4ae30))
# 6.5.0-alpha.13 (2023-05-16)
### Bug Fixes
* Switch to using IAsyncComputed to resolve bad setState error within ClusterOverview from react ([4f8e470](https://github.com/lensapp/lens/commit/4f8e4707f929eee04ff1345c9e93f00d50ac0a92))
# 6.5.0-alpha.12 (2023-05-16)
### Bug Fixes
* Don't crash when hovering hotbar menu index ([9d51ef2](https://github.com/lensapp/lens/commit/9d51ef2aa69c6c9df0fd57281b25131a10efd27a))
# 6.5.0-alpha.11 (2023-05-11)
### Bug Fixes
* Add test as repro, and fix bug about kube API details not opening ([bb400ae](https://github.com/lensapp/lens/commit/bb400ae66797fe160567e6b728d85d5e79caef4d))
* Bring back search filters for pods which were accidentally removed previously ([9c7be39](https://github.com/lensapp/lens/commit/9c7be39eb135b747945f76f61811695d2f96c761))
* Do not crash when opening details of a helm release ([40af0d3](https://github.com/lensapp/lens/commit/40af0d31c529e252a45c7370852755c4e63067a7))
* Kludge cluster settings not opening when extension introduces new settings without ID when title contains spaces ([e8491ca](https://github.com/lensapp/lens/commit/e8491ca2d39971d06842f6741eae042554fbc9a0))
# 6.5.0-alpha.10 (2023-05-09)
# 6.5.0-alpha.9 (2023-05-04)
### Bug Fixes
* Add checks to KubeObject constructor to ensure shape ([bf6af58](https://github.com/lensapp/lens/commit/bf6af58d80552a16be7a547f772902b138a12fbd))
* add routingFeature to getDiForUnitTesting ([b33a8b4](https://github.com/lensapp/lens/commit/b33a8b49607935450f70b1d5535431ba416fc22e))
* change class name behaviour to limit snapshot diffs ([bfb2b8e](https://github.com/lensapp/lens/commit/bfb2b8e6591891b529d5cf0f8757ff8b7080e004))
* **core:** hide update button if downloading of an update fails ([f697742](https://github.com/lensapp/lens/commit/f6977428daa3f61482e7066689ebf7092b0fb2b1))
* Fix selfLink being missing from requestKubeResource ([b90e04e](https://github.com/lensapp/lens/commit/b90e04e02dfd18896d5f08f1bc36f90179635797))
* lint:fix ([76c11aa](https://github.com/lensapp/lens/commit/76c11aa697e3ada81c876fe8a3ac6e33b4ce8cb9))
* observableHistoryInjectionToken and 1 revert for GlobalOverride ([8c0220c](https://github.com/lensapp/lens/commit/8c0220c353c9047a2a4df570b598c31868b5f7e2))
* Only show Update Channel preferences when applicable ([43cedae](https://github.com/lensapp/lens/commit/43cedae7b05eaa7f932f2718939f7b856a1b86c5))
* Remove incorrect timeout on standard info notifications ([bcf95a6](https://github.com/lensapp/lens/commit/bcf95a65f1d2be91fa613f0da9d0ae978faaef75))
* removed as-legacy-globals-for-extension-api ([f1f2634](https://github.com/lensapp/lens/commit/f1f26344900b99c70b2bed2f453ed27574d7b417))
* removed dependencies: [reactApplicationFeature], ([0dae159](https://github.com/lensapp/lens/commit/0dae1594baabbd06e798f9a1b4c132cee998bb65))
### Features
* Add deleting subNamespaces to contextMenu ([89cf491](https://github.com/lensapp/lens/commit/89cf491bc0aa80ee398f8b5dc39ec7c69d00c7bb))
* Add removing subNamespaces to Namespace route ([aa95002](https://github.com/lensapp/lens/commit/aa950026a3162abf6322afb4b5c5bf56f9f7e10f))
* Adjust container status colors to be distinguable with red/green filter ([#7621](https://github.com/lensapp/lens/issues/7621)) ([3532fc1](https://github.com/lensapp/lens/commit/3532fc1dab918190fa76199a9d7b04d6efe40c47))
* Compute the kubectl download version map at build time ([0bd7b1f](https://github.com/lensapp/lens/commit/0bd7b1fe92a173379c8a5a1ab7e13cf9e4f8223b))
* Improve formatting error messages from apiKube ([3439472](https://github.com/lensapp/lens/commit/3439472065e6b850e286f6a34bccc23b827b8e28))
* Introduce API for changing the status bar colour ([06a0dce](https://github.com/lensapp/lens/commit/06a0dce612b67084f8f36ba552ea23f8ac071201))
* Introduce injectables to remove subNamespaces ([c557225](https://github.com/lensapp/lens/commit/c5572257bd6a32a2f05fc78f54ece428f54389fe))
* Never auto-close error notifications ([561d8db](https://github.com/lensapp/lens/commit/561d8dbc09581ff21aa79e85f3903c45e99ac33b))
# 6.5.0-alpha.6 (2023-04-12)
# 6.5.0-alpha.5 (2023-04-12)
# 6.5.0-alpha.4 (2023-04-12)
### Bug Fixes
* Fix tests by recreating non-specific injection token ([c0ebe60](https://github.com/lensapp/lens/commit/c0ebe605c4d36c0d98454e25565818f75ffb1b69))
* Referencing apiManager should not throw ([#7468](https://github.com/lensapp/lens/issues/7468)) ([351f9d4](https://github.com/lensapp/lens/commit/351f9d492f6e52e9e97d17d71e2bbdbbde4ea2db))
* remove platform specific injectable file names ([9b0318b](https://github.com/lensapp/lens/commit/9b0318b493fe2e49a34b8a4cb3d0bef1600759b8))
### Features
* Allow built versions to specify an environment ([#7495](https://github.com/lensapp/lens/issues/7495)) ([128b05d](https://github.com/lensapp/lens/commit/128b05d4d46344a511398f654865c133c6e36514))
### Reverts
* Revert "Renderer file logging through IPC" (#7393) ([5409324](https://github.com/lensapp/lens/commit/54093242367717292312df01905d052b66017953)), closes [#7393](https://github.com/lensapp/lens/issues/7393)
# 6.5.0-alpha.3 (2023-03-15)
# 6.5.0-alpha.2 (2023-03-14)
# 6.5.0-alpha.1 (2023-03-14)
### Reverts
* Revert "Renderer file logging transport (#6795)" (#7245) ([ec81af4](https://github.com/lensapp/lens/commit/ec81af4e6c5f8d0c25469a56dfa602894f85734b)), closes [#6795](https://github.com/lensapp/lens/issues/6795) [#7245](https://github.com/lensapp/lens/issues/7245) [#544](https://github.com/lensapp/lens/issues/544)
# 6.4.0-beta.13 (2023-02-03)
# 6.4.0-beta.12 (2023-02-01)
# 6.4.0-beta.11 (2023-02-01)
# 6.4.0-beta.10 (2023-01-27)
# 6.4.0-beta.9 (2023-01-27)
# 6.4.0-beta.8 (2023-01-27)
# 6.4.0-beta.7 (2023-01-27)
# 6.4.0-beta.6 (2023-01-26)
# 6.4.0-beta.5 (2023-01-26)
# 6.4.0-beta.4 (2023-01-26)
# 6.4.0-beta.3 (2023-01-26)
# 6.5.0-alpha.15 (2023-05-23) # 6.5.0-alpha.15 (2023-05-23)

View File

@ -3,7 +3,7 @@
"productName": "", "productName": "",
"description": "Lens Desktop Core", "description": "Lens Desktop Core",
"homepage": "https://github.com/lensapp/lens", "homepage": "https://github.com/lensapp/lens",
"version": "6.5.0", "version": "6.5.0-alpha.15",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/lensapp/lens.git" "url": "git+https://github.com/lensapp/lens.git"
@ -24,7 +24,8 @@
"./styles": "./static/build/library/renderer.css", "./styles": "./static/build/library/renderer.css",
"./template.html": "./src/renderer/template.html", "./template.html": "./src/renderer/template.html",
"./vars.scss": "./src/renderer/components/vars.scss", "./vars.scss": "./src/renderer/components/vars.scss",
"./fonts": "./static/build/library/fonts" "./fonts": "./static/build/library/fonts",
"./icons/*.svg": "./src/renderer/components/icon/*.svg"
}, },
"typesVersions": { "typesVersions": {
"*": { "*": {
@ -43,6 +44,7 @@
"static/build/library/**/*", "static/build/library/**/*",
"src/renderer/template.html", "src/renderer/template.html",
"src/renderer/components/vars.scss", "src/renderer/components/vars.scss",
"src/renderer/components/icon/*.svg",
"types/*", "types/*",
"tsconfig.json" "tsconfig.json"
], ],
@ -100,14 +102,94 @@
], ],
"runtime": "@side/jest-runtime" "runtime": "@side/jest-runtime"
}, },
"dependencies": {
"@astronautlabs/jsonpath": "^1.1.0",
"@hapi/call": "^9.0.1",
"@hapi/subtext": "^7.1.0",
"@kubernetes/client-node": "^0.18.1",
"@material-ui/core": "^4.12.3",
"@material-ui/icons": "^4.11.2",
"@material-ui/lab": "^4.0.0-alpha.60",
"@material-ui/styles": "^4.11.5",
"@sentry/electron": "^3.0.8",
"@sentry/integrations": "^6.19.3",
"@side/jest-runtime": "^1.1.0",
"ansi_up": "^5.2.1",
"auto-bind": "^4.0.0",
"await-lock": "^2.2.2",
"byline": "^5.0.0",
"chalk": "^4.1.2",
"chart.js": "^2.9.4",
"chokidar": "^3.5.3",
"color": "^3.2.1",
"conf": "^10.2.0",
"crypto-js": "^4.1.1",
"dompurify": "^2.4.4",
"electron": "^22.3.10",
"electron-devtools-installer": "^3.2.0",
"electron-updater": "^4.6.5",
"electron-window-state": "^5.0.3",
"filehound": "^1.17.6",
"fs-extra": "^9.0.1",
"glob-to-regexp": "^0.4.1",
"grapheme-splitter": "^1.0.4",
"handlebars": "^4.7.7",
"history": "^4.10.1",
"hpagent": "^1.2.0",
"http-proxy": "^1.18.1",
"immer": "^9.0.21",
"joi": "^17.9.1",
"js-yaml": "^4.1.0",
"lodash": "^4.17.15",
"marked": "^4.2.12",
"md5-file": "^5.0.0",
"moment": "^2.29.4",
"moment-timezone": "^0.5.40",
"node-pty": "0.10.1",
"npm": "^9.6.7",
"p-limit": "^3.1.0",
"path-to-regexp": "^6.2.0",
"proper-lockfile": "^4.1.2",
"query-string": "^7.1.3",
"randomcolor": "^0.6.2",
"react": "^17.0.2",
"react-beautiful-dnd": "^13.1.1",
"react-dom": "^17.0.2",
"react-material-ui-carousel": "^2.3.11",
"react-router": "^5.3.4",
"react-router-dom": "^5.3.4",
"react-select": "^5.7.0",
"react-select-event": "^5.5.1",
"react-table": "^7.8.0",
"react-virtualized-auto-sizer": "^1.0.7",
"react-window": "^1.8.8",
"readable-stream": "^3.6.0",
"rfc6902": "^5.0.1",
"selfsigned": "^2.1.1",
"semver": "^7.3.8",
"stoppable": "^1.1.0",
"tar": "^6.1.13",
"tcp-port-used": "^1.0.2",
"tempy": "1.0.1",
"type-fest": "^2.14.0",
"typed-emitter": "^1.4.0",
"typed-regex": "^0.0.8",
"url-parse": "^1.5.10",
"uuid": "^8.3.2",
"win-ca": "^3.5.0",
"winston": "^3.8.2",
"winston-transport-browserconsole": "^1.0.5",
"ws": "^8.12.1",
"xterm": "^4.19.0",
"xterm-addon-fit": "^0.5.0",
"xterm-link-provider": "^1.3.1"
},
"devDependencies": { "devDependencies": {
"@async-fn/jest": "1.6.4", "@async-fn/jest": "1.6.4",
"@k8slens/messaging-fake-bridge": "^1.0.0", "@k8slens/messaging-fake-bridge": "^1.0.0-alpha.8",
"@k8slens/react-testing-library-discovery": "^1.0.0", "@k8slens/react-testing-library-discovery": "^1.0.0-alpha.4",
"@k8slens/test-utils": "^1.0.0", "@ogre-tools/linkable": "^16.1.0",
"@ogre-tools/linkable": "^17.2.0",
"@sentry/types": "^6.19.7", "@sentry/types": "^6.19.7",
"@side/jest-runtime": "^1.1.0",
"@swc/cli": "^0.1.62", "@swc/cli": "^0.1.62",
"@swc/core": "^1.3.53", "@swc/core": "^1.3.53",
"@swc/jest": "^0.2.26", "@swc/jest": "^0.2.26",
@ -204,21 +286,12 @@
"webpack-node-externals": "^3.0.0" "webpack-node-externals": "^3.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"@hapi/call": "^9.0.1",
"@hapi/subtext": "^7.1.0",
"@k8slens/animate": "^1.0.0-alpha.0",
"@k8slens/notifications": "^1.0.0",
"@k8slens/application": "^6.5.0-alpha.0", "@k8slens/application": "^6.5.0-alpha.0",
"@k8slens/application-for-electron-main": "^6.5.0-alpha.0", "@k8slens/application-for-electron-main": "^6.5.0-alpha.0",
"@k8slens/button": "^1.0.0-alpha.5", "@k8slens/button": "^1.0.0-alpha.5",
"@k8slens/cluster-settings": "^6.5.0-alpha.1", "@k8slens/cluster-settings": "^6.5.0-alpha.1",
"@k8slens/cluster-sidebar": "^1.0.0",
"@k8slens/error-boundary": "^1.0.0-alpha.5", "@k8slens/error-boundary": "^1.0.0-alpha.5",
"@k8slens/event-emitter": "^1.0.0-alpha.1", "@k8slens/event-emitter": "^1.0.0-alpha.1",
"@k8slens/icon": "^1.0.0-alpha.7",
"@k8slens/kube-api": "^1.0.0-alpha.1",
"@k8slens/kube-api-specifics": "^1.0.0-alpha.1",
"@k8slens/kube-object": "^1.0.0-alpha.5",
"@k8slens/kubectl-versions": "^1.0.0-alpha.0", "@k8slens/kubectl-versions": "^1.0.0-alpha.0",
"@k8slens/legacy-extensions": "^1.0.0-alpha.0", "@k8slens/legacy-extensions": "^1.0.0-alpha.0",
"@k8slens/legacy-global-di": "^1.0.0-alpha.0", "@k8slens/legacy-global-di": "^1.0.0-alpha.0",
@ -229,96 +302,24 @@
"@k8slens/messaging-for-renderer": "^1.0.0-alpha.1", "@k8slens/messaging-for-renderer": "^1.0.0-alpha.1",
"@k8slens/metrics": "^6.5.0-alpha.7", "@k8slens/metrics": "^6.5.0-alpha.7",
"@k8slens/node-fetch": "^6.5.0-alpha.3", "@k8slens/node-fetch": "^6.5.0-alpha.3",
"@k8slens/prometheus": "^1.0.0",
"@k8slens/react-application": "^1.0.0-alpha.5", "@k8slens/react-application": "^1.0.0-alpha.5",
"@k8slens/random": "^1.0.0",
"@k8slens/resizing-anchor": "^1.0.0-alpha.5", "@k8slens/resizing-anchor": "^1.0.0-alpha.5",
"@k8slens/resource-templates": "^1.0.0-alpha.1", "@k8slens/resource-templates": "^1.0.0-alpha.1",
"@k8slens/routing": "^1.0.0-alpha.5", "@k8slens/routing": "^1.0.0-alpha.5",
"@k8slens/run-many": "^1.0.0-alpha.1", "@k8slens/run-many": "^1.0.0-alpha.1",
"@k8slens/spinner": "^1.0.0",
"@k8slens/startable-stoppable": "^1.0.0-alpha.1", "@k8slens/startable-stoppable": "^1.0.0-alpha.1",
"@k8slens/test-utils": "^1.0.0-alpha.3",
"@k8slens/tooltip": "^1.0.0-alpha.5", "@k8slens/tooltip": "^1.0.0-alpha.5",
"@k8slens/utilities": "^1.0.0-alpha.1", "@k8slens/utilities": "^1.0.0-alpha.1",
"@kubernetes/client-node": "^0.18.1", "@ogre-tools/fp": "^16.1.0",
"@material-ui/core": "^4.12.3", "@ogre-tools/injectable": "^16.1.0",
"@material-ui/lab": "^4.0.0-alpha.60", "@ogre-tools/injectable-extension-for-auto-registration": "^16.1.0",
"@ogre-tools/fp": "^17.2.0", "@ogre-tools/injectable-extension-for-mobx": "^16.1.0",
"@ogre-tools/injectable": "^17.2.0", "@ogre-tools/injectable-react": "^16.1.0",
"@ogre-tools/injectable-extension-for-auto-registration": "^17.2.0",
"@ogre-tools/injectable-extension-for-mobx": "^17.2.0",
"@ogre-tools/injectable-react": "^17.2.0",
"@sentry/electron": "^3.0.8",
"@sentry/integrations": "^6.19.3",
"ansi_up": "^5.2.1",
"auto-bind": "^4.0.0",
"await-lock": "^2.2.2",
"byline": "^5.0.0",
"chalk": "^4.1.2",
"chart.js": "^2.9.4",
"chokidar": "^3.5.3",
"color": "^3.2.1",
"conf": "^10.2.0",
"crypto-js": "^4.1.1",
"dompurify": "^2.4.4",
"electron": "^22.3.10",
"electron-devtools-installer": "^3.2.0",
"electron-updater": "^4.6.5",
"electron-window-state": "^5.0.3",
"fs-extra": "^9.0.1",
"glob-to-regexp": "^0.4.1",
"grapheme-splitter": "^1.0.4",
"handlebars": "^4.7.7",
"history": "^4.10.1",
"hpagent": "^1.2.0",
"http-proxy": "^1.18.1",
"immer": "^9.0.21",
"joi": "^17.9.1",
"js-yaml": "^4.1.0",
"lodash": "^4.17.15",
"marked": "^4.2.12",
"mobx": "^6.9.0", "mobx": "^6.9.0",
"mobx-observable-history": "^2.0.3", "mobx-observable-history": "^2.0.3",
"mobx-react": "^7.6.0", "mobx-react": "^7.6.0",
"mobx-utils": "^6.0.4", "mobx-utils": "^6.0.4",
"moment": "^2.29.4", "monaco-editor": "^0.38.0"
"moment-timezone": "^0.5.40",
"monaco-editor": "^0.38.0",
"node-pty": "0.10.1",
"npm": "^9.6.7",
"path-to-regexp": "^6.2.0",
"proper-lockfile": "^4.1.2",
"query-string": "^7.1.3",
"randomcolor": "^0.6.2",
"react": "^17.0.2",
"react-beautiful-dnd": "^13.1.1",
"react-dom": "^17.0.2",
"react-material-ui-carousel": "^2.3.11",
"react-router": "^5.3.4",
"react-router-dom": "^5.3.4",
"react-select": "^5.7.0",
"react-select-event": "^5.5.1",
"react-table": "^7.8.0",
"react-virtualized-auto-sizer": "^1.0.7",
"react-window": "^1.8.8",
"rfc6902": "^5.0.1",
"selfsigned": "^2.1.1",
"semver": "^7.3.8",
"stoppable": "^1.1.0",
"tar": "^6.1.13",
"tcp-port-used": "^1.0.2",
"tempy": "1.0.1",
"type-fest": "^2.14.0",
"typed-emitter": "^1.4.0",
"typed-regex": "^0.0.8",
"url-parse": "^1.5.10",
"uuid": "^8.3.2",
"win-ca": "^3.5.0",
"winston": "^3.8.2",
"winston-transport-browserconsole": "^1.0.5",
"ws": "^8.12.1",
"xterm": "^4.19.0",
"xterm-addon-fit": "^0.5.0",
"xterm-link-provider": "^1.3.1"
} }
} }

View File

@ -0,0 +1,21 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import { computed } from "mobx";
import { frontEndRouteInjectionToken } from "../../../../front-end-route-injection-token";
const crdListRouteInjectable = getInjectable({
id: "crd-list-route",
instantiate: () => ({
path: "/crd/definitions",
clusterFrame: true,
isEnabled: computed(() => true),
}),
injectionToken: frontEndRouteInjectionToken,
});
export default crdListRouteInjectable;

View File

@ -3,11 +3,11 @@
* Licensed under MIT License. See LICENSE in root directory for more information. * Licensed under MIT License. See LICENSE in root directory for more information.
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { navigateToRouteInjectionToken } from "../../../navigate-to-route-injection-token"; import crdListRouteInjectable from "./crd-list-route.injectable";
import crdListRouteInjectable from "./custom-resource-definitions.injectable"; import { navigateToRouteInjectionToken } from "../../../../navigate-to-route-injection-token";
const navigateToCustomResourceDefinitionsInjectable = getInjectable({ const navigateToCrdListInjectable = getInjectable({
id: "navigate-to-custom-resource-definitions", id: "navigate-to-crd-list",
instantiate: (di) => { instantiate: (di) => {
const navigateToRoute = di.inject(navigateToRouteInjectionToken); const navigateToRoute = di.inject(navigateToRouteInjectionToken);
@ -17,4 +17,4 @@ const navigateToCustomResourceDefinitionsInjectable = getInjectable({
}, },
}); });
export default navigateToCustomResourceDefinitionsInjectable; export default navigateToCrdListInjectable;

View File

@ -1,24 +0,0 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import { shouldShowResourceInjectionToken } from "../../../../../features/cluster/showing-kube-resources/common/allowed-resources-injection-token";
import { frontEndRouteInjectionToken } from "../../../front-end-route-injection-token";
const customResourceDefinitionsRouteInjectable = getInjectable({
id: "custom-resource-definitions-route",
instantiate: (di) => ({
path: "/crd/definitions",
clusterFrame: true,
isEnabled: di.inject(shouldShowResourceInjectionToken, {
group: "apiextensions.k8s.io",
apiName: "customresourcedefinitions",
}),
}),
injectionToken: frontEndRouteInjectionToken,
});
export default customResourceDefinitionsRouteInjectable;

View File

@ -4,19 +4,19 @@
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { computed } from "mobx"; import { computed } from "mobx";
import type { Route } from "../../../front-end-route-injection-token"; import type { Route } from "../../../../front-end-route-injection-token";
import { frontEndRouteInjectionToken } from "../../../front-end-route-injection-token"; import { frontEndRouteInjectionToken } from "../../../../front-end-route-injection-token";
export interface CustomResourcesPathParameters { export interface CustomResourcesPathParameters {
group: string; group?: string;
name: string; name?: string;
} }
const customResourcesRouteInjectable = getInjectable({ const customResourcesRouteInjectable = getInjectable({
id: "custom-resources-route", id: "custom-resources-route",
instantiate: (): Route<CustomResourcesPathParameters> => ({ instantiate: (): Route<CustomResourcesPathParameters> => ({
path: "/crd/:group/:name", path: "/crd/:group?/:name?",
clusterFrame: true, clusterFrame: true,
isEnabled: computed(() => true), isEnabled: computed(() => true),
}), }),

View File

@ -3,20 +3,19 @@
* Licensed under MIT License. See LICENSE in root directory for more information. * Licensed under MIT License. See LICENSE in root directory for more information.
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { navigateToRouteInjectionToken } from "../../../navigate-to-route-injection-token";
import type { CustomResourcesPathParameters } from "./custom-resources-route.injectable"; import type { CustomResourcesPathParameters } from "./custom-resources-route.injectable";
import customResourcesRouteInjectable from "./custom-resources-route.injectable"; import customResourcesRouteInjectable from "./custom-resources-route.injectable";
import { navigateToRouteInjectionToken } from "../../../../navigate-to-route-injection-token";
export type NavigateToCustomResources = (parameters: CustomResourcesPathParameters) => void;
const navigateToCustomResourcesInjectable = getInjectable({ const navigateToCustomResourcesInjectable = getInjectable({
id: "navigate-to-custom-resources", id: "navigate-to-custom-resources",
instantiate: (di): NavigateToCustomResources => { instantiate: (di) => {
const navigateToRoute = di.inject(navigateToRouteInjectionToken); const navigateToRoute = di.inject(navigateToRouteInjectionToken);
const route = di.inject(customResourcesRouteInjectable); const route = di.inject(customResourcesRouteInjectable);
return (parameters) => navigateToRoute(route, { parameters }); return (parameters?: CustomResourcesPathParameters) =>
navigateToRoute(route, { parameters });
}, },
}); });

View File

@ -1,24 +0,0 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import { frontEndRouteInjectionToken } from "../../../../front-end-route-injection-token";
import { shouldShowResourceInjectionToken } from "../../../../../../features/cluster/showing-kube-resources/common/allowed-resources-injection-token";
const ingressClassesRouteInjectable = getInjectable({
id: "ingress-classes-route",
instantiate: (di) => ({
path: "/ingress-classes",
clusterFrame: true,
isEnabled: di.inject(shouldShowResourceInjectionToken, {
apiName: "ingressclasses",
group: "networking.k8s.io",
}),
}),
injectionToken: frontEndRouteInjectionToken,
});
export default ingressClassesRouteInjectable;

View File

@ -0,0 +1,30 @@
/**
* 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 { frontEndRouteInjectionToken } from "../../../../front-end-route-injection-token";
import {
shouldShowResourceInjectionToken,
} from "../../../../../../features/cluster/showing-kube-resources/common/allowed-resources-injection-token";
const ingressClassesesRouteInjectable = getInjectable({
id: "ingress-classes-route",
instantiate: (di) => {
const isEnabled = di.inject(shouldShowResourceInjectionToken, {
apiName: "ingressclasses",
group: "networking.k8s.io",
});
return {
path: "/ingress-classes",
clusterFrame: true,
isEnabled,
};
},
injectionToken: frontEndRouteInjectionToken,
});
export default ingressClassesesRouteInjectable;

View File

@ -4,14 +4,14 @@
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { navigateToRouteInjectionToken } from "../../../../navigate-to-route-injection-token"; import { navigateToRouteInjectionToken } from "../../../../navigate-to-route-injection-token";
import ingressClassesRouteInjectable from "./ingress-classes-route.injectable"; import ingressClassesesRouteInjectable from "./ingress-classeses-route.injectable";
const navigateToIngressesInjectable = getInjectable({ const navigateToIngressesInjectable = getInjectable({
id: "navigate-to-ingress-classes", id: "navigate-to-ingress-classes",
instantiate: (di) => { instantiate: (di) => {
const navigateToRoute = di.inject(navigateToRouteInjectionToken); const navigateToRoute = di.inject(navigateToRouteInjectionToken);
const route = di.inject(ingressClassesRouteInjectable); const route = di.inject(ingressClassesesRouteInjectable);
return () => navigateToRoute(route); return () => navigateToRoute(route);
}, },

View File

@ -26,11 +26,12 @@ export type ImplInitializableInjectionTokensArgs<T> = {
token: Initializable<T>; token: Initializable<T>;
init: (di: DiContainerForInjection) => T | Promise<T>; init: (di: DiContainerForInjection) => T | Promise<T>;
} & ( } & (
| { {
phase: InjectionToken<Runnable<void>, void>; phase: InjectionToken<Runnable<void>, void>;
runAfter?: Injectable<Runnable<void>, Runnable<void>, void>[]; runAfter?: Injectable<Runnable<void>, Runnable<void>, void>[];
} }
| { |
{
runAfter: Injectable<Runnable<void>, Runnable<void>, void>; runAfter: Injectable<Runnable<void>, Runnable<void>, void>;
phase?: undefined; phase?: undefined;
} }

View File

@ -11,12 +11,13 @@ import { getDiForUnitTesting } from "../../../renderer/getDiForUnitTesting";
import storesAndApisCanBeCreatedInjectable from "../../../renderer/stores-apis-can-be-created.injectable"; import storesAndApisCanBeCreatedInjectable from "../../../renderer/stores-apis-can-be-created.injectable";
import directoryForKubeConfigsInjectable from "../../app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable"; import directoryForKubeConfigsInjectable from "../../app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable";
import directoryForUserDataInjectable from "../../app-paths/directory-for-user-data/directory-for-user-data.injectable"; import directoryForUserDataInjectable from "../../app-paths/directory-for-user-data/directory-for-user-data.injectable";
import { logErrorInjectionToken, loggerInjectionToken, logInfoInjectionToken, logWarningInjectionToken } from "@k8slens/logger"; import { loggerInjectionToken } from "@k8slens/logger";
import type { ApiManager } from "../api-manager"; import type { ApiManager } from "../api-manager";
import apiManagerInjectable from "../api-manager/manager.injectable"; import apiManagerInjectable from "../api-manager/manager.injectable";
import { KubeApi } from "@k8slens/kube-api"; import { KubeApi } from "../kube-api";
import { KubeObject } from "@k8slens/kube-object"; import { KubeObject } from "@k8slens/kube-object";
import { KubeObjectStore } from "../kube-object.store"; import { KubeObjectStore } from "../kube-object.store";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
// eslint-disable-next-line no-restricted-imports // eslint-disable-next-line no-restricted-imports
import { KubeApi as ExternalKubeApi } from "../../../extensions/common-api/k8s-api"; import { KubeApi as ExternalKubeApi } from "../../../extensions/common-api/k8s-api";
@ -24,7 +25,6 @@ import { Cluster } from "../../cluster/cluster";
import { runInAction } from "mobx"; import { runInAction } from "mobx";
import { customResourceDefinitionApiInjectionToken } from "../api-manager/crd-api-token"; import { customResourceDefinitionApiInjectionToken } from "../api-manager/crd-api-token";
import assert from "assert"; import assert from "assert";
import { maybeKubeApiInjectable } from "@k8slens/kube-api-specifics";
class TestApi extends KubeApi<KubeObject> { class TestApi extends KubeApi<KubeObject> {
protected checkPreferredVersion() { protected checkPreferredVersion() {
@ -61,9 +61,7 @@ describe("ApiManager", () => {
const apiBase = "api/v1/foo"; const apiBase = "api/v1/foo";
const fallbackApiBase = "/apis/extensions/v1beta1/foo"; const fallbackApiBase = "/apis/extensions/v1beta1/foo";
const kubeApi = new TestApi({ const kubeApi = new TestApi({
logError: di.inject(logErrorInjectionToken), logger: di.inject(loggerInjectionToken),
logInfo: di.inject(logInfoInjectionToken),
logWarn: di.inject(logWarningInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable), maybeKubeApi: di.inject(maybeKubeApiInjectable),
}, { }, {
objectConstructor: KubeObject, objectConstructor: KubeObject,
@ -138,9 +136,7 @@ describe("ApiManager", () => {
return Object.assign( return Object.assign(
new KubeApi({ new KubeApi({
logError: di.inject(logErrorInjectionToken), logger: di.inject(loggerInjectionToken),
logInfo: di.inject(logInfoInjectionToken),
logWarn: di.inject(logWarningInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable), maybeKubeApi: di.inject(maybeKubeApiInjectable),
}, { objectConstructor }), }, { objectConstructor }),
{ {

View File

@ -0,0 +1,52 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getDiForUnitTesting } from "../../../renderer/getDiForUnitTesting";
import storesAndApisCanBeCreatedInjectable from "../../../renderer/stores-apis-can-be-created.injectable";
import apiKubeInjectable from "../../../renderer/k8s/api-kube.injectable";
import type { DeploymentApi } from "../endpoints/deployment.api";
import deploymentApiInjectable from "../endpoints/deployment.api.injectable";
import type { KubeJsonApi } from "../kube-json-api";
describe("DeploymentApi", () => {
let deploymentApi: DeploymentApi;
let kubeJsonApi: jest.Mocked<KubeJsonApi>;
beforeEach(() => {
const di = getDiForUnitTesting();
di.override(storesAndApisCanBeCreatedInjectable, () => true);
kubeJsonApi = {
getResponse: jest.fn(),
get: jest.fn(),
post: jest.fn(),
put: jest.fn(),
patch: jest.fn(),
del: jest.fn(),
} as never;
di.override(apiKubeInjectable, () => kubeJsonApi);
deploymentApi = di.inject(deploymentApiInjectable);
});
describe("scale", () => {
it("requests Kubernetes API with PATCH verb and correct amount of replicas", async () => {
await deploymentApi.scale({ namespace: "default", name: "deployment-1" }, 5);
expect(kubeJsonApi.patch).toHaveBeenCalledWith("/apis/apps/v1/namespaces/default/deployments/deployment-1/scale", {
data: {
spec: {
replicas: 5,
},
},
},
{
headers: {
"content-type": "application/merge-patch+json",
},
});
});
});
});

View File

@ -3,8 +3,17 @@
* Licensed under MIT License. See LICENSE in root directory for more information. * Licensed under MIT License. See LICENSE in root directory for more information.
*/ */
import type { IKubeApiParsed } from "./kube-api-parse"; jest.mock("../kube-api");
import { parseKubeApi } from "./kube-api-parse"; jest.mock("../api-manager", () => ({
apiManager() {
return {
registerStore: jest.fn(),
};
},
}));
import type { IKubeApiParsed } from "../kube-api-parse";
import { parseKubeApi } from "../kube-api-parse";
/** /**
* [<input-url>, <expected-result>] * [<input-url>, <expected-result>]
@ -38,6 +47,7 @@ const tests: KubeApiParseTestData[] = [
namespace: undefined, namespace: undefined,
}, },
], ],
[ [
"/api/v1/namespaces", "/api/v1/namespaces",
{ {
@ -51,6 +61,7 @@ const tests: KubeApiParseTestData[] = [
namespace: undefined, namespace: undefined,
}, },
], ],
[ [
"/api/v1/nodes/minikube", "/api/v1/nodes/minikube",
{ {
@ -64,6 +75,7 @@ const tests: KubeApiParseTestData[] = [
namespace: undefined, namespace: undefined,
}, },
], ],
[ [
"/api/foo-bar/nodes/minikube", "/api/foo-bar/nodes/minikube",
{ {
@ -77,6 +89,7 @@ const tests: KubeApiParseTestData[] = [
namespace: undefined, namespace: undefined,
}, },
], ],
[ [
"/api/v1/namespaces/kube-public", "/api/v1/namespaces/kube-public",
{ {
@ -90,6 +103,7 @@ const tests: KubeApiParseTestData[] = [
namespace: undefined, namespace: undefined,
}, },
], ],
[ [
"/apis/stable.example.com/foo1/crontabs", "/apis/stable.example.com/foo1/crontabs",
{ {
@ -103,6 +117,7 @@ const tests: KubeApiParseTestData[] = [
namespace: undefined, namespace: undefined,
}, },
], ],
[ [
"/apis/cluster.k8s.io/v1alpha1/clusters", "/apis/cluster.k8s.io/v1alpha1/clusters",
{ {
@ -116,6 +131,7 @@ const tests: KubeApiParseTestData[] = [
namespace: undefined, namespace: undefined,
}, },
], ],
[ [
"/api/v1/namespaces/kube-system/pods/coredns-6955765f44-v8p27", "/api/v1/namespaces/kube-system/pods/coredns-6955765f44-v8p27",
{ {
@ -129,6 +145,7 @@ const tests: KubeApiParseTestData[] = [
name: "coredns-6955765f44-v8p27", name: "coredns-6955765f44-v8p27",
}, },
], ],
[ [
"/apis/apps/v1/namespaces/default/deployments/some-deployment", "/apis/apps/v1/namespaces/default/deployments/some-deployment",
{ {
@ -142,6 +159,7 @@ const tests: KubeApiParseTestData[] = [
resource: "deployments", resource: "deployments",
}, },
], ],
[ [
"/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/prometheuses.monitoring.coreos.com", "/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/prometheuses.monitoring.coreos.com",
{ {
@ -155,6 +173,7 @@ const tests: KubeApiParseTestData[] = [
name: "prometheuses.monitoring.coreos.com", name: "prometheuses.monitoring.coreos.com",
}, },
], ],
[ [
"/api/v1/namespaces/kube-system/pods", "/api/v1/namespaces/kube-system/pods",
{ {
@ -168,6 +187,7 @@ const tests: KubeApiParseTestData[] = [
name: undefined, name: undefined,
}, },
], ],
[ [
"/apis/cluster.k8s.io/v1/namespaces/kube-system/pods", "/apis/cluster.k8s.io/v1/namespaces/kube-system/pods",
{ {
@ -192,6 +212,7 @@ const invalidTests = [
"/apis/apiextensions.k8s.io//customresourcedefinitions/prometheuses.monitoring.coreos.com", "/apis/apiextensions.k8s.io//customresourcedefinitions/prometheuses.monitoring.coreos.com",
"/apis/apiextensions.k8s.io/v1beta1//prometheuses.monitoring.coreos.com", "/apis/apiextensions.k8s.io/v1beta1//prometheuses.monitoring.coreos.com",
"/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/", "/apis/apiextensions.k8s.io/v1beta1/customresourcedefinitions/",
"//v1beta1/customresourcedefinitions/prometheuses.monitoring.coreos.com", "//v1beta1/customresourcedefinitions/prometheuses.monitoring.coreos.com",
"/api//v1beta1/customresourcedefinitions/prometheuses.monitoring.coreos.com", "/api//v1beta1/customresourcedefinitions/prometheuses.monitoring.coreos.com",
"/api//customresourcedefinitions/prometheuses.monitoring.coreos.com", "/api//customresourcedefinitions/prometheuses.monitoring.coreos.com",
@ -203,6 +224,7 @@ describe("parseApi unit tests", () => {
it.each(tests)(`given path %j, parses as expected`, (url, expected) => { it.each(tests)(`given path %j, parses as expected`, (url, expected) => {
expect(parseKubeApi(url)).toStrictEqual(expected); expect(parseKubeApi(url)).toStrictEqual(expected);
}); });
it.each(invalidTests)(`given path %j, parses as undefined`, (url) => { it.each(invalidTests)(`given path %j, parses as undefined`, (url) => {
expect(parseKubeApi(url as never)).toBe(undefined); expect(parseKubeApi(url as never)).toBe(undefined);
}); });

View File

@ -3,8 +3,8 @@
* Licensed under MIT License. See LICENSE in root directory for more information. * Licensed under MIT License. See LICENSE in root directory for more information.
*/ */
import type { ApiManager } from "../api-manager"; import type { ApiManager } from "../api-manager";
import type { IngressApi } from "@k8slens/kube-api"; import type { IngressApi } from "../endpoints";
import { HorizontalPodAutoscalerApi } from "@k8slens/kube-api"; import { HorizontalPodAutoscalerApi } from "../endpoints";
import { Ingress } from "@k8slens/kube-object"; import { Ingress } from "@k8slens/kube-object";
import { getDiForUnitTesting } from "../../../renderer/getDiForUnitTesting"; import { getDiForUnitTesting } from "../../../renderer/getDiForUnitTesting";
import type { Fetch } from "../../fetch/fetch.injectable"; import type { Fetch } from "../../fetch/fetch.injectable";
@ -20,8 +20,9 @@ import hostedClusterInjectable from "../../../renderer/cluster-frame-context/hos
import directoryForKubeConfigsInjectable from "../../app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable"; import directoryForKubeConfigsInjectable from "../../app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable";
import apiManagerInjectable from "../api-manager/manager.injectable"; import apiManagerInjectable from "../api-manager/manager.injectable";
import type { DiContainer } from "@ogre-tools/injectable"; import type { DiContainer } from "@ogre-tools/injectable";
import { ingressApiInjectable, maybeKubeApiInjectable } from "@k8slens/kube-api-specifics"; import ingressApiInjectable from "../endpoints/ingress.api.injectable";
import { logErrorInjectionToken, logInfoInjectionToken, logWarningInjectionToken } from "@k8slens/logger"; import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
import { Cluster } from "../../cluster/cluster"; import { Cluster } from "../../cluster/cluster";
describe("KubeApi", () => { describe("KubeApi", () => {
@ -709,9 +710,7 @@ describe("KubeApi", () => {
beforeEach(async () => { beforeEach(async () => {
horizontalPodAutoscalerApi = new HorizontalPodAutoscalerApi({ horizontalPodAutoscalerApi = new HorizontalPodAutoscalerApi({
logError: di.inject(logErrorInjectionToken), logger: di.inject(loggerInjectionToken),
logInfo: di.inject(logInfoInjectionToken),
logWarn: di.inject(logWarningInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable), maybeKubeApi: di.inject(maybeKubeApiInjectable),
}, { }, {
allowedUsableVersions: { allowedUsableVersions: {

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@
*/ */
import { noop } from "@k8slens/utilities"; import { noop } from "@k8slens/utilities";
import type { KubeApi } from "@k8slens/kube-api"; import type { KubeApi } from "../kube-api";
import { KubeObject } from "@k8slens/kube-object"; import { KubeObject } from "@k8slens/kube-object";
import type { KubeObjectStoreLoadingParams } from "../kube-object.store"; import type { KubeObjectStoreLoadingParams } from "../kube-object.store";
import { KubeObjectStore } from "../kube-object.store"; import { KubeObjectStore } from "../kube-object.store";

View File

@ -3,32 +3,33 @@
* Licensed under MIT License. See LICENSE in root directory for more information. * Licensed under MIT License. See LICENSE in root directory for more information.
*/ */
import { KubeJsonApi, StatefulSetApi } from "@k8slens/kube-api"; import storesAndApisCanBeCreatedInjectable from "../../../renderer/stores-apis-can-be-created.injectable";
import { flushPromises } from "@k8slens/test-utils"; import { getDiForUnitTesting } from "../../../renderer/getDiForUnitTesting";
import asyncFn from "@async-fn/jest"; import apiKubeInjectable from "../../../renderer/k8s/api-kube.injectable";
import type { StatefulSetApi } from "../endpoints";
import statefulSetApiInjectable from "../endpoints/stateful-set.api.injectable";
import type { KubeJsonApi } from "../kube-json-api";
import type { AsyncFnMock } from "@async-fn/jest"; import type { AsyncFnMock } from "@async-fn/jest";
import asyncFn from "@async-fn/jest";
import { flushPromises } from "@k8slens/test-utils";
describe("StatefulSetApi", () => { describe("StatefulSetApi", () => {
let statefulSetApi: StatefulSetApi; let statefulSetApi: StatefulSetApi;
let kubeJsonApi: KubeJsonApi;
let kubeJsonApiPatchMock: AsyncFnMock<KubeJsonApi["patch"]>; let kubeJsonApiPatchMock: AsyncFnMock<KubeJsonApi["patch"]>;
let kubeJsonApiGetMock: AsyncFnMock<KubeJsonApi["get"]>; let kubeJsonApiGetMock: AsyncFnMock<KubeJsonApi["get"]>;
beforeEach(() => { beforeEach(() => {
kubeJsonApiGetMock = asyncFn<KubeJsonApi["get"]>(); const di = getDiForUnitTesting();
kubeJsonApiPatchMock = asyncFn<KubeJsonApi["patch"]>();
kubeJsonApi = { di.override(storesAndApisCanBeCreatedInjectable, () => true);
kubeJsonApiPatchMock = asyncFn();
kubeJsonApiGetMock = asyncFn();
di.override(apiKubeInjectable, () => ({
get: kubeJsonApiGetMock, get: kubeJsonApiGetMock,
patch: kubeJsonApiPatchMock, patch: kubeJsonApiPatchMock,
} as Partial<KubeJsonApi> as KubeJsonApi; } as Partial<KubeJsonApi> as KubeJsonApi));
statefulSetApi = new StatefulSetApi({
logger: { statefulSetApi = di.inject(statefulSetApiInjectable);
info: jest.fn(),
debug: jest.fn(),
error: jest.fn(),
} as any,
maybeKubeApi: kubeJsonApi,
});
}); });
describe("scale", () => { describe("scale", () => {
@ -36,9 +37,7 @@ describe("StatefulSetApi", () => {
const req = statefulSetApi.scale({ namespace: "default", name: "statefulset-1" }, 5); const req = statefulSetApi.scale({ namespace: "default", name: "statefulset-1" }, 5);
await flushPromises(); await flushPromises();
expect(kubeJsonApiPatchMock).toHaveBeenCalledWith( expect(kubeJsonApiPatchMock).toHaveBeenCalledWith("/apis/apps/v1/namespaces/default/statefulsets/statefulset-1/scale", {
"/apis/apps/v1/namespaces/default/statefulsets/statefulset-1/scale",
{
data: { data: {
spec: { spec: {
replicas: 5, replicas: 5,
@ -49,8 +48,7 @@ describe("StatefulSetApi", () => {
headers: { headers: {
"content-type": "application/merge-patch+json", "content-type": "application/merge-patch+json",
}, },
}, });
);
await kubeJsonApiPatchMock.resolve({}); await kubeJsonApiPatchMock.resolve({});
await req; await req;
@ -60,8 +58,8 @@ describe("StatefulSetApi", () => {
const req = statefulSetApi.getReplicas({ namespace: "default", name: "statefulset-1" }); const req = statefulSetApi.getReplicas({ namespace: "default", name: "statefulset-1" });
await flushPromises(); await flushPromises();
expect(kubeJsonApi.get).toHaveBeenCalledWith("/apis/apps/v1/namespaces/default/statefulsets/statefulset-1/scale"); expect(kubeJsonApiGetMock).toHaveBeenCalledWith("/apis/apps/v1/namespaces/default/statefulsets/statefulset-1/scale");
await kubeJsonApiGetMock.resolve({ status: { replicas: 10 } }); await kubeJsonApiGetMock.resolve({ status: { replicas: 10 }});
expect(await req).toBe(10); expect(await req).toBe(10);
}); });

View File

@ -7,9 +7,9 @@ import type { KubeObjectStore } from "../kube-object.store";
import type { IComputedValue } from "mobx"; import type { IComputedValue } from "mobx";
import { autorun, action, observable } from "mobx"; import { autorun, action, observable } from "mobx";
import type { KubeApi } from "@k8slens/kube-api"; import type { KubeApi } from "../kube-api";
import type { KubeObject, ObjectReference } from "@k8slens/kube-object"; import type { KubeObject, ObjectReference } from "@k8slens/kube-object";
import { parseKubeApi, createKubeApiURL } from "@k8slens/kube-api"; import { parseKubeApi, createKubeApiURL } from "../kube-api-parse";
import { getOrInsertWith, iter } from "@k8slens/utilities"; import { getOrInsertWith, iter } from "@k8slens/utilities";
import type { CreateCustomResourceStore } from "./create-custom-resource-store.injectable"; import type { CreateCustomResourceStore } from "./create-custom-resource-store.injectable";

View File

@ -5,7 +5,7 @@
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import EventEmitter from "events"; import EventEmitter from "events";
import type TypedEventEmitter from "typed-emitter"; import type TypedEventEmitter from "typed-emitter";
import type { KubeApi } from "@k8slens/kube-api"; import type { KubeApi } from "../kube-api";
export interface LegacyAutoRegistration { export interface LegacyAutoRegistration {
kubeApi: (api: KubeApi<any, any>) => void; kubeApi: (api: KubeApi<any, any>) => void;

View File

@ -4,7 +4,7 @@
*/ */
import { getInjectionToken } from "@ogre-tools/injectable"; import { getInjectionToken } from "@ogre-tools/injectable";
import type { KubeApi } from "@k8slens/kube-api"; import type { KubeApi } from "../kube-api";
export const customResourceDefinitionApiInjectionToken = getInjectionToken<KubeApi>({ export const customResourceDefinitionApiInjectionToken = getInjectionToken<KubeApi>({
id: "custom-resource-definition-api-token", id: "custom-resource-definition-api-token",

View File

@ -5,7 +5,7 @@
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import clusterFrameContextForNamespacedResourcesInjectable from "../../../renderer/cluster-frame-context/for-namespaced-resources.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../../renderer/cluster-frame-context/for-namespaced-resources.injectable";
import { loggerInjectionToken } from "@k8slens/logger"; import { loggerInjectionToken } from "@k8slens/logger";
import type { KubeApi } from "@k8slens/kube-api"; import type { KubeApi } from "../kube-api";
import type { KubeObject } from "@k8slens/kube-object"; import type { KubeObject } from "@k8slens/kube-object";
import type { KubeObjectStoreDependencies } from "../kube-object.store"; import type { KubeObjectStoreDependencies } from "../kube-object.store";
import { CustomResourceStore } from "./resource.store"; import { CustomResourceStore } from "./resource.store";

View File

@ -3,10 +3,11 @@
* Licensed under MIT License. See LICENSE in root directory for more information. * Licensed under MIT License. See LICENSE in root directory for more information.
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { ApiManager } from "./api-manager"; import { ApiManager } from "./api-manager";
import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx"; import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx";
import { kubeObjectStoreInjectionToken } from "./kube-object-store-token"; import { kubeObjectStoreInjectionToken } from "./kube-object-store-token";
import { kubeApiInjectionToken, storesAndApisCanBeCreatedInjectionToken } from "@k8slens/kube-api-specifics"; import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { computed } from "mobx"; import { computed } from "mobx";
import { customResourceDefinitionApiInjectionToken } from "./crd-api-token"; import { customResourceDefinitionApiInjectionToken } from "./crd-api-token";
import createCustomResourceStoreInjectable from "./create-custom-resource-store.injectable"; import createCustomResourceStoreInjectable from "./create-custom-resource-store.injectable";

View File

@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information. * Licensed under MIT License. See LICENSE in root directory for more information.
*/ */
import type { KubeApi } from "@k8slens/kube-api"; import type { KubeApi } from "../kube-api";
import type { KubeObjectStoreDependencies } from "../kube-object.store"; import type { KubeObjectStoreDependencies } from "../kube-object.store";
import { KubeObjectStore } from "../kube-object.store"; import { KubeObjectStore } from "../kube-object.store";
import type { KubeObject } from "@k8slens/kube-object"; import type { KubeObject } from "@k8slens/kube-object";

View File

@ -3,13 +3,13 @@
* Licensed under MIT License. See LICENSE in root directory for more information. * Licensed under MIT License. See LICENSE in root directory for more information.
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { logErrorInjectionToken, logInfoInjectionToken, logWarningInjectionToken } from "@k8slens/logger"; import { loggerInjectionToken } from "@k8slens/logger";
import { apiKubePrefix } from "../vars"; import { apiKubePrefix } from "../vars";
import isDevelopmentInjectable from "../vars/is-development.injectable"; import isDevelopmentInjectable from "../vars/is-development.injectable";
import apiBaseInjectable from "./api-base.injectable"; import apiBaseInjectable from "./api-base.injectable";
import type { KubeApiConstructor } from "./create-kube-api-for-remote-cluster.injectable"; import type { KubeApiConstructor } from "./create-kube-api-for-remote-cluster.injectable";
import createKubeJsonApiInjectable from "./create-kube-json-api.injectable"; import createKubeJsonApiInjectable from "./create-kube-json-api.injectable";
import { KubeApi } from "@k8slens/kube-api"; import { KubeApi } from "./kube-api";
import type { KubeJsonApiDataFor, KubeObject, KubeObjectConstructor } from "@k8slens/kube-object"; import type { KubeJsonApiDataFor, KubeObject, KubeObjectConstructor } from "@k8slens/kube-object";
export interface CreateKubeApiForLocalClusterConfig { export interface CreateKubeApiForLocalClusterConfig {
@ -37,9 +37,7 @@ const createKubeApiForClusterInjectable = getInjectable({
const apiBase = di.inject(apiBaseInjectable); const apiBase = di.inject(apiBaseInjectable);
const isDevelopment = di.inject(isDevelopmentInjectable); const isDevelopment = di.inject(isDevelopmentInjectable);
const createKubeJsonApi = di.inject(createKubeJsonApiInjectable); const createKubeJsonApi = di.inject(createKubeJsonApiInjectable);
const logError = di.inject(logErrorInjectionToken); const logger = di.inject(loggerInjectionToken);
const logInfo = di.inject(logInfoInjectionToken);
const logWarn = di.inject(logWarningInjectionToken);
return ( return (
cluster: CreateKubeApiForLocalClusterConfig, cluster: CreateKubeApiForLocalClusterConfig,
@ -66,9 +64,7 @@ const createKubeApiForClusterInjectable = getInjectable({
return new KubeApi( return new KubeApi(
{ {
logError, logger,
logInfo,
logWarn,
maybeKubeApi: undefined, maybeKubeApi: undefined,
}, },
{ {

View File

@ -6,11 +6,11 @@ import { getInjectable } from "@ogre-tools/injectable";
import type { AgentOptions } from "https"; import type { AgentOptions } from "https";
import { Agent } from "https"; import { Agent } from "https";
import type { RequestInit } from "@k8slens/node-fetch"; import type { RequestInit } from "@k8slens/node-fetch";
import { logErrorInjectionToken, logInfoInjectionToken, logWarningInjectionToken } from "@k8slens/logger"; import { loggerInjectionToken } from "@k8slens/logger";
import isDevelopmentInjectable from "../vars/is-development.injectable"; import isDevelopmentInjectable from "../vars/is-development.injectable";
import createKubeJsonApiInjectable from "./create-kube-json-api.injectable"; import createKubeJsonApiInjectable from "./create-kube-json-api.injectable";
import type { KubeApiOptions } from "@k8slens/kube-api"; import type { KubeApiOptions } from "./kube-api";
import { KubeApi } from "@k8slens/kube-api"; import { KubeApi } from "./kube-api";
import type { KubeJsonApiDataFor, KubeObject, KubeObjectConstructor } from "@k8slens/kube-object"; import type { KubeJsonApiDataFor, KubeObject, KubeObjectConstructor } from "@k8slens/kube-object";
export interface CreateKubeApiForRemoteClusterConfig { export interface CreateKubeApiForRemoteClusterConfig {
@ -53,9 +53,7 @@ const createKubeApiForRemoteClusterInjectable = getInjectable({
instantiate: (di): CreateKubeApiForRemoteCluster => { instantiate: (di): CreateKubeApiForRemoteCluster => {
const isDevelopment = di.inject(isDevelopmentInjectable); const isDevelopment = di.inject(isDevelopmentInjectable);
const createKubeJsonApi = di.inject(createKubeJsonApiInjectable); const createKubeJsonApi = di.inject(createKubeJsonApiInjectable);
const logError = di.inject(logErrorInjectionToken); const logger = di.inject(loggerInjectionToken);
const logInfo = di.inject(logInfoInjectionToken);
const logWarn = di.inject(logWarningInjectionToken);
return ( return (
config: CreateKubeApiForRemoteClusterConfig, config: CreateKubeApiForRemoteClusterConfig,
@ -112,9 +110,7 @@ const createKubeApiForRemoteClusterInjectable = getInjectable({
return new KubeApi( return new KubeApi(
{ {
logError, logger,
logInfo,
logWarn,
maybeKubeApi: undefined, maybeKubeApi: undefined,
}, },
{ {

View File

@ -3,9 +3,9 @@
* Licensed under MIT License. See LICENSE in root directory for more information. * Licensed under MIT License. See LICENSE in root directory for more information.
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { logErrorInjectionToken, logInfoInjectionToken, logWarningInjectionToken } from "@k8slens/logger"; import { loggerInjectionToken } from "@k8slens/logger";
import type { DerivedKubeApiOptions, KubeApiDependencies } from "@k8slens/kube-api"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "./kube-api";
import { maybeKubeApiInjectable } from "@k8slens/kube-api-specifics"; import maybeKubeApiInjectable from "./maybe-kube-api.injectable";
export interface CreateKubeApi { export interface CreateKubeApi {
<Api>(ctor: new (deps: KubeApiDependencies, opts: DerivedKubeApiOptions) => Api, opts?: DerivedKubeApiOptions): Api; <Api>(ctor: new (deps: KubeApiDependencies, opts: DerivedKubeApiOptions) => Api, opts?: DerivedKubeApiOptions): Api;
@ -15,9 +15,7 @@ const createKubeApiInjectable = getInjectable({
id: "create-kube-api", id: "create-kube-api",
instantiate: (di): CreateKubeApi => { instantiate: (di): CreateKubeApi => {
const deps: KubeApiDependencies = { const deps: KubeApiDependencies = {
logError: di.inject(logErrorInjectionToken), logger: di.inject(loggerInjectionToken),
logInfo: di.inject(logInfoInjectionToken),
logWarn: di.inject(logWarningInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable), maybeKubeApi: di.inject(maybeKubeApiInjectable),
}; };

View File

@ -7,7 +7,7 @@ import { apiKubePrefix } from "../vars";
import isDebuggingInjectable from "../vars/is-debugging.injectable"; import isDebuggingInjectable from "../vars/is-debugging.injectable";
import { apiBaseHostHeaderInjectionToken, apiBaseServerAddressInjectionToken } from "./api-base-configs"; import { apiBaseHostHeaderInjectionToken, apiBaseServerAddressInjectionToken } from "./api-base-configs";
import createKubeJsonApiInjectable from "./create-kube-json-api.injectable"; import createKubeJsonApiInjectable from "./create-kube-json-api.injectable";
import type { KubeJsonApi } from "@k8slens/kube-api"; import type { KubeJsonApi } from "./kube-json-api";
export type CreateKubeJsonApiForCluster = (clusterId: string) => KubeJsonApi; export type CreateKubeJsonApiForCluster = (clusterId: string) => KubeJsonApi;

View File

@ -9,7 +9,7 @@ import lensProxyCertificateInjectable from "../certificate/lens-proxy-certificat
import fetchInjectable from "../fetch/fetch.injectable"; import fetchInjectable from "../fetch/fetch.injectable";
import { loggerInjectionToken } from "@k8slens/logger"; import { loggerInjectionToken } from "@k8slens/logger";
import type { JsonApiConfig, JsonApiDependencies } from "@k8slens/json-api"; import type { JsonApiConfig, JsonApiDependencies } from "@k8slens/json-api";
import { KubeJsonApi } from "@k8slens/kube-api"; import { KubeJsonApi } from "./kube-json-api";
export type CreateKubeJsonApi = (config: JsonApiConfig, reqInit?: RequestInit) => KubeJsonApi; export type CreateKubeJsonApi = (config: JsonApiConfig, reqInit?: RequestInit) => KubeJsonApi;

View File

@ -0,0 +1,27 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { ClusterRoleBindingApi } from "./cluster-role-binding.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
const clusterRoleBindingApiInjectable = getInjectable({
id: "cluster-role-binding-api",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "clusterRoleBindingApi is only accessible in certain environments");
return new ClusterRoleBindingApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
});
},
injectionToken: kubeApiInjectionToken,
});
export default clusterRoleBindingApiInjectable;

View File

@ -0,0 +1,27 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { ClusterRoleApi } from "./cluster-role.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
const clusterRoleApiInjectable = getInjectable({
id: "cluster-role-api",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "clusterRoleApi is only available in certain environments");
return new ClusterRoleApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
});
},
injectionToken: kubeApiInjectionToken,
});
export default clusterRoleApiInjectable;

View File

@ -0,0 +1,27 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { ClusterApi } from "./cluster.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
const clusterApiInjectable = getInjectable({
id: "cluster-api",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "clusterApi is only available in certain environments");
return new ClusterApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
});
},
injectionToken: kubeApiInjectionToken,
});
export default clusterApiInjectable;

View File

@ -20,7 +20,7 @@ export class ClusterApi extends KubeApi<Cluster> {
constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) { constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) {
super(deps, { super(deps, {
...(opts ?? {}), ...opts ?? {},
objectConstructor: Cluster, objectConstructor: Cluster,
}); });
} }

View File

@ -0,0 +1,27 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { ComponentStatusApi } from "./component-status.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
import { loggerInjectionToken } from "@k8slens/logger";
const componentStatusApiInjectable = getInjectable({
id: "component-status-api",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "componentStatusApi is only available in certain environments");
return new ComponentStatusApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
});
},
injectionToken: kubeApiInjectionToken,
});
export default componentStatusApiInjectable;

View File

@ -0,0 +1,27 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { ConfigMapApi } from "./config-map.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
const configMapApiInjectable = getInjectable({
id: "config-map-api",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "configMapApi is only available in certain environments");
return new ConfigMapApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
});
},
injectionToken: kubeApiInjectionToken,
});
export default configMapApiInjectable;

View File

@ -12,7 +12,7 @@ export class ConfigMapApi extends KubeApi<ConfigMap, ConfigMapData> {
constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) { constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) {
super(deps, { super(deps, {
objectConstructor: ConfigMap, objectConstructor: ConfigMap,
...(opts ?? {}), ...opts ?? {},
}); });
} }
} }

View File

@ -0,0 +1,29 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { CronJobApi } from "./cron-job.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
const cronJobApiInjectable = getInjectable({
id: "cron-job-api",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "cronJobApi is only available in certain environments");
return new CronJobApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
}, {
checkPreferredVersion: true,
});
},
injectionToken: kubeApiInjectionToken,
});
export default cronJobApiInjectable;

View File

@ -16,15 +16,11 @@ export class CronJobApi extends KubeApi<CronJob> {
} }
private requestSetSuspend(params: NamespacedResourceDescriptor, suspend: boolean) { private requestSetSuspend(params: NamespacedResourceDescriptor, suspend: boolean) {
return this.patch( return this.patch(params, {
params,
{
spec: { spec: {
suspend, suspend,
}, },
}, }, "strategic");
"strategic",
);
} }
suspend(params: NamespacedResourceDescriptor) { suspend(params: NamespacedResourceDescriptor) {

View File

@ -0,0 +1,27 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { CustomResourceDefinitionApi } from "./custom-resource-definition.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
import { loggerInjectionToken } from "@k8slens/logger";
const customResourceDefinitionApiInjectable = getInjectable({
id: "custom-resource-definition-api",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "customResourceDefinitionApi is only available in certain environments");
return new CustomResourceDefinitionApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
});
},
injectionToken: kubeApiInjectionToken,
});
export default customResourceDefinitionApiInjectable;

View File

@ -0,0 +1,27 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { DaemonSetApi } from "./daemon-set.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
const daemonSetApiInjectable = getInjectable({
id: "daemon-set-api",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "daemonSetApi is only available in certain environments");
return new DaemonSetApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
});
},
injectionToken: kubeApiInjectionToken,
});
export default daemonSetApiInjectable;

View File

@ -11,24 +11,20 @@ import { DaemonSet } from "@k8slens/kube-object";
export class DaemonSetApi extends KubeApi<DaemonSet> { export class DaemonSetApi extends KubeApi<DaemonSet> {
constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) { constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) {
super(deps, { super(deps, {
...(opts ?? {}), ...opts ?? {},
objectConstructor: DaemonSet, objectConstructor: DaemonSet,
}); });
} }
restart(params: NamespacedResourceDescriptor) { restart(params: NamespacedResourceDescriptor) {
return this.patch( return this.patch(params, {
params,
{
spec: { spec: {
template: { template: {
metadata: { metadata: {
annotations: { "kubectl.kubernetes.io/restartedAt": moment.utc().format() }, annotations: { "kubectl.kubernetes.io/restartedAt" : moment.utc().format() },
}, },
}, },
}, },
}, }, "strategic");
"strategic",
);
} }
} }

View File

@ -0,0 +1,27 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { DeploymentApi } from "./deployment.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
const deploymentApiInjectable = getInjectable({
id: "deployment-api",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "deploymentApi is only available in certain environments");
return new DeploymentApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
});
},
injectionToken: kubeApiInjectionToken,
});
export default deploymentApiInjectable;

View File

@ -12,7 +12,7 @@ import { Deployment } from "@k8slens/kube-object";
export class DeploymentApi extends KubeApi<Deployment> { export class DeploymentApi extends KubeApi<Deployment> {
constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) { constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) {
super(deps, { super(deps, {
...(opts ?? {}), ...opts ?? {},
objectConstructor: Deployment, objectConstructor: Deployment,
}); });
} }
@ -24,22 +24,18 @@ export class DeploymentApi extends KubeApi<Deployment> {
} }
scale(params: NamespacedResourceDescriptor, replicas: number) { scale(params: NamespacedResourceDescriptor, replicas: number) {
return this.scaleResource(params, { spec: { replicas } }); return this.scaleResource(params, { spec: { replicas }});
} }
restart(params: NamespacedResourceDescriptor) { restart(params: NamespacedResourceDescriptor) {
return this.patch( return this.patch(params, {
params,
{
spec: { spec: {
template: { template: {
metadata: { metadata: {
annotations: { "kubectl.kubernetes.io/restartedAt": moment.utc().format() }, annotations: { "kubectl.kubernetes.io/restartedAt" : moment.utc().format() },
}, },
}, },
}, },
}, }, "strategic");
"strategic",
);
} }
} }

View File

@ -0,0 +1,27 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { EndpointsApi } from "./endpoint.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
const endpointsApiInjectable = getInjectable({
id: "endpoints-api",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "endpointsApi is only available in certain environments");
return new EndpointsApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
});
},
injectionToken: kubeApiInjectionToken,
});
export default endpointsApiInjectable;

View File

@ -0,0 +1,27 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { KubeEventApi } from "./events.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
const kubeEventApiInjectable = getInjectable({
id: "kube-event-api",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "kubeEventApi is only available in certain environments");
return new KubeEventApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
});
},
injectionToken: kubeApiInjectionToken,
});
export default kubeEventApiInjectable;

View File

@ -8,7 +8,7 @@ import apiBaseInjectable from "../../api-base.injectable";
export type RequestHelmReleaseRollback = (name: string, namespace: string, revision: number) => Promise<void>; export type RequestHelmReleaseRollback = (name: string, namespace: string, revision: number) => Promise<void>;
const requestRollbackEndpoint = urlBuilderFor("/v2/releases/:namespace/:name/rollback"); const requestRollbackEndpoint = urlBuilderFor("/v2/releases/:namespace/:name");
const requestHelmReleaseRollbackInjectable = getInjectable({ const requestHelmReleaseRollbackInjectable = getInjectable({
id: "request-helm-release-rollback", id: "request-helm-release-rollback",

View File

@ -0,0 +1,27 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { HorizontalPodAutoscalerApi } from "./horizontal-pod-autoscaler.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
const horizontalPodAutoscalerApiInjectable = getInjectable({
id: "horizontal-pod-autoscaler-api",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "horizontalPodAutoscalerApi is only available in certain environments");
return new HorizontalPodAutoscalerApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
});
},
injectionToken: kubeApiInjectionToken,
});
export default horizontalPodAutoscalerApiInjectable;

View File

@ -11,9 +11,14 @@ export class HorizontalPodAutoscalerApi extends KubeApi<HorizontalPodAutoscaler>
constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) { constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) {
super(deps, { super(deps, {
allowedUsableVersions: { allowedUsableVersions: {
autoscaling: ["v2", "v2beta2", "v2beta1", "v1"], autoscaling: [
"v2",
"v2beta2",
"v2beta1",
"v1",
],
}, },
...(opts ?? {}), ...opts ?? {},
objectConstructor: HorizontalPodAutoscaler, objectConstructor: HorizontalPodAutoscaler,
checkPreferredVersion: true, checkPreferredVersion: true,
}); });

View File

@ -4,7 +4,7 @@
*/ */
// Kubernetes apis // Kubernetes apis
// Docs: https://kubernetes.io/docs/reference/kubernetes-api/ // Docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.10/
export * from "./cluster.api"; export * from "./cluster.api";
export * from "./cluster-role.api"; export * from "./cluster-role.api";
@ -12,7 +12,6 @@ export * from "./cluster-role-binding.api";
export * from "./config-map.api"; export * from "./config-map.api";
export * from "./custom-resource-definition.api"; export * from "./custom-resource-definition.api";
export * from "./cron-job.api"; export * from "./cron-job.api";
export * from "./component-status.api";
export * from "./daemon-set.api"; export * from "./daemon-set.api";
export * from "./deployment.api"; export * from "./deployment.api";
export * from "./endpoint.api"; export * from "./endpoint.api";

View File

@ -0,0 +1,21 @@
/**
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
import { IngressClassApi } from "./ingress-class.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
const ingressClassApiInjectable = getInjectable({
id: "ingress-class-api",
instantiate: (di) => new IngressClassApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
}),
injectionToken: kubeApiInjectionToken,
});
export default ingressClassApiInjectable;

View File

@ -17,16 +17,12 @@ export class IngressClassApi extends KubeApi<IngressClass> {
} }
setAsDefault({ name }: ResourceDescriptor, isDefault = true) { setAsDefault({ name }: ResourceDescriptor, isDefault = true) {
return this.patch( return this.patch({ name }, {
{ name },
{
metadata: { metadata: {
annotations: { annotations: {
[IngressClass.ANNOTATION_IS_DEFAULT]: String(isDefault), [IngressClass.ANNOTATION_IS_DEFAULT]: String(isDefault),
}, },
}, },
}, }, "strategic");
"strategic",
);
} }
} }

View File

@ -0,0 +1,27 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { IngressApi } from "./ingress.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
const ingressApiInjectable = getInjectable({
id: "ingress-api",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "ingressApi is only available in certain environments");
return new IngressApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
});
},
injectionToken: kubeApiInjectionToken,
});
export default ingressApiInjectable;

View File

@ -10,7 +10,7 @@ import { KubeApi } from "../kube-api";
export class IngressApi extends KubeApi<Ingress> { export class IngressApi extends KubeApi<Ingress> {
constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) { constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) {
super(deps, { super(deps, {
...(opts ?? {}), ...opts ?? {},
objectConstructor: Ingress, objectConstructor: Ingress,
// Add fallback for Kubernetes <1.19 // Add fallback for Kubernetes <1.19
checkPreferredVersion: true, checkPreferredVersion: true,

View File

@ -0,0 +1,29 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { JobApi } from "./job.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
const jobApiInjectable = getInjectable({
id: "job-api",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "jobApi is only available in certain environments");
return new JobApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
}, {
checkPreferredVersion: true,
});
},
injectionToken: kubeApiInjectionToken,
});
export default jobApiInjectable;

View File

@ -10,7 +10,7 @@ import { Job } from "@k8slens/kube-object";
export class JobApi extends KubeApi<Job> { export class JobApi extends KubeApi<Job> {
constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) { constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) {
super(deps, { super(deps, {
...(opts ?? {}), ...opts ?? {},
objectConstructor: Job, objectConstructor: Job,
}); });
} }

View File

@ -0,0 +1,27 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { LeaseApi } from "./lease.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
const leaseApiInjectable = getInjectable({
id: "lease-api",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "leaseApi is only available in certain environments");
return new LeaseApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
});
},
injectionToken: kubeApiInjectionToken,
});
export default leaseApiInjectable;

View File

@ -10,7 +10,7 @@ import { Lease } from "@k8slens/kube-object";
export class LeaseApi extends KubeApi<Lease> { export class LeaseApi extends KubeApi<Lease> {
constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) { constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) {
super(deps, { super(deps, {
...(opts ?? {}), ...opts ?? {},
objectConstructor: Lease, objectConstructor: Lease,
}); });
} }

View File

@ -0,0 +1,27 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { LimitRangeApi } from "./limit-range.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
const limitRangeApiInjectable = getInjectable({
id: "limit-range-api",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "limitRangeApi is only available in certain environments");
return new LimitRangeApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
});
},
injectionToken: kubeApiInjectionToken,
});
export default limitRangeApiInjectable;

View File

@ -7,11 +7,12 @@ import { LimitRange } from "@k8slens/kube-object";
import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api"; import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api";
import { KubeApi } from "../kube-api"; import { KubeApi } from "../kube-api";
export class LimitRangeApi extends KubeApi<LimitRange> { export class LimitRangeApi extends KubeApi<LimitRange> {
constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) { constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) {
super(deps, { super(deps, {
objectConstructor: LimitRange, objectConstructor: LimitRange,
...(opts ?? {}), ...opts ?? {},
}); });
} }
} }

View File

@ -4,7 +4,7 @@
*/ */
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import type { MetricData } from "../metrics.api"; import type { MetricData } from "../metrics.api";
import type { Pod, Container } from "@k8slens/kube-object"; import type { Pod } from "@k8slens/kube-object";
import requestMetricsInjectable from "./request-metrics.injectable"; import requestMetricsInjectable from "./request-metrics.injectable";
export interface PodMetricData { export interface PodMetricData {
@ -21,16 +21,16 @@ export interface PodMetricData {
memoryLimits: MetricData; memoryLimits: MetricData;
} }
export type RequestPodMetrics = (pods: Pod[], namespace: string, container?: Container, selector?: string) => Promise<PodMetricData>; export type RequestPodMetrics = (pods: Pod[], namespace: string, selector?: string) => Promise<PodMetricData>;
const requestPodMetricsInjectable = getInjectable({ const requestPodMetricsInjectable = getInjectable({
id: "request-pod-metrics", id: "request-pod-metrics",
instantiate: (di): RequestPodMetrics => { instantiate: (di): RequestPodMetrics => {
const requestMetrics = di.inject(requestMetricsInjectable); const requestMetrics = di.inject(requestMetricsInjectable);
return (pods, namespace, container, selector = "pod, namespace") => { return (pods, namespace, selector = "pod, namespace") => {
const podSelector = pods.map(pod => pod.getName()).join("|"); const podSelector = pods.map(pod => pod.getName()).join("|");
const opts = { category: "pods", pods: podSelector, container: container?.name, namespace, selector }; const opts = { category: "pods", pods: podSelector, namespace, selector };
return requestMetrics({ return requestMetrics({
cpuUsage: opts, cpuUsage: opts,

View File

@ -0,0 +1,27 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
import { MutatingWebhookConfigurationApi } from "./mutating-webhook-configuration.api";
const mutatingWebhookConfigurationApiInjectable = getInjectable({
id: "mutating-webhook-configuration",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "mutatingWebhookApi is only available in certain environments");
return new MutatingWebhookConfigurationApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
});
},
injectionToken: kubeApiInjectionToken,
});
export default mutatingWebhookConfigurationApiInjectable;

View File

@ -9,7 +9,7 @@ import { KubeApi } from "../kube-api";
export class MutatingWebhookConfigurationApi extends KubeApi<MutatingWebhookConfiguration> { export class MutatingWebhookConfigurationApi extends KubeApi<MutatingWebhookConfiguration> {
constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) { constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) {
super(deps, { super(deps, {
...(opts ?? {}), ...opts ?? {},
objectConstructor: MutatingWebhookConfiguration, objectConstructor: MutatingWebhookConfiguration,
}); });
} }

View File

@ -0,0 +1,28 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { NamespaceApi } from "./namespace.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
const namespaceApiInjectable = getInjectable({
id: "namespace-api",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "namespaceApi is only available in certain environments");
return new NamespaceApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
});
},
injectionToken: kubeApiInjectionToken,
});
export default namespaceApiInjectable;

View File

@ -10,7 +10,7 @@ import { Namespace } from "@k8slens/kube-object";
export class NamespaceApi extends KubeApi<Namespace> { export class NamespaceApi extends KubeApi<Namespace> {
constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) { constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) {
super(deps, { super(deps, {
...(opts ?? {}), ...opts ?? {},
objectConstructor: Namespace, objectConstructor: Namespace,
}); });
} }

View File

@ -0,0 +1,27 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { NetworkPolicyApi } from "./network-policy.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
const networkPolicyApiInjectable = getInjectable({
id: "network-policy-api",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "networkPolicyApi is only available in certain environments");
return new NetworkPolicyApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
});
},
injectionToken: kubeApiInjectionToken,
});
export default networkPolicyApiInjectable;

View File

@ -0,0 +1,27 @@
/**
* 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 assert from "assert";
import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
import { NodeApi } from "./node.api";
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
import { loggerInjectionToken } from "@k8slens/logger";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
const nodeApiInjectable = getInjectable({
id: "node-api",
instantiate: (di) => {
assert(di.inject(storesAndApisCanBeCreatedInjectionToken), "nodeApi is only available in certain environments");
return new NodeApi({
logger: di.inject(loggerInjectionToken),
maybeKubeApi: di.inject(maybeKubeApiInjectable),
});
},
injectionToken: kubeApiInjectionToken,
});
export default nodeApiInjectable;

View File

@ -10,7 +10,7 @@ import { KubeApi } from "../kube-api";
export class NodeApi extends KubeApi<Node> { export class NodeApi extends KubeApi<Node> {
constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) { constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) {
super(deps, { super(deps, {
...(opts ?? {}), ...opts ?? {},
objectConstructor: Node, objectConstructor: Node,
}); });
} }

Some files were not shown because too many files have changed in this diff Show More