diff --git a/.github/workflows/cron-test.yaml b/.github/workflows/cron-test.yaml
new file mode 100644
index 0000000000..812da0368f
--- /dev/null
+++ b/.github/workflows/cron-test.yaml
@@ -0,0 +1,54 @@
+name: Cron Test
+on:
+ schedule:
+ - cron: "0 0 * * 1" # Run on the first day over every week
+jobs:
+ test:
+ name: cron unit tests on ${{ matrix.os }}
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ os: [ubuntu-20.04, macos-11, windows-2019]
+ node-version: [16.x]
+ steps:
+ - name: Checkout Release from lens
+ uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+
+ - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file
+ if: runner.os == 'Linux'
+ run: |
+ echo -e "$(ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1)\t$(hostname -f) $(hostname -s)" | sudo tee -a /etc/hosts
+
+ - name: Using Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v3
+ with:
+ node-version: ${{ matrix.node-version }}
+
+ - name: Get npm cache directory path
+ if: ${{ runner.os != 'Windows' }}
+ id: npm-cache-dir-path
+ shell: bash
+ run: echo "dir=$(npm config get cache)" >> $GITHUB_OUTPUT
+
+ - uses: actions/cache@v3
+ if: ${{ runner.os != 'Windows' }}
+ id: npm-cache # use this to check for `cache-hit` (`steps.npm-cache.outputs.cache-hit != 'true'`)
+ with:
+ path: ${{ steps.npm-cache-dir-path.outputs.dir }}
+ key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
+ restore-keys: |
+ ${{ runner.os }}-npm-
+
+ - uses: nick-fields/retry@v2
+ name: Install dependencies
+ with:
+ timeout_minutes: 20
+ max_attempts: 3
+ retry_on: error
+ command: npm ci
+
+ - run: npm run test:unit
+ name: Run tests
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 47567ac44b..c733570f07 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -7,14 +7,80 @@ on:
branches:
- master
jobs:
- test:
- name: ${{ matrix.type }} tests on ${{ matrix.os }}
+ integration-test:
+ name: integration tests on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-20.04, macos-11, windows-2019]
- type: [unit, smoke]
+ node-version: [16.x]
+ steps:
+ - name: Checkout Release from lens
+ uses: actions/checkout@v3
+ with:
+ fetch-depth: 0
+
+ - name: Add the current IP address, long hostname and short hostname record to /etc/hosts file
+ if: runner.os == 'Linux'
+ run: |
+ echo -e "$(ip addr show eth0 | grep "inet\b" | awk '{print $2}' | cut -d/ -f1)\t$(hostname -f) $(hostname -s)" | sudo tee -a /etc/hosts
+
+ - name: Using Node.js ${{ matrix.node-version }}
+ uses: actions/setup-node@v3
+ with:
+ node-version: ${{ matrix.node-version }}
+
+ - name: Get npm cache directory path
+ if: ${{ runner.os != 'Windows' }}
+ id: npm-cache-dir-path
+ shell: bash
+ run: echo "dir=$(npm config get cache)" >> $GITHUB_OUTPUT
+
+ - uses: actions/cache@v3
+ if: ${{ runner.os != 'Windows' }}
+ id: npm-cache # use this to check for `cache-hit` (`steps.npm-cache.outputs.cache-hit != 'true'`)
+ with:
+ path: ${{ steps.npm-cache-dir-path.outputs.dir }}
+ key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
+ restore-keys: |
+ ${{ runner.os }}-npm-
+
+ - uses: nick-fields/retry@v2
+ name: Install dependencies
+ with:
+ timeout_minutes: 20
+ max_attempts: 3
+ retry_on: error
+ command: npm ci
+
+ - name: Install integration test dependencies
+ id: minikube
+ uses: medyagh/setup-minikube@master
+ with:
+ minikube-version: latest
+ if: ${{ runner.os == 'Linux' }}
+
+ - run: xvfb-run --auto-servernum --server-args='-screen 0, 1600x900x24' npm run test:integration
+ name: Run Linux integration tests
+ if: ${{ runner.os == 'Linux' }}
+
+ - run: npm run test:integration
+ name: Run macOS integration tests
+ shell: bash
+ if: ${{ runner.os == 'macOS' }}
+
+ - run: npm run test:integration
+ name: Run Windows integration tests
+ if: ${{ runner.os == 'Windows' }}
+
+ unit-test:
+ name: unit tests on ${{ matrix.os }}
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ os: [ubuntu-20.04]
node-version: [16.x]
steps:
- name: Checkout Release from lens
@@ -57,24 +123,3 @@ jobs:
- run: npm run test:unit
name: Run tests
- if: ${{ matrix.type == 'unit' }}
-
- - name: Install integration test dependencies
- id: minikube
- uses: medyagh/setup-minikube@master
- with:
- minikube-version: latest
- if: ${{ runner.os == 'Linux' && matrix.type == 'smoke' }}
-
- - run: xvfb-run --auto-servernum --server-args='-screen 0, 1600x900x24' npm run test:integration
- name: Run Linux integration tests
- if: ${{ runner.os == 'Linux' && matrix.type == 'smoke' }}
-
- - run: npm run test:integration
- name: Run macOS integration tests
- shell: bash
- if: ${{ runner.os == 'macOS' && matrix.type == 'smoke' }}
-
- - run: npm run test:integration
- name: Run Windows integration tests
- if: ${{ runner.os == 'Windows' && matrix.type == 'smoke' }}
diff --git a/README.md b/README.md
index 3949cb23c8..e0a7a8d32d 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,11 @@
# Lens Desktop Core ("OpenLens")
[](https://github.com/lensapp/lens/actions/workflows/test.yml)
-[](https://k8slens.dev/slack.html)
+ [Explore our Forums](https://forums.k8slens.dev)
## The Repository
-This repository is where Team Lens develops the core of the [Lens Desktop](https://k8slens.dev) product together with the community.
+This repository is where Team Lens develops the core of the [Lens Desktop](https://k8slens.dev) product together with the community.
The core is a library, powered by [Electron](https://www.electronjs.org/) and [React](https://reactjs.org/). Unlike generic Electron + React frameworks / boilerplates, it is very opinionated for creating Lens Desktop-like applications and has support for Lens Extensions.
@@ -27,8 +27,8 @@ See [Development](https://docs.k8slens.dev/contributing/development/) page.
## Contributing
-See [Contributing](https://docs.k8slens.dev/contributing/) page.
+See [Contributing](https://docs.k8slens.dev/contributing/contribute-to-lens/) page.
## License
-See [License](LICENSE).
\ No newline at end of file
+See [License](LICENSE).
diff --git a/RELEASE_GUIDE.md b/RELEASE_GUIDE.md
index 01969bbbee..8821fedc38 100644
--- a/RELEASE_GUIDE.md
+++ b/RELEASE_GUIDE.md
@@ -1,7 +1,7 @@
# Release Guide
Releases for this repository are made via running the `create-release-pr` script defined in the `package.json`.
-All releases will be made by creating a PR which bumps the version field in the `package.json` and, if necessary, cherry pick the relavent commits from master.
+All releases will be made by creating a PR which bumps the version field in the `package.json` and, if necessary, cherry pick the relevant commits from master.
## Prerequisites
@@ -11,9 +11,13 @@ All releases will be made by creating a PR which bumps the version field in the
## Steps
-1. If you are making a minor or major release (or prereleases for one) make sure you are on the `master` branch.
+1. If you are making a minor or major release (or prereleases of one) make sure you are on the `master` branch.
1. If you are making a patch release (or a prerelease for one) make sure you are on the `release/v.` branch.
-1. Run `npm run create-release-pr `. If you are making a subsequent prerelease release, provide the `--check-commits` flag.
-1. If you are checking the commits, type `y` to pick a commit, and `n` to skip it. You will want to skip the commits that were part of previous prerelease releases.
+1. Run `npm run create-release-pr`.
+1. Pick the PRs that you want to include in this release using the keys listed.
1. Once the PR is created, approved, and then merged the `Release Open Lens` workflow will create a tag and release for you.
1. If you are making a major or minor release, create a `release/v.` branch and push it to `origin` so that future patch releases can be made from it.
+1. If you released a major or minor version, create a new patch milestone and move all bug issues to that milestone and all enhancement issues to the next minor milestone.
+1. If you released a patch version, create a new patch milestone for the next patch version and move all the issues and PRs (open or closed) that weren't included in the current release to that milestone.
+1. Close the milestone related to the release that was just made (if not a prerelease release).
+1. If you released a patch version and it contains PRs that targeted `release/v.` make a new PR targeting master and include all the relevant PRs as cherry-picks. This PR should have the `skip-changelog` label and have a milestone of the next minor.
diff --git a/docs/README.md b/docs/README.md
index 67369f86fc..b22509eb16 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -7,15 +7,15 @@ To install your first extension you should goto the [extension page](lens://app/
This documentation describes:
-* How to build, run, test, and publish an extension.
-* How to take full advantage of the Lens Extension API.
-* Where to find [guides](extensions/guides/README.md) and [code samples](https://github.com/lensapp/lens-extension-samples) to help get you started.
+- How to build, run, test, and publish an extension.
+- How to take full advantage of the Lens Extension API.
+- Where to find [guides](extensions/guides/README.md) and [code samples](https://github.com/lensapp/lens-extension-samples) to help get you started.
## What Extensions Can Do
Here are some examples of what you can achieve with the Extension API:
-* Add custom components & views in the UI - Extending the Lens Workbench
+- Add custom components & views in the UI - Extending the Lens Workbench
For an overview of the Lens Extension API, refer to the [Common Capabilities](extensions/capabilities/common-capabilities.md) page. [Extension Guides Overview](extensions/guides/README.md) also includes a list of code samples and guides that illustrate various ways of using the Lens Extension API.
@@ -23,11 +23,11 @@ For an overview of the Lens Extension API, refer to the [Common Capabilities](ex
Here is what each section of the Lens Extension API docs can help you with:
-* **Getting Started** teaches fundamental concepts for building extensions with the Hello World sample.
-* **Extension Capabilities** dissects Lens's Extension API into smaller categories and points you to more detailed topics.
-* **Extension Guides** includes guides and code samples that explain specific usages of Lens Extension API.
-* **Testing and Publishing** includes in-depth guides on various extension development topics, such as testing and publishing extensions.
-* **API Reference** contains exhaustive references for the Lens Extension API, Contribution Points, and many other topics.
+- **Getting Started** teaches fundamental concepts for building extensions with the Hello World sample.
+- **Extension Capabilities** dissects Lens's Extension API into smaller categories and points you to more detailed topics.
+- **Extension Guides** includes guides and code samples that explain specific usages of Lens Extension API.
+- **Testing and Publishing** includes in-depth guides on various extension development topics, such as testing and publishing extensions.
+- **API Reference** contains exhaustive references for the Lens Extension API, Contribution Points, and many other topics.
## What's New
@@ -45,7 +45,7 @@ See the [Lens v4 to v5 extension migration notes](extensions/extension-migration
## Looking for Help
-If you have questions for extension development, try asking on the [Lens Dev Slack](http://k8slens.slack.com/). It's a public chatroom for Lens developers, where Lens team members chime in from time to time.
+If you have questions for extension development, try asking on the [Lens Forums](http://forums.k8slens.dev/). It's a public chatroom for Lens developers, where Lens team members chime in from time to time.
To provide feedback on the documentation or issues with the Lens Extension API, create new issues at [lensapp/lens](https://github.com/lensapp/lens/issues). Please use the labels `area/documentation` and/or `area/extension`.
diff --git a/lerna.json b/lerna.json
index 56ffb47c9c..60a4bb236b 100644
--- a/lerna.json
+++ b/lerna.json
@@ -1,7 +1,7 @@
{
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
"useWorkspaces": true,
- "version": "6.4.0-beta.13",
+ "version": "6.5.0-alpha.0",
"npmClient": "npm",
"npmClientArgs": [
"--network-timeout=100000"
diff --git a/mkdocs.yml b/mkdocs.yml
index b869a63ee9..e0f1568b87 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -10,33 +10,33 @@ edit_uri: ""
nav:
- Overview: README.md
- Getting Started:
- - Overview: extensions/get-started/overview.md
- - Your First Extension: extensions/get-started/your-first-extension.md
- - Extension Anatomy: extensions/get-started/anatomy.md
- - Wrapping Up: extensions/get-started/wrapping-up.md
+ - Overview: extensions/get-started/overview.md
+ - Your First Extension: extensions/get-started/your-first-extension.md
+ - Extension Anatomy: extensions/get-started/anatomy.md
+ - Wrapping Up: extensions/get-started/wrapping-up.md
- Extension Capabilities:
- - Common Capabilities: extensions/capabilities/common-capabilities.md
- - Styling: extensions/capabilities/styling.md
+ - Common Capabilities: extensions/capabilities/common-capabilities.md
+ - Styling: extensions/capabilities/styling.md
- Extension Guides:
- - Overview: extensions/guides/README.md
- - Generator: extensions/guides/generator.md
- - Main Extension: extensions/guides/main-extension.md
- - Renderer Extension: extensions/guides/renderer-extension.md
- - Catalog: extensions/guides/catalog.md
- - Resource Stack: extensions/guides/resource-stack.md
- - Extending KubernetesCluster: extensions/guides/extending-kubernetes-cluster.md
- - Stores: extensions/guides/stores.md
- - Working with MobX: extensions/guides/working-with-mobx.md
- - Protocol Handlers: extensions/guides/protocol-handlers.md
- - IPC: extensions/guides/ipc.md
+ - Overview: extensions/guides/README.md
+ - Generator: extensions/guides/generator.md
+ - Main Extension: extensions/guides/main-extension.md
+ - Renderer Extension: extensions/guides/renderer-extension.md
+ - Catalog: extensions/guides/catalog.md
+ - Resource Stack: extensions/guides/resource-stack.md
+ - Extending KubernetesCluster: extensions/guides/extending-kubernetes-cluster.md
+ - Stores: extensions/guides/stores.md
+ - Working with MobX: extensions/guides/working-with-mobx.md
+ - Protocol Handlers: extensions/guides/protocol-handlers.md
+ - IPC: extensions/guides/ipc.md
- Testing and Publishing:
- - Testing Extensions: extensions/testing-and-publishing/testing.md
- - Publishing Extensions: extensions/testing-and-publishing/publishing.md
+ - Testing Extensions: extensions/testing-and-publishing/testing.md
+ - Publishing Extensions: extensions/testing-and-publishing/publishing.md
- API Reference: extensions/api/README.md
theme:
- name: 'material'
+ name: "material"
highlightjs: true
- language: 'en'
+ language: "en"
custom_dir: docs/custom_theme
favicon: img/favicon.ico
logo: img/lens-logo-icon.svg
@@ -79,9 +79,9 @@ extra:
- icon: fontawesome/brands/twitter
link: https://twitter.com/k8slens
name: Lens on Twitter
- - icon: fontawesome/brands/slack
- link: http://k8slens.slack.com/
- name: Lens on Slack
+ - icon: fontawesome/brands/discourse
+ link: https://forums.k8slens.dev/
+ name: Lens Forums
- icon: fontawesome/solid/link
link: https://k8slens.dev/
name: Lens Website
diff --git a/package-lock.json b/package-lock.json
index 24cae086b2..655fe9d8e5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,7 +12,7 @@
"adr": "^1.4.3",
"cross-env": "^7.0.3",
"lerna": "^6.5.1",
- "rimraf": "^4.1.2"
+ "rimraf": "^4.3.1"
}
},
"node_modules/@adobe/css-tools": {
@@ -114,13 +114,50 @@
"semver": "bin/semver.js"
}
},
- "node_modules/@babel/generator": {
- "version": "7.20.14",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.14.tgz",
- "integrity": "sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==",
+ "node_modules/@babel/eslint-parser": {
+ "version": "7.19.1",
+ "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.19.1.tgz",
+ "integrity": "sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==",
+ "peer": true,
"dependencies": {
- "@babel/types": "^7.20.7",
+ "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1",
+ "eslint-visitor-keys": "^2.1.0",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": "^10.13.0 || ^12.13.0 || >=14.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=7.11.0",
+ "eslint": "^7.5.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@babel/eslint-parser/node_modules/eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@babel/eslint-parser/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/generator": {
+ "version": "7.21.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz",
+ "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==",
+ "dependencies": {
+ "@babel/types": "^7.21.0",
"@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
},
"engines": {
@@ -140,6 +177,31 @@
"node": ">=6.0.0"
}
},
+ "node_modules/@babel/helper-annotate-as-pure": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
+ "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz",
+ "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-explode-assignable-expression": "^7.18.6",
+ "@babel/types": "^7.18.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/helper-compilation-targets": {
"version": "7.20.7",
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz",
@@ -166,6 +228,70 @@
"semver": "bin/semver.js"
}
},
+ "node_modules/@babel/helper-create-class-features-plugin": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz",
+ "integrity": "sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-function-name": "^7.21.0",
+ "@babel/helper-member-expression-to-functions": "^7.21.0",
+ "@babel/helper-optimise-call-expression": "^7.18.6",
+ "@babel/helper-replace-supers": "^7.20.7",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
+ "@babel/helper-split-export-declaration": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-create-regexp-features-plugin": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.0.tgz",
+ "integrity": "sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "regexpu-core": "^5.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-define-polyfill-provider": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz",
+ "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.17.7",
+ "@babel/helper-plugin-utils": "^7.16.7",
+ "debug": "^4.1.1",
+ "lodash.debounce": "^4.0.8",
+ "resolve": "^1.14.2",
+ "semver": "^6.1.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0-0"
+ }
+ },
+ "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
"node_modules/@babel/helper-environment-visitor": {
"version": "7.18.9",
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
@@ -174,13 +300,25 @@
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-function-name": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
- "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
+ "node_modules/@babel/helper-explode-assignable-expression": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz",
+ "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==",
+ "peer": true,
"dependencies": {
- "@babel/template": "^7.18.10",
- "@babel/types": "^7.19.0"
+ "@babel/types": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-function-name": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz",
+ "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==",
+ "dependencies": {
+ "@babel/template": "^7.20.7",
+ "@babel/types": "^7.21.0"
},
"engines": {
"node": ">=6.9.0"
@@ -197,6 +335,18 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/helper-member-expression-to-functions": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz",
+ "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==",
+ "peer": true,
+ "dependencies": {
+ "@babel/types": "^7.21.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/helper-module-imports": {
"version": "7.18.6",
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
@@ -209,9 +359,9 @@
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.20.11",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz",
- "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==",
+ "version": "7.21.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz",
+ "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==",
"dependencies": {
"@babel/helper-environment-visitor": "^7.18.9",
"@babel/helper-module-imports": "^7.18.6",
@@ -219,8 +369,20 @@
"@babel/helper-split-export-declaration": "^7.18.6",
"@babel/helper-validator-identifier": "^7.19.1",
"@babel/template": "^7.20.7",
- "@babel/traverse": "^7.20.10",
- "@babel/types": "^7.20.7"
+ "@babel/traverse": "^7.21.2",
+ "@babel/types": "^7.21.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-optimise-call-expression": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz",
+ "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/types": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
@@ -234,6 +396,41 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/helper-remap-async-to-generator": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz",
+ "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-wrap-function": "^7.18.9",
+ "@babel/types": "^7.18.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-replace-supers": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz",
+ "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-member-expression-to-functions": "^7.20.7",
+ "@babel/helper-optimise-call-expression": "^7.18.6",
+ "@babel/template": "^7.20.7",
+ "@babel/traverse": "^7.20.7",
+ "@babel/types": "^7.20.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/helper-simple-access": {
"version": "7.20.2",
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
@@ -245,6 +442,18 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz",
+ "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==",
+ "peer": true,
+ "dependencies": {
+ "@babel/types": "^7.20.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/helper-split-export-declaration": {
"version": "7.18.6",
"resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
@@ -273,9 +482,24 @@
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
- "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==",
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz",
+ "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-wrap-function": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz",
+ "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-function-name": "^7.19.0",
+ "@babel/template": "^7.18.10",
+ "@babel/traverse": "^7.20.5",
+ "@babel/types": "^7.20.5"
+ },
"engines": {
"node": ">=6.9.0"
}
@@ -371,9 +595,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.20.15",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.15.tgz",
- "integrity": "sha512-DI4a1oZuf8wC+oAJA9RW6ga3Zbe8RZFt7kD9i4qAspz3I/yHet1VvC3DiSy/fsUvv5pvJuNPh0LPOdCcqinDPg==",
+ "version": "7.21.2",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz",
+ "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==",
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -381,6 +605,306 @@
"node": ">=6.0.0"
}
},
+ "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz",
+ "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz",
+ "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
+ "@babel/plugin-proposal-optional-chaining": "^7.20.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.13.0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-async-generator-functions": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz",
+ "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/helper-remap-async-to-generator": "^7.18.9",
+ "@babel/plugin-syntax-async-generators": "^7.8.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-class-properties": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",
+ "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-class-static-block": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz",
+ "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.21.0",
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.12.0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-decorators": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.21.0.tgz",
+ "integrity": "sha512-MfgX49uRrFUTL/HvWtmx3zmpyzMMr4MTj3d527MLlr/4RTT9G/ytFFP7qet2uM2Ve03b+BkpWUpK+lRXnQ+v9w==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.21.0",
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/helper-replace-supers": "^7.20.7",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/plugin-syntax-decorators": "^7.21.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-dynamic-import": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz",
+ "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-export-namespace-from": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz",
+ "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.9",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-json-strings": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz",
+ "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/plugin-syntax-json-strings": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-logical-assignment-operators": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz",
+ "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz",
+ "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-numeric-separator": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz",
+ "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-object-rest-spread": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz",
+ "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==",
+ "peer": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.20.5",
+ "@babel/helper-compilation-targets": "^7.20.7",
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-transform-parameters": "^7.20.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-optional-catch-binding": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz",
+ "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-optional-chaining": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz",
+ "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-private-methods": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz",
+ "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-private-property-in-object": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz",
+ "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-create-class-features-plugin": "^7.21.0",
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-proposal-unicode-property-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz",
+ "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/@babel/plugin-syntax-async-generators": {
"version": "7.8.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
@@ -414,6 +938,90 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-syntax-class-static-block": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
+ "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-decorators": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.21.0.tgz",
+ "integrity": "sha512-tIoPpGBR8UuM4++ccWN3gifhVvQu7ZizuR1fklhRJrd5ewgbkUS+0KVFeWWxELtn18NTLoW32XV7zyOgIAiz+w==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.20.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-dynamic-import": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
+ "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-export-namespace-from": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
+ "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.8.3"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-flow": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz",
+ "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-import-assertions": {
+ "version": "7.20.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz",
+ "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.19.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/@babel/plugin-syntax-import-meta": {
"version": "7.10.4",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
@@ -516,6 +1124,21 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-syntax-private-property-in-object": {
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
+ "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/@babel/plugin-syntax-top-level-await": {
"version": "7.14.5",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
@@ -544,6 +1167,797 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-transform-arrow-functions": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz",
+ "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.20.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-async-to-generator": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz",
+ "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/helper-remap-async-to-generator": "^7.18.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz",
+ "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-block-scoping": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz",
+ "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.20.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-classes": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz",
+ "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-compilation-targets": "^7.20.7",
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-function-name": "^7.21.0",
+ "@babel/helper-optimise-call-expression": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/helper-replace-supers": "^7.20.7",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-computed-properties": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz",
+ "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/template": "^7.20.7"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-destructuring": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz",
+ "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.20.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-dotall-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz",
+ "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-duplicate-keys": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz",
+ "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz",
+ "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-flow-strip-types": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.21.0.tgz",
+ "integrity": "sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/plugin-syntax-flow": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-for-of": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz",
+ "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.20.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-function-name": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz",
+ "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-compilation-targets": "^7.18.9",
+ "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-plugin-utils": "^7.18.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-literals": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz",
+ "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-member-expression-literals": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz",
+ "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-amd": {
+ "version": "7.20.11",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz",
+ "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.20.11",
+ "@babel/helper-plugin-utils": "^7.20.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-commonjs": {
+ "version": "7.21.2",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz",
+ "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.21.2",
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/helper-simple-access": "^7.20.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-systemjs": {
+ "version": "7.20.11",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz",
+ "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-hoist-variables": "^7.18.6",
+ "@babel/helper-module-transforms": "^7.20.11",
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/helper-validator-identifier": "^7.19.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-modules-umd": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz",
+ "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-module-transforms": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz",
+ "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.20.5",
+ "@babel/helper-plugin-utils": "^7.20.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-new-target": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz",
+ "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-object-super": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz",
+ "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/helper-replace-supers": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-parameters": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz",
+ "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.20.2"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-property-literals": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz",
+ "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-display-name": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz",
+ "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz",
+ "integrity": "sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-module-imports": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/plugin-syntax-jsx": "^7.18.6",
+ "@babel/types": "^7.21.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-jsx-development": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz",
+ "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/plugin-transform-react-jsx": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-react-pure-annotations": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz",
+ "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-regenerator": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz",
+ "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "regenerator-transform": "^0.15.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-reserved-words": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz",
+ "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-runtime": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.0.tgz",
+ "integrity": "sha512-ReY6pxwSzEU0b3r2/T/VhqMKg/AkceBT19X0UptA3/tYi5Pe2eXgEUH+NNMC5nok6c6XQz5tyVTUpuezRfSMSg==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-module-imports": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "babel-plugin-polyfill-corejs2": "^0.3.3",
+ "babel-plugin-polyfill-corejs3": "^0.6.0",
+ "babel-plugin-polyfill-regenerator": "^0.4.1",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-runtime/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/plugin-transform-shorthand-properties": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz",
+ "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-spread": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz",
+ "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-sticky-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz",
+ "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-template-literals": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz",
+ "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-typeof-symbol": {
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz",
+ "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-typescript": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz",
+ "integrity": "sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-class-features-plugin": "^7.21.0",
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/plugin-syntax-typescript": "^7.20.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-escapes": {
+ "version": "7.18.10",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz",
+ "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.9"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-transform-unicode-regex": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz",
+ "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.18.6",
+ "@babel/helper-plugin-utils": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/preset-env": {
+ "version": "7.20.2",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz",
+ "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==",
+ "peer": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.20.1",
+ "@babel/helper-compilation-targets": "^7.20.0",
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/helper-validator-option": "^7.18.6",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9",
+ "@babel/plugin-proposal-async-generator-functions": "^7.20.1",
+ "@babel/plugin-proposal-class-properties": "^7.18.6",
+ "@babel/plugin-proposal-class-static-block": "^7.18.6",
+ "@babel/plugin-proposal-dynamic-import": "^7.18.6",
+ "@babel/plugin-proposal-export-namespace-from": "^7.18.9",
+ "@babel/plugin-proposal-json-strings": "^7.18.6",
+ "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
+ "@babel/plugin-proposal-numeric-separator": "^7.18.6",
+ "@babel/plugin-proposal-object-rest-spread": "^7.20.2",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.18.6",
+ "@babel/plugin-proposal-optional-chaining": "^7.18.9",
+ "@babel/plugin-proposal-private-methods": "^7.18.6",
+ "@babel/plugin-proposal-private-property-in-object": "^7.18.6",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.18.6",
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-class-properties": "^7.12.13",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+ "@babel/plugin-syntax-import-assertions": "^7.20.0",
+ "@babel/plugin-syntax-json-strings": "^7.8.3",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
+ "@babel/plugin-syntax-optional-chaining": "^7.8.3",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
+ "@babel/plugin-syntax-top-level-await": "^7.14.5",
+ "@babel/plugin-transform-arrow-functions": "^7.18.6",
+ "@babel/plugin-transform-async-to-generator": "^7.18.6",
+ "@babel/plugin-transform-block-scoped-functions": "^7.18.6",
+ "@babel/plugin-transform-block-scoping": "^7.20.2",
+ "@babel/plugin-transform-classes": "^7.20.2",
+ "@babel/plugin-transform-computed-properties": "^7.18.9",
+ "@babel/plugin-transform-destructuring": "^7.20.2",
+ "@babel/plugin-transform-dotall-regex": "^7.18.6",
+ "@babel/plugin-transform-duplicate-keys": "^7.18.9",
+ "@babel/plugin-transform-exponentiation-operator": "^7.18.6",
+ "@babel/plugin-transform-for-of": "^7.18.8",
+ "@babel/plugin-transform-function-name": "^7.18.9",
+ "@babel/plugin-transform-literals": "^7.18.9",
+ "@babel/plugin-transform-member-expression-literals": "^7.18.6",
+ "@babel/plugin-transform-modules-amd": "^7.19.6",
+ "@babel/plugin-transform-modules-commonjs": "^7.19.6",
+ "@babel/plugin-transform-modules-systemjs": "^7.19.6",
+ "@babel/plugin-transform-modules-umd": "^7.18.6",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1",
+ "@babel/plugin-transform-new-target": "^7.18.6",
+ "@babel/plugin-transform-object-super": "^7.18.6",
+ "@babel/plugin-transform-parameters": "^7.20.1",
+ "@babel/plugin-transform-property-literals": "^7.18.6",
+ "@babel/plugin-transform-regenerator": "^7.18.6",
+ "@babel/plugin-transform-reserved-words": "^7.18.6",
+ "@babel/plugin-transform-shorthand-properties": "^7.18.6",
+ "@babel/plugin-transform-spread": "^7.19.0",
+ "@babel/plugin-transform-sticky-regex": "^7.18.6",
+ "@babel/plugin-transform-template-literals": "^7.18.9",
+ "@babel/plugin-transform-typeof-symbol": "^7.18.9",
+ "@babel/plugin-transform-unicode-escapes": "^7.18.10",
+ "@babel/plugin-transform-unicode-regex": "^7.18.6",
+ "@babel/preset-modules": "^0.1.5",
+ "@babel/types": "^7.20.2",
+ "babel-plugin-polyfill-corejs2": "^0.3.3",
+ "babel-plugin-polyfill-corejs3": "^0.6.0",
+ "babel-plugin-polyfill-regenerator": "^0.4.1",
+ "core-js-compat": "^3.25.1",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/preset-env/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/preset-modules": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz",
+ "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+ "@babel/plugin-transform-dotall-regex": "^7.4.4",
+ "@babel/types": "^7.4.4",
+ "esutils": "^2.0.2"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/preset-react": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz",
+ "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.18.6",
+ "@babel/helper-validator-option": "^7.18.6",
+ "@babel/plugin-transform-react-display-name": "^7.18.6",
+ "@babel/plugin-transform-react-jsx": "^7.18.6",
+ "@babel/plugin-transform-react-jsx-development": "^7.18.6",
+ "@babel/plugin-transform-react-pure-annotations": "^7.18.6"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/preset-typescript": {
+ "version": "7.21.0",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.0.tgz",
+ "integrity": "sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.20.2",
+ "@babel/helper-validator-option": "^7.21.0",
+ "@babel/plugin-transform-typescript": "^7.21.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/regjsgen": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
+ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
+ "peer": true
+ },
"node_modules/@babel/runtime": {
"version": "7.20.13",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz",
@@ -582,18 +1996,18 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.20.13",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.13.tgz",
- "integrity": "sha512-kMJXfF0T6DIS9E8cgdLCSAL+cuCK+YEZHWiLK0SXpTo8YRj5lpJu3CDNKiIBCne4m9hhTIqUg6SYTAI39tAiVQ==",
+ "version": "7.21.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.2.tgz",
+ "integrity": "sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==",
"dependencies": {
"@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.20.7",
+ "@babel/generator": "^7.21.1",
"@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.19.0",
+ "@babel/helper-function-name": "^7.21.0",
"@babel/helper-hoist-variables": "^7.18.6",
"@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.20.13",
- "@babel/types": "^7.20.7",
+ "@babel/parser": "^7.21.2",
+ "@babel/types": "^7.21.2",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
@@ -602,9 +2016,9 @@
}
},
"node_modules/@babel/types": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz",
- "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==",
+ "version": "7.21.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz",
+ "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==",
"dependencies": {
"@babel/helper-string-parser": "^7.19.4",
"@babel/helper-validator-identifier": "^7.19.1",
@@ -688,7 +2102,6 @@
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/@electron/get/-/get-1.14.1.tgz",
"integrity": "sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==",
- "dev": true,
"dependencies": {
"debug": "^4.1.1",
"env-paths": "^2.2.0",
@@ -710,7 +2123,6 @@
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
"integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
- "dev": true,
"engines": {
"node": ">=6"
}
@@ -719,7 +2131,6 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
"integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
- "dev": true,
"dependencies": {
"defer-to-connect": "^1.0.1"
},
@@ -731,7 +2142,6 @@
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
"integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
- "dev": true,
"dependencies": {
"clone-response": "^1.0.2",
"get-stream": "^5.1.0",
@@ -749,7 +2159,6 @@
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
"integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "dev": true,
"dependencies": {
"pump": "^3.0.0"
},
@@ -764,7 +2173,6 @@
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
"integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==",
- "dev": true,
"dependencies": {
"mimic-response": "^1.0.0"
},
@@ -775,14 +2183,12 @@
"node_modules/@electron/get/node_modules/defer-to-connect": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
- "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==",
- "dev": true
+ "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ=="
},
"node_modules/@electron/get/node_modules/fs-extra": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
- "dev": true,
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0",
@@ -796,7 +2202,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
"integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
"dependencies": {
"pump": "^3.0.0"
},
@@ -808,7 +2213,6 @@
"version": "9.6.0",
"resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
"integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
- "dev": true,
"dependencies": {
"@sindresorhus/is": "^0.14.0",
"@szmarczak/http-timer": "^1.1.2",
@@ -830,7 +2234,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
"integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -838,14 +2241,12 @@
"node_modules/@electron/get/node_modules/json-buffer": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==",
- "dev": true
+ "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ=="
},
"node_modules/@electron/get/node_modules/jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
- "dev": true,
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
@@ -854,7 +2255,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
"integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
- "dev": true,
"dependencies": {
"json-buffer": "3.0.0"
}
@@ -863,7 +2263,6 @@
"version": "4.5.1",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz",
"integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==",
- "dev": true,
"engines": {
"node": ">=8"
}
@@ -872,7 +2271,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
"integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
- "dev": true,
"engines": {
"node": ">=6"
}
@@ -881,7 +2279,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dev": true,
"dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -891,7 +2288,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
"integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==",
- "dev": true,
"dependencies": {
"lowercase-keys": "^1.0.0"
}
@@ -900,7 +2296,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
"integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -909,7 +2304,6 @@
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
"bin": {
"semver": "bin/semver.js"
}
@@ -918,7 +2312,6 @@
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "dev": true,
"engines": {
"node": ">= 4.0.0"
}
@@ -1646,7 +3039,6 @@
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz",
"integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==",
- "dev": true,
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
@@ -1669,7 +3061,6 @@
"version": "13.20.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
"integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
- "dev": true,
"dependencies": {
"type-fest": "^0.20.2"
},
@@ -1684,7 +3075,6 @@
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
"engines": {
"node": ">=10"
},
@@ -1925,7 +3315,6 @@
"version": "0.11.8",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz",
"integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==",
- "dev": true,
"dependencies": {
"@humanwhocodes/object-schema": "^1.2.1",
"debug": "^4.1.1",
@@ -1939,7 +3328,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
"integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
- "dev": true,
"engines": {
"node": ">=12.22"
},
@@ -1951,8 +3339,7 @@
"node_modules/@humanwhocodes/object-schema": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
- "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
- "dev": true
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="
},
"node_modules/@hutson/parse-repository-url": {
"version": "3.0.2",
@@ -2623,49 +4010,49 @@
}
},
"node_modules/@jest/globals": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.4.3.tgz",
- "integrity": "sha512-8BQ/5EzfOLG7AaMcDh7yFCbfRLtsc+09E1RQmRBI4D6QQk4m6NSK/MXo+3bJrBN0yU8A2/VIcqhvsOLFmziioA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.5.0.tgz",
+ "integrity": "sha512-S02y0qMWGihdzNbUiqSAiKSpSozSuHX5UYc7QbnHP+D9Lyw8DgGGCinrN9uSuHPeKgSSzvPom2q1nAtBvUsvPQ==",
"dependencies": {
- "@jest/environment": "^29.4.3",
- "@jest/expect": "^29.4.3",
- "@jest/types": "^29.4.3",
- "jest-mock": "^29.4.3"
+ "@jest/environment": "^29.5.0",
+ "@jest/expect": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "jest-mock": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/globals/node_modules/@jest/environment": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.3.tgz",
- "integrity": "sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz",
+ "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==",
"dependencies": {
- "@jest/fake-timers": "^29.4.3",
- "@jest/types": "^29.4.3",
+ "@jest/fake-timers": "^29.5.0",
+ "@jest/types": "^29.5.0",
"@types/node": "*",
- "jest-mock": "^29.4.3"
+ "jest-mock": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/globals/node_modules/@jest/expect": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.4.3.tgz",
- "integrity": "sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz",
+ "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==",
"dependencies": {
- "expect": "^29.4.3",
- "jest-snapshot": "^29.4.3"
+ "expect": "^29.5.0",
+ "jest-snapshot": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/globals/node_modules/@jest/expect-utils": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz",
- "integrity": "sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz",
+ "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==",
"dependencies": {
"jest-get-type": "^29.4.3"
},
@@ -2674,16 +4061,16 @@
}
},
"node_modules/@jest/globals/node_modules/@jest/fake-timers": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.3.tgz",
- "integrity": "sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz",
+ "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==",
"dependencies": {
- "@jest/types": "^29.4.3",
+ "@jest/types": "^29.5.0",
"@sinonjs/fake-timers": "^10.0.2",
"@types/node": "*",
- "jest-message-util": "^29.4.3",
- "jest-mock": "^29.4.3",
- "jest-util": "^29.4.3"
+ "jest-message-util": "^29.5.0",
+ "jest-mock": "^29.5.0",
+ "jest-util": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -2725,29 +4112,29 @@
}
},
"node_modules/@jest/globals/node_modules/expect": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz",
- "integrity": "sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz",
+ "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==",
"dependencies": {
- "@jest/expect-utils": "^29.4.3",
+ "@jest/expect-utils": "^29.5.0",
"jest-get-type": "^29.4.3",
- "jest-matcher-utils": "^29.4.3",
- "jest-message-util": "^29.4.3",
- "jest-util": "^29.4.3"
+ "jest-matcher-utils": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/globals/node_modules/jest-diff": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz",
- "integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz",
+ "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==",
"dependencies": {
"chalk": "^4.0.0",
"diff-sequences": "^29.4.3",
"jest-get-type": "^29.4.3",
- "pretty-format": "^29.4.3"
+ "pretty-format": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -2762,31 +4149,31 @@
}
},
"node_modules/@jest/globals/node_modules/jest-matcher-utils": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz",
- "integrity": "sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz",
+ "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==",
"dependencies": {
"chalk": "^4.0.0",
- "jest-diff": "^29.4.3",
+ "jest-diff": "^29.5.0",
"jest-get-type": "^29.4.3",
- "pretty-format": "^29.4.3"
+ "pretty-format": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/globals/node_modules/jest-message-util": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz",
- "integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz",
+ "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==",
"dependencies": {
"@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.4.3",
+ "@jest/types": "^29.5.0",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"micromatch": "^4.0.4",
- "pretty-format": "^29.4.3",
+ "pretty-format": "^29.5.0",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
@@ -2795,22 +4182,22 @@
}
},
"node_modules/@jest/globals/node_modules/jest-mock": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.3.tgz",
- "integrity": "sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz",
+ "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==",
"dependencies": {
- "@jest/types": "^29.4.3",
+ "@jest/types": "^29.5.0",
"@types/node": "*",
- "jest-util": "^29.4.3"
+ "jest-util": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/globals/node_modules/jest-snapshot": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.4.3.tgz",
- "integrity": "sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz",
+ "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==",
"dependencies": {
"@babel/core": "^7.11.6",
"@babel/generator": "^7.7.2",
@@ -2818,23 +4205,22 @@
"@babel/plugin-syntax-typescript": "^7.7.2",
"@babel/traverse": "^7.7.2",
"@babel/types": "^7.3.3",
- "@jest/expect-utils": "^29.4.3",
- "@jest/transform": "^29.4.3",
- "@jest/types": "^29.4.3",
+ "@jest/expect-utils": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
"@types/babel__traverse": "^7.0.6",
"@types/prettier": "^2.1.5",
"babel-preset-current-node-syntax": "^1.0.0",
"chalk": "^4.0.0",
- "expect": "^29.4.3",
+ "expect": "^29.5.0",
"graceful-fs": "^4.2.9",
- "jest-diff": "^29.4.3",
+ "jest-diff": "^29.5.0",
"jest-get-type": "^29.4.3",
- "jest-haste-map": "^29.4.3",
- "jest-matcher-utils": "^29.4.3",
- "jest-message-util": "^29.4.3",
- "jest-util": "^29.4.3",
+ "jest-matcher-utils": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0",
"natural-compare": "^1.4.0",
- "pretty-format": "^29.4.3",
+ "pretty-format": "^29.5.0",
"semver": "^7.3.5"
},
"engines": {
@@ -2842,9 +4228,9 @@
}
},
"node_modules/@jest/globals/node_modules/pretty-format": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz",
- "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
"dependencies": {
"@jest/schemas": "^29.4.3",
"ansi-styles": "^5.0.0",
@@ -3177,21 +4563,21 @@
}
},
"node_modules/@jest/transform": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.4.3.tgz",
- "integrity": "sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.5.0.tgz",
+ "integrity": "sha512-8vbeZWqLJOvHaDfeMuoHITGKSz5qWc9u04lnWrQE3VyuSw604PzQM824ZeX9XSjUCeDiE3GuxZe5UKa8J61NQw==",
"dependencies": {
"@babel/core": "^7.11.6",
- "@jest/types": "^29.4.3",
+ "@jest/types": "^29.5.0",
"@jridgewell/trace-mapping": "^0.3.15",
"babel-plugin-istanbul": "^6.1.1",
"chalk": "^4.0.0",
"convert-source-map": "^2.0.0",
"fast-json-stable-stringify": "^2.1.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.4.3",
+ "jest-haste-map": "^29.5.0",
"jest-regex-util": "^29.4.3",
- "jest-util": "^29.4.3",
+ "jest-util": "^29.5.0",
"micromatch": "^4.0.4",
"pirates": "^4.0.4",
"slash": "^3.0.0",
@@ -3202,9 +4588,9 @@
}
},
"node_modules/@jest/types": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz",
- "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.5.0.tgz",
+ "integrity": "sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog==",
"dependencies": {
"@jest/schemas": "^29.4.3",
"@types/istanbul-lib-coverage": "^2.0.0",
@@ -3282,7 +4668,11 @@
}
},
"node_modules/@k8slens/application": {
- "resolved": "packages/technical-features/application",
+ "resolved": "packages/technical-features/application/agnostic",
+ "link": true
+ },
+ "node_modules/@k8slens/application-for-electron-main": {
+ "resolved": "packages/technical-features/application/electron-main",
"link": true
},
"node_modules/@k8slens/bump-version-for-cron": {
@@ -3297,10 +4687,18 @@
"resolved": "packages/ensure-binaries",
"link": true
},
+ "node_modules/@k8slens/eslint-config": {
+ "resolved": "packages/infrastructure/eslint-config",
+ "link": true
+ },
"node_modules/@k8slens/extensions": {
"resolved": "packages/extension-api",
"link": true
},
+ "node_modules/@k8slens/feature-core": {
+ "resolved": "packages/technical-features/feature-core",
+ "link": true
+ },
"node_modules/@k8slens/generate-tray-icons": {
"resolved": "packages/generate-tray-icons",
"link": true
@@ -3317,14 +4715,26 @@
"resolved": "packages/release-tool",
"link": true
},
+ "node_modules/@k8slens/run-many": {
+ "resolved": "packages/utility-features/run-many",
+ "link": true
+ },
"node_modules/@k8slens/semver": {
"resolved": "packages/semver",
"link": true
},
+ "node_modules/@k8slens/test-utils": {
+ "resolved": "packages/utility-features/test-utils",
+ "link": true
+ },
"node_modules/@k8slens/typescript": {
"resolved": "packages/infrastructure/typescript",
"link": true
},
+ "node_modules/@k8slens/utilities": {
+ "resolved": "packages/utility-features/utilities",
+ "link": true
+ },
"node_modules/@k8slens/webpack": {
"resolved": "packages/infrastructure/webpack",
"link": true
@@ -3717,6 +5127,15 @@
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}
},
+ "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": {
+ "version": "5.1.1-v1",
+ "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz",
+ "integrity": "sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==",
+ "peer": true,
+ "dependencies": {
+ "eslint-scope": "5.1.1"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -4651,55 +6070,64 @@
}
},
"node_modules/@ogre-tools/fp": {
- "version": "12.0.1",
- "resolved": "https://registry.npmjs.org/@ogre-tools/fp/-/fp-12.0.1.tgz",
- "integrity": "sha512-BzMhkI4wPnuI+hXJDbtHUXQn/uBjJLx3W0oDaIFV+lLpkneUU0oW9D5uZFHNOouzCgf67/tnmUC6Ohevbr7/VA==",
+ "version": "15.1.2",
+ "resolved": "https://registry.npmjs.org/@ogre-tools/fp/-/fp-15.1.2.tgz",
+ "integrity": "sha512-QMJslFSZe3Fi+O4FEeqtv1Dmvzr6efg0UksDD4n7SgtKx569ai+c24aeCNATtS9npHnFT9ctyoul8dcML8DXdg==",
"peerDependencies": {
"lodash": "^4.17.21"
}
},
"node_modules/@ogre-tools/injectable": {
- "version": "12.0.1",
- "resolved": "https://registry.npmjs.org/@ogre-tools/injectable/-/injectable-12.0.1.tgz",
- "integrity": "sha512-uOx8STN2wSc9hknDSTGqViyR89Vwg7rGacwrVNchgyo48/QJsmZZz6cd1Aw3nT4vr7ekjTc2lh0Rz6zGIv47hg==",
+ "version": "15.1.2",
+ "resolved": "https://registry.npmjs.org/@ogre-tools/injectable/-/injectable-15.1.2.tgz",
+ "integrity": "sha512-LM+gGkMQ7vN/J/NRE+iqKMzHr+WNAmC5iqcFHC04GKpVPm26+yG9iCl1O7hb8QZRO/PvBhydJyR0z2fgw0aUkw==",
"peerDependencies": {
- "@ogre-tools/fp": "^12.0.0",
+ "@ogre-tools/fp": "*",
"lodash": "^4.17.21"
}
},
"node_modules/@ogre-tools/injectable-extension-for-auto-registration": {
- "version": "12.0.1",
- "resolved": "https://registry.npmjs.org/@ogre-tools/injectable-extension-for-auto-registration/-/injectable-extension-for-auto-registration-12.0.1.tgz",
- "integrity": "sha512-itKcxEJ/J8SKGD/Wwj0UYOA+/nqwnrwanhikY6qhlibj8guujX77Iip7vMBzJFc2nIrRaQRcpNV2eXe+tjQUdg==",
+ "version": "15.1.2",
+ "resolved": "https://registry.npmjs.org/@ogre-tools/injectable-extension-for-auto-registration/-/injectable-extension-for-auto-registration-15.1.2.tgz",
+ "integrity": "sha512-ICchK20Jp0uKv8XTPG71Xbyu8MtmPb34XtoqlRsfsK90MwKn/KHQeSKtMlVArczU83GKer1EeEWvTQPcMCW97A==",
"peerDependencies": {
- "@ogre-tools/fp": "^12.0.0",
- "@ogre-tools/injectable": "^12.0.0",
+ "@ogre-tools/fp": "*",
+ "@ogre-tools/injectable": "*",
"lodash": "^4.17.21"
}
},
"node_modules/@ogre-tools/injectable-extension-for-mobx": {
- "version": "12.0.1",
- "resolved": "https://registry.npmjs.org/@ogre-tools/injectable-extension-for-mobx/-/injectable-extension-for-mobx-12.0.1.tgz",
- "integrity": "sha512-M1penOpZfO3/rJMb6WN4IL86p9Lx9tOMCipiNkAyitNLGWfeDPG279JlCs9E3Uw8R9nkFPiw8Je2SLnwnM9o+A==",
+ "version": "15.1.2",
+ "resolved": "https://registry.npmjs.org/@ogre-tools/injectable-extension-for-mobx/-/injectable-extension-for-mobx-15.1.2.tgz",
+ "integrity": "sha512-78U7d++yC2815ogq37xWcXrZeB+6zKe5GSMYtV55Hl2NB83Jqll/23wNOREIO2L+SXO6V9J2mUmODCufeOrtWQ==",
"peerDependencies": {
- "@ogre-tools/fp": "^12.0.0",
- "@ogre-tools/injectable": "^12.0.0",
+ "@ogre-tools/fp": "*",
+ "@ogre-tools/injectable": "*",
"lodash": "^4.17.21",
"mobx": "^6.3.0"
}
},
"node_modules/@ogre-tools/injectable-react": {
- "version": "12.0.1",
- "resolved": "https://registry.npmjs.org/@ogre-tools/injectable-react/-/injectable-react-12.0.1.tgz",
- "integrity": "sha512-LAOh/EHKqk/pQcBRZUAz0VcJwgBeIPxHwlV/Apw0aEBBoMuYLsLZh47rES8sMYMV6N5x7oVfkjMscujY0DCgaQ==",
+ "version": "15.1.2",
+ "resolved": "https://registry.npmjs.org/@ogre-tools/injectable-react/-/injectable-react-15.1.2.tgz",
+ "integrity": "sha512-84UC4IuH+G5NuXWr/MXLysJwx07/GDhQMJloGKtDJk+5nCnnwofHZFU8J6mdtS6LZjd1t7dAvTS/EcsCMasOPw==",
"peerDependencies": {
- "@ogre-tools/fp": "^12.0.0",
- "@ogre-tools/injectable": "^12.0.0",
+ "@ogre-tools/fp": "*",
+ "@ogre-tools/injectable": "*",
"lodash": "^4.17.21",
"mobx": "^6.3.0",
"mobx-react": "^7.2.0",
- "react": "^17.0.0",
- "react-dom": "^17.0.0"
+ "react": "^17 || ^18",
+ "react-dom": "^17 || ^18"
+ }
+ },
+ "node_modules/@ogre-tools/test-utils": {
+ "version": "15.1.2",
+ "resolved": "https://registry.npmjs.org/@ogre-tools/test-utils/-/test-utils-15.1.2.tgz",
+ "integrity": "sha512-WGuJoHgFJCt0u5ok9BnQKSkF0J1MYPrRlr0naNUUywZgNSrPy64TqlY8AEEIe2cquUZMwe2wsv9esg+KDRUnrA==",
+ "dev": true,
+ "peerDependencies": {
+ "lodash": "^4.17.21"
}
},
"node_modules/@parcel/watcher": {
@@ -4808,6 +6236,12 @@
}
}
},
+ "node_modules/@rushstack/eslint-patch": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz",
+ "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==",
+ "peer": true
+ },
"node_modules/@sentry/browser": {
"version": "6.19.2",
"resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-6.19.2.tgz",
@@ -5118,9 +6552,9 @@
}
},
"node_modules/@swc/core": {
- "version": "1.3.35",
- "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.35.tgz",
- "integrity": "sha512-KmiBin0XSVzJhzX19zTiCqmLslZ40Cl7zqskJcTDeIrRhfgKdiAsxzYUanJgMJIRjYtl9Kcg1V/Ip2o2wL8v3w==",
+ "version": "1.3.38",
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.38.tgz",
+ "integrity": "sha512-AiEVehRFws//AiiLx9DPDp1WDXt+yAoGD1kMYewhoF6QLdTz8AtYu6i8j/yAxk26L8xnegy0CDwcNnub9qenyQ==",
"hasInstallScript": true,
"engines": {
"node": ">=10"
@@ -5130,22 +6564,22 @@
"url": "https://opencollective.com/swc"
},
"optionalDependencies": {
- "@swc/core-darwin-arm64": "1.3.35",
- "@swc/core-darwin-x64": "1.3.35",
- "@swc/core-linux-arm-gnueabihf": "1.3.35",
- "@swc/core-linux-arm64-gnu": "1.3.35",
- "@swc/core-linux-arm64-musl": "1.3.35",
- "@swc/core-linux-x64-gnu": "1.3.35",
- "@swc/core-linux-x64-musl": "1.3.35",
- "@swc/core-win32-arm64-msvc": "1.3.35",
- "@swc/core-win32-ia32-msvc": "1.3.35",
- "@swc/core-win32-x64-msvc": "1.3.35"
+ "@swc/core-darwin-arm64": "1.3.38",
+ "@swc/core-darwin-x64": "1.3.38",
+ "@swc/core-linux-arm-gnueabihf": "1.3.38",
+ "@swc/core-linux-arm64-gnu": "1.3.38",
+ "@swc/core-linux-arm64-musl": "1.3.38",
+ "@swc/core-linux-x64-gnu": "1.3.38",
+ "@swc/core-linux-x64-musl": "1.3.38",
+ "@swc/core-win32-arm64-msvc": "1.3.38",
+ "@swc/core-win32-ia32-msvc": "1.3.38",
+ "@swc/core-win32-x64-msvc": "1.3.38"
}
},
"node_modules/@swc/core-darwin-arm64": {
- "version": "1.3.35",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.35.tgz",
- "integrity": "sha512-zQUFkHx4gZpu0uo2IspvPnKsz8bsdXd5bC33xwjtoAI1cpLerDyqo4v2zIahEp+FdKZjyVsLHtfJiQiA1Qka3A==",
+ "version": "1.3.38",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.38.tgz",
+ "integrity": "sha512-4ZTJJ/cR0EsXW5UxFCifZoGfzQ07a8s4ayt1nLvLQ5QoB1GTAf9zsACpvWG8e7cmCR0L76R5xt8uJuyr+noIXA==",
"cpu": [
"arm64"
],
@@ -5158,9 +6592,9 @@
}
},
"node_modules/@swc/core-darwin-x64": {
- "version": "1.3.35",
- "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.35.tgz",
- "integrity": "sha512-oOSkSGWtALovaw22lNevKD434OQTPf8X+dVPvPMrJXJpJ34dWDlFWpLntoc+arvKLNZ7LQmTuk8rR1hkrAY7cw==",
+ "version": "1.3.38",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.38.tgz",
+ "integrity": "sha512-Kim727rNo4Dl8kk0CR8aJQe4zFFtsT1TZGlNrNMUgN1WC3CRX7dLZ6ZJi/VVcTG1cbHp5Fp3mUzwHsMxEh87Mg==",
"cpu": [
"x64"
],
@@ -5173,9 +6607,9 @@
}
},
"node_modules/@swc/core-linux-arm-gnueabihf": {
- "version": "1.3.35",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.35.tgz",
- "integrity": "sha512-Yie8k00O6O8BCATS/xeKStquV4OYSskUGRDXBQVDw1FrE23PHaSeHCgg4q6iNZjJzXCOJbaTCKnYoIDn9DMf7A==",
+ "version": "1.3.38",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.38.tgz",
+ "integrity": "sha512-yaRdnPNU2enlJDRcIMvYVSyodY+Amhf5QuXdUbAj6rkDD6wUs/s9C6yPYrFDmoTltrG+nBv72mUZj+R46wVfSw==",
"cpu": [
"arm"
],
@@ -5188,9 +6622,9 @@
}
},
"node_modules/@swc/core-linux-arm64-gnu": {
- "version": "1.3.35",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.35.tgz",
- "integrity": "sha512-Zlv3WHa/4x2p51HSvjUWXHfSe1Gl2prqImUZJc8NZOlj75BFzVuR0auhQ+LbwvIQ3gaA1LODX9lyS9wXL3yjxA==",
+ "version": "1.3.38",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.38.tgz",
+ "integrity": "sha512-iNY1HqKo/wBSu3QOGBUlZaLdBP/EHcwNjBAqIzpb8J64q2jEN02RizqVW0mDxyXktJ3lxr3g7VW9uqklMeXbjQ==",
"cpu": [
"arm64"
],
@@ -5203,9 +6637,9 @@
}
},
"node_modules/@swc/core-linux-arm64-musl": {
- "version": "1.3.35",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.35.tgz",
- "integrity": "sha512-u6tCYsrSyZ8U+4jLMA/O82veBfLy2aUpn51WxQaeH7wqZGy9TGSJXoO8vWxARQ6b72vjsnKDJHP4MD8hFwcctg==",
+ "version": "1.3.38",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.38.tgz",
+ "integrity": "sha512-LJCFgLZoPRkPCPmux+Q5ctgXRp6AsWhvWuY61bh5bIPBDlaG9pZk94DeHyvtiwT0syhTtXb2LieBOx6NqN3zeA==",
"cpu": [
"arm64"
],
@@ -5218,9 +6652,9 @@
}
},
"node_modules/@swc/core-linux-x64-gnu": {
- "version": "1.3.35",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.35.tgz",
- "integrity": "sha512-Dtxf2IbeH7XlNhP1Qt2/MvUPkpEbn7hhGfpSRs4ot8D3Vf5QEX4S/QtC1OsFWuciiYgHAT1Ybjt4xZic9DSkmA==",
+ "version": "1.3.38",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.38.tgz",
+ "integrity": "sha512-hRQGRIWHmv2PvKQM/mMV45mVXckM2+xLB8TYLLgUG66mmtyGTUJPyxjnJkbI86WNGqo18k+lAuMG2mn6QmzYwQ==",
"cpu": [
"x64"
],
@@ -5233,9 +6667,9 @@
}
},
"node_modules/@swc/core-linux-x64-musl": {
- "version": "1.3.35",
- "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.35.tgz",
- "integrity": "sha512-4XavNJ60GprjpTiESCu5daJUnmErixPAqDitJSMu4TV32LNIE8G00S9pDLXinDTW1rgcGtQdq1NLkNRmwwovtg==",
+ "version": "1.3.38",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.38.tgz",
+ "integrity": "sha512-PTYSqtsIfPHLKDDNbueI5e0sc130vyHRiFOeeC6qqzA2FAiVvIxuvXHLr0soPvKAR1WyhtYmFB9QarcctemL2w==",
"cpu": [
"x64"
],
@@ -5248,9 +6682,9 @@
}
},
"node_modules/@swc/core-win32-arm64-msvc": {
- "version": "1.3.35",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.35.tgz",
- "integrity": "sha512-dNGfKCUSX2M4qVyaS80Lyos0FkXyHRCvrdQ2Y4Hrg3FVokiuw3yY6fLohpUfQ5ws3n2A39dh7jGDeh34+l0sGA==",
+ "version": "1.3.38",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.38.tgz",
+ "integrity": "sha512-9lHfs5TPNs+QdkyZFhZledSmzBEbqml/J1rqPSb9Fy8zB6QlspixE6OLZ3nTlUOdoGWkcTTdrOn77Sd7YGf1AA==",
"cpu": [
"arm64"
],
@@ -5263,9 +6697,9 @@
}
},
"node_modules/@swc/core-win32-ia32-msvc": {
- "version": "1.3.35",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.35.tgz",
- "integrity": "sha512-ChuPSrDR+JBf7S7dEKPicnG8A3bM0uWPsW2vG+V2wH4iNfNxKVemESHosmYVeEZXqMpomNMvLyeHep1rjRsc0Q==",
+ "version": "1.3.38",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.38.tgz",
+ "integrity": "sha512-SbL6pfA2lqvDKnwTHwOfKWvfHAdcbAwJS4dBkFidr7BiPTgI5Uk8wAPcRb8mBECpmIa9yFo+N0cAFRvMnf+cNw==",
"cpu": [
"ia32"
],
@@ -5278,9 +6712,9 @@
}
},
"node_modules/@swc/core-win32-x64-msvc": {
- "version": "1.3.35",
- "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.35.tgz",
- "integrity": "sha512-/RvphT4WfuGfIK84Ha0dovdPrKB1bW/mc+dtdmhv2E3EGkNc5FoueNwYmXWRimxnU7X0X7IkcRhyKB4G5DeAmg==",
+ "version": "1.3.38",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.38.tgz",
+ "integrity": "sha512-UFveLrL6eGvViOD8OVqUQa6QoQwdqwRvLtL5elF304OT8eCPZa8BhuXnWk25X8UcOyns8gFcb8Fhp3oaLi/Rlw==",
"cpu": [
"x64"
],
@@ -5854,6 +7288,16 @@
"@types/node": "*"
}
},
+ "node_modules/@types/inquirer": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-9.0.3.tgz",
+ "integrity": "sha512-CzNkWqQftcmk2jaCWdBTf9Sm7xSw4rkI1zpU/Udw3HX5//adEZUIm9STtoRP1qgWj0CWQtJ9UTvqmO2NNjhMJw==",
+ "dev": true,
+ "dependencies": {
+ "@types/through": "*",
+ "rxjs": "^7.2.0"
+ }
+ },
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
@@ -5955,15 +7399,6 @@
"resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="
},
- "node_modules/@types/jsonfile": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.1.tgz",
- "integrity": "sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/keyv": {
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz",
@@ -6065,8 +7500,7 @@
"node_modules/@types/parse-json": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
- "dev": true
+ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA=="
},
"node_modules/@types/parse5": {
"version": "6.0.3",
@@ -6380,6 +7814,15 @@
"@types/jest": "*"
}
},
+ "node_modules/@types/through": {
+ "version": "0.0.30",
+ "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz",
+ "integrity": "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/tough-cookie": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz",
@@ -6476,7 +7919,6 @@
"version": "5.52.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.52.0.tgz",
"integrity": "sha512-lHazYdvYVsBokwCdKOppvYJKaJ4S41CgKBcPvyd0xjZNbvQdhn/pnJlGtQksQ/NhInzdaeaSarlBjDXHuclEbg==",
- "dev": true,
"dependencies": {
"@typescript-eslint/scope-manager": "5.52.0",
"@typescript-eslint/type-utils": "5.52.0",
@@ -6506,11 +7948,129 @@
}
}
},
+ "node_modules/@typescript-eslint/experimental-utils": {
+ "version": "5.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.54.0.tgz",
+ "integrity": "sha512-rRYECOTh5V3iWsrOzXi7h1jp3Bi9OkJHrb3wECi3DVqMGTilo9wAYmCbT+6cGdrzUY3MWcAa2mESM6FMik6tVw==",
+ "peer": true,
+ "dependencies": {
+ "@typescript-eslint/utils": "5.54.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/scope-manager": {
+ "version": "5.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.54.0.tgz",
+ "integrity": "sha512-VTPYNZ7vaWtYna9M4oD42zENOBrb+ZYyCNdFs949GcN8Miwn37b8b7eMj+EZaq7VK9fx0Jd+JhmkhjFhvnovhg==",
+ "peer": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.54.0",
+ "@typescript-eslint/visitor-keys": "5.54.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/types": {
+ "version": "5.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.54.0.tgz",
+ "integrity": "sha512-nExy+fDCBEgqblasfeE3aQ3NuafBUxZxgxXcYfzYRZFHdVvk5q60KhCSkG0noHgHRo/xQ/BOzURLZAafFpTkmQ==",
+ "peer": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": {
+ "version": "5.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.54.0.tgz",
+ "integrity": "sha512-X2rJG97Wj/VRo5YxJ8Qx26Zqf0RRKsVHd4sav8NElhbZzhpBI8jU54i6hfo9eheumj4oO4dcRN1B/zIVEqR/MQ==",
+ "peer": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.54.0",
+ "@typescript-eslint/visitor-keys": "5.54.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/utils": {
+ "version": "5.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.54.0.tgz",
+ "integrity": "sha512-cuwm8D/Z/7AuyAeJ+T0r4WZmlnlxQ8wt7C7fLpFlKMR+dY6QO79Cq1WpJhvZbMA4ZeZGHiRWnht7ZJ8qkdAunw==",
+ "peer": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.9",
+ "@types/semver": "^7.3.12",
+ "@typescript-eslint/scope-manager": "5.54.0",
+ "@typescript-eslint/types": "5.54.0",
+ "@typescript-eslint/typescript-estree": "5.54.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^3.0.0",
+ "semver": "^7.3.7"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.54.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.54.0.tgz",
+ "integrity": "sha512-xu4wT7aRCakGINTLGeyGqDn+78BwFlggwBjnHa1ar/KaGagnmwLYmlrXIrgAaQ3AE1Vd6nLfKASm7LrFHNbKGA==",
+ "peer": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.54.0",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
"node_modules/@typescript-eslint/parser": {
"version": "5.52.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.52.0.tgz",
"integrity": "sha512-e2KiLQOZRo4Y0D/b+3y08i3jsekoSkOYStROYmPUnGMEoA0h+k2qOH5H6tcjIc68WDvGwH+PaOrP1XRzLJ6QlA==",
- "dev": true,
"dependencies": {
"@typescript-eslint/scope-manager": "5.52.0",
"@typescript-eslint/types": "5.52.0",
@@ -6537,7 +8097,6 @@
"version": "5.52.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.52.0.tgz",
"integrity": "sha512-AR7sxxfBKiNV0FWBSARxM8DmNxrwgnYMPwmpkC1Pl1n+eT8/I2NAUPuwDy/FmDcC6F8pBfmOcaxcxRHspgOBMw==",
- "dev": true,
"dependencies": {
"@typescript-eslint/types": "5.52.0",
"@typescript-eslint/visitor-keys": "5.52.0"
@@ -6554,7 +8113,6 @@
"version": "5.52.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.52.0.tgz",
"integrity": "sha512-tEKuUHfDOv852QGlpPtB3lHOoig5pyFQN/cUiZtpw99D93nEBjexRLre5sQZlkMoHry/lZr8qDAt2oAHLKA6Jw==",
- "dev": true,
"dependencies": {
"@typescript-eslint/typescript-estree": "5.52.0",
"@typescript-eslint/utils": "5.52.0",
@@ -6581,7 +8139,6 @@
"version": "5.52.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.52.0.tgz",
"integrity": "sha512-oV7XU4CHYfBhk78fS7tkum+/Dpgsfi91IIDy7fjCyq2k6KB63M6gMC0YIvy+iABzmXThCRI6xpCEyVObBdWSDQ==",
- "dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
@@ -6594,7 +8151,6 @@
"version": "5.52.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.52.0.tgz",
"integrity": "sha512-WeWnjanyEwt6+fVrSR0MYgEpUAuROxuAH516WPjUblIrClzYJj0kBbjdnbQXLpgAN8qbEuGywiQsXUVDiAoEuQ==",
- "dev": true,
"dependencies": {
"@typescript-eslint/types": "5.52.0",
"@typescript-eslint/visitor-keys": "5.52.0",
@@ -6621,7 +8177,6 @@
"version": "5.52.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.52.0.tgz",
"integrity": "sha512-As3lChhrbwWQLNk2HC8Ree96hldKIqk98EYvypd3It8Q1f8d5zWyIoaZEp2va5667M4ZyE7X8UUR+azXrFl+NA==",
- "dev": true,
"dependencies": {
"@types/json-schema": "^7.0.9",
"@types/semver": "^7.3.12",
@@ -6647,7 +8202,6 @@
"version": "5.52.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.52.0.tgz",
"integrity": "sha512-qMwpw6SU5VHCPr99y274xhbm+PRViK/NATY6qzt+Et7+mThGuFSl/ompj2/hrBlRP/kq+BFdgagnOSgw9TB0eA==",
- "dev": true,
"dependencies": {
"@typescript-eslint/types": "5.52.0",
"eslint-visitor-keys": "^3.3.0"
@@ -6979,7 +8533,6 @@
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true,
"peerDependencies": {
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
@@ -7438,7 +8991,6 @@
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
"integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
@@ -7465,7 +9017,6 @@
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
"integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
@@ -7483,7 +9034,6 @@
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
"integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
@@ -7501,7 +9051,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.1.tgz",
"integrity": "sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
@@ -7563,6 +9112,12 @@
"node": ">=0.8"
}
},
+ "node_modules/ast-types-flow": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
+ "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==",
+ "peer": true
+ },
"node_modules/astral-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
@@ -7701,6 +9256,15 @@
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
"integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
},
+ "node_modules/axe-core": {
+ "version": "4.6.3",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz",
+ "integrity": "sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/axios": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/axios/-/axios-1.3.3.tgz",
@@ -7726,6 +9290,15 @@
"node": ">= 6"
}
},
+ "node_modules/axobject-query": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz",
+ "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==",
+ "peer": true,
+ "dependencies": {
+ "deep-equal": "^2.0.5"
+ }
+ },
"node_modules/b4a": {
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.1.tgz",
@@ -7894,7 +9467,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
"integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
- "dev": true,
"dependencies": {
"@babel/runtime": "^7.12.5",
"cosmiconfig": "^7.0.0",
@@ -7905,6 +9477,60 @@
"npm": ">=6"
}
},
+ "node_modules/babel-plugin-polyfill-corejs2": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz",
+ "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==",
+ "peer": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.17.7",
+ "@babel/helper-define-polyfill-provider": "^0.3.3",
+ "semver": "^6.1.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-corejs3": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz",
+ "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.3.3",
+ "core-js-compat": "^3.25.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/babel-plugin-polyfill-regenerator": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz",
+ "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==",
+ "peer": true,
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.3.3"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/babel-plugin-transform-react-remove-prop-types": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz",
+ "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==",
+ "peer": true
+ },
"node_modules/babel-preset-current-node-syntax": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz",
@@ -7942,6 +9568,30 @@
"@babel/core": "^7.0.0"
}
},
+ "node_modules/babel-preset-react-app": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz",
+ "integrity": "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==",
+ "peer": true,
+ "dependencies": {
+ "@babel/core": "^7.16.0",
+ "@babel/plugin-proposal-class-properties": "^7.16.0",
+ "@babel/plugin-proposal-decorators": "^7.16.4",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.16.0",
+ "@babel/plugin-proposal-numeric-separator": "^7.16.0",
+ "@babel/plugin-proposal-optional-chaining": "^7.16.0",
+ "@babel/plugin-proposal-private-methods": "^7.16.0",
+ "@babel/plugin-transform-flow-strip-types": "^7.16.0",
+ "@babel/plugin-transform-react-display-name": "^7.16.0",
+ "@babel/plugin-transform-runtime": "^7.16.4",
+ "@babel/preset-env": "^7.16.4",
+ "@babel/preset-react": "^7.16.0",
+ "@babel/preset-typescript": "^7.16.0",
+ "@babel/runtime": "^7.16.3",
+ "babel-plugin-macros": "^3.1.0",
+ "babel-plugin-transform-react-remove-prop-types": "^0.4.24"
+ }
+ },
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -8279,8 +9929,8 @@
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz",
"integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==",
- "dev": true,
- "optional": true
+ "optional": true,
+ "peer": true
},
"node_modules/brace-expansion": {
"version": "1.1.11",
@@ -8405,7 +10055,6 @@
"version": "0.2.13",
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
"integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
- "dev": true,
"engines": {
"node": "*"
}
@@ -8837,8 +10486,7 @@
"node_modules/chardet": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
- "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
- "dev": true
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
},
"node_modules/chart.js": {
"version": "2.9.4",
@@ -9095,7 +10743,6 @@
"version": "2.6.1",
"resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz",
"integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==",
- "dev": true,
"engines": {
"node": ">=6"
},
@@ -9144,7 +10791,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
"integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
- "dev": true,
"engines": {
"node": ">=0.8"
}
@@ -9443,7 +11089,6 @@
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "dev": true,
"engines": [
"node >= 0.8"
],
@@ -9457,14 +11102,12 @@
"node_modules/concat-stream/node_modules/isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
},
"node_modules/concat-stream/node_modules/readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -9479,7 +11122,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
"dependencies": {
"safe-buffer": "~5.1.0"
}
@@ -9571,12 +11213,18 @@
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz",
"integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==",
- "dev": true,
+ "devOptional": true,
"dependencies": {
"ini": "^1.3.4",
"proto-list": "~1.2.1"
}
},
+ "node_modules/confusing-browser-globals": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz",
+ "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==",
+ "peer": true
+ },
"node_modules/connect-history-api-fallback": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz",
@@ -9959,6 +11607,19 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/core-js-compat": {
+ "version": "3.29.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.29.0.tgz",
+ "integrity": "sha512-ScMn3uZNAFhK2DGoEfErguoiAHhV2Ju+oJo/jK08p7B3f3UhocUrCCkTvnZaiS+edl5nlIoiBXKcwMc6elv4KQ==",
+ "peer": true,
+ "dependencies": {
+ "browserslist": "^4.21.5"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
"node_modules/core-js-pure": {
"version": "3.28.0",
"resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.28.0.tgz",
@@ -9979,7 +11640,6 @@
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
"integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==",
- "dev": true,
"dependencies": {
"@types/parse-json": "^4.0.0",
"import-fresh": "^3.2.1",
@@ -10206,6 +11866,12 @@
"resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz",
"integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w=="
},
+ "node_modules/damerau-levenshtein": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz",
+ "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==",
+ "peer": true
+ },
"node_modules/dargs": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz",
@@ -10518,7 +12184,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
"integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
- "dev": true,
"dependencies": {
"clone": "^1.0.2"
},
@@ -10670,7 +12335,7 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz",
"integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==",
- "dev": true
+ "devOptional": true
},
"node_modules/detective": {
"version": "5.2.1",
@@ -10875,7 +12540,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
"dependencies": {
"esutils": "^2.0.2"
},
@@ -11036,8 +12700,7 @@
"node_modules/duplexer3": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz",
- "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==",
- "dev": true
+ "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA=="
},
"node_modules/duplexify": {
"version": "3.7.1",
@@ -11077,6 +12740,11 @@
"safe-buffer": "~5.1.0"
}
},
+ "node_modules/eastasianwidth": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
+ },
"node_modules/ecc-jsbn": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
@@ -11111,7 +12779,6 @@
"version": "19.1.9",
"resolved": "https://registry.npmjs.org/electron/-/electron-19.1.9.tgz",
"integrity": "sha512-XT5LkTzIHB+ZtD3dTmNnKjVBWrDWReCKt9G1uAFLz6uJMEVcIUiYO+fph5pLXETiBw/QZBx8egduMEfIccLx+g==",
- "dev": true,
"hasInstallScript": true,
"dependencies": {
"@electron/get": "^1.14.1",
@@ -11391,8 +13058,7 @@
"node_modules/electron/node_modules/@types/node": {
"version": "16.18.12",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.12.tgz",
- "integrity": "sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==",
- "dev": true
+ "integrity": "sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw=="
},
"node_modules/emittery": {
"version": "0.10.2",
@@ -11428,7 +13094,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
- "dev": true,
+ "devOptional": true,
"engines": {
"node": ">= 0.8"
}
@@ -11550,7 +13216,6 @@
"version": "1.21.1",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz",
"integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==",
- "dev": true,
"dependencies": {
"available-typed-arrays": "^1.0.5",
"call-bind": "^1.0.2",
@@ -11621,7 +13286,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
"integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
- "dev": true,
"dependencies": {
"get-intrinsic": "^1.1.3",
"has": "^1.0.3",
@@ -11635,7 +13299,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
"integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
- "dev": true,
"dependencies": {
"has": "^1.0.3"
}
@@ -11644,7 +13307,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
"integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dev": true,
"dependencies": {
"is-callable": "^1.1.4",
"is-date-object": "^1.0.1",
@@ -11661,8 +13323,8 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
"integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
- "dev": true,
- "optional": true
+ "optional": true,
+ "peer": true
},
"node_modules/esbuild": {
"version": "0.17.9",
@@ -12128,7 +13790,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
"engines": {
"node": ">=10"
},
@@ -12229,7 +13890,6 @@
"version": "8.34.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.34.0.tgz",
"integrity": "sha512-1Z8iFsucw+7kSqXNZVslXS8Ioa4u2KM7GPwuKtkTFAqZ/cHMcEaR+1+Br0wLlot49cNxIiZk5wp8EAbPcYZxTg==",
- "dev": true,
"dependencies": {
"@eslint/eslintrc": "^1.4.1",
"@humanwhocodes/config-array": "^0.11.8",
@@ -12281,11 +13941,117 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/eslint-config-airbnb-base": {
+ "version": "15.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz",
+ "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==",
+ "peer": true,
+ "dependencies": {
+ "confusing-browser-globals": "^1.0.10",
+ "object.assign": "^4.1.2",
+ "object.entries": "^1.1.5",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": "^10.12.0 || >=12.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^7.32.0 || ^8.2.0",
+ "eslint-plugin-import": "^2.25.2"
+ }
+ },
+ "node_modules/eslint-config-airbnb-base/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-config-airbnb-typescript": {
+ "version": "17.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-airbnb-typescript/-/eslint-config-airbnb-typescript-17.0.0.tgz",
+ "integrity": "sha512-elNiuzD0kPAPTXjFWg+lE24nMdHMtuxgYoD30OyMD6yrW1AhFZPAg27VX7d3tzOErw+dgJTNWfRSDqEcXb4V0g==",
+ "peer": true,
+ "dependencies": {
+ "eslint-config-airbnb-base": "^15.0.0"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "^5.13.0",
+ "@typescript-eslint/parser": "^5.0.0",
+ "eslint": "^7.32.0 || ^8.2.0",
+ "eslint-plugin-import": "^2.25.3"
+ }
+ },
+ "node_modules/eslint-config-prettier": {
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.7.0.tgz",
+ "integrity": "sha512-HHVXLSlVUhMSmyW4ZzEuvjpwqamgmlfkutD53cYXLikh4pt/modINRcCIApJ84czDxM4GZInwUrromsDdTImTA==",
+ "peer": true,
+ "bin": {
+ "eslint-config-prettier": "bin/cli.js"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.0.0"
+ }
+ },
+ "node_modules/eslint-config-react-app": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-config-react-app/-/eslint-config-react-app-7.0.1.tgz",
+ "integrity": "sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/core": "^7.16.0",
+ "@babel/eslint-parser": "^7.16.3",
+ "@rushstack/eslint-patch": "^1.1.0",
+ "@typescript-eslint/eslint-plugin": "^5.5.0",
+ "@typescript-eslint/parser": "^5.5.0",
+ "babel-preset-react-app": "^10.0.1",
+ "confusing-browser-globals": "^1.0.11",
+ "eslint-plugin-flowtype": "^8.0.3",
+ "eslint-plugin-import": "^2.25.3",
+ "eslint-plugin-jest": "^25.3.0",
+ "eslint-plugin-jsx-a11y": "^6.5.1",
+ "eslint-plugin-react": "^7.27.1",
+ "eslint-plugin-react-hooks": "^4.3.0",
+ "eslint-plugin-testing-library": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^8.0.0"
+ }
+ },
+ "node_modules/eslint-config-react-app/node_modules/eslint-plugin-jest": {
+ "version": "25.7.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz",
+ "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==",
+ "peer": true,
+ "dependencies": {
+ "@typescript-eslint/experimental-utils": "^5.0.0"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0",
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@typescript-eslint/eslint-plugin": {
+ "optional": true
+ },
+ "jest": {
+ "optional": true
+ }
+ }
+ },
"node_modules/eslint-import-resolver-node": {
"version": "0.3.7",
"resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz",
"integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==",
- "dev": true,
"dependencies": {
"debug": "^3.2.7",
"is-core-module": "^2.11.0",
@@ -12296,7 +14062,6 @@
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
"dependencies": {
"ms": "^2.1.1"
}
@@ -12361,7 +14126,6 @@
"version": "2.7.4",
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz",
"integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==",
- "dev": true,
"dependencies": {
"debug": "^3.2.7"
},
@@ -12378,11 +14142,28 @@
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
"dependencies": {
"ms": "^2.1.1"
}
},
+ "node_modules/eslint-plugin-flowtype": {
+ "version": "8.0.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-8.0.3.tgz",
+ "integrity": "sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==",
+ "peer": true,
+ "dependencies": {
+ "lodash": "^4.17.21",
+ "string-natural-compare": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "@babel/plugin-syntax-flow": "^7.14.5",
+ "@babel/plugin-transform-react-jsx": "^7.14.9",
+ "eslint": "^8.1.0"
+ }
+ },
"node_modules/eslint-plugin-header": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz",
@@ -12396,7 +14177,6 @@
"version": "2.27.5",
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz",
"integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==",
- "dev": true,
"dependencies": {
"array-includes": "^3.1.6",
"array.prototype.flat": "^1.3.1",
@@ -12425,7 +14205,6 @@
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
"dependencies": {
"ms": "^2.1.1"
}
@@ -12434,7 +14213,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
"integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dev": true,
"dependencies": {
"esutils": "^2.0.2"
},
@@ -12446,16 +14224,122 @@
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
"bin": {
"semver": "bin/semver.js"
}
},
+ "node_modules/eslint-plugin-jest": {
+ "version": "27.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.2.1.tgz",
+ "integrity": "sha512-l067Uxx7ZT8cO9NJuf+eJHvt6bqJyz2Z29wykyEdz/OtmcELQl2MQGQLX8J94O1cSJWAwUSEvCjwjA7KEK3Hmg==",
+ "peer": true,
+ "dependencies": {
+ "@typescript-eslint/utils": "^5.10.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "^5.0.0",
+ "eslint": "^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@typescript-eslint/eslint-plugin": {
+ "optional": true
+ },
+ "jest": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz",
+ "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==",
+ "peer": true,
+ "dependencies": {
+ "@babel/runtime": "^7.20.7",
+ "aria-query": "^5.1.3",
+ "array-includes": "^3.1.6",
+ "array.prototype.flatmap": "^1.3.1",
+ "ast-types-flow": "^0.0.7",
+ "axe-core": "^4.6.2",
+ "axobject-query": "^3.1.1",
+ "damerau-levenshtein": "^1.0.8",
+ "emoji-regex": "^9.2.2",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^3.3.3",
+ "language-tags": "=1.0.5",
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.6",
+ "object.fromentries": "^2.0.6",
+ "semver": "^6.3.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz",
+ "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==",
+ "peer": true,
+ "dependencies": {
+ "deep-equal": "^2.0.5"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "peer": true
+ },
+ "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-plugin-no-unsanitized": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-no-unsanitized/-/eslint-plugin-no-unsanitized-4.0.2.tgz",
+ "integrity": "sha512-Pry0S9YmHoz8NCEMRQh7N0Yexh2MYCNPIlrV52hTmS7qXnTghWsjXouF08bgsrrZqaW9tt1ZiK3j5NEmPE+EjQ==",
+ "peer": true,
+ "peerDependencies": {
+ "eslint": "^6 || ^7 || ^8"
+ }
+ },
+ "node_modules/eslint-plugin-prettier": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz",
+ "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==",
+ "peer": true,
+ "dependencies": {
+ "prettier-linter-helpers": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ },
+ "peerDependencies": {
+ "eslint": ">=7.28.0",
+ "prettier": ">=2.0.0"
+ },
+ "peerDependenciesMeta": {
+ "eslint-config-prettier": {
+ "optional": true
+ }
+ }
+ },
"node_modules/eslint-plugin-react": {
"version": "7.32.2",
"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.32.2.tgz",
"integrity": "sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==",
- "dev": true,
"dependencies": {
"array-includes": "^3.1.6",
"array.prototype.flatmap": "^1.3.1",
@@ -12484,7 +14368,6 @@
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
"integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
- "dev": true,
"engines": {
"node": ">=10"
},
@@ -12496,7 +14379,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
"integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dev": true,
"dependencies": {
"esutils": "^2.0.2"
},
@@ -12508,7 +14390,6 @@
"version": "2.0.0-next.4",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz",
"integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==",
- "dev": true,
"dependencies": {
"is-core-module": "^2.9.0",
"path-parse": "^1.0.7",
@@ -12525,16 +14406,48 @@
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
"bin": {
"semver": "bin/semver.js"
}
},
+ "node_modules/eslint-plugin-security": {
+ "version": "1.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-security/-/eslint-plugin-security-1.7.1.tgz",
+ "integrity": "sha512-sMStceig8AFglhhT2LqlU5r+/fn9OwsA72O5bBuQVTssPCdQAOQzL+oMn/ZcpeUY6KcNfLJArgcrsSULNjYYdQ==",
+ "peer": true,
+ "dependencies": {
+ "safe-regex": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-simple-import-sort": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-10.0.0.tgz",
+ "integrity": "sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==",
+ "peer": true,
+ "peerDependencies": {
+ "eslint": ">=5.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-testing-library": {
+ "version": "5.10.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.2.tgz",
+ "integrity": "sha512-f1DmDWcz5SDM+IpCkEX0lbFqrrTs8HRsEElzDEqN/EBI0hpRj8Cns5+IVANXswE8/LeybIJqPAOQIFu2j5Y5sw==",
+ "peer": true,
+ "dependencies": {
+ "@typescript-eslint/utils": "^5.43.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0",
+ "npm": ">=6"
+ },
+ "peerDependencies": {
+ "eslint": "^7.5.0 || ^8.0.0"
+ }
+ },
"node_modules/eslint-plugin-unused-imports": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-2.0.0.tgz",
"integrity": "sha512-3APeS/tQlTrFa167ThtP0Zm0vctjr4M44HMpeg1P4bK6wItarumq0Ma82xorMKdFsWpphQBlRPzw/pxiVELX1A==",
- "dev": true,
"dependencies": {
"eslint-rule-composer": "^0.3.0"
},
@@ -12551,11 +14464,22 @@
}
}
},
+ "node_modules/eslint-plugin-xss": {
+ "version": "0.1.12",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-xss/-/eslint-plugin-xss-0.1.12.tgz",
+ "integrity": "sha512-L5oYaD//ZE7fKNtWUfVgYTRW19jrZlvaHe2swyFLxXQ5pwVQLivi5m92rtXd/ww8yqg4Drasqyi0hlBmhf9YQg==",
+ "peer": true,
+ "dependencies": {
+ "requireindex": "~1.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/eslint-rule-composer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz",
"integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==",
- "dev": true,
"engines": {
"node": ">=4.0.0"
}
@@ -12584,7 +14508,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
"integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
- "dev": true,
"dependencies": {
"eslint-visitor-keys": "^2.0.0"
},
@@ -12602,7 +14525,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
"integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
- "dev": true,
"engines": {
"node": ">=10"
}
@@ -12611,7 +14533,6 @@
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz",
"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==",
- "dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
@@ -12620,7 +14541,6 @@
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz",
"integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==",
- "dev": true,
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^5.2.0"
@@ -12633,7 +14553,6 @@
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
"dependencies": {
"is-glob": "^4.0.3"
},
@@ -12645,7 +14564,6 @@
"version": "13.20.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
"integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
- "dev": true,
"dependencies": {
"type-fest": "^0.20.2"
},
@@ -12660,7 +14578,6 @@
"version": "0.20.2",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
"engines": {
"node": ">=10"
},
@@ -12672,7 +14589,6 @@
"version": "9.4.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz",
"integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==",
- "dev": true,
"dependencies": {
"acorn": "^8.8.0",
"acorn-jsx": "^5.3.2",
@@ -12701,7 +14617,6 @@
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.2.tgz",
"integrity": "sha512-JVSoLdTlTDkmjFmab7H/9SL9qGSyjElT3myyKp7krqjVFQCDLmj1QFaCLRFBszBKI0XVZaiiXvuPIX3ZwHe1Ng==",
- "dev": true,
"dependencies": {
"estraverse": "^5.1.0"
},
@@ -13149,7 +15064,6 @@
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
"integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
- "dev": true,
"dependencies": {
"chardet": "^0.7.0",
"iconv-lite": "^0.4.24",
@@ -13163,7 +15077,6 @@
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3"
},
@@ -13175,7 +15088,6 @@
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
"integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==",
- "dev": true,
"dependencies": {
"concat-stream": "^1.6.2",
"debug": "^2.6.9",
@@ -13190,7 +15102,6 @@
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
"dependencies": {
"ms": "2.0.0"
}
@@ -13199,7 +15110,6 @@
"version": "0.5.6",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
"integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
- "dev": true,
"dependencies": {
"minimist": "^1.2.6"
},
@@ -13210,8 +15120,7 @@
"node_modules/extract-zip/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
},
"node_modules/extsprintf": {
"version": "1.3.0",
@@ -13226,6 +15135,12 @@
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
+ "node_modules/fast-diff": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
+ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
+ "peer": true
+ },
"node_modules/fast-fifo": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.1.0.tgz",
@@ -13301,7 +15216,6 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
"integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
- "dev": true,
"dependencies": {
"pend": "~1.2.0"
}
@@ -13361,7 +15275,6 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
"integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
- "dev": true,
"dependencies": {
"flat-cache": "^3.0.4"
},
@@ -13604,7 +15517,6 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
"integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
"dependencies": {
"locate-path": "^6.0.0",
"path-exists": "^4.0.0"
@@ -13644,7 +15556,6 @@
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
"integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
- "dev": true,
"dependencies": {
"flatted": "^3.1.0",
"rimraf": "^3.0.2"
@@ -13657,7 +15568,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
- "dev": true,
"dependencies": {
"glob": "^7.1.3"
},
@@ -13671,8 +15581,7 @@
"node_modules/flatted": {
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
- "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
- "dev": true
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ=="
},
"node_modules/fn.name": {
"version": "1.1.0",
@@ -13733,7 +15642,6 @@
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-7.3.0.tgz",
"integrity": "sha512-IN+XTzusCjR5VgntYFgxbxVx3WraPRnKehBFrf00cMSrtUuW9MsG9dhL6MWpY6MkjC3wVwoujfCDgZZCQwbswA==",
- "dev": true,
"dependencies": {
"@babel/code-frame": "^7.16.7",
"chalk": "^4.1.2",
@@ -13767,7 +15675,6 @@
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
- "dev": true,
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
@@ -13881,8 +15788,7 @@
"node_modules/fs-monkey": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz",
- "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==",
- "dev": true
+ "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q=="
},
"node_modules/fs.realpath": {
"version": "1.0.0",
@@ -13911,7 +15817,6 @@
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
"integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
@@ -14093,7 +15998,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
"integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.1.1"
@@ -14260,8 +16164,8 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz",
"integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==",
- "dev": true,
"optional": true,
+ "peer": true,
"dependencies": {
"boolean": "^3.0.1",
"es6-error": "^4.1.1",
@@ -14278,8 +16182,8 @@
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz",
"integrity": "sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg==",
- "dev": true,
"optional": true,
+ "peer": true,
"dependencies": {
"encodeurl": "^1.0.2",
"lodash": "^4.17.10",
@@ -14302,7 +16206,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
"integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
- "dev": true,
"dependencies": {
"define-properties": "^1.1.3"
},
@@ -14612,7 +16515,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
"integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
- "dev": true,
"engines": {
"node": ">= 0.4"
},
@@ -15190,7 +17092,6 @@
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
"integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
- "dev": true,
"dependencies": {
"parent-module": "^1.0.0",
"resolve-from": "^4.0.0"
@@ -15206,7 +17107,6 @@
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
"integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true,
"engines": {
"node": ">=4"
}
@@ -15649,7 +17549,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
"integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
- "dev": true,
"engines": {
"node": ">= 0.4"
},
@@ -15886,7 +17785,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
"integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2"
},
@@ -17122,19 +19020,19 @@
}
},
"node_modules/jest-haste-map": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.4.3.tgz",
- "integrity": "sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.5.0.tgz",
+ "integrity": "sha512-IspOPnnBro8YfVYSw6yDRKh/TiCdRngjxeacCps1cQ9cgVN6+10JUcuJ1EabrgYLOATsIAigxA0rLR9x/YlrSA==",
"dependencies": {
- "@jest/types": "^29.4.3",
+ "@jest/types": "^29.5.0",
"@types/graceful-fs": "^4.1.3",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"graceful-fs": "^4.2.9",
"jest-regex-util": "^29.4.3",
- "jest-util": "^29.4.3",
- "jest-worker": "^29.4.3",
+ "jest-util": "^29.5.0",
+ "jest-worker": "^29.5.0",
"micromatch": "^4.0.4",
"walker": "^1.0.8"
},
@@ -17146,12 +19044,12 @@
}
},
"node_modules/jest-haste-map/node_modules/jest-worker": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.3.tgz",
- "integrity": "sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz",
+ "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==",
"dependencies": {
"@types/node": "*",
- "jest-util": "^29.4.3",
+ "jest-util": "^29.5.0",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
@@ -17844,30 +19742,30 @@
}
},
"node_modules/jest-runtime": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.4.3.tgz",
- "integrity": "sha512-F5bHvxSH+LvLV24vVB3L8K467dt3y3dio6V3W89dUz9nzvTpqd/HcT9zfYKL2aZPvD63vQFgLvaUX/UpUhrP6Q==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.5.0.tgz",
+ "integrity": "sha512-1Hr6Hh7bAgXQP+pln3homOiEZtCDZFqwmle7Ew2j8OlbkIu6uE3Y/etJQG8MLQs3Zy90xrp2C0BRrtPHG4zryw==",
"dependencies": {
- "@jest/environment": "^29.4.3",
- "@jest/fake-timers": "^29.4.3",
- "@jest/globals": "^29.4.3",
+ "@jest/environment": "^29.5.0",
+ "@jest/fake-timers": "^29.5.0",
+ "@jest/globals": "^29.5.0",
"@jest/source-map": "^29.4.3",
- "@jest/test-result": "^29.4.3",
- "@jest/transform": "^29.4.3",
- "@jest/types": "^29.4.3",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
"@types/node": "*",
"chalk": "^4.0.0",
"cjs-module-lexer": "^1.0.0",
"collect-v8-coverage": "^1.0.0",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.4.3",
- "jest-message-util": "^29.4.3",
- "jest-mock": "^29.4.3",
+ "jest-haste-map": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-mock": "^29.5.0",
"jest-regex-util": "^29.4.3",
- "jest-resolve": "^29.4.3",
- "jest-snapshot": "^29.4.3",
- "jest-util": "^29.4.3",
+ "jest-resolve": "^29.5.0",
+ "jest-snapshot": "^29.5.0",
+ "jest-util": "^29.5.0",
"slash": "^3.0.0",
"strip-bom": "^4.0.0"
},
@@ -17876,15 +19774,15 @@
}
},
"node_modules/jest-runtime/node_modules/@jest/console": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.4.3.tgz",
- "integrity": "sha512-W/o/34+wQuXlgqlPYTansOSiBnuxrTv61dEVkA6HNmpcgHLUjfaUbdqt6oVvOzaawwo9IdW9QOtMgQ1ScSZC4A==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz",
+ "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==",
"dependencies": {
- "@jest/types": "^29.4.3",
+ "@jest/types": "^29.5.0",
"@types/node": "*",
"chalk": "^4.0.0",
- "jest-message-util": "^29.4.3",
- "jest-util": "^29.4.3",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0",
"slash": "^3.0.0"
},
"engines": {
@@ -17892,23 +19790,23 @@
}
},
"node_modules/jest-runtime/node_modules/@jest/environment": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.3.tgz",
- "integrity": "sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz",
+ "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==",
"dependencies": {
- "@jest/fake-timers": "^29.4.3",
- "@jest/types": "^29.4.3",
+ "@jest/fake-timers": "^29.5.0",
+ "@jest/types": "^29.5.0",
"@types/node": "*",
- "jest-mock": "^29.4.3"
+ "jest-mock": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runtime/node_modules/@jest/expect-utils": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz",
- "integrity": "sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz",
+ "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==",
"dependencies": {
"jest-get-type": "^29.4.3"
},
@@ -17917,28 +19815,28 @@
}
},
"node_modules/jest-runtime/node_modules/@jest/fake-timers": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.3.tgz",
- "integrity": "sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz",
+ "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==",
"dependencies": {
- "@jest/types": "^29.4.3",
+ "@jest/types": "^29.5.0",
"@sinonjs/fake-timers": "^10.0.2",
"@types/node": "*",
- "jest-message-util": "^29.4.3",
- "jest-mock": "^29.4.3",
- "jest-util": "^29.4.3"
+ "jest-message-util": "^29.5.0",
+ "jest-mock": "^29.5.0",
+ "jest-util": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runtime/node_modules/@jest/test-result": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.4.3.tgz",
- "integrity": "sha512-Oi4u9NfBolMq9MASPwuWTlC5WvmNRwI4S8YrQg5R5Gi47DYlBe3sh7ILTqi/LGrK1XUE4XY9KZcQJTH1WJCLLA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz",
+ "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==",
"dependencies": {
- "@jest/console": "^29.4.3",
- "@jest/types": "^29.4.3",
+ "@jest/console": "^29.5.0",
+ "@jest/types": "^29.5.0",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
},
@@ -17993,29 +19891,29 @@
}
},
"node_modules/jest-runtime/node_modules/expect": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz",
- "integrity": "sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz",
+ "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==",
"dependencies": {
- "@jest/expect-utils": "^29.4.3",
+ "@jest/expect-utils": "^29.5.0",
"jest-get-type": "^29.4.3",
- "jest-matcher-utils": "^29.4.3",
- "jest-message-util": "^29.4.3",
- "jest-util": "^29.4.3"
+ "jest-matcher-utils": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runtime/node_modules/jest-diff": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz",
- "integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz",
+ "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==",
"dependencies": {
"chalk": "^4.0.0",
"diff-sequences": "^29.4.3",
"jest-get-type": "^29.4.3",
- "pretty-format": "^29.4.3"
+ "pretty-format": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -18030,31 +19928,31 @@
}
},
"node_modules/jest-runtime/node_modules/jest-matcher-utils": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz",
- "integrity": "sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz",
+ "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==",
"dependencies": {
"chalk": "^4.0.0",
- "jest-diff": "^29.4.3",
+ "jest-diff": "^29.5.0",
"jest-get-type": "^29.4.3",
- "pretty-format": "^29.4.3"
+ "pretty-format": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runtime/node_modules/jest-message-util": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz",
- "integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz",
+ "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==",
"dependencies": {
"@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.4.3",
+ "@jest/types": "^29.5.0",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"micromatch": "^4.0.4",
- "pretty-format": "^29.4.3",
+ "pretty-format": "^29.5.0",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
@@ -18063,29 +19961,29 @@
}
},
"node_modules/jest-runtime/node_modules/jest-mock": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.3.tgz",
- "integrity": "sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz",
+ "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==",
"dependencies": {
- "@jest/types": "^29.4.3",
+ "@jest/types": "^29.5.0",
"@types/node": "*",
- "jest-util": "^29.4.3"
+ "jest-util": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runtime/node_modules/jest-resolve": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.4.3.tgz",
- "integrity": "sha512-GPokE1tzguRyT7dkxBim4wSx6E45S3bOQ7ZdKEG+Qj0Oac9+6AwJPCk0TZh5Vu0xzeX4afpb+eDmgbmZFFwpOw==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz",
+ "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==",
"dependencies": {
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.4.3",
+ "jest-haste-map": "^29.5.0",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^29.4.3",
- "jest-validate": "^29.4.3",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
"resolve": "^1.20.0",
"resolve.exports": "^2.0.0",
"slash": "^3.0.0"
@@ -18095,9 +19993,9 @@
}
},
"node_modules/jest-runtime/node_modules/jest-snapshot": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.4.3.tgz",
- "integrity": "sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz",
+ "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==",
"dependencies": {
"@babel/core": "^7.11.6",
"@babel/generator": "^7.7.2",
@@ -18105,23 +20003,22 @@
"@babel/plugin-syntax-typescript": "^7.7.2",
"@babel/traverse": "^7.7.2",
"@babel/types": "^7.3.3",
- "@jest/expect-utils": "^29.4.3",
- "@jest/transform": "^29.4.3",
- "@jest/types": "^29.4.3",
+ "@jest/expect-utils": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
"@types/babel__traverse": "^7.0.6",
"@types/prettier": "^2.1.5",
"babel-preset-current-node-syntax": "^1.0.0",
"chalk": "^4.0.0",
- "expect": "^29.4.3",
+ "expect": "^29.5.0",
"graceful-fs": "^4.2.9",
- "jest-diff": "^29.4.3",
+ "jest-diff": "^29.5.0",
"jest-get-type": "^29.4.3",
- "jest-haste-map": "^29.4.3",
- "jest-matcher-utils": "^29.4.3",
- "jest-message-util": "^29.4.3",
- "jest-util": "^29.4.3",
+ "jest-matcher-utils": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0",
"natural-compare": "^1.4.0",
- "pretty-format": "^29.4.3",
+ "pretty-format": "^29.5.0",
"semver": "^7.3.5"
},
"engines": {
@@ -18129,25 +20026,25 @@
}
},
"node_modules/jest-runtime/node_modules/jest-validate": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.3.tgz",
- "integrity": "sha512-J3u5v7aPQoXPzaar6GndAVhdQcZr/3osWSgTeKg5v574I9ybX/dTyH0AJFb5XgXIB7faVhf+rS7t4p3lL9qFaw==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz",
+ "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==",
"dependencies": {
- "@jest/types": "^29.4.3",
+ "@jest/types": "^29.5.0",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
"jest-get-type": "^29.4.3",
"leven": "^3.1.0",
- "pretty-format": "^29.4.3"
+ "pretty-format": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runtime/node_modules/pretty-format": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz",
- "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
"dependencies": {
"@jest/schemas": "^29.4.3",
"ansi-styles": "^5.0.0",
@@ -18163,9 +20060,9 @@
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
},
"node_modules/jest-runtime/node_modules/resolve.exports": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz",
- "integrity": "sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.1.tgz",
+ "integrity": "sha512-OEJWVeimw8mgQuj3HfkNl4KqRevH7lzeQNaWRPfx0PPse7Jk6ozcsG4FKVgtzDsC1KUF+YlTHh17NcgHOPykLw==",
"engines": {
"node": ">=10"
}
@@ -18344,11 +20241,11 @@
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
},
"node_modules/jest-util": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz",
- "integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.5.0.tgz",
+ "integrity": "sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==",
"dependencies": {
- "@jest/types": "^29.4.3",
+ "@jest/types": "^29.5.0",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -18969,7 +20866,6 @@
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz",
"integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==",
- "dev": true,
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/js-sdsl"
@@ -19098,8 +20994,7 @@
"node_modules/json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
},
"node_modules/json-stringify-nice": {
"version": "1.1.4",
@@ -19293,7 +21188,6 @@
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz",
"integrity": "sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==",
- "dev": true,
"dependencies": {
"array-includes": "^3.1.5",
"object.assign": "^4.1.3"
@@ -19402,6 +21296,21 @@
"resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
"integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
},
+ "node_modules/language-subtag-registry": {
+ "version": "0.3.22",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz",
+ "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==",
+ "peer": true
+ },
+ "node_modules/language-tags": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
+ "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==",
+ "peer": true,
+ "dependencies": {
+ "language-subtag-registry": "~0.3.2"
+ }
+ },
"node_modules/lazy-cache": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz",
@@ -19935,7 +21844,6 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
"integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
"dependencies": {
"prelude-ls": "^1.2.1",
"type-check": "~0.4.0"
@@ -20178,7 +22086,6 @@
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
"integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
"dependencies": {
"p-locate": "^5.0.0"
},
@@ -20211,6 +22118,12 @@
"resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
"integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="
},
+ "node_modules/lodash.debounce": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
+ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
+ "peer": true
+ },
"node_modules/lodash.escaperegexp": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz",
@@ -20235,8 +22148,7 @@
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
},
"node_modules/lodash.template": {
"version": "4.5.0",
@@ -20713,8 +22625,8 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz",
"integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==",
- "dev": true,
"optional": true,
+ "peer": true,
"dependencies": {
"escape-string-regexp": "^4.0.0"
},
@@ -20771,7 +22683,6 @@
"version": "3.4.13",
"resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz",
"integrity": "sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==",
- "dev": true,
"dependencies": {
"fs-monkey": "^1.0.3"
},
@@ -21065,9 +22976,9 @@
}
},
"node_modules/mini-css-extract-plugin": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz",
- "integrity": "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==",
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.3.tgz",
+ "integrity": "sha512-CD9cXeKeXLcnMw8FZdtfrRrLaM7gwCl4nKuKn2YkY2Bw5wdlB8zU2cCzw+w2zS9RFvbrufTBkMCJACNPwqQA0w==",
"dependencies": {
"schema-utils": "^4.0.0"
},
@@ -21171,9 +23082,9 @@
}
},
"node_modules/minipass": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.3.tgz",
- "integrity": "sha512-OW2r4sQ0sI+z5ckEt5c1Tri4xTgZwYDxpE54eqWlQloQRoWtXjqt9udJ5Z4dSv7wK+nfFI7FRXyCpBSft+gpFw==",
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.4.tgz",
+ "integrity": "sha512-lwycX3cBMTvcejsHITUgYj6Gy6A7Nh4Q6h9NP4sTHY1ccJlC7yKzDmiShEHsJ16Jf1nKGDEaiHxiltsJEvk0nQ==",
"engines": {
"node": ">=8"
}
@@ -21651,8 +23562,7 @@
"node_modules/mute-stream": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
- "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
- "dev": true
+ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
},
"node_modules/nan": {
"version": "2.17.0",
@@ -21683,8 +23593,7 @@
"node_modules/natural-compare-lite": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
- "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
- "dev": true
+ "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g=="
},
"node_modules/needle": {
"version": "3.2.0",
@@ -21750,8 +23659,7 @@
"node_modules/node-abort-controller": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
- "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==",
- "dev": true
+ "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ=="
},
"node_modules/node-addon-api": {
"version": "1.7.2",
@@ -22200,8 +24108,8 @@
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz",
"integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==",
- "dev": true,
"optional": true,
+ "peer": true,
"dependencies": {
"config-chain": "^1.1.11",
"pify": "^3.0.0"
@@ -22214,8 +24122,8 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
"integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
- "dev": true,
"optional": true,
+ "peer": true,
"engines": {
"node": ">=4"
}
@@ -25117,7 +27025,6 @@
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz",
"integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
@@ -25131,7 +27038,6 @@
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz",
"integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
@@ -25148,7 +27054,6 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.2.tgz",
"integrity": "sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==",
- "dev": true,
"dependencies": {
"define-properties": "^1.1.4",
"es-abstract": "^1.20.4"
@@ -25173,7 +27078,6 @@
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
"integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
@@ -25334,7 +27238,6 @@
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
"integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
- "dev": true,
"dependencies": {
"deep-is": "^0.1.3",
"fast-levenshtein": "^2.0.6",
@@ -25395,7 +27298,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
"integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -25435,7 +27337,6 @@
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
"integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
"dependencies": {
"p-limit": "^3.0.2"
},
@@ -25692,7 +27593,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
"integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
"dependencies": {
"callsites": "^3.0.0"
},
@@ -25821,6 +27721,31 @@
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
},
+ "node_modules/path-scurry": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.6.1.tgz",
+ "integrity": "sha512-OW+5s+7cw6253Q4E+8qQ/u1fVvcJQCJo/VFD8pje+dbJCF1n5ZRMV2AEHbGp+5Q7jxQIYJxkHopnj6nzdGeZLA==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^7.14.1",
+ "minipass": "^4.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-scurry/node_modules/lru-cache": {
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/path-to-regexp": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz",
@@ -25860,8 +27785,7 @@
"node_modules/pend": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
- "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
- "dev": true
+ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="
},
"node_modules/performance-now": {
"version": "2.1.0",
@@ -26617,7 +28541,6 @@
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true,
"engines": {
"node": ">= 0.8.0"
}
@@ -26626,11 +28549,37 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
"integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==",
- "dev": true,
"engines": {
"node": ">=4"
}
},
+ "node_modules/prettier": {
+ "version": "2.8.4",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz",
+ "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==",
+ "peer": true,
+ "bin": {
+ "prettier": "bin-prettier.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+ "peer": true,
+ "dependencies": {
+ "fast-diff": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/pretty-error": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz",
@@ -26707,7 +28656,6 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
"integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "dev": true,
"engines": {
"node": ">=0.4.0"
}
@@ -26799,7 +28747,7 @@
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
"integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==",
- "dev": true
+ "devOptional": true
},
"node_modules/protocols": {
"version": "2.0.1",
@@ -26885,6 +28833,21 @@
"node": ">=6"
}
},
+ "node_modules/pure-rand": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.0.tgz",
+ "integrity": "sha512-rLSBxJjP+4DQOgcJAx6RZHT2he2pkhQdSnofG5VWyVl6GRq/K02ISOuOLcsMOrtKDIJb8JN2zm3FFzWNbezdPw==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/dubzzz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fast-check"
+ }
+ ]
+ },
"node_modules/q": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
@@ -27784,11 +29747,47 @@
"@babel/runtime": "^7.9.2"
}
},
+ "node_modules/regenerate": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
+ "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
+ "peer": true
+ },
+ "node_modules/regenerate-unicode-properties": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz",
+ "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==",
+ "peer": true,
+ "dependencies": {
+ "regenerate": "^1.4.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/regenerator-runtime": {
"version": "0.13.11",
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
"integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="
},
+ "node_modules/regenerator-transform": {
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz",
+ "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==",
+ "peer": true,
+ "dependencies": {
+ "@babel/runtime": "^7.8.4"
+ }
+ },
+ "node_modules/regexp-tree": {
+ "version": "0.1.24",
+ "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.24.tgz",
+ "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==",
+ "peer": true,
+ "bin": {
+ "regexp-tree": "bin/regexp-tree"
+ }
+ },
"node_modules/regexp.prototype.flags": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
@@ -27809,7 +29808,6 @@
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
"integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
- "dev": true,
"engines": {
"node": ">=8"
},
@@ -27817,6 +29815,44 @@
"url": "https://github.com/sponsors/mysticatea"
}
},
+ "node_modules/regexpu-core": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.1.tgz",
+ "integrity": "sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ==",
+ "peer": true,
+ "dependencies": {
+ "@babel/regjsgen": "^0.8.0",
+ "regenerate": "^1.4.2",
+ "regenerate-unicode-properties": "^10.1.0",
+ "regjsparser": "^0.9.1",
+ "unicode-match-property-ecmascript": "^2.0.0",
+ "unicode-match-property-value-ecmascript": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/regjsparser": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
+ "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
+ "peer": true,
+ "dependencies": {
+ "jsesc": "~0.5.0"
+ },
+ "bin": {
+ "regjsparser": "bin/parser"
+ }
+ },
+ "node_modules/regjsparser/node_modules/jsesc": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
+ "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
+ "peer": true,
+ "bin": {
+ "jsesc": "bin/jsesc"
+ }
+ },
"node_modules/relateurl": {
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
@@ -27969,6 +30005,15 @@
"node": ">=0.10.0"
}
},
+ "node_modules/requireindex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.1.0.tgz",
+ "integrity": "sha512-LBnkqsDE7BZKvqylbmn7lTIVdpx4K/QCduRATpO5R+wtPmky/a8pN1bO2D6wXppn1497AJF9mNjqAXr6bdl9jg==",
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.5"
+ }
+ },
"node_modules/requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
@@ -28090,9 +30135,13 @@
"integrity": "sha512-tYGfLpKIq9X7lrt4o3IkD9w9bpeAtsejfAqWNR98AoxfTsZqCepKa8eDlRiX8QMiCOD9vMx0/YbKLx0G1nPi5w=="
},
"node_modules/rimraf": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.1.2.tgz",
- "integrity": "sha512-BlIbgFryTbw3Dz6hyoWFhKk+unCcHMSkZGrTFVAx2WmttdBSonsdtRlwiuTbDqTKr+UlXIUqJVS4QT5tUzGENQ==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.3.1.tgz",
+ "integrity": "sha512-GfHJHBzFQra23IxDzIdBqhOWfbtdgS1/dCHrDy+yvhpoJY5TdwdT28oWaHWfRpKFDLd3GZnGTx6Mlt4+anbsxQ==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^9.2.0"
+ },
"bin": {
"rimraf": "dist/cjs/src/bin.js"
},
@@ -28103,12 +30152,54 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/rimraf/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/rimraf/node_modules/glob": {
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-9.2.1.tgz",
+ "integrity": "sha512-Pxxgq3W0HyA3XUvSXcFhRSs+43Jsx0ddxcFrbjxNGkL2Ak5BAUBxLqI5G6ADDeCHLfzzXFhe0b1yYcctGmytMA==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "minimatch": "^7.4.1",
+ "minipass": "^4.2.4",
+ "path-scurry": "^1.6.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/rimraf/node_modules/minimatch": {
+ "version": "7.4.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.2.tgz",
+ "integrity": "sha512-xy4q7wou3vUoC9k1xGTXc+awNdGaGVHtFUaey8tiX4H1QRc04DZ/rmDFwNm2EBsuYEhAZ6SgMmYf3InGY6OauA==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/roarr": {
"version": "2.15.4",
"resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz",
"integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==",
- "dev": true,
"optional": true,
+ "peer": true,
"dependencies": {
"boolean": "^3.0.1",
"detect-node": "^2.0.4",
@@ -28125,7 +30216,6 @@
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
"integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
- "dev": true,
"engines": {
"node": ">=0.12.0"
}
@@ -28166,7 +30256,6 @@
"version": "7.8.0",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz",
"integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==",
- "dev": true,
"dependencies": {
"tslib": "^2.1.0"
}
@@ -28176,11 +30265,19 @@
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
},
+ "node_modules/safe-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz",
+ "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==",
+ "peer": true,
+ "dependencies": {
+ "regexp-tree": "~0.1.1"
+ }
+ },
"node_modules/safe-regex-test": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
"integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"get-intrinsic": "^1.1.3",
@@ -28343,8 +30440,8 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
"integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==",
- "dev": true,
- "optional": true
+ "optional": true,
+ "peer": true
},
"node_modules/semver-regex": {
"version": "4.0.5",
@@ -28465,8 +30562,8 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz",
"integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==",
- "dev": true,
"optional": true,
+ "peer": true,
"dependencies": {
"type-fest": "^0.13.1"
},
@@ -28481,8 +30578,8 @@
"version": "0.13.1",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz",
"integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==",
- "dev": true,
"optional": true,
+ "peer": true,
"engines": {
"node": ">=10"
},
@@ -29059,8 +31156,8 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
"integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==",
- "dev": true,
- "optional": true
+ "optional": true,
+ "peer": true
},
"node_modules/sshpk": {
"version": "1.17.0",
@@ -29353,6 +31450,12 @@
"node": ">=10"
}
},
+ "node_modules/string-natural-compare": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/string-natural-compare/-/string-natural-compare-3.0.1.tgz",
+ "integrity": "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw==",
+ "peer": true
+ },
"node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -29370,7 +31473,6 @@
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz",
"integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
@@ -29389,7 +31491,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
"integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
@@ -29403,7 +31504,6 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
"integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.4",
@@ -29593,7 +31693,6 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz",
"integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==",
- "dev": true,
"dependencies": {
"debug": "^4.1.0"
},
@@ -30192,8 +32291,7 @@
"node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
- "dev": true
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
},
"node_modules/through": {
"version": "2.3.8",
@@ -30266,7 +32364,6 @@
"version": "0.0.33",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "dev": true,
"dependencies": {
"os-tmpdir": "~1.0.2"
},
@@ -30348,7 +32445,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
"integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==",
- "dev": true,
"engines": {
"node": ">=6"
}
@@ -30650,7 +32746,6 @@
"version": "3.21.0",
"resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
"integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
- "dev": true,
"dependencies": {
"tslib": "^1.8.1"
},
@@ -30664,15 +32759,14 @@
"node_modules/tsutils/node_modules/tslib": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
},
"node_modules/tunnel": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
"integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==",
- "dev": true,
"optional": true,
+ "peer": true,
"engines": {
"node": ">=0.6.11 <=0.7.0 || >=0.7.3"
}
@@ -30697,7 +32791,6 @@
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
"integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
"dependencies": {
"prelude-ls": "^1.2.1"
},
@@ -30717,7 +32810,6 @@
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
"integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
- "dev": true,
"engines": {
"node": ">=12.20"
},
@@ -30742,7 +32834,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
"integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"for-each": "^0.3.3",
@@ -30766,8 +32857,7 @@
"node_modules/typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
- "dev": true
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
},
"node_modules/typedoc": {
"version": "0.23.25",
@@ -30885,7 +32975,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
"integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"has-bigints": "^1.0.2",
@@ -30907,6 +32996,46 @@
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz",
"integrity": "sha512-cp0oQQyZhUM1kpJDLdGO1jPZHgS/MpzoWYfe9+CM2h/QGDZlqwT2T3YGukuBdaNJ/CAPoeyAZRRHz8JFo176vA=="
},
+ "node_modules/unicode-canonical-property-names-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-match-property-ecmascript": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
+ "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
+ "peer": true,
+ "dependencies": {
+ "unicode-canonical-property-names-ecmascript": "^2.0.0",
+ "unicode-property-aliases-ecmascript": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-match-property-value-ecmascript": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/unicode-property-aliases-ecmascript": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
+ "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/unique-filename": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz",
@@ -31056,7 +33185,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
"integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==",
- "dev": true,
"dependencies": {
"prepend-http": "^2.0.0"
},
@@ -31304,7 +33432,6 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
"integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
- "dev": true,
"dependencies": {
"defaults": "^1.0.3"
}
@@ -32192,7 +34319,6 @@
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
"integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
- "dev": true,
"dependencies": {
"buffer-crc32": "~0.2.3",
"fd-slicer": "~1.1.0"
@@ -32228,7 +34354,7 @@
},
"packages/bump-version-for-cron": {
"name": "@k8slens/bump-version-for-cron",
- "version": "6.4.0-cron.4db172da60",
+ "version": "6.5.0-alpha.0",
"license": "MIT",
"dependencies": {
"arg": "^5.0.2",
@@ -32239,7 +34365,7 @@
},
"devDependencies": {
"@swc/cli": "^0.1.61",
- "@swc/core": "^1.3.35",
+ "@swc/core": "^1.3.37",
"@types/node": "^16.18.11",
"@types/semver": "^7.3.13",
"rimraf": "^4.1.2"
@@ -32253,20 +34379,20 @@
},
"packages/core": {
"name": "@k8slens/core",
- "version": "6.4.0-beta.13",
+ "version": "6.5.0-alpha.0",
"license": "MIT",
"dependencies": {
"@astronautlabs/jsonpath": "^1.1.0",
"@hapi/call": "^9.0.1",
"@hapi/subtext": "^7.1.0",
- "@k8slens/node-fetch": "^6.4.0-beta.13",
+ "@k8slens/node-fetch": "^6.5.0-alpha.0",
"@kubernetes/client-node": "^0.18.1",
"@material-ui/styles": "^4.11.5",
- "@ogre-tools/fp": "^12.0.1",
- "@ogre-tools/injectable": "^12.0.1",
- "@ogre-tools/injectable-extension-for-auto-registration": "^12.0.1",
- "@ogre-tools/injectable-extension-for-mobx": "^12.0.1",
- "@ogre-tools/injectable-react": "^12.0.1",
+ "@ogre-tools/fp": "^15.1.2",
+ "@ogre-tools/injectable": "^15.1.2",
+ "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.2",
+ "@ogre-tools/injectable-extension-for-mobx": "^15.1.2",
+ "@ogre-tools/injectable-react": "^15.1.2",
"@sentry/electron": "^3.0.8",
"@sentry/integrations": "^6.19.3",
"@side/jest-runtime": "^1.1.0",
@@ -32334,7 +34460,7 @@
"@material-ui/lab": "^4.0.0-alpha.60",
"@sentry/types": "^6.19.7",
"@swc/cli": "^0.1.61",
- "@swc/core": "^1.3.35",
+ "@swc/core": "^1.3.37",
"@swc/jest": "^0.2.24",
"@testing-library/dom": "^7.31.2",
"@testing-library/jest-dom": "^5.16.5",
@@ -32464,7 +34590,11 @@
"node": ">=16 <17"
},
"peerDependencies": {
- "@k8slens/application": "^6.4.0-beta.13",
+ "@k8slens/application": "^6.5.0-alpha.0",
+ "@k8slens/application-for-electron-main": "^6.5.0-alpha.0",
+ "@k8slens/run-many": "^1.0.0",
+ "@k8slens/test-utils": "^1.0.0",
+ "@k8slens/utilities": "^1.0.0",
"@types/byline": "^4.2.33",
"@types/chart.js": "^2.9.36",
"@types/color": "^3.0.3",
@@ -32493,7 +34623,7 @@
},
"packages/ensure-binaries": {
"name": "@k8slens/ensure-binaries",
- "version": "6.4.0-beta.13",
+ "version": "6.5.0-alpha.0",
"license": "MIT",
"dependencies": {
"arg": "^5.0.2",
@@ -32508,7 +34638,7 @@
},
"devDependencies": {
"@swc/cli": "^0.1.61",
- "@swc/core": "^1.3.35",
+ "@swc/core": "^1.3.37",
"@types/cli-progress": "^3.11.0",
"@types/gunzip-maybe": "^1.4.0",
"@types/node": "^16.18.11",
@@ -32525,10 +34655,10 @@
},
"packages/extension-api": {
"name": "@k8slens/extensions",
- "version": "6.4.0-beta.13",
+ "version": "6.5.0-alpha.0",
"license": "MIT",
"dependencies": {
- "@k8slens/core": "^6.4.0-beta.13"
+ "@k8slens/core": "^6.5.0-alpha.0"
},
"devDependencies": {
"@types/node": "^16.18.6",
@@ -32541,6 +34671,7 @@
"style-loader": "^3.3.1",
"ts-loader": "^9.4.2",
"ts-node": "^10.9.1",
+ "typed-emitter": "^2.1.0",
"typedoc": "0.23.25",
"typedoc-plugin-markdown": "^3.13.6",
"typescript": "^4.9.5",
@@ -32683,6 +34814,15 @@
"node": ">=6"
}
},
+ "packages/extension-api/node_modules/typed-emitter": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz",
+ "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==",
+ "dev": true,
+ "optionalDependencies": {
+ "rxjs": "*"
+ }
+ },
"packages/extension-api/node_modules/typescript-plugin-css-modules": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/typescript-plugin-css-modules/-/typescript-plugin-css-modules-4.2.1.tgz",
@@ -32756,7 +34896,7 @@
},
"packages/generate-tray-icons": {
"name": "@k8slens/generate-tray-icons",
- "version": "6.4.0-beta.13",
+ "version": "6.5.0-alpha.0",
"license": "MIT",
"dependencies": {
"arg": "^5.0.2",
@@ -32769,7 +34909,7 @@
},
"devDependencies": {
"@swc/cli": "^0.1.61",
- "@swc/core": "^1.3.35",
+ "@swc/core": "^1.3.37",
"@types/jsdom": "^20.0.1",
"@types/node": "^18.11.18",
"@types/sharp": "^0.31.1",
@@ -32815,19 +34955,71 @@
"url": "https://opencollective.com/libvips"
}
},
+ "packages/infrastructure/code-style": {
+ "name": "@k8slens/code-style",
+ "version": "^6.5.0-alpha.0",
+ "extraneous": true,
+ "license": "UNLICENSED",
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": ">= 5",
+ "@typescript-eslint/parser": ">= 5",
+ "eslint": ">= 7",
+ "eslint-config-airbnb-typescript": ">= 17",
+ "eslint-config-prettier": ">= 8",
+ "eslint-config-react-app": "^7.0.1",
+ "eslint-plugin-import": ">= 2",
+ "eslint-plugin-jest": ">= 27",
+ "eslint-plugin-jsx-a11y": ">= 6",
+ "eslint-plugin-no-unsanitized": ">= 4.0.2",
+ "eslint-plugin-prettier": ">= 4",
+ "eslint-plugin-react-hooks": ">= 4",
+ "eslint-plugin-security": ">= 1.6.0",
+ "eslint-plugin-simple-import-sort": ">= 7",
+ "eslint-plugin-unused-imports": ">= 2",
+ "eslint-plugin-xss": ">= 0.1.12",
+ "prettier": ">= 2"
+ }
+ },
+ "packages/infrastructure/eslint-config": {
+ "name": "@k8slens/eslint-config",
+ "version": "^6.5.0-alpha.0",
+ "license": "MIT",
+ "bin": {
+ "lens-lint": "bin/lint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": ">= 5",
+ "@typescript-eslint/parser": ">= 5",
+ "eslint": ">= 7",
+ "eslint-config-airbnb-typescript": ">= 17",
+ "eslint-config-prettier": ">= 8",
+ "eslint-config-react-app": "^7.0.1",
+ "eslint-plugin-import": ">= 2",
+ "eslint-plugin-jest": ">= 27",
+ "eslint-plugin-jsx-a11y": ">= 6",
+ "eslint-plugin-no-unsanitized": ">= 4.0.2",
+ "eslint-plugin-prettier": ">= 4",
+ "eslint-plugin-react-hooks": ">= 4",
+ "eslint-plugin-security": ">= 1.6.0",
+ "eslint-plugin-simple-import-sort": ">= 7",
+ "eslint-plugin-unused-imports": ">= 2",
+ "eslint-plugin-xss": ">= 0.1.12",
+ "prettier": ">= 2"
+ }
+ },
"packages/infrastructure/jest": {
"name": "@k8slens/jest",
- "version": "0.0.1",
+ "version": "6.5.0-alpha.0",
"license": "MIT",
"dependencies": {
- "@swc/core": "^1.3.20",
+ "@swc/core": "^1.3.38",
"@swc/jest": "^0.2.23",
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@types/jest": "^29.2.2",
"identity-obj-proxy": "^3.0.0",
- "jest": "^29.3.1",
- "jest-environment-jsdom": "^29.3.1",
+ "jest": "^29.5.0",
+ "jest-environment-jsdom": "^29.5.0",
"jest-watch-select-projects": "^2.0.0",
"jest-watch-typeahead": "^2.2.1",
"lodash": "^4.17.21",
@@ -32835,15 +35027,15 @@
}
},
"packages/infrastructure/jest/node_modules/@jest/console": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.4.3.tgz",
- "integrity": "sha512-W/o/34+wQuXlgqlPYTansOSiBnuxrTv61dEVkA6HNmpcgHLUjfaUbdqt6oVvOzaawwo9IdW9QOtMgQ1ScSZC4A==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.5.0.tgz",
+ "integrity": "sha512-NEpkObxPwyw/XxZVLPmAGKE89IQRp4puc6IQRPru6JKd1M3fW9v1xM1AnzIJE65hbCkzQAdnL8P47e9hzhiYLQ==",
"dependencies": {
- "@jest/types": "^29.4.3",
+ "@jest/types": "^29.5.0",
"@types/node": "*",
"chalk": "^4.0.0",
- "jest-message-util": "^29.4.3",
- "jest-util": "^29.4.3",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0",
"slash": "^3.0.0"
},
"engines": {
@@ -32851,36 +35043,36 @@
}
},
"packages/infrastructure/jest/node_modules/@jest/core": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.4.3.tgz",
- "integrity": "sha512-56QvBq60fS4SPZCuM7T+7scNrkGIe7Mr6PVIXUpu48ouvRaWOFqRPV91eifvFM0ay2HmfswXiGf97NGUN5KofQ==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.5.0.tgz",
+ "integrity": "sha512-28UzQc7ulUrOQw1IsN/kv1QES3q2kkbl/wGslyhAclqZ/8cMdB5M68BffkIdSJgKBUt50d3hbwJ92XESlE7LiQ==",
"dependencies": {
- "@jest/console": "^29.4.3",
- "@jest/reporters": "^29.4.3",
- "@jest/test-result": "^29.4.3",
- "@jest/transform": "^29.4.3",
- "@jest/types": "^29.4.3",
+ "@jest/console": "^29.5.0",
+ "@jest/reporters": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.9",
- "jest-changed-files": "^29.4.3",
- "jest-config": "^29.4.3",
- "jest-haste-map": "^29.4.3",
- "jest-message-util": "^29.4.3",
+ "jest-changed-files": "^29.5.0",
+ "jest-config": "^29.5.0",
+ "jest-haste-map": "^29.5.0",
+ "jest-message-util": "^29.5.0",
"jest-regex-util": "^29.4.3",
- "jest-resolve": "^29.4.3",
- "jest-resolve-dependencies": "^29.4.3",
- "jest-runner": "^29.4.3",
- "jest-runtime": "^29.4.3",
- "jest-snapshot": "^29.4.3",
- "jest-util": "^29.4.3",
- "jest-validate": "^29.4.3",
- "jest-watcher": "^29.4.3",
+ "jest-resolve": "^29.5.0",
+ "jest-resolve-dependencies": "^29.5.0",
+ "jest-runner": "^29.5.0",
+ "jest-runtime": "^29.5.0",
+ "jest-snapshot": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
+ "jest-watcher": "^29.5.0",
"micromatch": "^4.0.4",
- "pretty-format": "^29.4.3",
+ "pretty-format": "^29.5.0",
"slash": "^3.0.0",
"strip-ansi": "^6.0.0"
},
@@ -32897,9 +35089,9 @@
}
},
"packages/infrastructure/jest/node_modules/@jest/core/node_modules/pretty-format": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz",
- "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
"dependencies": {
"@jest/schemas": "^29.4.3",
"ansi-styles": "^5.0.0",
@@ -32915,35 +35107,35 @@
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
},
"packages/infrastructure/jest/node_modules/@jest/environment": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.3.tgz",
- "integrity": "sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.5.0.tgz",
+ "integrity": "sha512-5FXw2+wD29YU1d4I2htpRX7jYnAyTRjP2CsXQdo9SAM8g3ifxWPSV0HnClSn71xwctr0U3oZIIH+dtbfmnbXVQ==",
"dependencies": {
- "@jest/fake-timers": "^29.4.3",
- "@jest/types": "^29.4.3",
+ "@jest/fake-timers": "^29.5.0",
+ "@jest/types": "^29.5.0",
"@types/node": "*",
- "jest-mock": "^29.4.3"
+ "jest-mock": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"packages/infrastructure/jest/node_modules/@jest/expect": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.4.3.tgz",
- "integrity": "sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.5.0.tgz",
+ "integrity": "sha512-PueDR2HGihN3ciUNGr4uelropW7rqUfTiOn+8u0leg/42UhblPxHkfoh0Ruu3I9Y1962P3u2DY4+h7GVTSVU6g==",
"dependencies": {
- "expect": "^29.4.3",
- "jest-snapshot": "^29.4.3"
+ "expect": "^29.5.0",
+ "jest-snapshot": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"packages/infrastructure/jest/node_modules/@jest/expect-utils": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz",
- "integrity": "sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.5.0.tgz",
+ "integrity": "sha512-fmKzsidoXQT2KwnrwE0SQq3uj8Z763vzR8LnLBwC2qYWEFpjX8daRsk6rHUM1QvNlEW/UJXNXm59ztmJJWs2Mg==",
"dependencies": {
"jest-get-type": "^29.4.3"
},
@@ -32952,31 +35144,31 @@
}
},
"packages/infrastructure/jest/node_modules/@jest/fake-timers": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.3.tgz",
- "integrity": "sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.5.0.tgz",
+ "integrity": "sha512-9ARvuAAQcBwDAqOnglWq2zwNIRUDtk/SCkp/ToGEhFv5r86K21l+VEs0qNTaXtyiY0lEePl3kylijSYJQqdbDg==",
"dependencies": {
- "@jest/types": "^29.4.3",
+ "@jest/types": "^29.5.0",
"@sinonjs/fake-timers": "^10.0.2",
"@types/node": "*",
- "jest-message-util": "^29.4.3",
- "jest-mock": "^29.4.3",
- "jest-util": "^29.4.3"
+ "jest-message-util": "^29.5.0",
+ "jest-mock": "^29.5.0",
+ "jest-util": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"packages/infrastructure/jest/node_modules/@jest/reporters": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.4.3.tgz",
- "integrity": "sha512-sr2I7BmOjJhyqj9ANC6CTLsL4emMoka7HkQpcoMRlhCbQJjz2zsRzw0BDPiPyEFDXAbxKgGFYuQZiSJ1Y6YoTg==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.5.0.tgz",
+ "integrity": "sha512-D05STXqj/M8bP9hQNSICtPqz97u7ffGzZu+9XLucXhkOFBqKcXe04JLZOgIekOxdb73MAoBUFnqvf7MCpKk5OA==",
"dependencies": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^29.4.3",
- "@jest/test-result": "^29.4.3",
- "@jest/transform": "^29.4.3",
- "@jest/types": "^29.4.3",
+ "@jest/console": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
"@jridgewell/trace-mapping": "^0.3.15",
"@types/node": "*",
"chalk": "^4.0.0",
@@ -32989,9 +35181,9 @@
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.1.3",
- "jest-message-util": "^29.4.3",
- "jest-util": "^29.4.3",
- "jest-worker": "^29.4.3",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-worker": "^29.5.0",
"slash": "^3.0.0",
"string-length": "^4.0.1",
"strip-ansi": "^6.0.0",
@@ -33010,12 +35202,12 @@
}
},
"packages/infrastructure/jest/node_modules/@jest/test-result": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.4.3.tgz",
- "integrity": "sha512-Oi4u9NfBolMq9MASPwuWTlC5WvmNRwI4S8YrQg5R5Gi47DYlBe3sh7ILTqi/LGrK1XUE4XY9KZcQJTH1WJCLLA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.5.0.tgz",
+ "integrity": "sha512-fGl4rfitnbfLsrfx1uUpDEESS7zM8JdgZgOCQuxQvL1Sn/I6ijeAVQWGfXI9zb1i9Mzo495cIpVZhA0yr60PkQ==",
"dependencies": {
- "@jest/console": "^29.4.3",
- "@jest/types": "^29.4.3",
+ "@jest/console": "^29.5.0",
+ "@jest/types": "^29.5.0",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
},
@@ -33024,13 +35216,13 @@
}
},
"packages/infrastructure/jest/node_modules/@jest/test-sequencer": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.4.3.tgz",
- "integrity": "sha512-yi/t2nES4GB4G0mjLc0RInCq/cNr9dNwJxcGg8sslajua5Kb4kmozAc+qPLzplhBgfw1vLItbjyHzUN92UXicw==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.5.0.tgz",
+ "integrity": "sha512-yPafQEcKjkSfDXyvtgiV4pevSeyuA6MQr6ZIdVkWJly9vkqjnFfcfhRQqpD5whjoU8EORki752xQmjaqoFjzMQ==",
"dependencies": {
- "@jest/test-result": "^29.4.3",
+ "@jest/test-result": "^29.5.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.4.3",
+ "jest-haste-map": "^29.5.0",
"slash": "^3.0.0"
},
"engines": {
@@ -33148,14 +35340,14 @@
}
},
"packages/infrastructure/jest/node_modules/babel-jest": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.4.3.tgz",
- "integrity": "sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.5.0.tgz",
+ "integrity": "sha512-mA4eCDh5mSo2EcA9xQjVTpmbbNk32Zb3Q3QFQsNhaK56Q+yoXowzFodLux30HRgyOho5rsQ6B0P9QpMkvvnJ0Q==",
"dependencies": {
- "@jest/transform": "^29.4.3",
+ "@jest/transform": "^29.5.0",
"@types/babel__core": "^7.1.14",
"babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^29.4.3",
+ "babel-preset-jest": "^29.5.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"slash": "^3.0.0"
@@ -33168,9 +35360,9 @@
}
},
"packages/infrastructure/jest/node_modules/babel-plugin-jest-hoist": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.3.tgz",
- "integrity": "sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz",
+ "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==",
"dependencies": {
"@babel/template": "^7.3.3",
"@babel/types": "^7.3.3",
@@ -33182,11 +35374,11 @@
}
},
"packages/infrastructure/jest/node_modules/babel-preset-jest": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.4.3.tgz",
- "integrity": "sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz",
+ "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==",
"dependencies": {
- "babel-plugin-jest-hoist": "^29.4.3",
+ "babel-plugin-jest-hoist": "^29.5.0",
"babel-preset-current-node-syntax": "^1.0.0"
},
"engines": {
@@ -33249,15 +35441,15 @@
}
},
"packages/infrastructure/jest/node_modules/expect": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz",
- "integrity": "sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.5.0.tgz",
+ "integrity": "sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==",
"dependencies": {
- "@jest/expect-utils": "^29.4.3",
+ "@jest/expect-utils": "^29.5.0",
"jest-get-type": "^29.4.3",
- "jest-matcher-utils": "^29.4.3",
- "jest-message-util": "^29.4.3",
- "jest-util": "^29.4.3"
+ "jest-matcher-utils": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -33299,14 +35491,14 @@
}
},
"packages/infrastructure/jest/node_modules/jest": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest/-/jest-29.4.3.tgz",
- "integrity": "sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.5.0.tgz",
+ "integrity": "sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==",
"dependencies": {
- "@jest/core": "^29.4.3",
- "@jest/types": "^29.4.3",
+ "@jest/core": "^29.5.0",
+ "@jest/types": "^29.5.0",
"import-local": "^3.0.2",
- "jest-cli": "^29.4.3"
+ "jest-cli": "^29.5.0"
},
"bin": {
"jest": "bin/jest.js"
@@ -33324,9 +35516,9 @@
}
},
"packages/infrastructure/jest/node_modules/jest-changed-files": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.4.3.tgz",
- "integrity": "sha512-Vn5cLuWuwmi2GNNbokPOEcvrXGSGrqVnPEZV7rC6P7ck07Dyw9RFnvWglnupSh+hGys0ajGtw/bc2ZgweljQoQ==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz",
+ "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==",
"dependencies": {
"execa": "^5.0.0",
"p-limit": "^3.1.0"
@@ -33336,27 +35528,28 @@
}
},
"packages/infrastructure/jest/node_modules/jest-circus": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.4.3.tgz",
- "integrity": "sha512-Vw/bVvcexmdJ7MLmgdT3ZjkJ3LKu8IlpefYokxiqoZy6OCQ2VAm6Vk3t/qHiAGUXbdbJKJWnc8gH3ypTbB/OBw==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.5.0.tgz",
+ "integrity": "sha512-gq/ongqeQKAplVxqJmbeUOJJKkW3dDNPY8PjhJ5G0lBRvu0e3EWGxGy5cI4LAGA7gV2UHCtWBI4EMXK8c9nQKA==",
"dependencies": {
- "@jest/environment": "^29.4.3",
- "@jest/expect": "^29.4.3",
- "@jest/test-result": "^29.4.3",
- "@jest/types": "^29.4.3",
+ "@jest/environment": "^29.5.0",
+ "@jest/expect": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/types": "^29.5.0",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
"dedent": "^0.7.0",
"is-generator-fn": "^2.0.0",
- "jest-each": "^29.4.3",
- "jest-matcher-utils": "^29.4.3",
- "jest-message-util": "^29.4.3",
- "jest-runtime": "^29.4.3",
- "jest-snapshot": "^29.4.3",
- "jest-util": "^29.4.3",
+ "jest-each": "^29.5.0",
+ "jest-matcher-utils": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-runtime": "^29.5.0",
+ "jest-snapshot": "^29.5.0",
+ "jest-util": "^29.5.0",
"p-limit": "^3.1.0",
- "pretty-format": "^29.4.3",
+ "pretty-format": "^29.5.0",
+ "pure-rand": "^6.0.0",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
@@ -33365,9 +35558,9 @@
}
},
"packages/infrastructure/jest/node_modules/jest-circus/node_modules/pretty-format": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz",
- "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
"dependencies": {
"@jest/schemas": "^29.4.3",
"ansi-styles": "^5.0.0",
@@ -33383,20 +35576,20 @@
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
},
"packages/infrastructure/jest/node_modules/jest-cli": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.4.3.tgz",
- "integrity": "sha512-PiiAPuFNfWWolCE6t3ZrDXQc6OsAuM3/tVW0u27UWc1KE+n/HSn5dSE6B2juqN7WP+PP0jAcnKtGmI4u8GMYCg==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.5.0.tgz",
+ "integrity": "sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==",
"dependencies": {
- "@jest/core": "^29.4.3",
- "@jest/test-result": "^29.4.3",
- "@jest/types": "^29.4.3",
+ "@jest/core": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/types": "^29.5.0",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.9",
"import-local": "^3.0.2",
- "jest-config": "^29.4.3",
- "jest-util": "^29.4.3",
- "jest-validate": "^29.4.3",
+ "jest-config": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
"prompts": "^2.0.1",
"yargs": "^17.3.1"
},
@@ -33416,30 +35609,30 @@
}
},
"packages/infrastructure/jest/node_modules/jest-config": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.4.3.tgz",
- "integrity": "sha512-eCIpqhGnIjdUCXGtLhz4gdDoxKSWXKjzNcc5r+0S1GKOp2fwOipx5mRcwa9GB/ArsxJ1jlj2lmlD9bZAsBxaWQ==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.5.0.tgz",
+ "integrity": "sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==",
"dependencies": {
"@babel/core": "^7.11.6",
- "@jest/test-sequencer": "^29.4.3",
- "@jest/types": "^29.4.3",
- "babel-jest": "^29.4.3",
+ "@jest/test-sequencer": "^29.5.0",
+ "@jest/types": "^29.5.0",
+ "babel-jest": "^29.5.0",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
- "jest-circus": "^29.4.3",
- "jest-environment-node": "^29.4.3",
+ "jest-circus": "^29.5.0",
+ "jest-environment-node": "^29.5.0",
"jest-get-type": "^29.4.3",
"jest-regex-util": "^29.4.3",
- "jest-resolve": "^29.4.3",
- "jest-runner": "^29.4.3",
- "jest-util": "^29.4.3",
- "jest-validate": "^29.4.3",
+ "jest-resolve": "^29.5.0",
+ "jest-runner": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
"micromatch": "^4.0.4",
"parse-json": "^5.2.0",
- "pretty-format": "^29.4.3",
+ "pretty-format": "^29.5.0",
"slash": "^3.0.0",
"strip-json-comments": "^3.1.1"
},
@@ -33460,9 +35653,9 @@
}
},
"packages/infrastructure/jest/node_modules/jest-config/node_modules/pretty-format": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz",
- "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
"dependencies": {
"@jest/schemas": "^29.4.3",
"ansi-styles": "^5.0.0",
@@ -33478,23 +35671,23 @@
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
},
"packages/infrastructure/jest/node_modules/jest-diff": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz",
- "integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.5.0.tgz",
+ "integrity": "sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==",
"dependencies": {
"chalk": "^4.0.0",
"diff-sequences": "^29.4.3",
"jest-get-type": "^29.4.3",
- "pretty-format": "^29.4.3"
+ "pretty-format": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"packages/infrastructure/jest/node_modules/jest-diff/node_modules/pretty-format": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz",
- "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
"dependencies": {
"@jest/schemas": "^29.4.3",
"ansi-styles": "^5.0.0",
@@ -33521,24 +35714,24 @@
}
},
"packages/infrastructure/jest/node_modules/jest-each": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.4.3.tgz",
- "integrity": "sha512-1ElHNAnKcbJb/b+L+7j0/w7bDvljw4gTv1wL9fYOczeJrbTbkMGQ5iQPFJ3eFQH19VPTx1IyfePdqSpePKss7Q==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.5.0.tgz",
+ "integrity": "sha512-HM5kIJ1BTnVt+DQZ2ALp3rzXEl+g726csObrW/jpEGl+CDSSQpOJJX2KE/vEg8cxcMXdyEPu6U4QX5eruQv5hA==",
"dependencies": {
- "@jest/types": "^29.4.3",
+ "@jest/types": "^29.5.0",
"chalk": "^4.0.0",
"jest-get-type": "^29.4.3",
- "jest-util": "^29.4.3",
- "pretty-format": "^29.4.3"
+ "jest-util": "^29.5.0",
+ "pretty-format": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"packages/infrastructure/jest/node_modules/jest-each/node_modules/pretty-format": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz",
- "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
"dependencies": {
"@jest/schemas": "^29.4.3",
"ansi-styles": "^5.0.0",
@@ -33554,17 +35747,17 @@
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
},
"packages/infrastructure/jest/node_modules/jest-environment-jsdom": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.4.3.tgz",
- "integrity": "sha512-rFjf8JXrw3OjUzzmSE5l0XjMj0/MSVEUMCSXBGPDkfwb1T03HZI7iJSL0cGctZApPSyJxbjyKDVxkZuyhHkuTw==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.5.0.tgz",
+ "integrity": "sha512-/KG8yEK4aN8ak56yFVdqFDzKNHgF4BAymCx2LbPNPsUshUlfAl0eX402Xm1pt+eoG9SLZEUVifqXtX8SK74KCw==",
"dependencies": {
- "@jest/environment": "^29.4.3",
- "@jest/fake-timers": "^29.4.3",
- "@jest/types": "^29.4.3",
+ "@jest/environment": "^29.5.0",
+ "@jest/fake-timers": "^29.5.0",
+ "@jest/types": "^29.5.0",
"@types/jsdom": "^20.0.0",
"@types/node": "*",
- "jest-mock": "^29.4.3",
- "jest-util": "^29.4.3",
+ "jest-mock": "^29.5.0",
+ "jest-util": "^29.5.0",
"jsdom": "^20.0.0"
},
"engines": {
@@ -33580,16 +35773,16 @@
}
},
"packages/infrastructure/jest/node_modules/jest-environment-node": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.3.tgz",
- "integrity": "sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.5.0.tgz",
+ "integrity": "sha512-ExxuIK/+yQ+6PRGaHkKewYtg6hto2uGCgvKdb2nfJfKXgZ17DfXjvbZ+jA1Qt9A8EQSfPnt5FKIfnOO3u1h9qw==",
"dependencies": {
- "@jest/environment": "^29.4.3",
- "@jest/fake-timers": "^29.4.3",
- "@jest/types": "^29.4.3",
+ "@jest/environment": "^29.5.0",
+ "@jest/fake-timers": "^29.5.0",
+ "@jest/types": "^29.5.0",
"@types/node": "*",
- "jest-mock": "^29.4.3",
- "jest-util": "^29.4.3"
+ "jest-mock": "^29.5.0",
+ "jest-util": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -33604,21 +35797,21 @@
}
},
"packages/infrastructure/jest/node_modules/jest-leak-detector": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.4.3.tgz",
- "integrity": "sha512-9yw4VC1v2NspMMeV3daQ1yXPNxMgCzwq9BocCwYrRgXe4uaEJPAN0ZK37nFBhcy3cUwEVstFecFLaTHpF7NiGA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.5.0.tgz",
+ "integrity": "sha512-u9YdeeVnghBUtpN5mVxjID7KbkKE1QU4f6uUwuxiY0vYRi9BUCLKlPEZfDGR67ofdFmDz9oPAy2G92Ujrntmow==",
"dependencies": {
"jest-get-type": "^29.4.3",
- "pretty-format": "^29.4.3"
+ "pretty-format": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"packages/infrastructure/jest/node_modules/jest-leak-detector/node_modules/pretty-format": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz",
- "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
"dependencies": {
"@jest/schemas": "^29.4.3",
"ansi-styles": "^5.0.0",
@@ -33634,23 +35827,23 @@
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
},
"packages/infrastructure/jest/node_modules/jest-matcher-utils": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz",
- "integrity": "sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.5.0.tgz",
+ "integrity": "sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==",
"dependencies": {
"chalk": "^4.0.0",
- "jest-diff": "^29.4.3",
+ "jest-diff": "^29.5.0",
"jest-get-type": "^29.4.3",
- "pretty-format": "^29.4.3"
+ "pretty-format": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"packages/infrastructure/jest/node_modules/jest-matcher-utils/node_modules/pretty-format": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz",
- "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
"dependencies": {
"@jest/schemas": "^29.4.3",
"ansi-styles": "^5.0.0",
@@ -33666,17 +35859,17 @@
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
},
"packages/infrastructure/jest/node_modules/jest-message-util": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz",
- "integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.5.0.tgz",
+ "integrity": "sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==",
"dependencies": {
"@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.4.3",
+ "@jest/types": "^29.5.0",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"micromatch": "^4.0.4",
- "pretty-format": "^29.4.3",
+ "pretty-format": "^29.5.0",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
@@ -33685,9 +35878,9 @@
}
},
"packages/infrastructure/jest/node_modules/jest-message-util/node_modules/pretty-format": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz",
- "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
"dependencies": {
"@jest/schemas": "^29.4.3",
"ansi-styles": "^5.0.0",
@@ -33703,29 +35896,29 @@
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
},
"packages/infrastructure/jest/node_modules/jest-mock": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.3.tgz",
- "integrity": "sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.5.0.tgz",
+ "integrity": "sha512-GqOzvdWDE4fAV2bWQLQCkujxYWL7RxjCnj71b5VhDAGOevB3qj3Ovg26A5NI84ZpODxyzaozXLOh2NCgkbvyaw==",
"dependencies": {
- "@jest/types": "^29.4.3",
+ "@jest/types": "^29.5.0",
"@types/node": "*",
- "jest-util": "^29.4.3"
+ "jest-util": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"packages/infrastructure/jest/node_modules/jest-resolve": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.4.3.tgz",
- "integrity": "sha512-GPokE1tzguRyT7dkxBim4wSx6E45S3bOQ7ZdKEG+Qj0Oac9+6AwJPCk0TZh5Vu0xzeX4afpb+eDmgbmZFFwpOw==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.5.0.tgz",
+ "integrity": "sha512-1TzxJ37FQq7J10jPtQjcc+MkCkE3GBpBecsSUWJ0qZNJpmg6m0D9/7II03yJulm3H/fvVjgqLh/k2eYg+ui52w==",
"dependencies": {
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.4.3",
+ "jest-haste-map": "^29.5.0",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^29.4.3",
- "jest-validate": "^29.4.3",
+ "jest-util": "^29.5.0",
+ "jest-validate": "^29.5.0",
"resolve": "^1.20.0",
"resolve.exports": "^2.0.0",
"slash": "^3.0.0"
@@ -33735,41 +35928,41 @@
}
},
"packages/infrastructure/jest/node_modules/jest-resolve-dependencies": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.3.tgz",
- "integrity": "sha512-uvKMZAQ3nmXLH7O8WAOhS5l0iWyT3WmnJBdmIHiV5tBbdaDZ1wqtNX04FONGoaFvSOSHBJxnwAVnSn1WHdGVaw==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.5.0.tgz",
+ "integrity": "sha512-sjV3GFr0hDJMBpYeUuGduP+YeCRbd7S/ck6IvL3kQ9cpySYKqcqhdLLC2rFwrcL7tz5vYibomBrsFYWkIGGjOg==",
"dependencies": {
"jest-regex-util": "^29.4.3",
- "jest-snapshot": "^29.4.3"
+ "jest-snapshot": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"packages/infrastructure/jest/node_modules/jest-runner": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.4.3.tgz",
- "integrity": "sha512-GWPTEiGmtHZv1KKeWlTX9SIFuK19uLXlRQU43ceOQ2hIfA5yPEJC7AMkvFKpdCHx6pNEdOD+2+8zbniEi3v3gA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.5.0.tgz",
+ "integrity": "sha512-m7b6ypERhFghJsslMLhydaXBiLf7+jXy8FwGRHO3BGV1mcQpPbwiqiKUR2zU2NJuNeMenJmlFZCsIqzJCTeGLQ==",
"dependencies": {
- "@jest/console": "^29.4.3",
- "@jest/environment": "^29.4.3",
- "@jest/test-result": "^29.4.3",
- "@jest/transform": "^29.4.3",
- "@jest/types": "^29.4.3",
+ "@jest/console": "^29.5.0",
+ "@jest/environment": "^29.5.0",
+ "@jest/test-result": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
"@types/node": "*",
"chalk": "^4.0.0",
"emittery": "^0.13.1",
"graceful-fs": "^4.2.9",
"jest-docblock": "^29.4.3",
- "jest-environment-node": "^29.4.3",
- "jest-haste-map": "^29.4.3",
- "jest-leak-detector": "^29.4.3",
- "jest-message-util": "^29.4.3",
- "jest-resolve": "^29.4.3",
- "jest-runtime": "^29.4.3",
- "jest-util": "^29.4.3",
- "jest-watcher": "^29.4.3",
- "jest-worker": "^29.4.3",
+ "jest-environment-node": "^29.5.0",
+ "jest-haste-map": "^29.5.0",
+ "jest-leak-detector": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-resolve": "^29.5.0",
+ "jest-runtime": "^29.5.0",
+ "jest-util": "^29.5.0",
+ "jest-watcher": "^29.5.0",
+ "jest-worker": "^29.5.0",
"p-limit": "^3.1.0",
"source-map-support": "0.5.13"
},
@@ -33778,9 +35971,9 @@
}
},
"packages/infrastructure/jest/node_modules/jest-snapshot": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.4.3.tgz",
- "integrity": "sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.5.0.tgz",
+ "integrity": "sha512-x7Wolra5V0tt3wRs3/ts3S6ciSQVypgGQlJpz2rsdQYoUKxMxPNaoHMGJN6qAuPJqS+2iQ1ZUn5kl7HCyls84g==",
"dependencies": {
"@babel/core": "^7.11.6",
"@babel/generator": "^7.7.2",
@@ -33788,23 +35981,22 @@
"@babel/plugin-syntax-typescript": "^7.7.2",
"@babel/traverse": "^7.7.2",
"@babel/types": "^7.3.3",
- "@jest/expect-utils": "^29.4.3",
- "@jest/transform": "^29.4.3",
- "@jest/types": "^29.4.3",
+ "@jest/expect-utils": "^29.5.0",
+ "@jest/transform": "^29.5.0",
+ "@jest/types": "^29.5.0",
"@types/babel__traverse": "^7.0.6",
"@types/prettier": "^2.1.5",
"babel-preset-current-node-syntax": "^1.0.0",
"chalk": "^4.0.0",
- "expect": "^29.4.3",
+ "expect": "^29.5.0",
"graceful-fs": "^4.2.9",
- "jest-diff": "^29.4.3",
+ "jest-diff": "^29.5.0",
"jest-get-type": "^29.4.3",
- "jest-haste-map": "^29.4.3",
- "jest-matcher-utils": "^29.4.3",
- "jest-message-util": "^29.4.3",
- "jest-util": "^29.4.3",
+ "jest-matcher-utils": "^29.5.0",
+ "jest-message-util": "^29.5.0",
+ "jest-util": "^29.5.0",
"natural-compare": "^1.4.0",
- "pretty-format": "^29.4.3",
+ "pretty-format": "^29.5.0",
"semver": "^7.3.5"
},
"engines": {
@@ -33812,9 +36004,9 @@
}
},
"packages/infrastructure/jest/node_modules/jest-snapshot/node_modules/pretty-format": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz",
- "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
"dependencies": {
"@jest/schemas": "^29.4.3",
"ansi-styles": "^5.0.0",
@@ -33830,25 +36022,25 @@
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
},
"packages/infrastructure/jest/node_modules/jest-validate": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.3.tgz",
- "integrity": "sha512-J3u5v7aPQoXPzaar6GndAVhdQcZr/3osWSgTeKg5v574I9ybX/dTyH0AJFb5XgXIB7faVhf+rS7t4p3lL9qFaw==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.5.0.tgz",
+ "integrity": "sha512-pC26etNIi+y3HV8A+tUGr/lph9B18GnzSRAkPaaZJIE1eFdiYm6/CewuiJQ8/RlfHd1u/8Ioi8/sJ+CmbA+zAQ==",
"dependencies": {
- "@jest/types": "^29.4.3",
+ "@jest/types": "^29.5.0",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
"jest-get-type": "^29.4.3",
"leven": "^3.1.0",
- "pretty-format": "^29.4.3"
+ "pretty-format": "^29.5.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"packages/infrastructure/jest/node_modules/jest-validate/node_modules/pretty-format": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz",
- "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.5.0.tgz",
+ "integrity": "sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==",
"dependencies": {
"@jest/schemas": "^29.4.3",
"ansi-styles": "^5.0.0",
@@ -33864,17 +36056,17 @@
"integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w=="
},
"packages/infrastructure/jest/node_modules/jest-watcher": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.4.3.tgz",
- "integrity": "sha512-zwlXH3DN3iksoIZNk73etl1HzKyi5FuQdYLnkQKm5BW4n8HpoG59xSwpVdFrnh60iRRaRBGw0gcymIxjJENPcA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.5.0.tgz",
+ "integrity": "sha512-KmTojKcapuqYrKDpRwfqcQ3zjMlwu27SYext9pt4GlF5FUgB+7XE1mcCnSm6a4uUpFyQIkb6ZhzZvHl+jiBCiA==",
"dependencies": {
- "@jest/test-result": "^29.4.3",
- "@jest/types": "^29.4.3",
+ "@jest/test-result": "^29.5.0",
+ "@jest/types": "^29.5.0",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"emittery": "^0.13.1",
- "jest-util": "^29.4.3",
+ "jest-util": "^29.5.0",
"string-length": "^4.0.1"
},
"engines": {
@@ -33882,12 +36074,12 @@
}
},
"packages/infrastructure/jest/node_modules/jest-worker": {
- "version": "29.4.3",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.3.tgz",
- "integrity": "sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==",
+ "version": "29.5.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.5.0.tgz",
+ "integrity": "sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==",
"dependencies": {
"@types/node": "*",
- "jest-util": "^29.4.3",
+ "jest-util": "^29.5.0",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
@@ -33989,9 +36181,9 @@
}
},
"packages/infrastructure/jest/node_modules/resolve.exports": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz",
- "integrity": "sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.1.tgz",
+ "integrity": "sha512-OEJWVeimw8mgQuj3HfkNl4KqRevH7lzeQNaWRPfx0PPse7Jk6ozcsG4FKVgtzDsC1KUF+YlTHh17NcgHOPykLw==",
"engines": {
"node": ">=10"
}
@@ -34088,7 +36280,7 @@
},
"packages/infrastructure/typescript": {
"name": "@k8slens/typescript",
- "version": "0.0.1",
+ "version": "6.5.0-alpha.0",
"license": "MIT",
"dependencies": {
"typescript": "^4.9.3",
@@ -34097,12 +36289,13 @@
},
"packages/infrastructure/webpack": {
"name": "@k8slens/webpack",
- "version": "0.0.1",
+ "version": "6.5.0-alpha.0",
"license": "MIT",
"dependencies": {
"@types/webpack-env": "^1.18.0",
"css-loader": "^6.7.2",
- "mini-css-extract-plugin": "^2.7.0",
+ "fork-ts-checker-webpack-plugin": "^7.3.0",
+ "mini-css-extract-plugin": "^2.7.3",
"sass-loader": "^13.2.0",
"style-loader": "^3.3.1",
"ts-loader": "^9.4.1",
@@ -34150,7 +36343,7 @@
},
"packages/node-fetch": {
"name": "@k8slens/node-fetch",
- "version": "6.4.0-beta.13",
+ "version": "6.5.0-alpha.0",
"license": "MIT",
"dependencies": {
"node-fetch": "^3.3.0",
@@ -34285,28 +36478,33 @@
}
},
"packages/open-lens": {
- "version": "6.4.0-beta.13",
+ "version": "6.5.0-alpha.0",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
- "@k8slens/application": "^6.4.0-beta.13",
- "@k8slens/core": "^6.4.0-beta.13",
- "@k8slens/ensure-binaries": "^6.4.0-beta.13",
- "@k8slens/generate-tray-icons": "^6.4.0-beta.13",
- "@ogre-tools/fp": "^12.0.1",
- "@ogre-tools/injectable": "^12.0.1",
- "@ogre-tools/injectable-extension-for-auto-registration": "^12.0.1",
- "@ogre-tools/injectable-extension-for-mobx": "^12.0.1",
- "@ogre-tools/injectable-react": "^12.0.1",
+ "@k8slens/application": "^6.5.0-alpha.0",
+ "@k8slens/application-for-electron-main": "^6.5.0-alpha.0",
+ "@k8slens/core": "^6.5.0-alpha.0",
+ "@k8slens/ensure-binaries": "^6.5.0-alpha.0",
+ "@k8slens/feature-core": "^6.5.0-alpha.0",
+ "@k8slens/generate-tray-icons": "^6.5.0-alpha.0",
+ "@k8slens/run-many": "^1.0.0",
+ "@k8slens/test-utils": "^1.0.0",
+ "@k8slens/utilities": "^1.0.0",
+ "@ogre-tools/fp": "^15.1.2",
+ "@ogre-tools/injectable": "^15.1.2",
+ "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.2",
+ "@ogre-tools/injectable-extension-for-mobx": "^15.1.2",
+ "@ogre-tools/injectable-react": "^15.1.2",
"mobx": "^6.8.0",
"rimraf": "^4.1.2"
},
"devDependencies": {
"@electron/rebuild": "^3.2.10",
- "@k8slens/node-fetch": "^6.4.0-beta.13",
+ "@k8slens/node-fetch": "^6.5.0-alpha.0",
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.10",
"@swc/cli": "^0.1.61",
- "@swc/core": "^1.3.35",
+ "@swc/core": "^1.3.37",
"@swc/jest": "^0.2.24",
"@types/byline": "^4.2.33",
"@types/chart.js": "^2.9.36",
@@ -34461,34 +36659,23 @@
},
"packages/release-tool": {
"name": "@k8slens/release-tool",
- "version": "6.4.0-beta.13",
+ "version": "6.5.0-alpha.0",
"license": "MIT",
"dependencies": {
- "rimraf": "^4.1.2"
+ "chalk": "^5.2.0",
+ "inquirer": "^9.1.4",
+ "semver": "^7.3.8"
},
"bin": {
"create-release-pr": "dist/index.js"
},
"devDependencies": {
"@swc/cli": "^0.1.61",
- "@swc/core": "^1.3.35",
- "@types/command-line-args": "^5.2.0",
- "@types/fs-extra": "^11.0.1",
+ "@swc/core": "^1.3.37",
+ "@types/inquirer": "^9.0.3",
"@types/node": "^16.18.11",
"@types/semver": "^7.3.13",
- "command-line-args": "^5.2.1",
- "fs-extra": "^11.1.0",
- "semver": "^7.3.8"
- }
- },
- "packages/release-tool/node_modules/@types/fs-extra": {
- "version": "11.0.1",
- "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.1.tgz",
- "integrity": "sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==",
- "dev": true,
- "dependencies": {
- "@types/jsonfile": "*",
- "@types/node": "*"
+ "rimraf": "^4.1.2"
}
},
"packages/release-tool/node_modules/@types/node": {
@@ -34497,23 +36684,298 @@
"integrity": "sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==",
"dev": true
},
- "packages/release-tool/node_modules/fs-extra": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz",
- "integrity": "sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==",
- "dev": true,
+ "packages/release-tool/node_modules/ansi-escapes": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.0.0.tgz",
+ "integrity": "sha512-IG23inYII3dWlU2EyiAiGj6Bwal5GzsgPMwjYGvc1HPE2dgbj4ZB5ToWBKSquKw74nB3TIuOwaI6/jSULzfgrw==",
"dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
+ "type-fest": "^3.0.0"
},
"engines": {
- "node": ">=14.14"
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "packages/release-tool/node_modules/ansi-regex": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
+ "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
+ }
+ },
+ "packages/release-tool/node_modules/ansi-styles": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
+ "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "packages/release-tool/node_modules/bl": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz",
+ "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==",
+ "dependencies": {
+ "buffer": "^6.0.3",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
+ "packages/release-tool/node_modules/buffer": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
+ "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.2.1"
+ }
+ },
+ "packages/release-tool/node_modules/chalk": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz",
+ "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==",
+ "engines": {
+ "node": "^12.17.0 || ^14.13 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "packages/release-tool/node_modules/cli-cursor": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
+ "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==",
+ "dependencies": {
+ "restore-cursor": "^4.0.0"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "packages/release-tool/node_modules/cli-width": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.0.0.tgz",
+ "integrity": "sha512-ZksGS2xpa/bYkNzN3BAw1wEjsLV/ZKOf/CCrJ/QOBsxx6fOARIkwTutxp1XIOIohi6HKmOFjMoK/XaqDVUpEEw==",
+ "engines": {
+ "node": ">= 12"
+ }
+ },
+ "packages/release-tool/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
+ },
+ "packages/release-tool/node_modules/escape-string-regexp": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz",
+ "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "packages/release-tool/node_modules/figures": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz",
+ "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==",
+ "dependencies": {
+ "escape-string-regexp": "^5.0.0",
+ "is-unicode-supported": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "packages/release-tool/node_modules/inquirer": {
+ "version": "9.1.4",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.1.4.tgz",
+ "integrity": "sha512-9hiJxE5gkK/cM2d1mTEnuurGTAoHebbkX0BYl3h7iEg7FYfuNIom+nDfBCSWtvSnoSrWCeBxqqBZu26xdlJlXA==",
+ "dependencies": {
+ "ansi-escapes": "^6.0.0",
+ "chalk": "^5.1.2",
+ "cli-cursor": "^4.0.0",
+ "cli-width": "^4.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^5.0.0",
+ "lodash": "^4.17.21",
+ "mute-stream": "0.0.8",
+ "ora": "^6.1.2",
+ "run-async": "^2.4.0",
+ "rxjs": "^7.5.7",
+ "string-width": "^5.1.2",
+ "strip-ansi": "^7.0.1",
+ "through": "^2.3.6",
+ "wrap-ansi": "^8.0.1"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "packages/release-tool/node_modules/is-interactive": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz",
+ "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "packages/release-tool/node_modules/is-unicode-supported": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz",
+ "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "packages/release-tool/node_modules/log-symbols": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz",
+ "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==",
+ "dependencies": {
+ "chalk": "^5.0.0",
+ "is-unicode-supported": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "packages/release-tool/node_modules/ora": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-6.1.2.tgz",
+ "integrity": "sha512-EJQ3NiP5Xo94wJXIzAyOtSb0QEIAUu7m8t6UZ9krbz0vAJqr92JpcK/lEXg91q6B9pEGqrykkd2EQplnifDSBw==",
+ "dependencies": {
+ "bl": "^5.0.0",
+ "chalk": "^5.0.0",
+ "cli-cursor": "^4.0.0",
+ "cli-spinners": "^2.6.1",
+ "is-interactive": "^2.0.0",
+ "is-unicode-supported": "^1.1.0",
+ "log-symbols": "^5.1.0",
+ "strip-ansi": "^7.0.1",
+ "wcwidth": "^1.0.1"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "packages/release-tool/node_modules/restore-cursor": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz",
+ "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==",
+ "dependencies": {
+ "onetime": "^5.1.0",
+ "signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "packages/release-tool/node_modules/string-width": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
+ "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
+ "dependencies": {
+ "eastasianwidth": "^0.2.0",
+ "emoji-regex": "^9.2.2",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "packages/release-tool/node_modules/strip-ansi": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz",
+ "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==",
+ "dependencies": {
+ "ansi-regex": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
+ }
+ },
+ "packages/release-tool/node_modules/type-fest": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.6.0.tgz",
+ "integrity": "sha512-RqTRtKTzvPpNdDUp1dVkKQRunlPITk4mXeqFlAZoJsS+fLRn8AdPK0TcQDumGayhU7fjlBfiBjsq3pe3rIfXZQ==",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "packages/release-tool/node_modules/wrap-ansi": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
+ "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
+ "dependencies": {
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
"packages/semver": {
"name": "@k8slens/semver",
- "version": "6.4.0-beta.13",
+ "version": "6.5.0-alpha.0",
"license": "MIT",
"dependencies": {
"command-line-args": "^5.2.1",
@@ -34521,7 +36983,7 @@
},
"devDependencies": {
"@swc/cli": "^0.1.61",
- "@swc/core": "^1.3.35",
+ "@swc/core": "^1.3.37",
"@types/command-line-args": "^5.2.0",
"@types/node": "^16.18.11",
"@types/semver": "^7.3.13",
@@ -34538,11 +37000,100 @@
"name": "@k8slens/application",
"version": "6.4.0-beta.13",
"license": "MIT",
+ "devDependencies": {
+ "@async-fn/jest": "^1.6.4"
+ },
"peerDependencies": {
- "@ogre-tools/fp": "^12.0.1",
- "@ogre-tools/injectable": "^12.0.1",
+ "@k8slens/feature-core": "^0.0.1",
+ "@ogre-tools/fp": "^15.1.1",
+ "@ogre-tools/injectable": "^15.1.1",
+ "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.1",
"lodash": "^4.17.15"
}
+ },
+ "packages/technical-features/application/agnostic": {
+ "name": "@k8slens/application",
+ "version": "6.5.0-alpha.0",
+ "license": "MIT",
+ "devDependencies": {
+ "@async-fn/jest": "^1.6.4",
+ "@k8slens/eslint-config": "*"
+ },
+ "peerDependencies": {
+ "@k8slens/feature-core": "^6.5.0-alpha.0",
+ "@ogre-tools/fp": "^15.1.2",
+ "@ogre-tools/injectable": "^15.1.2",
+ "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.2",
+ "lodash": "^4.17.15"
+ }
+ },
+ "packages/technical-features/application/electron-main": {
+ "name": "@k8slens/application-for-electron-main",
+ "version": "6.5.0-alpha.0",
+ "license": "MIT",
+ "devDependencies": {
+ "@async-fn/jest": "^1.6.4",
+ "@k8slens/eslint-config": "*",
+ "@ogre-tools/test-utils": "^15.1.2"
+ },
+ "peerDependencies": {
+ "@k8slens/application": "^6.5.0-alpha.0",
+ "@k8slens/feature-core": "^6.5.0-alpha.0",
+ "@ogre-tools/injectable": "^15.1.2",
+ "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.2",
+ "electron": "^19.1.9"
+ }
+ },
+ "packages/technical-features/feature-core": {
+ "name": "@k8slens/feature-core",
+ "version": "6.5.0-alpha.0",
+ "license": "MIT",
+ "devDependencies": {
+ "@k8slens/eslint-config": "*"
+ },
+ "peerDependencies": {
+ "@ogre-tools/injectable": "^15.1.2"
+ }
+ },
+ "packages/utility-features/run-many": {
+ "name": "@k8slens/run-many",
+ "version": "1.0.0",
+ "license": "MIT",
+ "peerDependencies": {
+ "@k8slens/test-utils": "^1.0.0",
+ "@k8slens/utilities": "^1.0.0",
+ "@ogre-tools/fp": "^15.1.1",
+ "@ogre-tools/injectable": "^15.1.1"
+ }
+ },
+ "packages/utility-features/test-utils": {
+ "name": "@k8slens/test-utils",
+ "version": "1.0.0",
+ "license": "MIT"
+ },
+ "packages/utility-features/types": {
+ "version": "1.0.0",
+ "extraneous": true,
+ "license": "MIT"
+ },
+ "packages/utility-features/utilities": {
+ "name": "@k8slens/utilities",
+ "version": "1.0.0",
+ "license": "MIT",
+ "peerDependencies": {
+ "mobx": "^6.8.0",
+ "type-fest": "^2.19.0"
+ }
+ },
+ "packages/utility-features/utility-types": {
+ "name": "@k8slens/utilities",
+ "version": "1.0.0",
+ "extraneous": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "mobx": "^6.8.0",
+ "type-fest": "^2.19.0"
+ }
}
}
}
diff --git a/package.json b/package.json
index c57bb83fbd..9f0fd95c85 100644
--- a/package.json
+++ b/package.json
@@ -32,6 +32,6 @@
"adr": "^1.4.3",
"cross-env": "^7.0.3",
"lerna": "^6.5.1",
- "rimraf": "^4.1.2"
+ "rimraf": "^4.3.1"
}
}
diff --git a/packages/bump-version-for-cron/package.json b/packages/bump-version-for-cron/package.json
index 74b0b46295..206415fba6 100644
--- a/packages/bump-version-for-cron/package.json
+++ b/packages/bump-version-for-cron/package.json
@@ -1,6 +1,6 @@
{
"name": "@k8slens/bump-version-for-cron",
- "version": "6.4.0-cron.4db172da60",
+ "version": "6.5.0-alpha.0",
"description": "CLI to bump the version to during a cron daily alpha release",
"license": "MIT",
"scripts": {
@@ -23,7 +23,7 @@
},
"devDependencies": {
"@swc/cli": "^0.1.61",
- "@swc/core": "^1.3.35",
+ "@swc/core": "^1.3.37",
"@types/node": "^16.18.11",
"@types/semver": "^7.3.13",
"rimraf": "^4.1.2"
diff --git a/packages/core/package.json b/packages/core/package.json
index 476100d9bf..04ca0224c3 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -3,7 +3,7 @@
"productName": "",
"description": "Lens Desktop Core",
"homepage": "https://github.com/lensapp/lens",
- "version": "6.4.0-beta.13",
+ "version": "6.5.0-alpha.0",
"repository": {
"type": "git",
"url": "git+https://github.com/lensapp/lens.git"
@@ -57,7 +57,7 @@
"test:unit": "jest --testPathIgnorePatterns integration",
"test:watch": "func() { jest ${1} --watch --testPathIgnorePatterns integration; }; func",
"lint": "PROD=true eslint --ext js,ts,tsx --max-warnings=0 .",
- "lint:fix": "npm run lint --fix"
+ "lint:fix": "npm run lint -- --fix"
},
"config": {
"k8sProxyVersion": "0.3.0",
@@ -127,14 +127,14 @@
"@astronautlabs/jsonpath": "^1.1.0",
"@hapi/call": "^9.0.1",
"@hapi/subtext": "^7.1.0",
- "@k8slens/node-fetch": "^6.4.0-beta.13",
+ "@k8slens/node-fetch": "^6.5.0-alpha.0",
"@kubernetes/client-node": "^0.18.1",
"@material-ui/styles": "^4.11.5",
- "@ogre-tools/fp": "^12.0.1",
- "@ogre-tools/injectable": "^12.0.1",
- "@ogre-tools/injectable-extension-for-auto-registration": "^12.0.1",
- "@ogre-tools/injectable-extension-for-mobx": "^12.0.1",
- "@ogre-tools/injectable-react": "^12.0.1",
+ "@ogre-tools/fp": "^15.1.2",
+ "@ogre-tools/injectable": "^15.1.2",
+ "@ogre-tools/injectable-extension-for-auto-registration": "^15.1.2",
+ "@ogre-tools/injectable-extension-for-mobx": "^15.1.2",
+ "@ogre-tools/injectable-react": "^15.1.2",
"@sentry/electron": "^3.0.8",
"@sentry/integrations": "^6.19.3",
"@side/jest-runtime": "^1.1.0",
@@ -202,7 +202,7 @@
"@material-ui/lab": "^4.0.0-alpha.60",
"@sentry/types": "^6.19.7",
"@swc/cli": "^0.1.61",
- "@swc/core": "^1.3.35",
+ "@swc/core": "^1.3.37",
"@swc/jest": "^0.2.24",
"@testing-library/dom": "^7.31.2",
"@testing-library/jest-dom": "^5.16.5",
@@ -329,7 +329,11 @@
"xterm-addon-fit": "^0.5.0"
},
"peerDependencies": {
- "@k8slens/application": "^6.4.0-beta.13",
+ "@k8slens/application": "^6.5.0-alpha.0",
+ "@k8slens/application-for-electron-main": "^6.5.0-alpha.0",
+ "@k8slens/run-many": "^1.0.0",
+ "@k8slens/test-utils": "^1.0.0",
+ "@k8slens/utilities": "^1.0.0",
"@types/byline": "^4.2.33",
"@types/chart.js": "^2.9.36",
"@types/color": "^3.0.3",
diff --git a/packages/core/src/common/__tests__/cluster-store.test.ts b/packages/core/src/common/__tests__/cluster-store.test.ts
index 9dd1a29a5b..5b052548a5 100644
--- a/packages/core/src/common/__tests__/cluster-store.test.ts
+++ b/packages/core/src/common/__tests__/cluster-store.test.ts
@@ -8,8 +8,6 @@ import type { GetCustomKubeConfigFilePath } from "../app-paths/get-custom-kube-c
import getCustomKubeConfigFilePathInjectable from "../app-paths/get-custom-kube-config-directory/get-custom-kube-config-directory.injectable";
import clusterStoreInjectable from "../cluster-store/cluster-store.injectable";
import type { DiContainer } from "@ogre-tools/injectable";
-import type { CreateCluster } from "../cluster/create-cluster-injection-token";
-import { createClusterInjectionToken } from "../cluster/create-cluster-injection-token";
import directoryForUserDataInjectable from "../app-paths/directory-for-user-data/directory-for-user-data.injectable";
import { getDiForUnitTesting } from "../../main/getDiForUnitTesting";
import assert from "assert";
@@ -27,6 +25,7 @@ import type { WriteFileSync } from "../fs/write-file-sync.injectable";
import writeFileSyncInjectable from "../fs/write-file-sync.injectable";
import type { WriteBufferSync } from "../fs/write-buffer-sync.injectable";
import writeBufferSyncInjectable from "../fs/write-buffer-sync.injectable";
+import { Cluster } from "../cluster/cluster";
// NOTE: this is intended to read the actual file system
const testDataIcon = readFileSync("test-data/cluster-store-migration-icon.png");
@@ -58,7 +57,6 @@ users:
describe("cluster-store", () => {
let di: DiContainer;
let clusterStore: ClusterStore;
- let createCluster: CreateCluster;
let writeJsonSync: WriteJsonSync;
let writeFileSync: WriteFileSync;
let writeBufferSync: WriteBufferSync;
@@ -67,15 +65,13 @@ describe("cluster-store", () => {
let writeFileSyncAndReturnPath: (filePath: string, contents: string) => string;
beforeEach(async () => {
- di = getDiForUnitTesting({ doGeneralOverrides: true });
+ di = getDiForUnitTesting();
di.override(directoryForUserDataInjectable, () => "/some-directory-for-user-data");
di.override(directoryForTempInjectable, () => "/some-temp-directory");
di.override(kubectlBinaryNameInjectable, () => "kubectl");
di.override(kubectlDownloadingNormalizedArchInjectable, () => "amd64");
di.override(normalizedPlatformInjectable, () => "darwin");
- createCluster = di.inject(createClusterInjectionToken);
- getCustomKubeConfigFilePath = di.inject(getCustomKubeConfigFilePathInjectable);
writeJsonSync = di.inject(writeJsonSyncInjectable);
writeFileSync = di.inject(writeFileSyncInjectable);
writeBufferSync = di.inject(writeBufferSyncInjectable);
@@ -85,6 +81,8 @@ describe("cluster-store", () => {
describe("empty config", () => {
beforeEach(async () => {
+ getCustomKubeConfigFilePath = di.inject(getCustomKubeConfigFilePathInjectable);
+
writeJsonSync("/some-directory-for-user-data/lens-cluster-store.json", {});
clusterStore = di.inject(clusterStoreInjectable);
clusterStore.load();
@@ -92,7 +90,7 @@ describe("cluster-store", () => {
describe("with foo cluster added", () => {
beforeEach(() => {
- const cluster = createCluster({
+ const cluster = new Cluster({
id: "foo",
contextName: "foo",
preferences: {
@@ -198,6 +196,9 @@ describe("cluster-store", () => {
},
],
});
+
+ getCustomKubeConfigFilePath = di.inject(getCustomKubeConfigFilePathInjectable);
+
clusterStore = di.inject(clusterStoreInjectable);
clusterStore.load();
});
@@ -249,6 +250,9 @@ describe("cluster-store", () => {
},
],
});
+
+ getCustomKubeConfigFilePath = di.inject(getCustomKubeConfigFilePathInjectable);
+
clusterStore = di.inject(clusterStoreInjectable);
clusterStore.load();
});
@@ -262,6 +266,10 @@ describe("cluster-store", () => {
describe("pre 3.6.0-beta.1 config with an existing cluster", () => {
beforeEach(() => {
+ di.override(storeMigrationVersionInjectable, () => "3.6.0");
+
+ getCustomKubeConfigFilePath = di.inject(getCustomKubeConfigFilePathInjectable);
+
writeJsonSync("/some-directory-for-user-data/lens-cluster-store.json", {
__internal__: {
migrations: {
@@ -281,16 +289,15 @@ describe("cluster-store", () => {
});
writeBufferSync("/some-directory-for-user-data/icon_path", testDataIcon);
- di.override(storeMigrationVersionInjectable, () => "3.6.0");
clusterStore = di.inject(clusterStoreInjectable);
clusterStore.load();
});
it("migrates to modern format with kubeconfig in a file", async () => {
- const config = clusterStore.clustersList[0].kubeConfigPath;
+ const configPath = clusterStore.clustersList[0].kubeConfigPath.get();
- expect(readFileSync(config)).toBe(minimalValidKubeConfig);
+ expect(readFileSync(configPath)).toBe(minimalValidKubeConfig);
});
it("migrates to modern format with icon not in file", async () => {
diff --git a/packages/core/src/common/__tests__/create-resource-stack.test.ts b/packages/core/src/common/__tests__/create-resource-stack.test.ts
new file mode 100644
index 0000000000..5bf9cb1fe7
--- /dev/null
+++ b/packages/core/src/common/__tests__/create-resource-stack.test.ts
@@ -0,0 +1,61 @@
+/**
+ * Copyright (c) OpenLens Authors. All rights reserved.
+ * Licensed under MIT License. See LICENSE in root directory for more information.
+ */
+import type { DiContainer } from "@ogre-tools/injectable";
+import kubectlApplyAllInjectable from "../../main/kubectl/kubectl-apply-all.injectable";
+import { getDiForUnitTesting } from "../../main/getDiForUnitTesting";
+import type { KubernetesCluster } from "../catalog-entities";
+import readDirectoryInjectable from "../fs/read-directory.injectable";
+import readFileInjectable from "../fs/read-file.injectable";
+import createResourceStackInjectable from "../k8s/create-resource-stack.injectable";
+import appPathsStateInjectable from "../app-paths/app-paths-state.injectable";
+import directoryForUserDataInjectable from "../app-paths/directory-for-user-data/directory-for-user-data.injectable";
+
+describe("create resource stack tests", () => {
+ let di: DiContainer;
+ let cluster: KubernetesCluster;
+
+ beforeEach(async () => {
+ di = getDiForUnitTesting();
+ cluster = {
+ getId: () => "test-cluster",
+ } as any;
+
+ di.override(readDirectoryInjectable, () => () => Promise.resolve(["file1"]) as any);
+ di.override(readFileInjectable, () => () => Promise.resolve("filecontents"));
+ di.override(appPathsStateInjectable, () => ({
+ get: () => ({}),
+ }));
+ di.override(directoryForUserDataInjectable, () => "/some-directory-for-user-data");
+
+ });
+
+ describe("kubectlApplyFolder", () => {
+ it("returns response", async () => {
+ di.override(kubectlApplyAllInjectable, () => () => Promise.resolve({
+ callWasSuccessful: true as const,
+ response: "success",
+ }));
+
+ const createResourceStack = di.inject(createResourceStackInjectable);
+ const resourceStack = createResourceStack(cluster, "test");
+
+ const response = await resourceStack.kubectlApplyFolder("/foo/bar");
+
+ expect(response).toEqual("success");
+ });
+
+ it("throws on error", async () => {
+ di.override(kubectlApplyAllInjectable, () => () => Promise.resolve({
+ callWasSuccessful: false as const,
+ error: "No permissions",
+ }));
+
+ const createResourceStack = di.inject(createResourceStackInjectable);
+ const resourceStack = createResourceStack(cluster, "test");
+
+ await expect(() => resourceStack.kubectlApplyFolder("/foo/bar")).rejects.toThrow("No permissions");
+ });
+ });
+});
diff --git a/packages/core/src/common/__tests__/hotbar-store.test.ts b/packages/core/src/common/__tests__/hotbar-store.test.ts
index ac8cecc1d2..474ebc1618 100644
--- a/packages/core/src/common/__tests__/hotbar-store.test.ts
+++ b/packages/core/src/common/__tests__/hotbar-store.test.ts
@@ -43,7 +43,7 @@ describe("HotbarStore", () => {
let loggerMock: jest.Mocked;
beforeEach(async () => {
- di = getDiForUnitTesting({ doGeneralOverrides: true });
+ di = getDiForUnitTesting();
testCluster = getMockCatalogEntity({
apiVersion: "v1",
diff --git a/packages/core/src/common/__tests__/user-store.test.ts b/packages/core/src/common/__tests__/user-store.test.ts
index 7071fc5c17..fb8d020fb0 100644
--- a/packages/core/src/common/__tests__/user-store.test.ts
+++ b/packages/core/src/common/__tests__/user-store.test.ts
@@ -21,7 +21,7 @@ describe("user store tests", () => {
let di: DiContainer;
beforeEach(async () => {
- di = getDiForUnitTesting({ doGeneralOverrides: true });
+ di = getDiForUnitTesting();
di.override(writeFileInjectable, () => () => Promise.resolve());
di.override(directoryForUserDataInjectable, () => "/some-directory-for-user-data");
@@ -30,9 +30,9 @@ describe("user store tests", () => {
get: () => "latest" as const,
init: async () => {},
}));
+
await di.inject(defaultUpdateChannelInjectable).init();
- userStore = di.inject(userStoreInjectable);
});
describe("for an empty config", () => {
@@ -42,6 +42,8 @@ describe("user store tests", () => {
writeJsonSync("/some-directory-for-user-data/lens-user-store.json", {});
writeJsonSync("/some-directory-for-user-data/kube_config", {});
+ userStore = di.inject(userStoreInjectable);
+
userStore.load();
});
@@ -90,6 +92,8 @@ describe("user store tests", () => {
di.override(storeMigrationVersionInjectable, () => "10.0.0");
+ userStore = di.inject(userStoreInjectable);
+
userStore.load();
});
diff --git a/packages/core/src/common/app-paths/path-to-npm-cli.global-override-for-injectable.ts b/packages/core/src/common/app-paths/path-to-npm-cli.global-override-for-injectable.ts
index db4734994d..76a7a9b539 100644
--- a/packages/core/src/common/app-paths/path-to-npm-cli.global-override-for-injectable.ts
+++ b/packages/core/src/common/app-paths/path-to-npm-cli.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import pathToNpmCliInjectable from "./path-to-npm-cli.injectable";
export default getGlobalOverride(pathToNpmCliInjectable, () => "/some/npm/cli/path");
diff --git a/packages/core/src/common/base-store/base-store.ts b/packages/core/src/common/base-store/base-store.ts
index ecdad5bd4d..be7abf1293 100644
--- a/packages/core/src/common/base-store/base-store.ts
+++ b/packages/core/src/common/base-store/base-store.ts
@@ -7,7 +7,7 @@ import type Config from "conf";
import type { Migrations, Options as ConfOptions } from "conf/dist/source/types";
import type { IEqualsComparer } from "mobx";
import { makeObservable, reaction } from "mobx";
-import { disposer, isPromiseLike, toJS } from "../utils";
+import { disposer, isPromiseLike } from "@k8slens/utilities";
import { broadcastMessage } from "../ipc";
import isEqual from "lodash/isEqual";
import { kebabCase } from "lodash";
@@ -16,6 +16,7 @@ import type { Logger } from "../logger";
import type { PersistStateToConfig } from "./save-to-file";
import type { GetBasenameOfPath } from "../path/get-basename.injectable";
import type { EnlistMessageChannelListener } from "../utils/channel/enlist-message-channel-listener-injection-token";
+import { toJS } from "../utils";
export interface BaseStoreParams extends Omit, "migrations"> {
syncOptions?: {
diff --git a/packages/core/src/common/base-store/migrations.injectable.ts b/packages/core/src/common/base-store/migrations.injectable.ts
index 27f7489dfa..d97abee1ec 100644
--- a/packages/core/src/common/base-store/migrations.injectable.ts
+++ b/packages/core/src/common/base-store/migrations.injectable.ts
@@ -7,7 +7,7 @@ import { lifecycleEnum, getInjectable } from "@ogre-tools/injectable";
import type Conf from "conf/dist/source";
import type { Migrations } from "conf/dist/source/types";
import loggerInjectable from "../logger.injectable";
-import { getOrInsert, iter } from "../utils";
+import { getOrInsert, iter } from "@k8slens/utilities";
export interface MigrationDeclaration {
version: string;
diff --git a/packages/core/src/common/catalog-entities/__tests__/kubernetes-cluster.test.ts b/packages/core/src/common/catalog-entities/__tests__/kubernetes-cluster.test.ts
index b2814f9785..d681713a80 100644
--- a/packages/core/src/common/catalog-entities/__tests__/kubernetes-cluster.test.ts
+++ b/packages/core/src/common/catalog-entities/__tests__/kubernetes-cluster.test.ts
@@ -12,7 +12,7 @@ describe("kubernetesClusterCategory", () => {
let kubernetesClusterCategory: KubernetesClusterCategory;
beforeEach(() => {
- const di = getDiForUnitTesting({ doGeneralOverrides: true });
+ const di = getDiForUnitTesting();
kubernetesClusterCategory = di.inject(kubernetesClusterCategoryInjectable);
});
diff --git a/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/catalog-catalog-entity.injectable.ts b/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/catalog-catalog-entity.injectable.ts
index 15195a4b74..b36be73de6 100644
--- a/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/catalog-catalog-entity.injectable.ts
+++ b/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/catalog-catalog-entity.injectable.ts
@@ -5,7 +5,7 @@
import { getInjectable } from "@ogre-tools/injectable";
import { generalCatalogEntityInjectionToken } from "../general-catalog-entity-injection-token";
import { GeneralEntity } from "../../index";
-import { buildURL } from "../../../utils/buildUrl";
+import { buildURL } from "@k8slens/utilities";
import catalogRouteInjectable from "../../../front-end-routing/routes/catalog/catalog-route.injectable";
const catalogCatalogEntityInjectable = getInjectable({
diff --git a/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/welcome-catalog-entity.injectable.ts b/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/welcome-catalog-entity.injectable.ts
index 363dd73c5f..a00dcec323 100644
--- a/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/welcome-catalog-entity.injectable.ts
+++ b/packages/core/src/common/catalog-entities/general-catalog-entities/implementations/welcome-catalog-entity.injectable.ts
@@ -5,7 +5,7 @@
import { getInjectable } from "@ogre-tools/injectable";
import { generalCatalogEntityInjectionToken } from "../general-catalog-entity-injection-token";
import { GeneralEntity } from "../../index";
-import { buildURL } from "../../../utils/buildUrl";
+import { buildURL } from "@k8slens/utilities";
import welcomeRouteInjectable from "../../../front-end-routing/routes/welcome/welcome-route.injectable";
const welcomeCatalogEntityInjectable = getInjectable({
diff --git a/packages/core/src/common/catalog-entities/kubernetes-cluster.ts b/packages/core/src/common/catalog-entities/kubernetes-cluster.ts
index 57cac07122..7615c19f3e 100644
--- a/packages/core/src/common/catalog-entities/kubernetes-cluster.ts
+++ b/packages/core/src/common/catalog-entities/kubernetes-cluster.ts
@@ -13,6 +13,7 @@ import { requestClusterActivation, requestClusterDisconnection } from "../../ren
import KubeClusterCategoryIcon from "./icons/kubernetes.svg";
import getClusterByIdInjectable from "../cluster-store/get-by-id.injectable";
import { getLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
+import clusterConnectionInjectable from "../../main/cluster/cluster-connection.injectable";
export interface KubernetesClusterPrometheusMetrics {
address?: {
@@ -79,8 +80,15 @@ export class KubernetesCluster<
if (app) {
const di = getLegacyGlobalDiForExtensionApi();
const getClusterById = di.inject(getClusterByIdInjectable);
+ const cluster = getClusterById(this.getId());
- await getClusterById(this.getId())?.activate();
+ if (!cluster) {
+ return;
+ }
+
+ const connectionCluster = di.inject(clusterConnectionInjectable, cluster);
+
+ await connectionCluster.activate();
} else {
await requestClusterActivation(this.getId(), false);
}
@@ -90,8 +98,15 @@ export class KubernetesCluster<
if (app) {
const di = getLegacyGlobalDiForExtensionApi();
const getClusterById = di.inject(getClusterByIdInjectable);
+ const cluster = getClusterById(this.getId());
- getClusterById(this.getId())?.disconnect();
+ if (!cluster) {
+ return;
+ }
+
+ const connectionCluster = di.inject(clusterConnectionInjectable, cluster);
+
+ connectionCluster.disconnect();
} else {
await requestClusterDisconnection(this.getId(), false);
}
@@ -127,7 +142,13 @@ export class KubernetesCluster<
context.menuItems.push({
title: "Disconnect",
icon: "link_off",
- onClick: () => requestClusterDisconnection(this.getId()),
+ onClick: () => {
+ requestClusterDisconnection(this.getId());
+ broadcastMessage(
+ IpcRendererNavigationEvents.NAVIGATE_IN_APP,
+ "/catalog",
+ );
+ },
});
break;
case LensKubernetesClusterStatus.DISCONNECTED:
diff --git a/packages/core/src/common/catalog-entities/web-link.ts b/packages/core/src/common/catalog-entities/web-link.ts
index 7c83051c8b..833f05d65b 100644
--- a/packages/core/src/common/catalog-entities/web-link.ts
+++ b/packages/core/src/common/catalog-entities/web-link.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { Environments, getEnvironmentSpecificLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
+import { getEnvironmentSpecificLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
import type { CatalogEntityContextMenuContext, CatalogEntityMetadata, CatalogEntityStatus } from "../catalog";
import { CatalogCategory, CatalogEntity, categoryVersion } from "../catalog/catalog-entity";
import productNameInjectable from "../vars/product-name.injectable";
@@ -32,7 +32,7 @@ export class WebLink extends CatalogEntity;
+ labels: Partial>;
}
export interface CatalogEntityStatus {
diff --git a/packages/core/src/common/catalog/category-registry.ts b/packages/core/src/common/catalog/category-registry.ts
index 75c33d8a10..f541645df0 100644
--- a/packages/core/src/common/catalog/category-registry.ts
+++ b/packages/core/src/common/catalog/category-registry.ts
@@ -5,8 +5,8 @@
import { action, computed, observable, makeObservable } from "mobx";
import { once } from "lodash";
-import { iter, getOrInsertMap, strictSet } from "../utils";
-import type { Disposer } from "../utils";
+import { iter, getOrInsertMap, strictSet } from "@k8slens/utilities";
+import type { Disposer } from "@k8slens/utilities";
import type { CatalogCategory, CatalogEntityData, CatalogEntityKindData } from "./catalog-entity";
export type CategoryFilter = (category: CatalogCategory) => any;
@@ -34,6 +34,10 @@ export class CatalogCategoryRegistry {
};
}
+ getById(id: string) {
+ return iter.find(this.categories.values(), (category) => category.getId() === id);
+ }
+
@computed get items() {
return Array.from(this.categories);
}
diff --git a/packages/core/src/common/certificate/lens-proxy-certificate.global-override-for-injectable.ts b/packages/core/src/common/certificate/lens-proxy-certificate.global-override-for-injectable.ts
index d547516062..4d0aeec1d8 100644
--- a/packages/core/src/common/certificate/lens-proxy-certificate.global-override-for-injectable.ts
+++ b/packages/core/src/common/certificate/lens-proxy-certificate.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import lensProxyCertificateInjectable from "./lens-proxy-certificate.injectable";
export default getGlobalOverride(lensProxyCertificateInjectable, () => {
diff --git a/packages/core/src/common/cluster-store/cluster-store.injectable.ts b/packages/core/src/common/cluster-store/cluster-store.injectable.ts
index 9712e3fdb0..ddd811c760 100644
--- a/packages/core/src/common/cluster-store/cluster-store.injectable.ts
+++ b/packages/core/src/common/cluster-store/cluster-store.injectable.ts
@@ -4,7 +4,6 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import { ClusterStore } from "./cluster-store";
-import { createClusterInjectionToken } from "../cluster/create-cluster-injection-token";
import readClusterConfigSyncInjectable from "./read-cluster-config.injectable";
import emitAppEventInjectable from "../app-event-bus/emit-event.injectable";
import directoryForUserDataInjectable from "../app-paths/directory-for-user-data/directory-for-user-data.injectable";
@@ -23,7 +22,6 @@ const clusterStoreInjectable = getInjectable({
id: "cluster-store",
instantiate: (di) => new ClusterStore({
- createCluster: di.inject(createClusterInjectionToken),
readClusterConfigSync: di.inject(readClusterConfigSyncInjectable),
emitAppEvent: di.inject(emitAppEventInjectable),
directoryForUserData: di.inject(directoryForUserDataInjectable),
diff --git a/packages/core/src/common/cluster-store/cluster-store.ts b/packages/core/src/common/cluster-store/cluster-store.ts
index 20929cf77e..8d283411c9 100644
--- a/packages/core/src/common/cluster-store/cluster-store.ts
+++ b/packages/core/src/common/cluster-store/cluster-store.ts
@@ -10,7 +10,6 @@ import { BaseStore } from "../base-store/base-store";
import { Cluster } from "../cluster/cluster";
import { toJS } from "../utils";
import type { ClusterModel, ClusterId } from "../cluster-types";
-import type { CreateCluster } from "../cluster/create-cluster-injection-token";
import type { ReadClusterConfigSync } from "./read-cluster-config.injectable";
import type { EmitAppEvent } from "../app-event-bus/emit-event.injectable";
@@ -19,7 +18,6 @@ export interface ClusterStoreModel {
}
interface Dependencies extends BaseStoreDependencies {
- createCluster: CreateCluster;
readClusterConfigSync: ReadClusterConfigSync;
emitAppEvent: EmitAppEvent;
}
@@ -64,7 +62,7 @@ export class ClusterStore extends BaseStore {
const cluster = clusterOrModel instanceof Cluster
? clusterOrModel
- : this.dependencies.createCluster(
+ : new Cluster(
clusterOrModel,
this.dependencies.readClusterConfigSync(clusterOrModel),
);
@@ -87,7 +85,7 @@ export class ClusterStore extends BaseStore {
if (cluster) {
cluster.updateModel(clusterModel);
} else {
- cluster = this.dependencies.createCluster(
+ cluster = new Cluster(
clusterModel,
this.dependencies.readClusterConfigSync(clusterModel),
);
diff --git a/packages/core/src/common/cluster-types.ts b/packages/core/src/common/cluster-types.ts
index 3e904a385e..ba01489152 100644
--- a/packages/core/src/common/cluster-types.ts
+++ b/packages/core/src/common/cluster-types.ts
@@ -39,10 +39,6 @@ export const updateClusterModelChecker = Joi.object({
contextName: Joi.string()
.required()
.min(1),
- workspace: Joi.string()
- .optional(),
- workspaces: Joi.array()
- .items(Joi.string()),
preferences: Joi.object(),
metadata: Joi.object(),
accessibleNamespaces: Joi.array()
@@ -70,18 +66,6 @@ export interface ClusterModel {
/** Path to cluster kubeconfig */
kubeConfigPath: string;
- /**
- * Workspace id
- *
- * @deprecated
- */
- workspace?: string;
-
- /**
- * @deprecated this is used only for hotbar migrations from 4.2.X
- */
- workspaces?: string[];
-
/** User context in kubeconfig */
contextName: string;
@@ -97,7 +81,7 @@ export interface ClusterModel {
/**
* Labels for the catalog entity
*/
- labels?: Record;
+ labels?: Partial>;
}
/**
@@ -206,6 +190,6 @@ export interface ClusterState {
ready: boolean;
isAdmin: boolean;
allowedNamespaces: string[];
- allowedResources: string[];
+ resourcesToShow: string[];
isGlobalWatchEnabled: boolean;
}
diff --git a/packages/core/src/common/cluster/authorization-review.injectable.ts b/packages/core/src/common/cluster/authorization-review.injectable.ts
index 4c9b83330d..3352423377 100644
--- a/packages/core/src/common/cluster/authorization-review.injectable.ts
+++ b/packages/core/src/common/cluster/authorization-review.injectable.ts
@@ -6,7 +6,6 @@
import type { KubeConfig, V1ResourceAttributes } from "@kubernetes/client-node";
import { AuthorizationV1Api } from "@kubernetes/client-node";
import { getInjectable } from "@ogre-tools/injectable";
-import type { Logger } from "../logger";
import loggerInjectable from "../logger.injectable";
/**
@@ -19,41 +18,33 @@ export type CanI = (resourceAttributes: V1ResourceAttributes) => Promise CanI;
+export type CreateAuthorizationReview = (proxyConfig: KubeConfig) => CanI;
-interface Dependencies {
- logger: Logger;
-}
-
-const authorizationReview = ({ logger }: Dependencies): AuthorizationReview => {
- return (proxyConfig) => {
- const api = proxyConfig.makeApiClient(AuthorizationV1Api);
-
- return async (resourceAttributes: V1ResourceAttributes): Promise => {
- try {
- const { body } = await api.createSelfSubjectAccessReview({
- apiVersion: "authorization.k8s.io/v1",
- kind: "SelfSubjectAccessReview",
- spec: { resourceAttributes },
- });
-
- return body.status?.allowed ?? false;
- } catch (error) {
- logger.error(`[AUTHORIZATION-REVIEW]: failed to create access review: ${error}`, { resourceAttributes });
-
- return false;
- }
- };
- };
-};
-
-const authorizationReviewInjectable = getInjectable({
+const createAuthorizationReviewInjectable = getInjectable({
id: "authorization-review",
- instantiate: (di) => {
+ instantiate: (di): CreateAuthorizationReview => {
const logger = di.inject(loggerInjectable);
- return authorizationReview({ logger });
+ return (proxyConfig) => {
+ const api = proxyConfig.makeApiClient(AuthorizationV1Api);
+
+ return async (resourceAttributes: V1ResourceAttributes): Promise => {
+ try {
+ const { body } = await api.createSelfSubjectAccessReview({
+ apiVersion: "authorization.k8s.io/v1",
+ kind: "SelfSubjectAccessReview",
+ spec: { resourceAttributes },
+ });
+
+ return body.status?.allowed ?? false;
+ } catch (error) {
+ logger.error(`[AUTHORIZATION-REVIEW]: failed to create access review: ${error}`, { resourceAttributes });
+
+ return false;
+ }
+ };
+ };
},
});
-export default authorizationReviewInjectable;
+export default createAuthorizationReviewInjectable;
diff --git a/packages/core/src/common/cluster/cluster.ts b/packages/core/src/common/cluster/cluster.ts
index f00d9c3f89..fc66d9aa29 100644
--- a/packages/core/src/common/cluster/cluster.ts
+++ b/packages/core/src/common/cluster/cluster.ts
@@ -3,164 +3,74 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { action, comparer, computed, makeObservable, observable, reaction, runInAction, when } from "mobx";
-import type { ClusterContextHandler } from "../../main/context-handler/context-handler";
-import type { KubeConfig } from "@kubernetes/client-node";
-import { HttpError } from "@kubernetes/client-node";
-import type { Kubectl } from "../../main/kubectl/kubectl";
-import type { KubeconfigManager } from "../../main/kubeconfig-manager/kubeconfig-manager";
-import type { KubeApiResource, KubeApiResourceDescriptor } from "../rbac";
-import { formatKubeApiResource } from "../rbac";
-import plimit from "p-limit";
-import type { ClusterState, ClusterMetricsResourceType, ClusterId, ClusterMetadata, ClusterModel, ClusterPreferences, ClusterPrometheusPreferences, UpdateClusterModel, KubeAuthUpdate, ClusterConfigData } from "../cluster-types";
-import { ClusterMetadataKey, initialNodeShellImage, ClusterStatus, clusterModelIdChecker, updateClusterModelChecker } from "../cluster-types";
-import { disposer, isDefined, isRequestError, toJS } from "../utils";
-import { clusterListNamespaceForbiddenChannel } from "../ipc/cluster";
-import type { CanI } from "./authorization-review.injectable";
-import type { ListNamespaces } from "./list-namespaces.injectable";
-import assert from "assert";
-import type { Logger } from "../logger";
-import type { BroadcastMessage } from "../ipc/broadcast-message.injectable";
-import type { LoadConfigfromFile } from "../kube-helpers/load-config-from-file.injectable";
-import type { CanListResource, RequestNamespaceListPermissions, RequestNamespaceListPermissionsFor } from "./request-namespace-list-permissions.injectable";
-import type { RequestApiResources } from "../../main/cluster/request-api-resources.injectable";
-import type { DetectClusterMetadata } from "../../main/cluster-detectors/detect-cluster-metadata.injectable";
-import type { FalibleOnlyClusterMetadataDetector } from "../../main/cluster-detectors/token";
+import { computed, observable, toJS, runInAction } from "mobx";
+import type { KubeApiResource } from "../rbac";
+import type { ClusterState, ClusterId, ClusterMetadata, ClusterModel, ClusterPreferences, ClusterPrometheusPreferences, UpdateClusterModel, ClusterConfigData } from "../cluster-types";
+import { ClusterMetadataKey, clusterModelIdChecker, updateClusterModelChecker } from "../cluster-types";
+import type { IObservableValue } from "mobx";
+import { replaceObservableObject } from "../utils/replace-observable-object";
+import { pick } from "lodash";
-export interface ClusterDependencies {
- readonly directoryForKubeConfigs: string;
- readonly logger: Logger;
- readonly clusterVersionDetector: FalibleOnlyClusterMetadataDetector;
- detectClusterMetadata: DetectClusterMetadata;
- createKubeconfigManager: (cluster: Cluster) => KubeconfigManager;
- createContextHandler: (cluster: Cluster) => ClusterContextHandler;
- createKubectl: (clusterVersion: string) => Kubectl;
- createAuthorizationReview: (config: KubeConfig) => CanI;
- requestApiResources: RequestApiResources;
- requestNamespaceListPermissionsFor: RequestNamespaceListPermissionsFor;
- createListNamespaces: (config: KubeConfig) => ListNamespaces;
- broadcastMessage: BroadcastMessage;
- loadConfigfromFile: LoadConfigfromFile;
-}
-
-/**
- * Cluster
- *
- * @beta
- */
-export class Cluster implements ClusterModel {
- /** Unique id for a cluster */
- public readonly id: ClusterId;
- private kubeCtl: Kubectl | undefined;
+export class Cluster {
/**
- * Context handler
- *
- * @internal
+ * Unique id for a cluster
*/
- protected readonly _contextHandler: ClusterContextHandler | undefined;
- protected readonly _proxyKubeconfigManager: KubeconfigManager | undefined;
- protected readonly eventsDisposer = disposer();
- protected activated = false;
-
- public get contextHandler() {
- // TODO: remove these once main/renderer are seperate classes
- assert(this._contextHandler, "contextHandler is only defined in the main environment");
-
- return this._contextHandler;
- }
-
- protected get proxyKubeconfigManager() {
- // TODO: remove these once main/renderer are seperate classes
- assert(this._proxyKubeconfigManager, "proxyKubeconfigManager is only defined in the main environment");
-
- return this._proxyKubeconfigManager;
- }
-
- get whenReady() {
- return when(() => this.ready);
- }
+ readonly id: ClusterId;
/**
* Kubeconfig context name
- *
- * @observable
*/
- @observable contextName!: string;
+ readonly contextName = observable.box() as IObservableValue;
+
/**
* Path to kubeconfig
- *
- * @observable
*/
- @observable kubeConfigPath!: string;
- /**
- * @deprecated
- */
- @observable workspace?: string;
- /**
- * @deprecated
- */
- @observable workspaces?: string[];
+ readonly kubeConfigPath = observable.box() as IObservableValue;
+
/**
* Kubernetes API server URL
- *
- * @observable
*/
- @observable apiUrl: string; // cluster server url
+ readonly apiUrl: IObservableValue;
+
/**
- * Is cluster online
- *
- * @observable
+ * Describes if we can detect that cluster is online
*/
- @observable online = false; // describes if we can detect that cluster is online
+ readonly online = observable.box(false);
+
/**
- * Can user access cluster resources
- *
- * @observable
+ * Describes if user is able to access cluster resources
*/
- @observable accessible = false; // if user is able to access cluster resources
+ readonly accessible = observable.box(false);
+
/**
* Is cluster instance in usable state
- *
- * @observable
*/
- @observable ready = false; // cluster is in usable state
- /**
- * Is cluster currently reconnecting
- *
- * @observable
- */
- @observable reconnecting = false;
+ readonly ready = observable.box(false);
+
/**
* Is cluster disconnected. False if user has selected to connect.
- *
- * @observable
*/
- @observable disconnected = true;
+ readonly disconnected = observable.box(true);
+
/**
* Does user have admin like access
- *
- * @observable
*/
- @observable isAdmin = false;
+ readonly isAdmin = observable.box(false);
/**
* Global watch-api accessibility , e.g. "/api/v1/services?watch=1"
- *
- * @observable
*/
- @observable isGlobalWatchEnabled = false;
+ readonly isGlobalWatchEnabled = observable.box(false);
+
/**
* Preferences
- *
- * @observable
*/
- @observable preferences: ClusterPreferences = {};
+ readonly preferences = observable.object({});
+
/**
* Metadata
- *
- * @observable
*/
- @observable metadata: ClusterMetadata = {};
+ readonly metadata = observable.object({});
/**
* List of allowed namespaces verified via K8S::SelfSubjectAccessReview api
@@ -172,73 +82,47 @@ export class Cluster implements ClusterModel {
*/
readonly accessibleNamespaces = observable.array();
- private readonly knownResources = observable.array();
+ /**
+ * The list of all known resources associated with this cluster
+ */
+ readonly knownResources = observable.array();
- // The formatting of this is `group.name` or `name` (if in core)
- private readonly allowedResources = observable.set();
+ /**
+ * The formatting of this is `group.name` or `name` (if in core)
+ */
+ readonly resourcesToShow = observable.set();
/**
* Labels for the catalog entity
*/
- @observable labels: Record = {};
+ readonly labels = observable.object>>({});
/**
* Is cluster available
- *
- * @computed
*/
- @computed get available() {
- return this.accessible && !this.disconnected;
- }
+ readonly available = computed(() => this.accessible.get() && !this.disconnected.get());
/**
* Cluster name
- *
- * @computed
*/
- @computed get name() {
- return this.preferences.clusterName || this.contextName;
- }
+ readonly name = computed(() => this.preferences.clusterName || this.contextName.get());
/**
* The detected kubernetes distribution
*/
- @computed get distribution(): string {
- return this.metadata[ClusterMetadataKey.DISTRIBUTION]?.toString() || "unknown";
- }
+ readonly distribution = computed(() => this.metadata[ClusterMetadataKey.DISTRIBUTION]?.toString() || "unknown");
/**
* The detected kubernetes version
*/
- @computed get version(): string {
- return this.metadata[ClusterMetadataKey.VERSION]?.toString() || "unknown";
- }
+ readonly version = computed(() => this.metadata[ClusterMetadataKey.VERSION]?.toString() || "unknown");
/**
* Prometheus preferences
- *
- * @computed
- * @internal
*/
- @computed get prometheusPreferences(): ClusterPrometheusPreferences {
- const { prometheus, prometheusProvider } = this.preferences;
-
- return toJS({ prometheus, prometheusProvider });
- }
-
- /**
- * defaultNamespace preference
- *
- * @computed
- * @internal
- */
- @computed get defaultNamespace(): string | undefined {
- return this.preferences.defaultNamespace;
- }
-
- constructor(private readonly dependencies: ClusterDependencies, { id, ...model }: ClusterModel, configData: ClusterConfigData) {
- makeObservable(this);
+ readonly prometheusPreferences = computed(() => pick(toJS(this.preferences), "prometheus", "prometheusProvider") as ClusterPrometheusPreferences);
+ constructor({ id, ...model }: ClusterModel, configData: ClusterConfigData) {
const { error } = clusterModelIdChecker.validate({ id });
if (error) {
@@ -247,16 +131,7 @@ export class Cluster implements ClusterModel {
this.id = id;
this.updateModel(model);
- this.apiUrl = configData.clusterServerUrl;
-
- // for the time being, until renderer gets its own cluster type
- this._contextHandler = this.dependencies.createContextHandler(this);
- this._proxyKubeconfigManager = this.dependencies.createKubeconfigManager(this);
- this.dependencies.logger.debug(`[CLUSTER]: Cluster init success`, {
- id: this.id,
- context: this.contextName,
- apiUrl: this.apiUrl,
- });
+ this.apiUrl = observable.box(configData.clusterServerUrl);
}
/**
@@ -264,7 +139,7 @@ export class Cluster implements ClusterModel {
*
* @param model
*/
- @action updateModel(model: UpdateClusterModel) {
+ updateModel(model: UpdateClusterModel) {
// Note: do not assign ID as that should never be updated
const { error } = updateClusterModelChecker.validate(model, { allowUnknown: true });
@@ -273,448 +148,83 @@ export class Cluster implements ClusterModel {
throw error;
}
- this.kubeConfigPath = model.kubeConfigPath;
- this.contextName = model.contextName;
-
- if (model.workspace) {
- this.workspace = model.workspace;
- }
-
- if (model.workspaces) {
- this.workspaces = model.workspaces;
- }
-
- if (model.preferences) {
- this.preferences = model.preferences;
- }
-
- if (model.metadata) {
- this.metadata = model.metadata;
- }
-
- if (model.accessibleNamespaces) {
- this.accessibleNamespaces.replace(model.accessibleNamespaces);
- }
-
- if (model.labels) {
- this.labels = model.labels;
- }
- }
-
- /**
- * @internal
- */
- protected bindEvents() {
- this.dependencies.logger.info(`[CLUSTER]: bind events`, this.getMeta());
- const refreshTimer = setInterval(() => !this.disconnected && this.refresh(), 30000); // every 30s
- const refreshMetadataTimer = setInterval(() => this.available && this.refreshAccessibilityAndMetadata(), 900000); // every 15 minutes
-
- this.eventsDisposer.push(
- reaction(
- () => this.prometheusPreferences,
- prefs => this.contextHandler.setupPrometheus(prefs),
- { equals: comparer.structural },
- ),
- () => clearInterval(refreshTimer),
- () => clearInterval(refreshMetadataTimer),
- reaction(() => this.defaultNamespace, () => this.recreateProxyKubeconfig()),
- );
- }
-
- /**
- * @internal
- */
- protected async recreateProxyKubeconfig() {
- this.dependencies.logger.info("[CLUSTER]: Recreating proxy kubeconfig");
-
- try {
- await this.proxyKubeconfigManager.clear();
- await this.getProxyKubeconfig();
- } catch (error) {
- this.dependencies.logger.error(`[CLUSTER]: failed to recreate proxy kubeconfig`, error);
- }
- }
-
- /**
- * @param force force activation
- * @internal
- */
- @action
- async activate(force = false) {
- if (this.activated && !force) {
- return;
- }
-
- this.dependencies.logger.info(`[CLUSTER]: activate`, this.getMeta());
-
- if (!this.eventsDisposer.length) {
- this.bindEvents();
- }
-
- if (this.disconnected || !this.accessible) {
- try {
- this.broadcastConnectUpdate("Starting connection ...");
- await this.reconnect();
- } catch (error) {
- this.broadcastConnectUpdate(`Failed to start connection: ${error}`, "error");
-
- return;
- }
- }
-
- try {
- this.broadcastConnectUpdate("Refreshing connection status ...");
- await this.refreshConnectionStatus();
- } catch (error) {
- this.broadcastConnectUpdate(`Failed to connection status: ${error}`, "error");
-
- return;
- }
-
- if (this.accessible) {
- try {
- this.broadcastConnectUpdate("Refreshing cluster accessibility ...");
- await this.refreshAccessibility();
- } catch (error) {
- this.broadcastConnectUpdate(`Failed to refresh accessibility: ${error}`, "error");
-
- return;
- }
-
- // download kubectl in background, so it's not blocking dashboard
- this.ensureKubectl()
- .catch(error => this.dependencies.logger.warn(`[CLUSTER]: failed to download kubectl for clusterId=${this.id}`, error));
- this.broadcastConnectUpdate("Connected, waiting for view to load ...");
- }
-
- this.activated = true;
- }
-
- /**
- * @internal
- */
- async ensureKubectl() {
- this.kubeCtl ??= this.dependencies.createKubectl(this.version);
-
- await this.kubeCtl.ensureKubectl();
-
- return this.kubeCtl;
- }
-
- /**
- * @internal
- */
- @action
- async reconnect() {
- this.dependencies.logger.info(`[CLUSTER]: reconnect`, this.getMeta());
- await this.contextHandler?.restartServer();
- this.disconnected = false;
- }
-
- /**
- * @internal
- */
- @action disconnect(): void {
- if (this.disconnected) {
- return void this.dependencies.logger.debug("[CLUSTER]: already disconnected", { id: this.id });
- }
-
- this.dependencies.logger.info(`[CLUSTER]: disconnecting`, { id: this.id });
- this.eventsDisposer();
- this.contextHandler?.stopServer();
- this.disconnected = true;
- this.online = false;
- this.accessible = false;
- this.ready = false;
- this.activated = false;
- this.allowedNamespaces.clear();
- this.dependencies.logger.info(`[CLUSTER]: disconnected`, { id: this.id });
- }
-
- /**
- * @internal
- */
- @action
- async refresh() {
- this.dependencies.logger.info(`[CLUSTER]: refresh`, this.getMeta());
- await this.refreshConnectionStatus();
- }
-
- /**
- * @internal
- */
- @action
- async refreshAccessibilityAndMetadata() {
- await this.refreshAccessibility();
- await this.refreshMetadata();
- }
-
- /**
- * @internal
- */
- async refreshMetadata() {
- this.dependencies.logger.info(`[CLUSTER]: refreshMetadata`, this.getMeta());
-
- const newMetadata = await this.dependencies.detectClusterMetadata(this);
-
runInAction(() => {
- this.metadata = {
- ...this.metadata,
- ...newMetadata,
- };
- });
- }
+ this.kubeConfigPath.set(model.kubeConfigPath);
+ this.contextName.set(model.contextName);
- /**
- * @internal
- */
- private async refreshAccessibility(): Promise {
- this.dependencies.logger.info(`[CLUSTER]: refreshAccessibility`, this.getMeta());
- const proxyConfig = await this.getProxyKubeconfig();
- const canI = this.dependencies.createAuthorizationReview(proxyConfig);
- const requestNamespaceListPermissions = this.dependencies.requestNamespaceListPermissionsFor(proxyConfig);
-
- this.isAdmin = await canI({
- namespace: "kube-system",
- resource: "*",
- verb: "create",
- });
- this.isGlobalWatchEnabled = await canI({
- verb: "watch",
- resource: "*",
- });
- this.allowedNamespaces.replace(await this.requestAllowedNamespaces(proxyConfig));
-
- const knownResources = await this.dependencies.requestApiResources(this);
-
- if (knownResources.callWasSuccessful) {
- this.knownResources.replace(knownResources.response);
- } else if (this.knownResources.length > 0) {
- this.dependencies.logger.warn(`[CLUSTER]: failed to list KUBE resources, sticking with previous list`);
- } else {
- this.dependencies.logger.warn(`[CLUSTER]: failed to list KUBE resources for the first time, blocking connection to cluster...`);
- this.broadcastConnectUpdate("Failed to list kube API resources, please reconnect...", "error");
- }
-
- this.allowedResources.replace(await this.getAllowedResources(requestNamespaceListPermissions));
- this.ready = this.knownResources.length > 0;
- }
-
- /**
- * @internal
- */
- @action
- async refreshConnectionStatus() {
- const connectionStatus = await this.getConnectionStatus();
-
- this.online = connectionStatus > ClusterStatus.Offline;
- this.accessible = connectionStatus == ClusterStatus.AccessGranted;
- }
-
- async getKubeconfig(): Promise {
- const { config } = await this.dependencies.loadConfigfromFile(this.kubeConfigPath);
-
- return config;
- }
-
- /**
- * @internal
- */
- async getProxyKubeconfig(): Promise {
- const proxyKCPath = await this.getProxyKubeconfigPath();
- const { config } = await this.dependencies.loadConfigfromFile(proxyKCPath);
-
- return config;
- }
-
- /**
- * @internal
- */
- async getProxyKubeconfigPath(): Promise {
- return this.proxyKubeconfigManager.getPath();
- }
-
- protected async getConnectionStatus(): Promise {
- try {
- const versionData = await this.dependencies.clusterVersionDetector.detect(this);
-
- this.metadata.version = versionData.value;
-
- return ClusterStatus.AccessGranted;
- } catch (error) {
- this.dependencies.logger.error(`[CLUSTER]: Failed to connect to "${this.contextName}": ${error}`);
-
- if (isRequestError(error)) {
- if (error.statusCode) {
- if (error.statusCode >= 400 && error.statusCode < 500) {
- this.broadcastConnectUpdate("Invalid credentials", "error");
-
- return ClusterStatus.AccessDenied;
- }
-
- const message = String(error.error || error.message) || String(error);
-
- this.broadcastConnectUpdate(message, "error");
-
- return ClusterStatus.Offline;
- }
-
- if (error.failed === true) {
- if (error.timedOut === true) {
- this.broadcastConnectUpdate("Connection timed out", "error");
-
- return ClusterStatus.Offline;
- }
-
- this.broadcastConnectUpdate("Failed to fetch credentials", "error");
-
- return ClusterStatus.AccessDenied;
- }
-
- const message = String(error.error || error.message) || String(error);
-
- this.broadcastConnectUpdate(message, "error");
- } else if (error instanceof Error || typeof error === "string") {
- this.broadcastConnectUpdate(`${error}`, "error");
- } else {
- this.broadcastConnectUpdate("Unknown error has occurred", "error");
+ if (model.preferences) {
+ replaceObservableObject(this.preferences, model.preferences);
}
- return ClusterStatus.Offline;
- }
+ if (model.metadata) {
+ replaceObservableObject(this.metadata, model.metadata);
+ }
+
+ if (model.accessibleNamespaces) {
+ this.accessibleNamespaces.replace(model.accessibleNamespaces);
+ }
+
+ if (model.labels) {
+ replaceObservableObject(this.labels, model.labels);
+ }
+ });
}
toJSON(): ClusterModel {
- return toJS({
+ return {
id: this.id,
- contextName: this.contextName,
- kubeConfigPath: this.kubeConfigPath,
- workspace: this.workspace,
- workspaces: this.workspaces,
- preferences: this.preferences,
- metadata: this.metadata,
- accessibleNamespaces: this.accessibleNamespaces,
- labels: this.labels,
- });
+ contextName: this.contextName.get(),
+ kubeConfigPath: this.kubeConfigPath.get(),
+ preferences: toJS(this.preferences),
+ metadata: toJS(this.metadata),
+ accessibleNamespaces: this.accessibleNamespaces.toJSON(),
+ labels: toJS(this.labels),
+ };
}
/**
* Serializable cluster-state used for sync btw main <-> renderer
*/
getState(): ClusterState {
- return toJS({
- apiUrl: this.apiUrl,
- online: this.online,
- ready: this.ready,
- disconnected: this.disconnected,
- accessible: this.accessible,
- isAdmin: this.isAdmin,
- allowedNamespaces: this.allowedNamespaces,
- allowedResources: [...this.allowedResources],
- isGlobalWatchEnabled: this.isGlobalWatchEnabled,
- });
+ return {
+ apiUrl: this.apiUrl.get(),
+ online: this.online.get(),
+ ready: this.ready.get(),
+ disconnected: this.disconnected.get(),
+ accessible: this.accessible.get(),
+ isAdmin: this.isAdmin.get(),
+ allowedNamespaces: this.allowedNamespaces.toJSON(),
+ resourcesToShow: this.resourcesToShow.toJSON(),
+ isGlobalWatchEnabled: this.isGlobalWatchEnabled.get(),
+ };
}
/**
- * @internal
* @param state cluster state
*/
- @action setState(state: ClusterState) {
- this.accessible = state.accessible;
- this.allowedNamespaces.replace(state.allowedNamespaces);
- this.allowedResources.replace(state.allowedResources);
- this.apiUrl = state.apiUrl;
- this.disconnected = state.disconnected;
- this.isAdmin = state.isAdmin;
- this.isGlobalWatchEnabled = state.isGlobalWatchEnabled;
- this.online = state.online;
- this.ready = state.ready;
+ setState(state: ClusterState) {
+ runInAction(() => {
+ this.accessible.set(state.accessible);
+ this.allowedNamespaces.replace(state.allowedNamespaces);
+ this.resourcesToShow.replace(state.resourcesToShow);
+ this.apiUrl.set(state.apiUrl);
+ this.disconnected.set(state.disconnected);
+ this.isAdmin.set(state.isAdmin);
+ this.isGlobalWatchEnabled.set(state.isGlobalWatchEnabled);
+ this.online.set(state.online);
+ this.ready.set(state.ready);
+ });
}
// get cluster system meta, e.g. use in "logger"
getMeta() {
return {
id: this.id,
- name: this.contextName,
- ready: this.ready,
- online: this.online,
- accessible: this.accessible,
- disconnected: this.disconnected,
+ name: this.contextName.get(),
+ ready: this.ready.get(),
+ online: this.online.get(),
+ accessible: this.accessible.get(),
+ disconnected: this.disconnected.get(),
};
}
-
- /**
- * broadcast an authentication update concerning this cluster
- * @internal
- */
- broadcastConnectUpdate(message: string, level: KubeAuthUpdate["level"] = "info"): void {
- const update: KubeAuthUpdate = { message, level };
-
- this.dependencies.logger.debug(`[CLUSTER]: broadcasting connection update`, { ...update, meta: this.getMeta() });
- this.dependencies.broadcastMessage(`cluster:${this.id}:connection-update`, update);
- }
-
- protected async requestAllowedNamespaces(proxyConfig: KubeConfig) {
- if (this.accessibleNamespaces.length) {
- return this.accessibleNamespaces;
- }
-
- try {
- const listNamespaces = this.dependencies.createListNamespaces(proxyConfig);
-
- return await listNamespaces();
- } catch (error) {
- const ctx = proxyConfig.getContextObject(this.contextName);
- const namespaceList = [ctx?.namespace].filter(isDefined);
-
- if (namespaceList.length === 0 && error instanceof HttpError && error.statusCode === 403) {
- const { response } = error as HttpError & { response: { body: unknown }};
-
- this.dependencies.logger.info("[CLUSTER]: listing namespaces is forbidden, broadcasting", { clusterId: this.id, error: response.body });
- this.dependencies.broadcastMessage(clusterListNamespaceForbiddenChannel, this.id);
- }
-
- return namespaceList;
- }
- }
-
- protected async getAllowedResources(requestNamespaceListPermissions: RequestNamespaceListPermissions) {
- if (!this.allowedNamespaces.length || !this.knownResources.length) {
- return [];
- }
-
- try {
- const apiLimit = plimit(5); // 5 concurrent api requests
- const canListResourceCheckers = await Promise.all((
- this.allowedNamespaces.map(namespace => apiLimit(() => requestNamespaceListPermissions(namespace)))
- ));
- const canListNamespacedResource: CanListResource = (resource) => canListResourceCheckers.some(fn => fn(resource));
-
- return this.knownResources
- .filter(canListNamespacedResource)
- .map(formatKubeApiResource);
- } catch (error) {
- return [];
- }
- }
-
- shouldShowResource(resource: KubeApiResourceDescriptor): boolean {
- return this.allowedResources.has(formatKubeApiResource(resource));
- }
-
- isMetricHidden(resource: ClusterMetricsResourceType): boolean {
- return Boolean(this.preferences.hiddenMetrics?.includes(resource));
- }
-
- get nodeShellImage(): string {
- return this.preferences?.nodeShellImage || initialNodeShellImage;
- }
-
- get imagePullSecret(): string | undefined {
- return this.preferences?.imagePullSecret;
- }
-
- isInLocalKubeconfig() {
- return this.kubeConfigPath.startsWith(this.dependencies.directoryForKubeConfigs);
- }
}
diff --git a/packages/core/src/common/cluster/create-cluster-injection-token.ts b/packages/core/src/common/cluster/create-cluster-injection-token.ts
deleted file mode 100644
index a07ce4459f..0000000000
--- a/packages/core/src/common/cluster/create-cluster-injection-token.ts
+++ /dev/null
@@ -1,13 +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 { ClusterConfigData, ClusterModel } from "../cluster-types";
-import type { Cluster } from "./cluster";
-
-export type CreateCluster = (model: ClusterModel, configData: ClusterConfigData) => Cluster;
-
-export const createClusterInjectionToken = getInjectionToken({
- id: "create-cluster-token",
-});
diff --git a/packages/core/src/common/cluster/list-namespaces.injectable.ts b/packages/core/src/common/cluster/list-namespaces.injectable.ts
index 468ff3ac2e..363a10abb1 100644
--- a/packages/core/src/common/cluster/list-namespaces.injectable.ts
+++ b/packages/core/src/common/cluster/list-namespaces.injectable.ts
@@ -5,25 +5,25 @@
import type { KubeConfig } from "@kubernetes/client-node";
import { CoreV1Api } from "@kubernetes/client-node";
import { getInjectable } from "@ogre-tools/injectable";
-import { isDefined } from "../utils";
+import { isDefined } from "@k8slens/utilities";
export type ListNamespaces = () => Promise;
-export function listNamespaces(config: KubeConfig): ListNamespaces {
- const coreApi = config.makeApiClient(CoreV1Api);
+export type CreateListNamespaces = (config: KubeConfig) => ListNamespaces;
- return async () => {
- const { body: { items }} = await coreApi.listNamespace();
+const createListNamespacesInjectable = getInjectable({
+ id: "create-list-namespaces",
+ instantiate: (): CreateListNamespaces => (config) => {
+ const coreApi = config.makeApiClient(CoreV1Api);
- return items
- .map(ns => ns.metadata?.name)
- .filter(isDefined);
- };
-}
+ return async () => {
+ const { body: { items }} = await coreApi.listNamespace();
-const listNamespacesInjectable = getInjectable({
- id: "list-namespaces",
- instantiate: () => listNamespaces,
+ return items
+ .map(ns => ns.metadata?.name)
+ .filter(isDefined);
+ };
+ },
});
-export default listNamespacesInjectable;
+export default createListNamespacesInjectable;
diff --git a/packages/core/src/common/cluster/load-kubeconfig.injectable.ts b/packages/core/src/common/cluster/load-kubeconfig.injectable.ts
new file mode 100644
index 0000000000..4a420dadd3
--- /dev/null
+++ b/packages/core/src/common/cluster/load-kubeconfig.injectable.ts
@@ -0,0 +1,36 @@
+/**
+ * Copyright (c) OpenLens Authors. All rights reserved.
+ * Licensed under MIT License. See LICENSE in root directory for more information.
+ */
+import type { KubeConfig } from "@kubernetes/client-node";
+import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable";
+import type { Cluster } from "./cluster";
+import loadConfigFromFileInjectable from "../kube-helpers/load-config-from-file.injectable";
+import type { ConfigResult } from "../kube-helpers";
+
+export interface LoadKubeconfig {
+ (fullResult?: false): Promise;
+ (fullResult: true): Promise;
+}
+
+const loadKubeconfigInjectable = getInjectable({
+ id: "load-kubeconfig",
+ instantiate: (di, cluster) => {
+ const loadConfigFromFile = di.inject(loadConfigFromFileInjectable);
+
+ return (async (fullResult = false) => {
+ const result = await loadConfigFromFile(cluster.kubeConfigPath.get());
+
+ if (fullResult) {
+ return result;
+ }
+
+ return result.config;
+ }) as LoadKubeconfig;
+ },
+ lifecycle: lifecycleEnum.keyedSingleton({
+ getInstanceKey: (di, cluster: Cluster) => cluster.id,
+ }),
+});
+
+export default loadKubeconfigInjectable;
diff --git a/packages/core/src/common/cluster/request-namespace-list-permissions.injectable.ts b/packages/core/src/common/cluster/request-namespace-list-permissions.injectable.ts
index 62d2477e42..4b1aadeee6 100644
--- a/packages/core/src/common/cluster/request-namespace-list-permissions.injectable.ts
+++ b/packages/core/src/common/cluster/request-namespace-list-permissions.injectable.ts
@@ -47,9 +47,9 @@ const requestNamespaceListPermissionsForInjectable = getInjectable({
const { resourceRules } = status;
return (resource) => {
- const resourceRule = resourceRules.find(({
- apiGroups = [],
- resources = [],
+ const rules = resourceRules.filter(({
+ apiGroups = ["*"],
+ resources = ["*"],
}) => {
const isAboutRelevantApiGroup = apiGroups.includes("*") || apiGroups.includes(resource.group);
const isAboutResource = resources.includes("*") || resources.includes(resource.apiName);
@@ -57,13 +57,7 @@ const requestNamespaceListPermissionsForInjectable = getInjectable({
return isAboutRelevantApiGroup && isAboutResource;
});
- if (!resourceRule) {
- return false;
- }
-
- const { verbs } = resourceRule;
-
- return verbs.includes("*") || verbs.includes("list");
+ return rules.some(({ verbs }) => verbs.includes("*") || verbs.includes("list"));
};
} catch (error) {
logger.error(`[AUTHORIZATION-NAMESPACE-REVIEW]: failed to create subject rules review`, { namespace, error });
diff --git a/packages/core/src/common/cluster/request-namespace-list-permissions.test.ts b/packages/core/src/common/cluster/request-namespace-list-permissions.test.ts
new file mode 100644
index 0000000000..c62f69ca8e
--- /dev/null
+++ b/packages/core/src/common/cluster/request-namespace-list-permissions.test.ts
@@ -0,0 +1,336 @@
+/**
+ * Copyright (c) OpenLens Authors. All rights reserved.
+ * Licensed under MIT License. See LICENSE in root directory for more information.
+ */
+
+import type { V1SubjectRulesReviewStatus } from "@kubernetes/client-node";
+import type { DiContainer } from "@ogre-tools/injectable";
+import { getDiForUnitTesting } from "../../main/getDiForUnitTesting";
+import type { RequestNamespaceListPermissionsFor } from "./request-namespace-list-permissions.injectable";
+import requestNamespaceListPermissionsForInjectable from "./request-namespace-list-permissions.injectable";
+
+const createStubProxyConfig = (statusResponse: Promise<{ body: { status: V1SubjectRulesReviewStatus }}>) => ({
+ makeApiClient: () => ({
+ createSelfSubjectRulesReview: (): Promise<{ body: { status: V1SubjectRulesReviewStatus }}> => statusResponse,
+ }),
+});
+
+describe("requestNamespaceListPermissions", () => {
+ let di: DiContainer;
+ let requestNamespaceListPermissions: RequestNamespaceListPermissionsFor;
+
+ beforeEach(() => {
+ di = getDiForUnitTesting();
+ requestNamespaceListPermissions = di.inject(requestNamespaceListPermissionsForInjectable);
+ });
+
+ describe("when api returns incomplete data", () => {
+ it("returns truthy function", async () => {
+ const requestPermissions = requestNamespaceListPermissions(createStubProxyConfig(
+ new Promise((resolve) => resolve({
+ body: {
+ status: {
+ incomplete: true,
+ resourceRules: [],
+ nonResourceRules: [],
+ },
+ },
+ })),
+ ) as any);
+
+ const permissionCheck = await requestPermissions("irrelevant-namespace");
+
+ expect(permissionCheck({
+ apiName: "pods",
+ group: "",
+ kind: "Pod",
+ namespaced: true,
+ })).toBeTruthy();
+ });
+ });
+
+ describe("when api rejects", () => {
+ it("returns truthy function", async () => {
+ const requestPermissions = requestNamespaceListPermissions(createStubProxyConfig(
+ new Promise((resolve, reject) => reject("unknown error")),
+ ) as any);
+
+ const permissionCheck = await requestPermissions("irrelevant-namespace");
+
+ expect(permissionCheck({
+ apiName: "pods",
+ group: "",
+ kind: "Pod",
+ namespaced: true,
+ })).toBeTruthy();
+ });
+ });
+
+ describe("when first resourceRule has all permissions for everything", () => {
+ it("return truthy function", async () => {
+ const requestPermissions = requestNamespaceListPermissions(createStubProxyConfig(
+ new Promise((resolve) => resolve({
+ body: {
+ status: {
+ incomplete: false,
+ resourceRules: [
+ {
+ apiGroups: ["*"],
+ verbs: ["*"],
+ },
+ {
+ apiGroups: ["*"],
+ verbs: ["get"],
+ },
+ ],
+ nonResourceRules: [],
+ },
+ },
+ })),
+ ) as any);
+
+ const permissionCheck = await requestPermissions("irrelevant-namespace");
+
+ expect(permissionCheck({
+ apiName: "pods",
+ group: "",
+ kind: "Pod",
+ namespaced: true,
+ })).toBeTruthy();
+ });
+ });
+
+ describe("when first resourceRule has list permissions for everything", () => {
+ it("return truthy function", async () => {
+ const requestPermissions = requestNamespaceListPermissions(createStubProxyConfig(
+ new Promise((resolve) => resolve({
+ body: {
+ status: {
+ incomplete: false,
+ resourceRules: [
+ {
+ apiGroups: ["*"],
+ verbs: ["list"],
+ },
+ {
+ apiGroups: ["*"],
+ verbs: ["get"],
+ },
+ ],
+ nonResourceRules: [],
+ },
+ },
+ })),
+ ) as any);
+
+ const permissionCheck = await requestPermissions("irrelevant-namespace");
+
+ expect(permissionCheck({
+ apiName: "pods",
+ group: "",
+ kind: "Pod",
+ namespaced: true,
+ })).toBeTruthy();
+ });
+ });
+
+ describe("when first resourceRule has list permissions for asked resource", () => {
+ it("return truthy function", async () => {
+ const requestPermissions = requestNamespaceListPermissions(createStubProxyConfig(
+ new Promise((resolve) => resolve({
+ body: {
+ status: {
+ incomplete: false,
+ resourceRules: [
+ {
+ apiGroups: [""],
+ resources: ["pods"],
+ verbs: ["list"],
+ },
+ {
+ apiGroups: ["*"],
+ verbs: ["get"],
+ },
+ ],
+ nonResourceRules: [],
+ },
+ },
+ })),
+ ) as any);
+
+ const permissionCheck = await requestPermissions("irrelevant-namespace");
+
+ expect(permissionCheck({
+ apiName: "pods",
+ group: "",
+ kind: "Pod",
+ namespaced: true,
+ })).toBeTruthy();
+ });
+ });
+
+ describe("when last resourceRule has all permissions for everything", () => {
+ it("return truthy function", async () => {
+ const requestPermissions = requestNamespaceListPermissions(createStubProxyConfig(
+ new Promise((resolve) => resolve({
+ body: {
+ status: {
+ incomplete: false,
+ resourceRules: [
+ {
+ apiGroups: ["*"],
+ verbs: ["get"],
+ },
+ {
+ apiGroups: ["*"],
+ verbs: ["*"],
+ },
+ ],
+ nonResourceRules: [],
+ },
+ },
+ })),
+ ) as any);
+
+ const permissionCheck = await requestPermissions("irrelevant-namespace");
+
+ expect(permissionCheck({
+ apiName: "pods",
+ group: "",
+ kind: "Pod",
+ namespaced: true,
+ })).toBeTruthy();
+ });
+ });
+
+ describe("when last resourceRule has list permissions for everything", () => {
+ it("return truthy function", async () => {
+ const requestPermissions = requestNamespaceListPermissions(createStubProxyConfig(
+ new Promise((resolve) => resolve({
+ body: {
+ status: {
+ incomplete: false,
+ resourceRules: [
+ {
+ apiGroups: ["*"],
+ verbs: ["get"],
+ },
+ {
+ apiGroups: ["*"],
+ verbs: ["list"],
+ },
+ ],
+ nonResourceRules: [],
+ },
+ },
+ })),
+ ) as any);
+
+ const permissionCheck = await requestPermissions("irrelevant-namespace");
+
+ expect(permissionCheck({
+ apiName: "pods",
+ group: "",
+ kind: "Pod",
+ namespaced: true,
+ })).toBeTruthy();
+ });
+ });
+
+ describe("when last resourceRule has list permissions for asked resource", () => {
+ it("return truthy function", async () => {
+ const requestPermissions = requestNamespaceListPermissions(createStubProxyConfig(
+ new Promise((resolve) => resolve({
+ body: {
+ status: {
+ incomplete: false,
+ resourceRules: [
+ {
+ apiGroups: ["*"],
+ verbs: ["get"],
+ },
+ {
+ apiGroups: [""],
+ resources: ["pods"],
+ verbs: ["list"],
+ },
+ ],
+ nonResourceRules: [],
+ },
+ },
+ })),
+ ) as any);
+
+ const permissionCheck = await requestPermissions("irrelevant-namespace");
+
+ expect(permissionCheck({
+ apiName: "pods",
+ group: "",
+ kind: "Pod",
+ namespaced: true,
+ })).toBeTruthy();
+ });
+ });
+
+ describe("when resourceRules has matching resource without list verb", () => {
+ it("return falsy function", async () => {
+ const requestPermissions = requestNamespaceListPermissions(createStubProxyConfig(
+ new Promise((resolve) => resolve({
+ body: {
+ status: {
+ incomplete: false,
+ resourceRules: [
+ {
+ apiGroups: [""],
+ resources: ["pods"],
+ verbs: ["get"],
+ },
+ ],
+ nonResourceRules: [],
+ },
+ },
+ })),
+ ) as any);
+
+ const permissionCheck = await requestPermissions("irrelevant-namespace");
+
+ expect(permissionCheck({
+ apiName: "pods",
+ group: "",
+ kind: "Pod",
+ namespaced: true,
+ })).toBeFalsy();
+ });
+ });
+
+ describe("when resourceRules has no matching resource with list verb", () => {
+ it("return falsy function", async () => {
+ const requestPermissions = requestNamespaceListPermissions(createStubProxyConfig(
+ new Promise((resolve) => resolve({
+ body: {
+ status: {
+ incomplete: false,
+ resourceRules: [
+ {
+ apiGroups: [""],
+ resources: ["services"],
+ verbs: ["list"],
+ },
+ ],
+ nonResourceRules: [],
+ },
+ },
+ })),
+ ) as any);
+
+ const permissionCheck = await requestPermissions("irrelevant-namespace");
+
+ expect(permissionCheck({
+ apiName: "pods",
+ group: "",
+ kind: "Pod",
+ namespaced: true,
+ })).toBeFalsy();
+ });
+ });
+});
diff --git a/packages/core/src/common/error-reporting/initialize-sentry-reporting.global-override-for-injectable.ts b/packages/core/src/common/error-reporting/initialize-sentry-reporting.global-override-for-injectable.ts
index 1aa2934ef9..1a7dce6a61 100644
--- a/packages/core/src/common/error-reporting/initialize-sentry-reporting.global-override-for-injectable.ts
+++ b/packages/core/src/common/error-reporting/initialize-sentry-reporting.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import initializeSentryReportingWithInjectable from "./initialize-sentry-reporting.injectable";
export default getGlobalOverride(initializeSentryReportingWithInjectable, () => () => {});
diff --git a/packages/core/src/common/fetch/download-binary.injectable.ts b/packages/core/src/common/fetch/download-binary.injectable.ts
index b50c4e5782..9f0ce65093 100644
--- a/packages/core/src/common/fetch/download-binary.injectable.ts
+++ b/packages/core/src/common/fetch/download-binary.injectable.ts
@@ -4,14 +4,14 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import type { RequestInit, Response } from "@k8slens/node-fetch";
-import type { AsyncResult } from "../utils/async-result";
+import type { AsyncResult } from "@k8slens/utilities";
import fetchInjectable from "./fetch.injectable";
export interface DownloadBinaryOptions {
signal?: AbortSignal | null | undefined;
}
-export type DownloadBinary = (url: string, opts?: DownloadBinaryOptions) => Promise>;
+export type DownloadBinary = (url: string, opts?: DownloadBinaryOptions) => AsyncResult;
const downloadBinaryInjectable = getInjectable({
id: "download-binary",
diff --git a/packages/core/src/common/fetch/download-json/impl.ts b/packages/core/src/common/fetch/download-json/impl.ts
index bf5cf06a19..f691cc2762 100644
--- a/packages/core/src/common/fetch/download-json/impl.ts
+++ b/packages/core/src/common/fetch/download-json/impl.ts
@@ -2,7 +2,7 @@
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import type { AsyncResult } from "../../utils/async-result";
+import type { AsyncResult } from "@k8slens/utilities";
import type { Fetch } from "../fetch.injectable";
import type { RequestInit, Response } from "@k8slens/node-fetch";
@@ -10,7 +10,7 @@ export interface DownloadJsonOptions {
signal?: AbortSignal | null | undefined;
}
-export type DownloadJson = (url: string, opts?: DownloadJsonOptions) => Promise>;
+export type DownloadJson = (url: string, opts?: DownloadJsonOptions) => AsyncResult;
export const downloadJsonWith = (fetch: Fetch): DownloadJson => async (url, opts) => {
let result: Response;
diff --git a/packages/core/src/common/fetch/fetch.global-override-for-injectable.ts b/packages/core/src/common/fetch/fetch.global-override-for-injectable.ts
index 1a5f80735c..7aa6db7a2d 100644
--- a/packages/core/src/common/fetch/fetch.global-override-for-injectable.ts
+++ b/packages/core/src/common/fetch/fetch.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverrideForFunction } from "../test-utils/get-global-override-for-function";
+import { getGlobalOverrideForFunction } from "@k8slens/test-utils";
import fetchInjectable from "./fetch.injectable";
export default getGlobalOverrideForFunction(fetchInjectable);
diff --git a/packages/core/src/common/fetch/lens-fetch.global-override-for-injectable.ts b/packages/core/src/common/fetch/lens-fetch.global-override-for-injectable.ts
index 0bc144b1be..3598b6ce14 100644
--- a/packages/core/src/common/fetch/lens-fetch.global-override-for-injectable.ts
+++ b/packages/core/src/common/fetch/lens-fetch.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverrideForFunction } from "../test-utils/get-global-override-for-function";
+import { getGlobalOverrideForFunction } from "@k8slens/test-utils";
import lensFetchInjectable from "./lens-fetch.injectable";
export default getGlobalOverrideForFunction(lensFetchInjectable);
diff --git a/packages/core/src/common/front-end-routing/routes/cluster/network/ingresses/ingresses-route.injectable.ts b/packages/core/src/common/front-end-routing/routes/cluster/network/ingresses/ingresses-route.injectable.ts
index 8e01646b82..3a6669d99f 100644
--- a/packages/core/src/common/front-end-routing/routes/cluster/network/ingresses/ingresses-route.injectable.ts
+++ b/packages/core/src/common/front-end-routing/routes/cluster/network/ingresses/ingresses-route.injectable.ts
@@ -4,7 +4,7 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import { shouldShowResourceInjectionToken } from "../../../../../cluster-store/allowed-resources-injection-token";
-import { computedOr } from "../../../../../utils/computed-or";
+import { computedOr } from "@k8slens/utilities";
import { frontEndRouteInjectionToken } from "../../../../front-end-route-injection-token";
const ingressesRouteInjectable = getInjectable({
diff --git a/packages/core/src/common/front-end-routing/verify-that-all-routes-have-route-component.test.ts b/packages/core/src/common/front-end-routing/verify-that-all-routes-have-route-component.test.ts
index acd1d4401d..44f86f270d 100644
--- a/packages/core/src/common/front-end-routing/verify-that-all-routes-have-route-component.test.ts
+++ b/packages/core/src/common/front-end-routing/verify-that-all-routes-have-route-component.test.ts
@@ -12,7 +12,7 @@ import { pipeline } from "@ogre-tools/fp";
describe("verify-that-all-routes-have-component", () => {
it("verify that routes have route component", () => {
- const rendererDi = getDiForUnitTesting({ doGeneralOverrides: true });
+ const rendererDi = getDiForUnitTesting();
rendererDi.override(clusterStoreInjectable, () => ({
getById: () => null,
diff --git a/packages/core/src/common/fs/copy.global-override-for-injectable.ts b/packages/core/src/common/fs/copy.global-override-for-injectable.ts
index b6d899d2c4..3799d3b760 100644
--- a/packages/core/src/common/fs/copy.global-override-for-injectable.ts
+++ b/packages/core/src/common/fs/copy.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import copyInjectable from "./copy.injectable";
export default getGlobalOverride(copyInjectable, () => async () => {
diff --git a/packages/core/src/common/fs/exec-file.global-override-for-injectable.ts b/packages/core/src/common/fs/exec-file.global-override-for-injectable.ts
index 162666a130..381a546125 100644
--- a/packages/core/src/common/fs/exec-file.global-override-for-injectable.ts
+++ b/packages/core/src/common/fs/exec-file.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverrideForFunction } from "../test-utils/get-global-override-for-function";
+import { getGlobalOverrideForFunction } from "@k8slens/test-utils";
import execFileInjectable from "./exec-file.injectable";
export default getGlobalOverrideForFunction(execFileInjectable);
diff --git a/packages/core/src/common/fs/exec-file.injectable.ts b/packages/core/src/common/fs/exec-file.injectable.ts
index f026e0db3a..9ee0fae78f 100644
--- a/packages/core/src/common/fs/exec-file.injectable.ts
+++ b/packages/core/src/common/fs/exec-file.injectable.ts
@@ -5,14 +5,14 @@
import { getInjectable } from "@ogre-tools/injectable";
import type { ExecFileException, ExecFileOptions } from "child_process";
import { execFile } from "child_process";
-import type { AsyncResult } from "../utils/async-result";
+import type { AsyncResult } from "@k8slens/utilities";
export type ExecFileError = ExecFileException & { stderr: string };
export interface ExecFile {
- (filePath: string): Promise>;
- (filePath: string, argsOrOptions: string[] | ExecFileOptions): Promise>;
- (filePath: string, args: string[], options: ExecFileOptions): Promise>;
+ (filePath: string): AsyncResult;
+ (filePath: string, argsOrOptions: string[] | ExecFileOptions): AsyncResult;
+ (filePath: string, args: string[], options: ExecFileOptions): AsyncResult;
}
const execFileInjectable = getInjectable({
diff --git a/packages/core/src/common/fs/extract-tar.global-override-for-injectable.ts b/packages/core/src/common/fs/extract-tar.global-override-for-injectable.ts
index 02a46c1d6b..68d1fe4259 100644
--- a/packages/core/src/common/fs/extract-tar.global-override-for-injectable.ts
+++ b/packages/core/src/common/fs/extract-tar.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import extractTarInjectable from "./extract-tar.injectable";
export default getGlobalOverride(extractTarInjectable, () => async () => {
diff --git a/packages/core/src/common/fs/fs.injectable.ts b/packages/core/src/common/fs/fs.injectable.ts
index f80375095c..b42a51aad7 100644
--- a/packages/core/src/common/fs/fs.injectable.ts
+++ b/packages/core/src/common/fs/fs.injectable.ts
@@ -7,7 +7,7 @@ import type { ReadOptions } from "fs-extra";
import fse from "fs-extra";
/**
- * NOTE: Add corrisponding a corrisponding override of this injecable in `src/test-utils/override-fs-with-fakes.ts`
+ * NOTE: Add corresponding override of this injectable in `src/test-utils/override-fs-with-fakes.ts`
*/
const fsInjectable = getInjectable({
id: "fs",
@@ -21,6 +21,7 @@ const fsInjectable = getInjectable({
rm,
access,
stat,
+ unlink,
},
ensureDir,
ensureDirSync,
@@ -56,6 +57,7 @@ const fsInjectable = getInjectable({
ensureDirSync,
createReadStream,
stat,
+ unlink,
};
},
causesSideEffects: true,
diff --git a/packages/core/src/common/fs/lstat.global-override-for-injectable.ts b/packages/core/src/common/fs/lstat.global-override-for-injectable.ts
index 9c9f3d4933..155fac7451 100644
--- a/packages/core/src/common/fs/lstat.global-override-for-injectable.ts
+++ b/packages/core/src/common/fs/lstat.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import lstatInjectable from "./lstat.injectable";
export default getGlobalOverride(lstatInjectable, () => async () => {
diff --git a/packages/core/src/common/fs/read-directory.global-override-for-injectable.ts b/packages/core/src/common/fs/read-directory.global-override-for-injectable.ts
index 57c83ceffb..72d9b523f4 100644
--- a/packages/core/src/common/fs/read-directory.global-override-for-injectable.ts
+++ b/packages/core/src/common/fs/read-directory.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import readDirectoryInjectable from "./read-directory.injectable";
export default getGlobalOverride(readDirectoryInjectable, () => async () => {
diff --git a/packages/core/src/common/fs/remove.global-override-for-injectable.ts b/packages/core/src/common/fs/remove.global-override-for-injectable.ts
index 4b92353344..58fb0f9dce 100644
--- a/packages/core/src/common/fs/remove.global-override-for-injectable.ts
+++ b/packages/core/src/common/fs/remove.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import removePathInjectable from "./remove.injectable";
export default getGlobalOverride(removePathInjectable, () => async () => {
diff --git a/packages/core/src/common/fs/unlink.injectable.ts b/packages/core/src/common/fs/unlink.injectable.ts
new file mode 100644
index 0000000000..e13bf35935
--- /dev/null
+++ b/packages/core/src/common/fs/unlink.injectable.ts
@@ -0,0 +1,15 @@
+/**
+ * Copyright (c) OpenLens Authors. All rights reserved.
+ * Licensed under MIT License. See LICENSE in root directory for more information.
+ */
+import { getInjectable } from "@ogre-tools/injectable";
+import fsInjectable from "./fs.injectable";
+
+export type Unlink = (path: string) => Promise;
+
+const unlinkInjectable = getInjectable({
+ id: "unlink",
+ instantiate: (di): Unlink => di.inject(fsInjectable).unlink,
+});
+
+export default unlinkInjectable;
diff --git a/packages/core/src/common/fs/validate-directory.injectable.ts b/packages/core/src/common/fs/validate-directory.injectable.ts
index efce915238..717caf5ec8 100644
--- a/packages/core/src/common/fs/validate-directory.injectable.ts
+++ b/packages/core/src/common/fs/validate-directory.injectable.ts
@@ -3,13 +3,13 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
-import type { AsyncResult } from "../utils/async-result";
-import { isErrnoException } from "../utils";
+import type { AsyncResult } from "@k8slens/utilities";
+import { isErrnoException } from "@k8slens/utilities";
import type { Stats } from "fs-extra";
import { lowerFirst } from "lodash/fp";
import statInjectable from "./stat.injectable";
-export type ValidateDirectory = (path: string) => Promise>;
+export type ValidateDirectory = (path: string) => AsyncResult;
function getUserReadableFileType(stats: Stats): string {
if (stats.isFile()) {
diff --git a/packages/core/src/common/fs/watch/watch.global-override-for-injectable.ts b/packages/core/src/common/fs/watch/watch.global-override-for-injectable.ts
index 689c7150cf..b74c3eec20 100644
--- a/packages/core/src/common/fs/watch/watch.global-override-for-injectable.ts
+++ b/packages/core/src/common/fs/watch/watch.global-override-for-injectable.ts
@@ -2,7 +2,7 @@
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import watchInjectable from "./watch.injectable";
export default getGlobalOverride(watchInjectable, () => () => {
diff --git a/packages/core/src/common/fs/watch/watch.injectable.ts b/packages/core/src/common/fs/watch/watch.injectable.ts
index 50f96cdf57..084197769d 100644
--- a/packages/core/src/common/fs/watch/watch.injectable.ts
+++ b/packages/core/src/common/fs/watch/watch.injectable.ts
@@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable";
import { watch } from "chokidar";
import type { Stats } from "fs";
import type TypedEventEmitter from "typed-emitter";
-import type { SingleOrMany } from "../../utils";
+import type { SingleOrMany } from "@k8slens/utilities";
export interface AlwaysStatWatcherEvents {
add: (path: string, stats: Stats) => void;
diff --git a/packages/core/src/common/fs/write-file.global-override-for-injectable.ts b/packages/core/src/common/fs/write-file.global-override-for-injectable.ts
index c8b7ef8e45..e87f648305 100644
--- a/packages/core/src/common/fs/write-file.global-override-for-injectable.ts
+++ b/packages/core/src/common/fs/write-file.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import writeFileInjectable from "./write-file.injectable";
export default getGlobalOverride(writeFileInjectable, () => async () => {
diff --git a/packages/core/src/common/get-configuration-file-model/get-configuration-file-model.global-override-for-injectable.ts b/packages/core/src/common/get-configuration-file-model/get-configuration-file-model.global-override-for-injectable.ts
index 5f51460a2b..95e2845825 100644
--- a/packages/core/src/common/get-configuration-file-model/get-configuration-file-model.global-override-for-injectable.ts
+++ b/packages/core/src/common/get-configuration-file-model/get-configuration-file-model.global-override-for-injectable.ts
@@ -5,7 +5,7 @@
import assert from "assert";
import path from "path";
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import getConfigurationFileModelInjectable from "./get-configuration-file-model.injectable";
import type Config from "conf";
import readJsonSyncInjectable from "../fs/read-json-sync.injectable";
diff --git a/packages/core/src/common/helm/add-helm-repository-channel.ts b/packages/core/src/common/helm/add-helm-repository-channel.ts
index bf5aa19367..258367c7ec 100644
--- a/packages/core/src/common/helm/add-helm-repository-channel.ts
+++ b/packages/core/src/common/helm/add-helm-repository-channel.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import type { HelmRepo } from "./helm-repo";
-import type { AsyncResult } from "../utils/async-result";
+import type { AsyncResult } from "@k8slens/utilities";
import type { RequestChannel } from "../utils/channel/request-channel-listener-injection-token";
export type AddHelmRepositoryChannel = RequestChannel>;
diff --git a/packages/core/src/common/helm/get-active-helm-repositories-channel.ts b/packages/core/src/common/helm/get-active-helm-repositories-channel.ts
index 26720e9a5f..2ea5a80030 100644
--- a/packages/core/src/common/helm/get-active-helm-repositories-channel.ts
+++ b/packages/core/src/common/helm/get-active-helm-repositories-channel.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import type { HelmRepo } from "./helm-repo";
-import type { AsyncResult } from "../utils/async-result";
+import type { AsyncResult } from "@k8slens/utilities";
import type { RequestChannel } from "../utils/channel/request-channel-listener-injection-token";
export type GetActiveHelmRepositoriesChannel = RequestChannel>;
diff --git a/packages/core/src/common/helm/remove-helm-repository-channel.ts b/packages/core/src/common/helm/remove-helm-repository-channel.ts
index 4d479d088c..f1189cb580 100644
--- a/packages/core/src/common/helm/remove-helm-repository-channel.ts
+++ b/packages/core/src/common/helm/remove-helm-repository-channel.ts
@@ -2,7 +2,7 @@
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import type { AsyncResult } from "../utils/async-result";
+import type { AsyncResult } from "@k8slens/utilities";
import type { RequestChannel } from "../utils/channel/request-channel-listener-injection-token";
import type { HelmRepo } from "./helm-repo";
diff --git a/packages/core/src/common/hotbars/types.ts b/packages/core/src/common/hotbars/types.ts
index 6370fe136d..2925c785a0 100644
--- a/packages/core/src/common/hotbars/types.ts
+++ b/packages/core/src/common/hotbars/types.ts
@@ -4,8 +4,8 @@
*/
import * as uuid from "uuid";
-import type { Tuple } from "../utils";
-import { tuple } from "../utils";
+import type { Tuple } from "@k8slens/utilities";
+import { tuple } from "@k8slens/utilities";
export interface HotbarItem {
entity: {
diff --git a/packages/core/src/common/initializable-state/create.test.ts b/packages/core/src/common/initializable-state/create.test.ts
index 38980b0a41..8241aa1612 100644
--- a/packages/core/src/common/initializable-state/create.test.ts
+++ b/packages/core/src/common/initializable-state/create.test.ts
@@ -15,7 +15,7 @@ describe("InitializableState tests", () => {
let di: DiContainer;
beforeEach(() => {
- di = getDiForUnitTesting({ doGeneralOverrides: true });
+ di = getDiForUnitTesting();
});
describe("when created", () => {
diff --git a/packages/core/src/common/ipc/broadcast-message.global-override-for-injectable.ts b/packages/core/src/common/ipc/broadcast-message.global-override-for-injectable.ts
index e455b30cdc..519d0761ed 100644
--- a/packages/core/src/common/ipc/broadcast-message.global-override-for-injectable.ts
+++ b/packages/core/src/common/ipc/broadcast-message.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverrideForFunction } from "../test-utils/get-global-override-for-function";
+import { getGlobalOverrideForFunction } from "@k8slens/test-utils";
import broadcastMessageInjectable from "./broadcast-message.injectable";
export default getGlobalOverrideForFunction(broadcastMessageInjectable);
diff --git a/packages/core/src/common/ipc/ipc.ts b/packages/core/src/common/ipc/ipc.ts
index e84fcfec56..4815fbfbf1 100644
--- a/packages/core/src/common/ipc/ipc.ts
+++ b/packages/core/src/common/ipc/ipc.ts
@@ -11,7 +11,7 @@ import { ipcMain, ipcRenderer, webContents } from "electron";
import { toJS } from "../utils/toJS";
import type { ClusterFrameInfo } from "../cluster-frames";
import { clusterFrameMap } from "../cluster-frames";
-import type { Disposer } from "../utils";
+import type { Disposer } from "@k8slens/utilities";
import { getLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
import ipcRendererInjectable from "../../renderer/utils/channel/ipc-renderer.injectable";
import loggerInjectable from "../logger.injectable";
diff --git a/packages/core/src/common/item.store.ts b/packages/core/src/common/item.store.ts
index 805137e95c..4d7c3343ef 100644
--- a/packages/core/src/common/item.store.ts
+++ b/packages/core/src/common/item.store.ts
@@ -3,8 +3,8 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
+import autoBind from "auto-bind";
import orderBy from "lodash/orderBy";
-import { autoBind } from "./utils";
import { action, computed, observable, when, makeObservable } from "mobx";
export interface ItemObject {
diff --git a/packages/core/src/common/k8s-api/__tests__/api-manager.test.ts b/packages/core/src/common/k8s-api/__tests__/api-manager.test.ts
index b83f52c3f0..6ea6327038 100644
--- a/packages/core/src/common/k8s-api/__tests__/api-manager.test.ts
+++ b/packages/core/src/common/k8s-api/__tests__/api-manager.test.ts
@@ -4,7 +4,6 @@
*/
import type { DiContainer } from "@ogre-tools/injectable";
-import createClusterInjectable from "../../../main/create-cluster/create-cluster.injectable";
import clusterFrameContextForNamespacedResourcesInjectable from "../../../renderer/cluster-frame-context/for-namespaced-resources.injectable";
import hostedClusterInjectable from "../../../renderer/cluster-frame-context/hosted-cluster.injectable";
import { getDiForUnitTesting } from "../../../renderer/getDiForUnitTesting";
@@ -19,6 +18,10 @@ import { KubeObject } from "../kube-object";
import { KubeObjectStore } from "../kube-object.store";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
+// eslint-disable-next-line no-restricted-imports
+import { KubeApi as ExternalKubeApi } from "../../../extensions/common-api/k8s-api";
+import { Cluster } from "../../cluster/cluster";
+
class TestApi extends KubeApi {
protected async checkPreferredVersion() {
return;
@@ -34,15 +37,13 @@ describe("ApiManager", () => {
let di: DiContainer;
beforeEach(() => {
- di = getDiForUnitTesting({ doGeneralOverrides: true });
+ di = getDiForUnitTesting();
di.override(directoryForUserDataInjectable, () => "/some-user-store-path");
di.override(directoryForKubeConfigsInjectable, () => "/some-kube-configs");
di.override(storesAndApisCanBeCreatedInjectable, () => true);
- const createCluster = di.inject(createClusterInjectable);
-
- di.override(hostedClusterInjectable, () => createCluster({
+ di.override(hostedClusterInjectable, () => new Cluster({
contextName: "some-context-name",
id: "some-cluster-id",
kubeConfigPath: "/some-path-to-a-kubeconfig",
@@ -54,7 +55,7 @@ describe("ApiManager", () => {
});
describe("registerApi", () => {
- it("re-register store if apiBase changed", async () => {
+ it("re-register store if apiBase changed", () => {
const apiBase = "apis/v1/foo";
const fallbackApiBase = "/apis/extensions/v1beta1/foo";
const kubeApi = new TestApi({
@@ -72,21 +73,48 @@ describe("ApiManager", () => {
logger: di.inject(loggerInjectable),
}, kubeApi);
- apiManager.registerApi(apiBase, kubeApi);
+ apiManager.registerApi(kubeApi);
// Define to use test api for ingress store
Object.defineProperty(kubeStore, "api", { value: kubeApi });
- apiManager.registerStore(kubeStore, [kubeApi]);
+ apiManager.registerStore(kubeStore);
// Test that store is returned with original apiBase
expect(apiManager.getStore(kubeApi)).toBe(kubeStore);
// Change apiBase similar as checkPreferredVersion does
Object.defineProperty(kubeApi, "apiBase", { value: fallbackApiBase });
- apiManager.registerApi(fallbackApiBase, kubeApi);
+ apiManager.registerApi(kubeApi);
// Test that store is returned with new apiBase
expect(apiManager.getStore(kubeApi)).toBe(kubeStore);
});
});
+
+ describe("technical tests for autorun", () => {
+ it("given two extensions register apis with the same apibase, settle into using the second", () => {
+ const apiBase = "/apis/aquasecurity.github.io/v1alpha1/vulnerabilityreports";
+ const firstApi = Object.assign(new ExternalKubeApi({
+ objectConstructor: KubeObject,
+ apiBase,
+ kind: "VulnerabilityReport",
+ }), {
+ myField: 1,
+ });
+ const secondApi = Object.assign(new ExternalKubeApi({
+ objectConstructor: KubeObject,
+ apiBase,
+ kind: "VulnerabilityReport",
+ }), {
+ myField: 2,
+ });
+
+ void firstApi;
+ void secondApi;
+
+ expect(apiManager.getApi(apiBase)).toMatchObject({
+ myField: 2,
+ });
+ });
+ });
});
diff --git a/packages/core/src/common/k8s-api/__tests__/deployment.api.test.ts b/packages/core/src/common/k8s-api/__tests__/deployment.api.test.ts
index 60ada4e4d1..96758a5591 100644
--- a/packages/core/src/common/k8s-api/__tests__/deployment.api.test.ts
+++ b/packages/core/src/common/k8s-api/__tests__/deployment.api.test.ts
@@ -15,7 +15,7 @@ describe("DeploymentApi", () => {
let kubeJsonApi: jest.Mocked;
beforeEach(() => {
- const di = getDiForUnitTesting({ doGeneralOverrides: true });
+ const di = getDiForUnitTesting();
di.override(storesAndApisCanBeCreatedInjectable, () => true);
kubeJsonApi = {
diff --git a/packages/core/src/common/k8s-api/__tests__/kube-api-version-detection.test.ts b/packages/core/src/common/k8s-api/__tests__/kube-api-version-detection.test.ts
index dd65f58762..e3bcd70a81 100644
--- a/packages/core/src/common/k8s-api/__tests__/kube-api-version-detection.test.ts
+++ b/packages/core/src/common/k8s-api/__tests__/kube-api-version-detection.test.ts
@@ -10,12 +10,11 @@ import type { Fetch } from "../../fetch/fetch.injectable";
import fetchInjectable from "../../fetch/fetch.injectable";
import type { AsyncFnMock } from "@async-fn/jest";
import asyncFn from "@async-fn/jest";
-import { flushPromises } from "../../test-utils/flush-promises";
+import { flushPromises } from "@k8slens/test-utils";
import setupAutoRegistrationInjectable from "../../../renderer/before-frame-starts/runnables/setup-auto-registration.injectable";
import { createMockResponseFromString } from "../../../test-utils/mock-responses";
import storesAndApisCanBeCreatedInjectable from "../../../renderer/stores-apis-can-be-created.injectable";
import directoryForUserDataInjectable from "../../app-paths/directory-for-user-data/directory-for-user-data.injectable";
-import createClusterInjectable from "../../../main/create-cluster/create-cluster.injectable";
import hostedClusterInjectable from "../../../renderer/cluster-frame-context/hosted-cluster.injectable";
import directoryForKubeConfigsInjectable from "../../app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable";
import apiManagerInjectable from "../api-manager/manager.injectable";
@@ -23,6 +22,7 @@ import type { DiContainer } from "@ogre-tools/injectable";
import ingressApiInjectable from "../endpoints/ingress.api.injectable";
import loggerInjectable from "../../logger.injectable";
import maybeKubeApiInjectable from "../maybe-kube-api.injectable";
+import { Cluster } from "../../cluster/cluster";
describe("KubeApi", () => {
let fetchMock: AsyncFnMock;
@@ -30,7 +30,7 @@ describe("KubeApi", () => {
let di: DiContainer;
beforeEach(async () => {
- di = getDiForUnitTesting({ doGeneralOverrides: true });
+ di = getDiForUnitTesting();
fetchMock = asyncFn();
di.override(fetchInjectable, () => fetchMock);
@@ -39,9 +39,7 @@ describe("KubeApi", () => {
di.override(directoryForKubeConfigsInjectable, () => "/some-kube-configs");
di.override(storesAndApisCanBeCreatedInjectable, () => true);
- const createCluster = di.inject(createClusterInjectable);
-
- di.override(hostedClusterInjectable, () => createCluster({
+ di.override(hostedClusterInjectable, () => new Cluster({
contextName: "some-context-name",
id: "some-cluster-id",
kubeConfigPath: "/some-path-to-a-kubeconfig",
@@ -121,7 +119,7 @@ describe("KubeApi", () => {
]);
});
- describe("when resource request fufills with a resource", () => {
+ describe("when resource request fulfills with a resource", () => {
beforeEach(async () => {
await fetchMock.resolveSpecific(
["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1"],
@@ -283,7 +281,7 @@ describe("KubeApi", () => {
});
});
- describe("when resource request fufills with no resource", () => {
+ describe("when resource request fulfills with no resource", () => {
beforeEach(async () => {
await fetchMock.resolveSpecific(
["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1"],
@@ -307,7 +305,7 @@ describe("KubeApi", () => {
- describe("when resource request fufills with a resource", () => {
+ describe("when resource request fulfills with a resource", () => {
beforeEach(async () => {
await fetchMock.resolveSpecific(
["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1"],
@@ -509,7 +507,7 @@ describe("KubeApi", () => {
]);
});
- describe("when resource request fufills with a resource", () => {
+ describe("when resource request fulfills with a resource", () => {
beforeEach(async () => {
await fetchMock.resolveSpecific(
["https://127.0.0.1:12345/api-kube/apis/extensions"],
diff --git a/packages/core/src/common/k8s-api/__tests__/kube-api.test.ts b/packages/core/src/common/k8s-api/__tests__/kube-api.test.ts
index 7bce8a3b7c..2b3978c0eb 100644
--- a/packages/core/src/common/k8s-api/__tests__/kube-api.test.ts
+++ b/packages/core/src/common/k8s-api/__tests__/kube-api.test.ts
@@ -15,7 +15,7 @@ import type { CreateKubeApiForRemoteCluster } from "../create-kube-api-for-remot
import createKubeApiForRemoteClusterInjectable from "../create-kube-api-for-remote-cluster.injectable";
import type { AsyncFnMock } from "@async-fn/jest";
import asyncFn from "@async-fn/jest";
-import { flushPromises } from "../../test-utils/flush-promises";
+import { flushPromises } from "@k8slens/test-utils";
import createKubeJsonApiInjectable from "../create-kube-json-api.injectable";
import type { IKubeWatchEvent } from "../kube-watch-event";
import type { KubeJsonApiDataFor } from "../kube-object";
@@ -24,7 +24,6 @@ import setupAutoRegistrationInjectable from "../../../renderer/before-frame-star
import { createMockResponseFromStream, createMockResponseFromString } from "../../../test-utils/mock-responses";
import storesAndApisCanBeCreatedInjectable from "../../../renderer/stores-apis-can-be-created.injectable";
import directoryForUserDataInjectable from "../../app-paths/directory-for-user-data/directory-for-user-data.injectable";
-import createClusterInjectable from "../../../main/create-cluster/create-cluster.injectable";
import hostedClusterInjectable from "../../../renderer/cluster-frame-context/hosted-cluster.injectable";
import directoryForKubeConfigsInjectable from "../../app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable";
import apiKubeInjectable from "../../../renderer/k8s/api-kube.injectable";
@@ -36,21 +35,20 @@ import namespaceApiInjectable from "../endpoints/namespace.api.injectable";
// NOTE: this is fine because we are testing something that only exported
// eslint-disable-next-line no-restricted-imports
import { PodsApi } from "../../../extensions/common-api/k8s-api";
+import { Cluster } from "../../cluster/cluster";
describe("createKubeApiForRemoteCluster", () => {
let createKubeApiForRemoteCluster: CreateKubeApiForRemoteCluster;
let fetchMock: AsyncFnMock;
beforeEach(async () => {
- const di = getDiForUnitTesting({ doGeneralOverrides: true });
+ const di = getDiForUnitTesting();
di.override(directoryForUserDataInjectable, () => "/some-user-store-path");
di.override(directoryForKubeConfigsInjectable, () => "/some-kube-configs");
di.override(storesAndApisCanBeCreatedInjectable, () => true);
- const createCluster = di.inject(createClusterInjectable);
-
- di.override(hostedClusterInjectable, () => createCluster({
+ di.override(hostedClusterInjectable, () => new Cluster({
contextName: "some-context-name",
id: "some-cluster-id",
kubeConfigPath: "/some-path-to-a-kubeconfig",
@@ -145,7 +143,7 @@ describe("KubeApi", () => {
let di: DiContainer;
beforeEach(async () => {
- di = getDiForUnitTesting({ doGeneralOverrides: true });
+ di = getDiForUnitTesting();
di.override(directoryForUserDataInjectable, () => "/some-user-store-path");
di.override(directoryForKubeConfigsInjectable, () => "/some-kube-configs");
@@ -154,10 +152,9 @@ describe("KubeApi", () => {
fetchMock = asyncFn();
di.override(fetchInjectable, () => fetchMock);
- const createCluster = di.inject(createClusterInjectable);
const createKubeJsonApi = di.inject(createKubeJsonApiInjectable);
- di.override(hostedClusterInjectable, () => createCluster({
+ di.override(hostedClusterInjectable, () => new Cluster({
contextName: "some-context-name",
id: "some-cluster-id",
kubeConfigPath: "/some-path-to-a-kubeconfig",
diff --git a/packages/core/src/common/k8s-api/__tests__/kube-object.store.test.ts b/packages/core/src/common/k8s-api/__tests__/kube-object.store.test.ts
index 424cffba23..24820648af 100644
--- a/packages/core/src/common/k8s-api/__tests__/kube-object.store.test.ts
+++ b/packages/core/src/common/k8s-api/__tests__/kube-object.store.test.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { noop } from "../../utils";
+import { noop } from "@k8slens/utilities";
import type { KubeApi } from "../kube-api";
import { KubeObject } from "../kube-object";
import type { KubeObjectStoreLoadingParams } from "../kube-object.store";
diff --git a/packages/core/src/common/k8s-api/__tests__/stateful-set.api.test.ts b/packages/core/src/common/k8s-api/__tests__/stateful-set.api.test.ts
index b7557c8010..9b13e09f2e 100644
--- a/packages/core/src/common/k8s-api/__tests__/stateful-set.api.test.ts
+++ b/packages/core/src/common/k8s-api/__tests__/stateful-set.api.test.ts
@@ -15,7 +15,7 @@ describe("StatefulSetApi", () => {
let kubeJsonApi: jest.Mocked;
beforeEach(() => {
- const di = getDiForUnitTesting({ doGeneralOverrides: true });
+ const di = getDiForUnitTesting();
di.override(storesAndApisCanBeCreatedInjectable, () => true);
kubeJsonApi = {
diff --git a/packages/core/src/common/k8s-api/api-manager/api-manager.ts b/packages/core/src/common/k8s-api/api-manager/api-manager.ts
index 81b59ef9c2..f6c2758921 100644
--- a/packages/core/src/common/k8s-api/api-manager/api-manager.ts
+++ b/packages/core/src/common/k8s-api/api-manager/api-manager.ts
@@ -10,7 +10,7 @@ import { autorun, action, observable } from "mobx";
import type { KubeApi } from "../kube-api";
import type { KubeObject, ObjectReference } from "../kube-object";
import { parseKubeApi, createKubeApiURL } from "../kube-api-parse";
-import { chain, find } from "../../utils/iter";
+import { iter } from "@k8slens/utilities";
export type RegisterableStore = Store extends KubeObjectStore
? Store
@@ -38,28 +38,31 @@ export class ApiManager {
constructor(private readonly dependencies: Dependencies) {
// NOTE: this is done to preserve the old behaviour of an API being discoverable using all previous apiBases
autorun(() => {
- const apis = chain(this.dependencies.apis.get().values())
+ const apis = iter.chain(this.dependencies.apis.get().values())
.concat(this.externalApis.values());
const removedApis = new Set(this.apis.values());
+ const newState = new Map(this.apis);
for (const api of apis) {
removedApis.delete(api);
- this.apis.set(api.apiBase, api);
+ newState.set(api.apiBase, api);
}
for (const api of removedApis) {
- for (const [apiBase, storedApi] of this.apis) {
+ for (const [apiBase, storedApi] of newState) {
if (storedApi === api) {
- this.apis.delete(apiBase);
+ newState.delete(apiBase);
}
}
}
+
+ this.apis.replace(newState);
});
}
getApi(pathOrCallback: string | FindApiCallback) {
if (typeof pathOrCallback === "function") {
- return find(this.apis.values(), pathOrCallback);
+ return iter.find(this.apis.values(), pathOrCallback);
}
const { apiBase } = parseKubeApi(pathOrCallback);
@@ -127,7 +130,7 @@ export class ApiManager {
return undefined;
}
- return chain(this.dependencies.stores.get().values())
+ return iter.chain(this.dependencies.stores.get().values())
.concat(this.externalStores.values())
.find(store => store.api.apiBase === api.apiBase);
}
diff --git a/packages/core/src/common/k8s-api/endpoints/config-map.api.ts b/packages/core/src/common/k8s-api/endpoints/config-map.api.ts
index a2860246b1..cf635fb623 100644
--- a/packages/core/src/common/k8s-api/endpoints/config-map.api.ts
+++ b/packages/core/src/common/k8s-api/endpoints/config-map.api.ts
@@ -8,7 +8,7 @@ import { KubeObject } from "../kube-object";
import type { KubeJsonApiData } from "../kube-json-api";
import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api";
import { KubeApi } from "../kube-api";
-import { autoBind } from "../../utils";
+import autoBind from "auto-bind";
export interface ConfigMapData extends KubeJsonApiData, void, void> {
data?: Partial>;
diff --git a/packages/core/src/common/k8s-api/endpoints/cron-job.api.ts b/packages/core/src/common/k8s-api/endpoints/cron-job.api.ts
index 2ccb8c910c..1ad0c42511 100644
--- a/packages/core/src/common/k8s-api/endpoints/cron-job.api.ts
+++ b/packages/core/src/common/k8s-api/endpoints/cron-job.api.ts
@@ -6,7 +6,7 @@
import moment from "moment";
import type { NamespaceScopedMetadata, ObjectReference } from "../kube-object";
import { KubeObject } from "../kube-object";
-import { formatDuration } from "../../utils/formatDuration";
+import { formatDuration } from "@k8slens/utilities";
import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api";
import { KubeApi } from "../kube-api";
import type { JobTemplateSpec } from "./types/job-template-spec";
diff --git a/packages/core/src/common/k8s-api/endpoints/custom-resource-definition.api.ts b/packages/core/src/common/k8s-api/endpoints/custom-resource-definition.api.ts
index b438f06b3a..a9259e710e 100644
--- a/packages/core/src/common/k8s-api/endpoints/custom-resource-definition.api.ts
+++ b/packages/core/src/common/k8s-api/endpoints/custom-resource-definition.api.ts
@@ -5,7 +5,7 @@
import { getLegacyGlobalDiForExtensionApi } from "../../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
import customResourcesRouteInjectable from "../../front-end-routing/routes/cluster/custom-resources/custom-resources/custom-resources-route.injectable";
-import { buildURL } from "../../utils/buildUrl";
+import { buildURL } from "@k8slens/utilities";
import type { BaseKubeObjectCondition, ClusterScopedMetadata } from "../kube-object";
import { KubeObject } from "../kube-object";
import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api";
diff --git a/packages/core/src/common/k8s-api/endpoints/deployment.api.ts b/packages/core/src/common/k8s-api/endpoints/deployment.api.ts
index 31bc55ae76..70e7200e3c 100644
--- a/packages/core/src/common/k8s-api/endpoints/deployment.api.ts
+++ b/packages/core/src/common/k8s-api/endpoints/deployment.api.ts
@@ -10,7 +10,7 @@ import { KubeApi } from "../kube-api";
import type { PodSpec } from "./pod.api";
import type { KubeObjectStatus, LabelSelector, NamespaceScopedMetadata } from "../kube-object";
import { KubeObject } from "../kube-object";
-import { hasTypedProperty, isNumber, isObject } from "../../utils";
+import { hasTypedProperty, isNumber, isObject } from "@k8slens/utilities";
export class DeploymentApi extends KubeApi {
constructor(deps: KubeApiDependencies, opts?: DerivedKubeApiOptions) {
diff --git a/packages/core/src/common/k8s-api/endpoints/endpoint.api.ts b/packages/core/src/common/k8s-api/endpoints/endpoint.api.ts
index c60377a887..1e045e902d 100644
--- a/packages/core/src/common/k8s-api/endpoints/endpoint.api.ts
+++ b/packages/core/src/common/k8s-api/endpoints/endpoint.api.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { autoBind } from "../../utils";
+import autoBind from "auto-bind";
import type { KubeObjectMetadata, KubeObjectScope, NamespaceScopedMetadata, ObjectReference } from "../kube-object";
import { KubeObject } from "../kube-object";
import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api";
diff --git a/packages/core/src/common/k8s-api/endpoints/events.api.ts b/packages/core/src/common/k8s-api/endpoints/events.api.ts
index aca77712c8..1da4b6afe8 100644
--- a/packages/core/src/common/k8s-api/endpoints/events.api.ts
+++ b/packages/core/src/common/k8s-api/endpoints/events.api.ts
@@ -6,7 +6,7 @@
import moment from "moment";
import type { KubeObjectMetadata, KubeObjectScope, ObjectReference } from "../kube-object";
import { KubeObject } from "../kube-object";
-import { formatDuration } from "../../utils/formatDuration";
+import { formatDuration } from "@k8slens/utilities";
import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api";
import { KubeApi } from "../kube-api";
import type { KubeJsonApiData } from "../kube-json-api";
diff --git a/packages/core/src/common/k8s-api/endpoints/helm-charts.api.ts b/packages/core/src/common/k8s-api/endpoints/helm-charts.api.ts
index 26da740830..da2d8ab00c 100644
--- a/packages/core/src/common/k8s-api/endpoints/helm-charts.api.ts
+++ b/packages/core/src/common/k8s-api/endpoints/helm-charts.api.ts
@@ -3,7 +3,8 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { autoBind, bifurcateArray } from "../../utils";
+import { array } from "@k8slens/utilities";
+import autoBind from "auto-bind";
import Joi from "joi";
export interface RawHelmChart {
@@ -263,7 +264,7 @@ export class HelmChart implements HelmChartData {
return new HelmChart(result.value);
}
- const [actualErrors, unknownDetails] = bifurcateArray(result.error.details, ({ type }) => type === "object.unknown");
+ const [actualErrors, unknownDetails] = array.bifurcate(result.error.details, ({ type }) => type === "object.unknown");
if (unknownDetails.length > 0) {
console.warn("HelmChart data has unexpected fields", { original: data, unknownFields: unknownDetails.flatMap(d => d.path) });
diff --git a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-charts.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-charts.injectable.ts
index 4d9bfc55b1..246b628ea0 100644
--- a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-charts.injectable.ts
+++ b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-charts.injectable.ts
@@ -5,7 +5,7 @@
import { getInjectable } from "@ogre-tools/injectable";
import type { RawHelmChart } from "../helm-charts.api";
import { HelmChart } from "../helm-charts.api";
-import { isDefined } from "../../../utils";
+import { isDefined } from "@k8slens/utilities";
import apiBaseInjectable from "../../api-base.injectable";
export type RequestHelmCharts = () => Promise;
diff --git a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-readme.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-readme.injectable.ts
index fb8eaafa10..d6977fc5ca 100644
--- a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-readme.injectable.ts
+++ b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-readme.injectable.ts
@@ -3,13 +3,13 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
-import type { AsyncResult } from "../../../utils/async-result";
-import { urlBuilderFor } from "../../../utils/buildUrl";
+import type { AsyncResult } from "@k8slens/utilities";
+import { urlBuilderFor } from "@k8slens/utilities";
import apiBaseInjectable from "../../api-base.injectable";
const requestReadmeEndpoint = urlBuilderFor("/v2/charts/:repo/:name/readme");
-export type RequestHelmChartReadme = (repo: string, name: string, version?: string) => Promise>;
+export type RequestHelmChartReadme = (repo: string, name: string, version?: string) => AsyncResult;
const requestHelmChartReadmeInjectable = getInjectable({
id: "request-helm-chart-readme",
diff --git a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-values.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-values.injectable.ts
index 71105c9ff9..2d4e77bf33 100644
--- a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-values.injectable.ts
+++ b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-values.injectable.ts
@@ -3,13 +3,13 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
-import type { AsyncResult } from "../../../utils/async-result";
-import { urlBuilderFor } from "../../../utils/buildUrl";
+import type { AsyncResult } from "@k8slens/utilities";
+import { urlBuilderFor } from "@k8slens/utilities";
import apiBaseInjectable from "../../api-base.injectable";
const requestValuesEndpoint = urlBuilderFor("/v2/charts/:repo/:name/values");
-export type RequestHelmChartValues = (repo: string, name: string, version: string) => Promise>;
+export type RequestHelmChartValues = (repo: string, name: string, version: string) => AsyncResult;
const requestHelmChartValuesInjectable = getInjectable({
id: "request-helm-chart-values",
diff --git a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-versions.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-versions.injectable.ts
index ab85594ec6..f7527c093a 100644
--- a/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-versions.injectable.ts
+++ b/packages/core/src/common/k8s-api/endpoints/helm-charts.api/request-versions.injectable.ts
@@ -3,10 +3,9 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
-import { urlBuilderFor } from "../../../utils/buildUrl";
+import { urlBuilderFor, isDefined } from "@k8slens/utilities";
import { HelmChart } from "../helm-charts.api";
import type { RawHelmChart } from "../helm-charts.api";
-import { isDefined } from "../../../utils";
import apiBaseInjectable from "../../api-base.injectable";
const requestVersionsEndpoint = urlBuilderFor("/v2/charts/:repo/:name/versions");
diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.global-override-for-injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.global-override-for-injectable.ts
index 18b3bd0ec0..631d4c5e17 100644
--- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.global-override-for-injectable.ts
+++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../../../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import requestHelmReleaseConfigurationInjectable from "./request-configuration.injectable";
export default getGlobalOverride(requestHelmReleaseConfigurationInjectable, () => () => {
diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable.ts
index e1581c5d76..b9e6de7b0c 100644
--- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable.ts
+++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-configuration.injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
-import { urlBuilderFor } from "../../../utils/buildUrl";
+import { urlBuilderFor } from "@k8slens/utilities";
import apiBaseInjectable from "../../api-base.injectable";
export type RequestHelmReleaseConfiguration = (
diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-create.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-create.injectable.ts
index c1cd09d40f..253e97bf72 100644
--- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-create.injectable.ts
+++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-create.injectable.ts
@@ -5,7 +5,7 @@
import yaml from "js-yaml";
import { getInjectable } from "@ogre-tools/injectable";
import type { HelmReleaseUpdateDetails } from "../helm-releases.api";
-import { urlBuilderFor } from "../../../utils/buildUrl";
+import { urlBuilderFor } from "@k8slens/utilities";
import apiBaseInjectable from "../../api-base.injectable";
interface HelmReleaseCreatePayload {
diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-delete.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-delete.injectable.ts
index 44af4311a9..3b48f2d9b7 100644
--- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-delete.injectable.ts
+++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-delete.injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
-import { urlBuilderFor } from "../../../utils/buildUrl";
+import { urlBuilderFor } from "@k8slens/utilities";
import apiBaseInjectable from "../../api-base.injectable";
export type RequestDeleteHelmRelease = (name: string, namespace: string) => Promise;
diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-details.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-details.injectable.ts
index 37f2287377..8c7b3dd472 100644
--- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-details.injectable.ts
+++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-details.injectable.ts
@@ -4,7 +4,7 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import type { KubeJsonApiData } from "../../kube-json-api";
-import { urlBuilderFor } from "../../../utils/buildUrl";
+import { urlBuilderFor } from "@k8slens/utilities";
import apiBaseInjectable from "../../api-base.injectable";
export interface HelmReleaseDetails {
diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-history.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-history.injectable.ts
index 58b6a37dbb..9a9a3159ea 100644
--- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-history.injectable.ts
+++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-history.injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
-import { urlBuilderFor } from "../../../utils/buildUrl";
+import { urlBuilderFor } from "@k8slens/utilities";
import apiBaseInjectable from "../../api-base.injectable";
export interface HelmReleaseRevision {
diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-releases.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-releases.injectable.ts
index ee6503ca99..ffd3a92dee 100644
--- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-releases.injectable.ts
+++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-releases.injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
-import { urlBuilderFor } from "../../../utils/buildUrl";
+import { urlBuilderFor } from "@k8slens/utilities";
import apiBaseInjectable from "../../api-base.injectable";
import type { HelmReleaseDto } from "../helm-releases.api";
diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-rollback.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-rollback.injectable.ts
index 036b399ef2..9e43e4d8ac 100644
--- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-rollback.injectable.ts
+++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-rollback.injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
-import { urlBuilderFor } from "../../../utils/buildUrl";
+import { urlBuilderFor } from "@k8slens/utilities";
import apiBaseInjectable from "../../api-base.injectable";
export type RequestHelmReleaseRollback = (name: string, namespace: string, revision: number) => Promise;
diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-update.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-update.injectable.ts
index 715a21cea9..3a23536673 100644
--- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-update.injectable.ts
+++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-update.injectable.ts
@@ -3,8 +3,8 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
-import { urlBuilderFor } from "../../../utils/buildUrl";
-import type { AsyncResult } from "../../../utils/async-result";
+import { urlBuilderFor } from "@k8slens/utilities";
+import type { AsyncResult } from "@k8slens/utilities";
import apiBaseInjectable from "../../api-base.injectable";
interface HelmReleaseUpdatePayload {
@@ -18,7 +18,7 @@ export type RequestHelmReleaseUpdate = (
name: string,
namespace: string,
payload: HelmReleaseUpdatePayload
-) => Promise>;
+) => AsyncResult;
const requestUpdateEndpoint = urlBuilderFor("/v2/releases/:namespace/:name");
diff --git a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-values.injectable.ts b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-values.injectable.ts
index 99f1cc17d0..a1668b993e 100644
--- a/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-values.injectable.ts
+++ b/packages/core/src/common/k8s-api/endpoints/helm-releases.api/request-values.injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
-import { urlBuilderFor } from "../../../utils/buildUrl";
+import { urlBuilderFor } from "@k8slens/utilities";
import apiBaseInjectable from "../../api-base.injectable";
export type RequestHelmReleaseValues = (name: string, namespace: string, all?: boolean) => Promise;
diff --git a/packages/core/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.ts b/packages/core/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.ts
index f0bc5d14bc..b3bdbbf21d 100644
--- a/packages/core/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.ts
+++ b/packages/core/src/common/k8s-api/endpoints/horizontal-pod-autoscaler.api.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import type { OptionVarient } from "../../utils";
+import type { OptionVariant } from "@k8slens/utilities";
import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api";
import { KubeApi } from "../kube-api";
import type { BaseKubeObjectCondition, LabelSelector, NamespaceScopedMetadata } from "../kube-object";
@@ -46,7 +46,7 @@ export interface V2Beta1ContainerResourceMetricSource {
targetAverageValue?: string;
}
-export type ContainerResourceMetricSource =
+export type ContainerResourceMetricSource =
| V2ContainerResourceMetricSource
| V2Beta1ContainerResourceMetricSource;
@@ -74,7 +74,7 @@ export interface V2Beta1ExternalMetricSource {
};
}
-export type ExternalMetricSource =
+export type ExternalMetricSource =
| V2Beta1ExternalMetricSource
| V2ExternalMetricSource;
@@ -152,11 +152,11 @@ export interface BaseHorizontalPodAutoscalerMetricSpec {
}
export type HorizontalPodAutoscalerMetricSpec =
- | OptionVarient
- | OptionVarient
- | OptionVarient
- | OptionVarient
- | OptionVarient;
+ | OptionVariant
+ | OptionVariant
+ | OptionVariant
+ | OptionVariant
+ | OptionVariant;
interface HorizontalPodAutoscalerBehavior {
scaleUp?: HPAScalingRules;
@@ -294,11 +294,11 @@ export interface BaseHorizontalPodAutoscalerMetricStatus {
}
export type HorizontalPodAutoscalerMetricStatus =
- | OptionVarient
- | OptionVarient
- | OptionVarient
- | OptionVarient
- | OptionVarient;
+ | OptionVariant
+ | OptionVariant
+ | OptionVariant
+ | OptionVariant
+ | OptionVariant;
export interface HorizontalPodAutoscalerSpec {
scaleTargetRef: CrossVersionObjectReference;
diff --git a/packages/core/src/common/k8s-api/endpoints/ingress.api.ts b/packages/core/src/common/k8s-api/endpoints/ingress.api.ts
index d35cd77c0b..2a9a49ad8e 100644
--- a/packages/core/src/common/k8s-api/endpoints/ingress.api.ts
+++ b/packages/core/src/common/k8s-api/endpoints/ingress.api.ts
@@ -5,7 +5,7 @@
import type { NamespaceScopedMetadata, TypedLocalObjectReference } from "../kube-object";
import { KubeObject } from "../kube-object";
-import { hasTypedProperty, isString, iter } from "../../utils";
+import { hasTypedProperty, isString, iter } from "@k8slens/utilities";
import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api";
import { KubeApi } from "../kube-api";
import type { RequireExactlyOne } from "type-fest";
diff --git a/packages/core/src/common/k8s-api/endpoints/metrics.api.ts b/packages/core/src/common/k8s-api/endpoints/metrics.api.ts
index 406ab1d0b2..69465bbf6e 100644
--- a/packages/core/src/common/k8s-api/endpoints/metrics.api.ts
+++ b/packages/core/src/common/k8s-api/endpoints/metrics.api.ts
@@ -6,7 +6,7 @@
// Metrics api
import moment from "moment";
-import { isDefined, object } from "../../utils";
+import { isDefined, object } from "@k8slens/utilities";
export interface MetricData {
status: string;
diff --git a/packages/core/src/common/k8s-api/endpoints/node.api.ts b/packages/core/src/common/k8s-api/endpoints/node.api.ts
index 158f359a57..31839b24f8 100644
--- a/packages/core/src/common/k8s-api/endpoints/node.api.ts
+++ b/packages/core/src/common/k8s-api/endpoints/node.api.ts
@@ -5,7 +5,7 @@
import type { BaseKubeObjectCondition, ClusterScopedMetadata } from "../kube-object";
import { KubeObject } from "../kube-object";
-import { cpuUnitsToNumber, unitsToBytes, isObject } from "../../../renderer/utils";
+import { cpuUnitsToNumber, unitsToBytes, isObject } from "@k8slens/utilities";
import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api";
import { KubeApi } from "../kube-api";
import { TypedRegEx } from "typed-regex";
diff --git a/packages/core/src/common/k8s-api/endpoints/persistent-volume-claim.api.ts b/packages/core/src/common/k8s-api/endpoints/persistent-volume-claim.api.ts
index 947d9139a3..25e4d63454 100644
--- a/packages/core/src/common/k8s-api/endpoints/persistent-volume-claim.api.ts
+++ b/packages/core/src/common/k8s-api/endpoints/persistent-volume-claim.api.ts
@@ -8,7 +8,7 @@ import { KubeObject } from "../kube-object";
import type { Pod } from "./pod.api";
import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api";
import { KubeApi } from "../kube-api";
-import { object } from "../../utils";
+import { object } from "@k8slens/utilities";
import type { ResourceRequirements } from "./types/resource-requirements";
export class PersistentVolumeClaimApi extends KubeApi {
diff --git a/packages/core/src/common/k8s-api/endpoints/persistent-volume.api.ts b/packages/core/src/common/k8s-api/endpoints/persistent-volume.api.ts
index f4d80a82eb..6d6e249db5 100644
--- a/packages/core/src/common/k8s-api/endpoints/persistent-volume.api.ts
+++ b/packages/core/src/common/k8s-api/endpoints/persistent-volume.api.ts
@@ -5,7 +5,7 @@
import type { ClusterScopedMetadata, LabelSelector, ObjectReference, TypedLocalObjectReference } from "../kube-object";
import { KubeObject } from "../kube-object";
-import { unitsToBytes } from "../../utils";
+import { unitsToBytes } from "@k8slens/utilities";
import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api";
import { KubeApi } from "../kube-api";
import type { ResourceRequirements } from "./types/resource-requirements";
diff --git a/packages/core/src/common/k8s-api/endpoints/pod.api.ts b/packages/core/src/common/k8s-api/endpoints/pod.api.ts
index 3a0bed57cd..d0c0178d8d 100644
--- a/packages/core/src/common/k8s-api/endpoints/pod.api.ts
+++ b/packages/core/src/common/k8s-api/endpoints/pod.api.ts
@@ -10,7 +10,7 @@ import type { KubeObjectMetadata, LocalObjectReference, Affinity, Toleration, Na
import type { SecretReference } from "./secret.api";
import type { PersistentVolumeClaimSpec } from "./persistent-volume-claim.api";
import { KubeObject } from "../kube-object";
-import { isDefined } from "../../utils";
+import { isDefined } from "@k8slens/utilities";
import type { PodSecurityContext } from "./types/pod-security-context";
import type { Probe } from "./types/probe";
import type { Container } from "./types/container";
diff --git a/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-patch.injectable.ts b/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-patch.injectable.ts
index 49271fb6d2..714340c78a 100644
--- a/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-patch.injectable.ts
+++ b/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-patch.injectable.ts
@@ -5,10 +5,10 @@
import { getInjectable } from "@ogre-tools/injectable";
import type { Patch } from "rfc6902";
import apiBaseInjectable from "../../api-base.injectable";
-import type { AsyncResult } from "../../../utils/async-result";
+import type { AsyncResult, Result } from "@k8slens/utilities";
import type { KubeJsonApiData } from "../../kube-json-api";
-export type RequestKubeObjectPatch = (name: string, kind: string, ns: string | undefined, patch: Patch) => Promise>;
+export type RequestKubeObjectPatch = (name: string, kind: string, ns: string | undefined, patch: Patch) => AsyncResult;
const requestKubeObjectPatchInjectable = getInjectable({
id: "request-kube-object-patch",
@@ -23,7 +23,7 @@ const requestKubeObjectPatchInjectable = getInjectable({
ns,
patch,
},
- }) as AsyncResult;
+ }) as Result;
if (!result.callWasSuccessful) {
return result;
diff --git a/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-update.injectable.ts b/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-update.injectable.ts
index 1891a779cf..211ada1575 100644
--- a/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-update.injectable.ts
+++ b/packages/core/src/common/k8s-api/endpoints/resource-applier.api/request-update.injectable.ts
@@ -4,10 +4,10 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import apiBaseInjectable from "../../api-base.injectable";
-import type { AsyncResult } from "../../../utils/async-result";
+import type { AsyncResult, Result } from "@k8slens/utilities";
import type { KubeJsonApiData } from "../../kube-json-api";
-export type RequestKubeObjectCreation = (resourceDescriptor: string) => Promise>;
+export type RequestKubeObjectCreation = (resourceDescriptor: string) => AsyncResult;
const requestKubeObjectCreationInjectable = getInjectable({
id: "request-kube-object-creation",
@@ -15,7 +15,7 @@ const requestKubeObjectCreationInjectable = getInjectable({
const apiBase = di.inject(apiBaseInjectable);
return async (data) => {
- const result = await apiBase.post("/stack", { data }) as AsyncResult;
+ const result = await apiBase.post("/stack", { data }) as Result;
if (!result.callWasSuccessful) {
return result;
diff --git a/packages/core/src/common/k8s-api/endpoints/secret.api.ts b/packages/core/src/common/k8s-api/endpoints/secret.api.ts
index a5a3b5eb1c..213aa1ef2b 100644
--- a/packages/core/src/common/k8s-api/endpoints/secret.api.ts
+++ b/packages/core/src/common/k8s-api/endpoints/secret.api.ts
@@ -6,9 +6,9 @@
import type { KubeObjectMetadata, KubeObjectScope, NamespaceScopedMetadata } from "../kube-object";
import { KubeObject } from "../kube-object";
import type { KubeJsonApiData } from "../kube-json-api";
-import { autoBind } from "../../utils";
import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api";
import { KubeApi } from "../kube-api";
+import autoBind from "auto-bind";
export enum SecretType {
Opaque = "Opaque",
diff --git a/packages/core/src/common/k8s-api/endpoints/storage-class.api.ts b/packages/core/src/common/k8s-api/endpoints/storage-class.api.ts
index bf121e47db..d0b7167876 100644
--- a/packages/core/src/common/k8s-api/endpoints/storage-class.api.ts
+++ b/packages/core/src/common/k8s-api/endpoints/storage-class.api.ts
@@ -3,12 +3,12 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { autoBind } from "../../utils";
import type { ClusterScopedMetadata, KubeObjectMetadata, KubeObjectScope } from "../kube-object";
import { KubeObject } from "../kube-object";
import type { DerivedKubeApiOptions, KubeApiDependencies } from "../kube-api";
import { KubeApi } from "../kube-api";
import type { KubeJsonApiData } from "../kube-json-api";
+import autoBind from "auto-bind";
export interface TopologySelectorLabelRequirement {
key: string;
diff --git a/packages/core/src/common/k8s-api/json-api.ts b/packages/core/src/common/k8s-api/json-api.ts
index c99fddf4f6..00325f3853 100644
--- a/packages/core/src/common/k8s-api/json-api.ts
+++ b/packages/core/src/common/k8s-api/json-api.ts
@@ -15,8 +15,8 @@ import type { PartialDeep, ValueOf } from "type-fest";
import { EventEmitter } from "../../common/event-emitter";
import type { Logger } from "../../common/logger";
import type { Fetch } from "../fetch/fetch.injectable";
-import type { Defaulted } from "../utils";
-import { json } from "../utils";
+import type { Defaulted } from "@k8slens/utilities";
+import { isObject, isString, json } from "@k8slens/utilities";
export interface JsonApiData {}
@@ -184,20 +184,17 @@ export class JsonApi = Js
const res = await this.dependencies.fetch(reqUrl, reqInit);
- return this.parseResponse(res, infoLog);
+ return await this.parseResponse(res, infoLog) as OutData;
}
- protected async parseResponse(res: Response, log: JsonApiLog): Promise {
+ protected async parseResponse(res: Response, log: JsonApiLog): Promise {
const { status } = res;
const text = await res.text();
- let data: any;
-
- try {
- data = text ? json.parse(text) : ""; // DELETE-requests might not have response-body
- } catch (e) {
- data = text;
- }
+ const parseResponse = json.parse(text || "{}");
+ const data = parseResponse.callWasSuccessful
+ ? parseResponse.response as Data
+ : text as Data;
if (status >= 200 && status < 300) {
this.onData.emit(data, res);
@@ -211,7 +208,7 @@ export class JsonApi = Js
throw data;
}
- const error = new JsonApiErrorParsed(data, this.parseError(data, res));
+ const error = new JsonApiErrorParsed(data as JsonApiError, this.parseError(data, res));
this.onError.emit(error, res);
this.writeLog({ ...log, error });
@@ -219,16 +216,20 @@ export class JsonApi = Js
throw error;
}
- protected parseError(error: JsonApiError | string, res: Response): string[] {
- if (typeof error === "string") {
+ protected parseError(error: unknown, res: Response): string[] {
+ if (isString(error)) {
return [error];
}
+ if (!isObject(error)) {
+ return [];
+ }
+
if (Array.isArray(error.errors)) {
return error.errors.map(error => error.title);
}
- if (error.message) {
+ if (isString(error.message)) {
return [error.message];
}
diff --git a/packages/core/src/common/k8s-api/kube-api-parse.ts b/packages/core/src/common/k8s-api/kube-api-parse.ts
index cb5315b50c..2bb397a8be 100644
--- a/packages/core/src/common/k8s-api/kube-api-parse.ts
+++ b/packages/core/src/common/k8s-api/kube-api-parse.ts
@@ -5,7 +5,7 @@
// Parse kube-api path and get api-version, group, etc.
-import { splitArray } from "../utils";
+import { array } from "@k8slens/utilities";
export interface IKubeApiLinkRef {
apiPrefix?: string;
@@ -26,7 +26,7 @@ export function parseKubeApi(path: string): IKubeApiParsed {
const apiPath = new URL(path, "https://localhost").pathname;
const [, prefix, ...parts] = apiPath.split("/");
const apiPrefix = `/${prefix}`;
- const [left, right, namespaced] = splitArray(parts, "namespaces");
+ const [left, right, namespaced] = array.split(parts, "namespaces");
let apiGroup!: string;
let apiVersion!: string;
let namespace!: string;
diff --git a/packages/core/src/common/k8s-api/kube-api.ts b/packages/core/src/common/k8s-api/kube-api.ts
index 9db60b5484..95210478a1 100644
--- a/packages/core/src/common/k8s-api/kube-api.ts
+++ b/packages/core/src/common/k8s-api/kube-api.ts
@@ -13,8 +13,8 @@ import { KubeObject, KubeStatus, isKubeStatusData } from "./kube-object";
import byline from "byline";
import type { IKubeWatchEvent } from "./kube-watch-event";
import type { KubeJsonApiData, KubeJsonApi } from "./kube-json-api";
-import type { Disposer } from "../utils";
-import { isDefined, noop, WrappedAbortController } from "../utils";
+import type { Disposer } from "@k8slens/utilities";
+import { isDefined, noop, WrappedAbortController } from "@k8slens/utilities";
import type { RequestInit, Response } from "@k8slens/node-fetch";
import type { Patch } from "rfc6902";
import assert from "assert";
diff --git a/packages/core/src/common/k8s-api/kube-object.store.ts b/packages/core/src/common/k8s-api/kube-object.store.ts
index 571e395a7b..f26b05283e 100644
--- a/packages/core/src/common/k8s-api/kube-object.store.ts
+++ b/packages/core/src/common/k8s-api/kube-object.store.ts
@@ -4,8 +4,8 @@
*/
import { action, computed, makeObservable, observable, reaction } from "mobx";
-import type { Disposer } from "../utils";
-import { waitUntilDefined, autoBind, includes, rejectPromiseBy } from "../utils";
+import type { Disposer } from "@k8slens/utilities";
+import { waitUntilDefined, includes, rejectPromiseBy, object } from "@k8slens/utilities";
import type { KubeJsonApiDataFor, KubeObject } from "./kube-object";
import { KubeStatus } from "./kube-object";
import type { IKubeWatchEvent } from "./kube-watch-event";
@@ -17,9 +17,9 @@ import type { Patch } from "rfc6902";
import type { Logger } from "../logger";
import assert from "assert";
import type { PartialDeep } from "type-fest";
-import { entries } from "../utils/objects";
import AbortController from "abort-controller";
import type { ClusterContext } from "../../renderer/cluster-frame-context/cluster-frame-context";
+import autoBind from "auto-bind";
export type OnLoadFailure = (error: unknown) => void;
@@ -179,7 +179,7 @@ export abstract class KubeObjectStore<
return this.items.filter((item: K) => {
const itemLabels = item.metadata.labels || {};
- return entries(labels)
+ return object.entries(labels)
.every(([key, value]) => itemLabels[key] === value);
});
}
diff --git a/packages/core/src/common/k8s-api/kube-object.ts b/packages/core/src/common/k8s-api/kube-object.ts
index d88c19db89..e700710788 100644
--- a/packages/core/src/common/k8s-api/kube-object.ts
+++ b/packages/core/src/common/k8s-api/kube-object.ts
@@ -7,7 +7,7 @@
import moment from "moment";
import type { KubeJsonApiData, KubeJsonApiDataList, KubeJsonApiListMetadata } from "./kube-json-api";
-import { autoBind, formatDuration, hasOptionalTypedProperty, hasTypedProperty, isObject, isString, isNumber, bindPredicate, isTypedArray, isRecord, json } from "../utils";
+import { formatDuration, hasOptionalTypedProperty, hasTypedProperty, isObject, isString, isNumber, bindPredicate, isTypedArray, isRecord } from "@k8slens/utilities";
import type { ItemObject } from "../item.store";
import type { Patch } from "rfc6902";
import assert from "assert";
@@ -17,6 +17,7 @@ import { apiKubeInjectionToken } from "./api-kube";
import requestKubeObjectCreationInjectable from "./endpoints/resource-applier.api/request-update.injectable";
import { dump } from "js-yaml";
import { getLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
+import autoBind from "auto-bind";
export type KubeJsonApiDataFor = K extends KubeObject
? KubeJsonApiData
@@ -624,7 +625,7 @@ export class KubeObject<
}
toPlainObject() {
- return json.parse(JSON.stringify(this)) as JsonObject;
+ return JSON.parse(JSON.stringify(this)) as JsonObject;
}
/**
diff --git a/packages/core/src/common/k8s-api/selected-filter-namespaces.injectable.ts b/packages/core/src/common/k8s-api/selected-filter-namespaces.injectable.ts
index 6c70a665a4..41f664b895 100644
--- a/packages/core/src/common/k8s-api/selected-filter-namespaces.injectable.ts
+++ b/packages/core/src/common/k8s-api/selected-filter-namespaces.injectable.ts
@@ -4,7 +4,7 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import { computed } from "mobx";
-import namespaceStoreInjectable from "../../renderer/components/+namespaces/store.injectable";
+import clusterFrameContextForNamespacedResourcesInjectable from "../../renderer/cluster-frame-context/for-namespaced-resources.injectable";
import { storesAndApisCanBeCreatedInjectionToken } from "./stores-apis-can-be-created.token";
const selectedFilterNamespacesInjectable = getInjectable({
@@ -15,9 +15,9 @@ const selectedFilterNamespacesInjectable = getInjectable({
return computed(() => []);
}
- const store = di.inject(namespaceStoreInjectable);
+ const context = di.inject(clusterFrameContextForNamespacedResourcesInjectable);
- return computed(() => [...store.contextNamespaces]);
+ return computed(() => [...context.contextNamespaces]);
},
});
diff --git a/packages/core/src/common/k8s-api/window-location.global-override-for-injectable.ts b/packages/core/src/common/k8s-api/window-location.global-override-for-injectable.ts
index 616e110c88..3a75fb6134 100644
--- a/packages/core/src/common/k8s-api/window-location.global-override-for-injectable.ts
+++ b/packages/core/src/common/k8s-api/window-location.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import windowLocationInjectable from "./window-location.injectable";
export default getGlobalOverride(windowLocationInjectable, () => ({
diff --git a/packages/core/src/common/k8s/resource-stack.ts b/packages/core/src/common/k8s/resource-stack.ts
index 771b48b413..75460423d1 100644
--- a/packages/core/src/common/k8s/resource-stack.ts
+++ b/packages/core/src/common/k8s/resource-stack.ts
@@ -7,13 +7,13 @@ import type { KubernetesCluster } from "../catalog-entities";
import yaml from "js-yaml";
import { getLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
import productNameInjectable from "../vars/product-name.injectable";
-import type { AsyncResult } from "../utils/async-result";
+import type { AsyncResult } from "@k8slens/utilities";
import type { Logger } from "../logger";
import type { KubectlApplyAll, KubectlDeleteAll } from "../kube-helpers/channels";
import type { ReadDirectory } from "../fs/read-directory.injectable";
import type { JoinPaths } from "../path/join-paths.injectable";
import type { ReadFile } from "../fs/read-file.injectable";
-import { hasTypedProperty, isObject } from "../utils";
+import { hasTypedProperty, isObject } from "@k8slens/utilities";
export interface ResourceApplyingStack {
kubectlApplyFolder(folderPath: string, templateContext?: any, extraArgs?: string[]): Promise;
@@ -51,7 +51,7 @@ export class ResourceStack {
this.dependencies.logger.warn(`[RESOURCE-STACK]: failed to apply resources: ${result.error}`);
- return "";
+ throw new Error(result.error);
}
/**
@@ -72,7 +72,7 @@ export class ResourceStack {
return "";
}
- protected async applyResources(resources: string[], extraArgs: string[] = []): Promise> {
+ protected async applyResources(resources: string[], extraArgs: string[] = []): AsyncResult {
const kubectlArgs = [...extraArgs, ...this.getAdditionalArgs(extraArgs)];
return this.dependencies.kubectlApplyAll({
@@ -82,7 +82,7 @@ export class ResourceStack {
});
}
- protected async deleteResources(resources: string[], extraArgs: string[] = []): Promise> {
+ protected async deleteResources(resources: string[], extraArgs: string[] = []): AsyncResult {
const kubectlArgs = [...extraArgs, ...this.getAdditionalArgs(extraArgs)];
return this.dependencies.kubectlDeleteAll({
diff --git a/packages/core/src/common/kube-helpers.ts b/packages/core/src/common/kube-helpers.ts
index c439c29d16..6deb9ab8a1 100644
--- a/packages/core/src/common/kube-helpers.ts
+++ b/packages/core/src/common/kube-helpers.ts
@@ -7,7 +7,7 @@ import { KubeConfig } from "@kubernetes/client-node";
import yaml from "js-yaml";
import type { Cluster, Context, User } from "@kubernetes/client-node/dist/config_types";
import { newClusters, newContexts, newUsers } from "@kubernetes/client-node/dist/config_types";
-import { isDefined } from "./utils";
+import { isDefined } from "@k8slens/utilities";
import Joi from "joi";
import type { PartialDeep } from "type-fest";
diff --git a/packages/core/src/common/kube-helpers/channels.ts b/packages/core/src/common/kube-helpers/channels.ts
index 4782f64367..b48f9f1f99 100644
--- a/packages/core/src/common/kube-helpers/channels.ts
+++ b/packages/core/src/common/kube-helpers/channels.ts
@@ -7,7 +7,7 @@ import { getInjectionToken } from "@ogre-tools/injectable";
import type { Asyncify } from "type-fest";
import type { RequestChannelHandler } from "../../main/utils/channel/channel-listeners/listener-tokens";
import type { ClusterId } from "../cluster-types";
-import type { AsyncResult } from "../utils/async-result";
+import type { AsyncResult } from "@k8slens/utilities";
import type { RequestChannel } from "../utils/channel/request-channel-listener-injection-token";
export interface KubectlApplyAllArgs {
diff --git a/packages/core/src/common/kube-helpers/load-config-from-file.injectable.ts b/packages/core/src/common/kube-helpers/load-config-from-file.injectable.ts
index afa9d3c070..f78b5961da 100644
--- a/packages/core/src/common/kube-helpers/load-config-from-file.injectable.ts
+++ b/packages/core/src/common/kube-helpers/load-config-from-file.injectable.ts
@@ -8,11 +8,11 @@ import type { ConfigResult } from "../kube-helpers";
import { loadConfigFromString } from "../kube-helpers";
import resolveTildeInjectable from "../path/resolve-tilde.injectable";
-export type LoadConfigfromFile = (filePath: string) => Promise;
+export type LoadConfigFromFile = (filePath: string) => Promise;
-const loadConfigfromFileInjectable = getInjectable({
- id: "load-configfrom-file",
- instantiate: (di): LoadConfigfromFile => {
+const loadConfigFromFileInjectable = getInjectable({
+ id: "load-config-from-file",
+ instantiate: (di): LoadConfigFromFile => {
const readFile = di.inject(readFileInjectable);
const resolveTilde = di.inject(resolveTildeInjectable);
@@ -20,4 +20,4 @@ const loadConfigfromFileInjectable = getInjectable({
},
});
-export default loadConfigfromFileInjectable;
+export default loadConfigFromFileInjectable;
diff --git a/packages/core/src/common/log-error.global-override-for-injectable.ts b/packages/core/src/common/log-error.global-override-for-injectable.ts
index e3a03c2802..95fa0ac16f 100644
--- a/packages/core/src/common/log-error.global-override-for-injectable.ts
+++ b/packages/core/src/common/log-error.global-override-for-injectable.ts
@@ -2,7 +2,7 @@
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverrideForFunction } from "./test-utils/get-global-override-for-function";
+import { getGlobalOverrideForFunction } from "@k8slens/test-utils";
import logErrorInjectable from "./log-error.injectable";
// Note: this should remain as it is, and throw if called. Logging error is something
diff --git a/packages/core/src/common/log-error.injectable.ts b/packages/core/src/common/log-error.injectable.ts
index 4fab2cd546..84a77a679a 100644
--- a/packages/core/src/common/log-error.injectable.ts
+++ b/packages/core/src/common/log-error.injectable.ts
@@ -8,6 +8,7 @@ import loggerInjectable from "./logger.injectable";
const logErrorInjectable = getInjectable({
id: "log-error",
instantiate: (di) => di.inject(loggerInjectable).error,
+ decorable: false,
});
export default logErrorInjectable;
diff --git a/packages/core/src/common/logger.global-override-for-injectable.ts b/packages/core/src/common/logger.global-override-for-injectable.ts
index cad548cd22..e314316d47 100644
--- a/packages/core/src/common/logger.global-override-for-injectable.ts
+++ b/packages/core/src/common/logger.global-override-for-injectable.ts
@@ -4,13 +4,12 @@
*/
import loggerInjectable from "./logger.injectable";
-import { getGlobalOverride } from "./test-utils/get-global-override";
-import { noop } from "./utils";
+import { getGlobalOverride } from "@k8slens/test-utils";
export default getGlobalOverride(loggerInjectable, () => ({
- warn: noop,
- debug: noop,
- error: noop,
- info: noop,
- silly: noop,
+ warn: () => {},
+ debug: () => {},
+ error: () => {},
+ info: () => {},
+ silly: () => {},
}));
diff --git a/packages/core/src/common/logger.injectable.ts b/packages/core/src/common/logger.injectable.ts
index 82ff682c46..bc1c5de71b 100644
--- a/packages/core/src/common/logger.injectable.ts
+++ b/packages/core/src/common/logger.injectable.ts
@@ -3,13 +3,20 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
+import { createLogger, format } from "winston";
import type { Logger } from "./logger";
-import winstonLoggerInjectable from "./winston-logger.injectable";
+import { loggerTransportInjectionToken } from "./logger/transports";
const loggerInjectable = getInjectable({
id: "logger",
instantiate: (di): Logger => {
- const baseLogger = di.inject(winstonLoggerInjectable);
+ const baseLogger = createLogger({
+ format: format.combine(
+ format.splat(),
+ format.simple(),
+ ),
+ transports: di.injectMany(loggerTransportInjectionToken),
+ });
return {
debug: (message, ...data) => baseLogger.debug(message, ...data),
@@ -19,6 +26,8 @@ const loggerInjectable = getInjectable({
silly: (message, ...data) => baseLogger.silly(message, ...data),
};
},
+
+ decorable: false,
});
export default loggerInjectable;
diff --git a/packages/core/src/common/os/temp-directory-path.global-override-for-injectable.ts b/packages/core/src/common/os/temp-directory-path.global-override-for-injectable.ts
index 05615644f9..dde5e3008c 100644
--- a/packages/core/src/common/os/temp-directory-path.global-override-for-injectable.ts
+++ b/packages/core/src/common/os/temp-directory-path.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import tempDirectoryPathInjectable from "./temp-directory-path.injectable";
export default getGlobalOverride(tempDirectoryPathInjectable, () => "/some-temp-directory");
diff --git a/packages/core/src/common/path/get-absolute-path.global-override-for-injectable.ts b/packages/core/src/common/path/get-absolute-path.global-override-for-injectable.ts
index 15f377cb2c..6ebbd34bd8 100644
--- a/packages/core/src/common/path/get-absolute-path.global-override-for-injectable.ts
+++ b/packages/core/src/common/path/get-absolute-path.global-override-for-injectable.ts
@@ -4,7 +4,7 @@
*/
import path from "path";
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import getAbsolutePathInjectable from "./get-absolute-path.injectable";
export default getGlobalOverride(getAbsolutePathInjectable, () => path.posix.resolve);
diff --git a/packages/core/src/common/path/get-basename.global-override-for-injectable.ts b/packages/core/src/common/path/get-basename.global-override-for-injectable.ts
index 913ec9c5c2..76c45ae30f 100644
--- a/packages/core/src/common/path/get-basename.global-override-for-injectable.ts
+++ b/packages/core/src/common/path/get-basename.global-override-for-injectable.ts
@@ -4,7 +4,7 @@
*/
import path from "path";
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import getBasenameOfPathInjectable from "./get-basename.injectable";
export default getGlobalOverride(getBasenameOfPathInjectable, () => path.posix.basename);
diff --git a/packages/core/src/common/path/get-dirname.global-override-for-injectable.ts b/packages/core/src/common/path/get-dirname.global-override-for-injectable.ts
index ed694de182..5579636551 100644
--- a/packages/core/src/common/path/get-dirname.global-override-for-injectable.ts
+++ b/packages/core/src/common/path/get-dirname.global-override-for-injectable.ts
@@ -4,7 +4,7 @@
*/
import path from "path";
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import getDirnameOfPathInjectable from "./get-dirname.injectable";
export default getGlobalOverride(getDirnameOfPathInjectable, () => path.posix.dirname);
diff --git a/packages/core/src/common/path/get-relative-path.global-override-for-injectable.ts b/packages/core/src/common/path/get-relative-path.global-override-for-injectable.ts
index 9e96b70301..987165af15 100644
--- a/packages/core/src/common/path/get-relative-path.global-override-for-injectable.ts
+++ b/packages/core/src/common/path/get-relative-path.global-override-for-injectable.ts
@@ -4,7 +4,7 @@
*/
import path from "path";
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import getRelativePathInjectable from "./get-relative-path.injectable";
export default getGlobalOverride(getRelativePathInjectable, () => path.posix.relative);
diff --git a/packages/core/src/common/path/join-paths.global-override-for-injectable.ts b/packages/core/src/common/path/join-paths.global-override-for-injectable.ts
index d3e9d5e4c2..320490c0f3 100644
--- a/packages/core/src/common/path/join-paths.global-override-for-injectable.ts
+++ b/packages/core/src/common/path/join-paths.global-override-for-injectable.ts
@@ -4,7 +4,7 @@
*/
import path from "path";
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import joinPathsInjectable from "./join-paths.injectable";
export default getGlobalOverride(joinPathsInjectable, () => path.posix.join);
diff --git a/packages/core/src/common/path/parse.global-override-for-injectable.ts b/packages/core/src/common/path/parse.global-override-for-injectable.ts
index fad97db696..9dbc434bca 100644
--- a/packages/core/src/common/path/parse.global-override-for-injectable.ts
+++ b/packages/core/src/common/path/parse.global-override-for-injectable.ts
@@ -4,7 +4,7 @@
*/
import path from "path";
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import parsePathInjectable from "./parse.injectable";
export default getGlobalOverride(parsePathInjectable, () => path.posix.parse);
diff --git a/packages/core/src/common/path/separator.global-override-for-injectable.ts b/packages/core/src/common/path/separator.global-override-for-injectable.ts
index 655f8908b0..25d0700481 100644
--- a/packages/core/src/common/path/separator.global-override-for-injectable.ts
+++ b/packages/core/src/common/path/separator.global-override-for-injectable.ts
@@ -4,7 +4,7 @@
*/
import path from "path";
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import fileSystemSeparatorInjectable from "./separator.injectable";
export default getGlobalOverride(fileSystemSeparatorInjectable, () => path.posix.sep);
diff --git a/packages/core/src/common/protocol-handler/router.ts b/packages/core/src/common/protocol-handler/router.ts
index 8c9915b287..0018c385c2 100644
--- a/packages/core/src/common/protocol-handler/router.ts
+++ b/packages/core/src/common/protocol-handler/router.ts
@@ -6,7 +6,7 @@
import type { match } from "react-router";
import { matchPath } from "react-router";
import { countBy } from "lodash";
-import { isDefined, iter } from "../utils";
+import { isDefined, iter } from "@k8slens/utilities";
import { pathToRegexp } from "path-to-regexp";
import type Url from "url-parse";
import { RoutingError, RoutingErrorType } from "./error";
diff --git a/packages/core/src/common/runnable/run-many-for.ts b/packages/core/src/common/runnable/run-many-for.ts
deleted file mode 100644
index 106cc74da1..0000000000
--- a/packages/core/src/common/runnable/run-many-for.ts
+++ /dev/null
@@ -1,140 +0,0 @@
-/**
- * Copyright (c) OpenLens Authors. All rights reserved.
- * Licensed under MIT License. See LICENSE in root directory for more information.
- */
-import type { DiContainerForInjection, InjectionToken } from "@ogre-tools/injectable";
-import type { SingleOrMany } from "../utils";
-import { getOrInsert, getOrInsertSetFor, isDefined } from "../utils";
-import * as uuid from "uuid";
-import assert from "assert";
-import type { Asyncify } from "type-fest";
-import type TypedEventEmitter from "typed-emitter";
-import EventEmitter from "events";
-
-export interface Runnable {
- id: string;
- run: Run;
- runAfter?: SingleOrMany>;
-}
-
-type Run = (parameter: Param) => Promise | void;
-
-export type RunMany = (injectionToken: InjectionToken, void>) => Asyncify>;
-
-const computedNextEdge = (traversed: string[], graph: Map>, currentId: string, seenIds: Set) => {
- seenIds.add(currentId);
- const currentNode = graph.get(currentId);
-
- assert(currentNode, `Runnable graph does not contain node with id="${currentId}"`);
-
- for (const nextId of currentNode.values()) {
- if (traversed.includes(nextId)) {
- throw new Error(`Cycle in runnable graph: "${traversed.join(`" -> "`)}" -> "${nextId}"`);
- }
-
- computedNextEdge([...traversed, nextId], graph, nextId, seenIds);
- }
-};
-
-const verifyRunnablesAreDAG = (injectionToken: InjectionToken, void>, runnables: Runnable []) => {
- const rootId = uuid.v4();
- const runnableGraph = new Map>();
- const seenIds = new Set();
- const addRunnableId = getOrInsertSetFor(runnableGraph);
-
- // Build the Directed graph
- for (const runnable of runnables) {
- addRunnableId(runnable.id);
-
- if (!runnable.runAfter || (Array.isArray(runnable.runAfter) && runnable.runAfter.length === 0)) {
- addRunnableId(rootId).add(runnable.id);
- } else if (Array.isArray(runnable.runAfter)) {
- for (const parentRunnable of runnable.runAfter) {
- addRunnableId(parentRunnable.id).add(runnable.id);
- }
- } else {
- addRunnableId(runnable.runAfter.id).add(runnable.id);
- }
- }
-
- addRunnableId(rootId);
-
- // Do a DFS to find any cycles
- computedNextEdge([], runnableGraph, rootId, seenIds);
-
- for (const id of runnableGraph.keys()) {
- if (!seenIds.has(id)) {
- const runnable = runnables.find(runnable => runnable.id === id);
-
- if (!runnable) {
- throw new Error(`Runnable "${id}" is not part of the injection token "${injectionToken.id}"`);
- }
-
- const runAfters = [runnable.runAfter]
- .flat()
- .filter(isDefined)
- .map(runnable => runnable.id)
- .join('", "');
-
- throw new Error(`Runnable "${id}" is unreachable for injection token "${injectionToken.id}": run afters "${runAfters}" are a part of different injection tokens.`);
- }
- }
-};
-
-interface BarrierEvent {
- finish: (id: string) => void;
-}
-
-class DynamicBarrier {
- private readonly finishedIds = new Map>();
- private readonly events: TypedEventEmitter = new EventEmitter();
-
- private initFinishingPromise(id: string): Promise {
- return getOrInsert(this.finishedIds, id, new Promise(resolve => {
- const handler = (finishedId: string) => {
- if (finishedId === id) {
- resolve();
- this.events.removeListener("finish", handler);
- }
- };
-
- this.events.addListener("finish", handler);
- }));
- }
-
- setFinished(id: string): void {
- void this.initFinishingPromise(id);
-
- this.events.emit("finish", id);
- }
-
- async blockOn(id: string): Promise {
- await this.initFinishingPromise(id);
- }
-}
-
-const executeRunnableWith = (param: Param) => {
- const barrier = new DynamicBarrier();
-
- return async (runnable: Runnable ): Promise => {
- const parentRunnables = [runnable.runAfter].flat().filter(isDefined);
-
- for (const parentRunnable of parentRunnables) {
- await barrier.blockOn(parentRunnable.id);
- }
-
- await runnable.run(param);
- barrier.setFinished(runnable.id);
- };
-};
-
-export function runManyFor(di: DiContainerForInjection): RunMany {
- return (injectionToken: InjectionToken, void>) => async (param: Param) => {
- const executeRunnable = executeRunnableWith(param);
- const allRunnables = di.injectMany(injectionToken);
-
- verifyRunnablesAreDAG(injectionToken, allRunnables);
-
- await Promise.all(allRunnables.map(executeRunnable));
- };
-}
diff --git a/packages/core/src/common/runnable/run-many-sync-for.ts b/packages/core/src/common/runnable/run-many-sync-for.ts
deleted file mode 100644
index 08dba2f72d..0000000000
--- a/packages/core/src/common/runnable/run-many-sync-for.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Copyright (c) OpenLens Authors. All rights reserved.
- * Licensed under MIT License. See LICENSE in root directory for more information.
- */
-import type { DiContainerForInjection, InjectionToken } from "@ogre-tools/injectable";
-import type { Composite } from "../utils/composite/get-composite/get-composite";
-import { getCompositeFor } from "../utils/composite/get-composite/get-composite";
-import * as uuid from "uuid";
-
-export interface RunnableSync {
- id: string;
- run: RunSync;
- runAfter?: RunnableSync;
-}
-
-/**
- * NOTE: this is the worse of two evils. This makes sure that `RunnableSync` always is sync.
- * If the return type is `void` instead then async functions (those return `Promise`) can
- * coerce to it.
- */
-type RunSync = (parameter: Param) => undefined;
-
-export type RunManySync = (injectionToken: InjectionToken, void>) => RunSync ;
-
-function runCompositeRunnableSyncs (param: Param, composite: Composite>): undefined {
- composite.value.run(param);
- composite.children.map(composite => runCompositeRunnableSyncs(param, composite));
-
- return undefined;
-}
-
-export function runManySyncFor(di: DiContainerForInjection): RunManySync {
- return (injectionToken: InjectionToken, void>) => (param: Param): undefined => {
- const allRunnables = di.injectMany(injectionToken);
- const rootId = uuid.v4();
- const getCompositeRunnables = getCompositeFor>({
- getId: (runnable) => runnable.id,
- getParentId: (runnable) => (
- runnable.id === rootId
- ? undefined
- : runnable.runAfter?.id ?? rootId
- ),
- });
- const composite = getCompositeRunnables([
- // This is a dummy runnable to conform to the requirements of `getCompositeFor` to only have one root
- {
- id: rootId,
- run: () => undefined,
- },
- ...allRunnables,
- ]);
-
- return runCompositeRunnableSyncs(param, composite);
- };
-}
diff --git a/packages/core/src/common/test-utils/get-global-override.ts b/packages/core/src/common/test-utils/get-global-override.ts
deleted file mode 100644
index ac3c86a33e..0000000000
--- a/packages/core/src/common/test-utils/get-global-override.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Copyright (c) OpenLens Authors. All rights reserved.
- * Licensed under MIT License. See LICENSE in root directory for more information.
- */
-import type { Injectable } from "@ogre-tools/injectable";
-
-export interface GlobalOverride {
- injectable: Injectable;
- overridingInstantiate: any;
-}
-
-export const getGlobalOverride = >(
- injectable: T,
- overridingInstantiate: T["instantiate"],
-) => ({
- injectable,
- overridingInstantiate,
- });
diff --git a/packages/core/src/common/user-store/current-timezone.global-override-for-injectable.ts b/packages/core/src/common/user-store/current-timezone.global-override-for-injectable.ts
index 6056074d3c..ef831ca3c1 100644
--- a/packages/core/src/common/user-store/current-timezone.global-override-for-injectable.ts
+++ b/packages/core/src/common/user-store/current-timezone.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import currentTimezoneInjectable from "./current-timezone.injectable";
export default getGlobalOverride(currentTimezoneInjectable, () => "Etc/GMT");
diff --git a/packages/core/src/common/user-store/file-name-migration.global-override-for-injectable.ts b/packages/core/src/common/user-store/file-name-migration.global-override-for-injectable.ts
index bb0ac054f3..0cd1383cc6 100644
--- a/packages/core/src/common/user-store/file-name-migration.global-override-for-injectable.ts
+++ b/packages/core/src/common/user-store/file-name-migration.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import userStoreFileNameMigrationInjectable from "./file-name-migration.injectable";
export default getGlobalOverride(userStoreFileNameMigrationInjectable, () => async () => {});
diff --git a/packages/core/src/common/user-store/file-name-migration.injectable.ts b/packages/core/src/common/user-store/file-name-migration.injectable.ts
index 106f559ef0..31d5352056 100644
--- a/packages/core/src/common/user-store/file-name-migration.injectable.ts
+++ b/packages/core/src/common/user-store/file-name-migration.injectable.ts
@@ -5,7 +5,7 @@
import fse from "fs-extra";
import directoryForUserDataInjectable from "../app-paths/directory-for-user-data/directory-for-user-data.injectable";
-import { isErrnoException } from "../utils";
+import { isErrnoException } from "@k8slens/utilities";
import { getInjectable } from "@ogre-tools/injectable";
import joinPathsInjectable from "../path/join-paths.injectable";
diff --git a/packages/core/src/common/user-store/user-info.global-override-for-injectable.ts b/packages/core/src/common/user-store/user-info.global-override-for-injectable.ts
index 21fb26f8a9..cc650f6de3 100644
--- a/packages/core/src/common/user-store/user-info.global-override-for-injectable.ts
+++ b/packages/core/src/common/user-store/user-info.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import userInfoInjectable from "./user-info.injectable";
export default getGlobalOverride(userInfoInjectable, () => ({
diff --git a/packages/core/src/common/user-store/user-store.ts b/packages/core/src/common/user-store/user-store.ts
index 8979ba3351..4ffa31fac1 100644
--- a/packages/core/src/common/user-store/user-store.ts
+++ b/packages/core/src/common/user-store/user-store.ts
@@ -6,7 +6,7 @@
import { action, observable, makeObservable, isObservableArray, isObservableSet, isObservableMap } from "mobx";
import type { BaseStoreDependencies } from "../base-store/base-store";
import { BaseStore } from "../base-store/base-store";
-import { getOrInsertSet, toggle, toJS, object } from "../../renderer/utils";
+import { getOrInsertSet, toggle, object } from "@k8slens/utilities";
import type { UserPreferencesModel, StoreType } from "./preferences-helpers";
import type { EmitAppEvent } from "../app-event-bus/emit-event.injectable";
@@ -14,6 +14,7 @@ import type { EmitAppEvent } from "../app-event-bus/emit-event.injectable";
import type { SelectedUpdateChannel } from "../../features/application-update/common/selected-update-channel/selected-update-channel.injectable";
import type { ReleaseChannel } from "../../features/application-update/common/update-channels";
import type { PreferenceDescriptors } from "./preference-descriptors.injectable";
+import { toJS } from "../utils";
export interface UserStoreModel {
preferences: UserPreferencesModel;
diff --git a/packages/core/src/common/utils/__tests__/iter.test.ts b/packages/core/src/common/utils/__tests__/iter.test.ts
deleted file mode 100644
index 2489649d90..0000000000
--- a/packages/core/src/common/utils/__tests__/iter.test.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-/**
- * Copyright (c) OpenLens Authors. All rights reserved.
- * Licensed under MIT License. See LICENSE in root directory for more information.
- */
-
-import { join, nth, reduce, concat } from "../iter";
-
-describe("iter", () => {
- describe("reduce", () => {
- it("can reduce a value", () => {
- expect(reduce([1, 2, 3], (acc: number[], current: number) => [current, ...acc], [0])).toEqual([3, 2, 1, 0]);
- });
-
- it("can reduce an empty iterable", () => {
- expect(reduce([], (acc: number[], current: number) => [acc[0] + current], [])).toEqual([]);
- });
- });
-
- describe("join", () => {
- it("should not prefix the output by the seperator", () => {
- expect(join(["a", "b", "c"].values(), " ")).toBe("a b c");
- });
-
- it("should return empty string if iterator is empty", () => {
- expect(join([].values(), " ")).toBe("");
- });
-
- it("should return just first entry if iterator is of size 1", () => {
- expect(join(["d"].values(), " ")).toBe("d");
- });
- });
-
- describe("nth", () => {
- it("should return undefined past the end of the iterator", () => {
- expect(nth(["a"], 123)).toBeUndefined();
- });
-
- it("should by 0-indexing the index", () => {
- expect(nth(["a", "b"], 0)).toBe("a");
- });
- });
-
- describe("concat", () => {
- it("should yield undefined for empty args", () => {
- const iter = concat();
-
- expect(iter.next()).toEqual({ done: true });
- });
-
- it("should yield undefined for only empty args", () => {
- const iter = concat([].values(), [].values(), [].values(), [].values());
-
- expect(iter.next()).toEqual({ done: true });
- });
-
- it("should yield all of the first and then all of the second", () => {
- const iter = concat([1, 2, 3].values(), [4, 5, 6].values());
-
- expect(iter.next()).toEqual({ done: false, value: 1 });
- expect(iter.next()).toEqual({ done: false, value: 2 });
- expect(iter.next()).toEqual({ done: false, value: 3 });
- expect(iter.next()).toEqual({ done: false, value: 4 });
- expect(iter.next()).toEqual({ done: false, value: 5 });
- expect(iter.next()).toEqual({ done: false, value: 6 });
- expect(iter.next()).toEqual({ done: true });
- });
- });
-});
diff --git a/packages/core/src/common/utils/__tests__/n-fircate.test.ts b/packages/core/src/common/utils/__tests__/n-fircate.test.ts
deleted file mode 100644
index 7e6f84a095..0000000000
--- a/packages/core/src/common/utils/__tests__/n-fircate.test.ts
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Copyright (c) OpenLens Authors. All rights reserved.
- * Licensed under MIT License. See LICENSE in root directory for more information.
- */
-
-import { nFircate } from "../n-fircate";
-
-describe("nFircate", () => {
- it("should produce an empty array if no parts are provided", () => {
- expect(nFircate([{ a: 1 }, { a: 2 }], "a", []).length).toBe(0);
- });
-
- it("should ignore non-matching parts", () => {
- const res = nFircate([{ a: 1 }, { a: 2 }], "a", [1]);
-
- expect(res.length).toBe(1);
- expect(res[0].length).toBe(1);
- });
-
- it("should include all matching parts in each type", () => {
- const res = nFircate([{ a: 1, b: "a" }, { a: 2, b: "b" }, { a: 1, b: "c" }], "a", [1, 2]);
-
- expect(res.length).toBe(2);
- expect(res[0].length).toBe(2);
- expect(res[0][0].b).toBe("a");
- expect(res[0][1].b).toBe("c");
- expect(res[1].length).toBe(1);
- expect(res[1][0].b).toBe("b");
- });
-
- it("should throw a type error if the same part is provided more than once", () => {
- try {
- nFircate([{ a: 1, b: "a" }, { a: 2, b: "b" }, { a: 1, b: "c" }], "a", [1, 2, 1]);
- fail("Expected error");
- } catch (error) {
- expect(error).toBeInstanceOf(TypeError);
- }
- });
-});
diff --git a/packages/core/src/common/utils/array.ts b/packages/core/src/common/utils/array.ts
deleted file mode 100644
index b9071c33ec..0000000000
--- a/packages/core/src/common/utils/array.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Copyright (c) OpenLens Authors. All rights reserved.
- * Licensed under MIT License. See LICENSE in root directory for more information.
- */
-
-/**
- * A inference typed version of `Array(length).fill(value)`
- * @param length The number of entries
- * @param value The value of each of the indices
- */
-export function filled(length: number, value: T): T[] {
- return Array(length).fill(value);
-}
diff --git a/packages/core/src/common/utils/autobind.ts b/packages/core/src/common/utils/autobind.ts
deleted file mode 100644
index 49feb435e3..0000000000
--- a/packages/core/src/common/utils/autobind.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-/**
- * Copyright (c) OpenLens Authors. All rights reserved.
- * Licensed under MIT License. See LICENSE in root directory for more information.
- */
-
-import type { Options } from "auto-bind";
-import autoBindClass from "auto-bind";
-import autoBindReactClass from "auto-bind/react";
-import React from "react";
-
-// Automatically bind methods to their class instance
-export function autoBind(obj: T, opts?: Options): T {
- if (obj instanceof React.Component) {
- return autoBindReactClass(obj, opts);
- }
-
- return autoBindClass(obj, opts);
-}
diff --git a/packages/core/src/common/utils/channel/channel.test.ts b/packages/core/src/common/utils/channel/channel.test.ts
index 9a361b6770..c27817dd68 100644
--- a/packages/core/src/common/utils/channel/channel.test.ts
+++ b/packages/core/src/common/utils/channel/channel.test.ts
@@ -16,10 +16,13 @@ import { requestFromChannelInjectionToken } from "./request-from-channel-injecti
import type { RequestChannel } from "./request-channel-listener-injection-token";
import type { AsyncFnMock } from "@async-fn/jest";
import asyncFn from "@async-fn/jest";
-import { getPromiseStatus } from "../../test-utils/get-promise-status";
+import { getPromiseStatus } from "@k8slens/test-utils";
import { runInAction } from "mobx";
import type { RequestChannelHandler } from "../../../main/utils/channel/channel-listeners/listener-tokens";
-import { getRequestChannelListenerInjectable } from "../../../main/utils/channel/channel-listeners/listener-tokens";
+import {
+ getRequestChannelListenerInjectable,
+ requestChannelListenerInjectionToken,
+} from "../../../main/utils/channel/channel-listeners/listener-tokens";
type TestMessageChannel = MessageChannel;
type TestRequestChannel = RequestChannel;
@@ -199,21 +202,32 @@ describe("channel", () => {
it("when registering multiple handlers for the same channel, throws", async () => {
const applicationBuilder = getApplicationBuilder();
- const testChannelListenerInMainInjectable = getRequestChannelListenerInjectable({
- channel: testRequestChannel,
- handler: () => () => "some-value",
- });
- const testChannelListenerInMain2Injectable = getRequestChannelListenerInjectable({
- channel: testRequestChannel,
- handler: () => () => "some-other-value",
+ const someChannelListenerInjectable = getInjectable({
+ id: "some-channel-listener",
+
+ instantiate: () => ({
+ channel: testRequestChannel,
+ handler: () => () => "irrelevant",
+ }),
+
+ injectionToken: requestChannelListenerInjectionToken,
});
- testChannelListenerInMain2Injectable.id += "2";
+ const someOtherChannelListenerInjectable = getInjectable({
+ id: "some-other-channel-listener",
+
+ instantiate: () => ({
+ channel: testRequestChannel,
+ handler: () => () => "irrelevant",
+ }),
+
+ injectionToken: requestChannelListenerInjectionToken,
+ });
applicationBuilder.beforeApplicationStart((mainDi) => {
runInAction(() => {
- mainDi.register(testChannelListenerInMainInjectable);
- mainDi.register(testChannelListenerInMain2Injectable);
+ mainDi.register(someChannelListenerInjectable);
+ mainDi.register(someOtherChannelListenerInjectable);
});
});
diff --git a/packages/core/src/common/utils/channel/enlist-message-channel-listener-injection-token.ts b/packages/core/src/common/utils/channel/enlist-message-channel-listener-injection-token.ts
index 34f62d51d5..d6db37cea2 100644
--- a/packages/core/src/common/utils/channel/enlist-message-channel-listener-injection-token.ts
+++ b/packages/core/src/common/utils/channel/enlist-message-channel-listener-injection-token.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectionToken } from "@ogre-tools/injectable";
-import type { Disposer } from "../disposer";
+import type { Disposer } from "@k8slens/utilities";
import type { MessageChannel, MessageChannelListener } from "./message-channel-listener-injection-token";
export type EnlistMessageChannelListener = (listener: MessageChannelListener>) => Disposer;
diff --git a/packages/core/src/common/utils/channel/listening-on-message-channels.injectable.ts b/packages/core/src/common/utils/channel/listening-on-message-channels.injectable.ts
index afe0c08f24..6ebc9ca7c1 100644
--- a/packages/core/src/common/utils/channel/listening-on-message-channels.injectable.ts
+++ b/packages/core/src/common/utils/channel/listening-on-message-channels.injectable.ts
@@ -4,9 +4,9 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import { getStartableStoppable } from "../get-startable-stoppable";
-import { disposer } from "../index";
import { messageChannelListenerInjectionToken } from "./message-channel-listener-injection-token";
import { enlistMessageChannelListenerInjectionToken } from "./enlist-message-channel-listener-injection-token";
+import { disposer } from "@k8slens/utilities";
const listeningOnMessageChannelsInjectable = getInjectable({
id: "listening-on-message-channels",
diff --git a/packages/core/src/common/utils/channel/request-from-channel-injection-token.ts b/packages/core/src/common/utils/channel/request-from-channel-injection-token.ts
index 14e925f190..dc3d1fa1a4 100644
--- a/packages/core/src/common/utils/channel/request-from-channel-injection-token.ts
+++ b/packages/core/src/common/utils/channel/request-from-channel-injection-token.ts
@@ -6,8 +6,8 @@ import { getInjectionToken } from "@ogre-tools/injectable";
import type { RequestChannel } from "./request-channel-listener-injection-token";
export interface RequestFromChannel {
- (channel: RequestChannel, request: Request): Promise;
- (channel: RequestChannel): Promise;
+ (channel: RequestChannel, request: Request): Promise>;
+ (channel: RequestChannel): Promise>;
}
export const requestFromChannelInjectionToken = getInjectionToken({
diff --git a/packages/core/src/common/utils/composable-responsibilities/showable/showable.ts b/packages/core/src/common/utils/composable-responsibilities/showable/showable.ts
index ad8e2ed25b..c31f1cd8ee 100644
--- a/packages/core/src/common/utils/composable-responsibilities/showable/showable.ts
+++ b/packages/core/src/common/utils/composable-responsibilities/showable/showable.ts
@@ -3,8 +3,8 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
+import { isBoolean } from "@k8slens/utilities";
import type { IComputedValue } from "mobx";
-import { isBoolean } from "../../type-narrowing";
export interface Showable {
readonly isShown: IComputedValue | boolean;
diff --git a/packages/core/src/common/utils/enum.ts b/packages/core/src/common/utils/enum.ts
new file mode 100644
index 0000000000..64106927c2
--- /dev/null
+++ b/packages/core/src/common/utils/enum.ts
@@ -0,0 +1,8 @@
+/**
+ * Copyright (c) OpenLens Authors. All rights reserved.
+ * Licensed under MIT License. See LICENSE in root directory for more information.
+ */
+
+export function enumKeys(obj: O): K[] {
+ return Object.keys(obj).filter(k => Number.isNaN(+k)) as K[];
+}
diff --git a/packages/core/src/common/utils/escapeRegExp.ts b/packages/core/src/common/utils/escapeRegExp.ts
deleted file mode 100644
index 9d5c7e2ff6..0000000000
--- a/packages/core/src/common/utils/escapeRegExp.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * Copyright (c) OpenLens Authors. All rights reserved.
- * Licensed under MIT License. See LICENSE in root directory for more information.
- */
-
-// Helper to sanitize / escape special chars for passing to RegExp-constructor
-
-export function escapeRegExp(str: string) {
- return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
-}
diff --git a/packages/core/src/common/utils/get-random-id.global-override-for-injectable.ts b/packages/core/src/common/utils/get-random-id.global-override-for-injectable.ts
index a0f87b4180..36f598cde1 100644
--- a/packages/core/src/common/utils/get-random-id.global-override-for-injectable.ts
+++ b/packages/core/src/common/utils/get-random-id.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import getRandomIdInjectable from "./get-random-id.injectable";
export default getGlobalOverride(getRandomIdInjectable, () => () => "some-irrelevant-random-id");
diff --git a/packages/core/src/common/utils/getRandId.ts b/packages/core/src/common/utils/getRandId.ts
deleted file mode 100644
index 489456d56b..0000000000
--- a/packages/core/src/common/utils/getRandId.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * Copyright (c) OpenLens Authors. All rights reserved.
- * Licensed under MIT License. See LICENSE in root directory for more information.
- */
-
-// Create random system name
-
-export function getRandId({ prefix = "", suffix = "", sep = "_" } = {}) {
- const randId = () => Math.random().toString(16).slice(2);
-
- return [prefix, randId(), suffix].filter(s => s).join(sep);
-}
diff --git a/packages/core/src/common/utils/index.ts b/packages/core/src/common/utils/index.ts
index 4857d04418..d95bd52904 100644
--- a/packages/core/src/common/utils/index.ts
+++ b/packages/core/src/common/utils/index.ts
@@ -3,50 +3,5 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-export * from "./abort-controller";
-export * from "./autobind";
-export * from "./camelCase";
export * from "./cluster-id-url-parsing";
-export * from "./collection-functions";
-export * from "./convertCpu";
-export * from "./convertMemory";
-export * from "./debouncePromise";
-export * from "./delay";
-export * from "./disposer";
-export * from "./escapeRegExp";
-export * from "./formatDuration";
-export * from "./getRandId";
-export * from "./hash-set";
-export * from "./n-fircate";
-export * from "./noop";
-export * from "./observable-crate/impl";
-export * from "./promise-exec";
-export * from "./readonly";
-export * from "./reject-promise";
-export * from "./singleton";
-export * from "./sort-compare";
-export * from "./splitArray";
-export * from "./tar";
export * from "./toJS";
-export * from "./type-narrowing";
-export * from "./types";
-export * from "./wait-for-path";
-export * from "./wait";
-
-export type { Tuple } from "./tuple";
-
-import * as iter from "./iter";
-import * as array from "./array";
-import * as tuple from "./tuple";
-import * as base64 from "./base64";
-import * as object from "./objects";
-import * as json from "./json";
-
-export {
- iter,
- array,
- tuple,
- base64,
- object,
- json,
-};
diff --git a/packages/core/src/common/utils/is-promise/is-promise.test.ts b/packages/core/src/common/utils/is-promise/is-promise.test.ts
deleted file mode 100644
index 565f272ed6..0000000000
--- a/packages/core/src/common/utils/is-promise/is-promise.test.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Copyright (c) OpenLens Authors. All rights reserved.
- * Licensed under MIT License. See LICENSE in root directory for more information.
- */
-import { isPromise } from "./is-promise";
-
-describe("isPromise", () => {
- it("given promise, returns true", () => {
- const actual = isPromise(new Promise(() => {}));
-
- expect(actual).toBe(true);
- });
-
- it("given non-promise, returns false", () => {
- const actual = isPromise({});
-
- expect(actual).toBe(false);
- });
-
- it("given thenable, returns false", () => {
- const actual = isPromise({ then: () => {} });
-
- expect(actual).toBe(false);
- });
-
- it("given nothing, returns false", () => {
- const actual = isPromise(undefined);
-
- expect(actual).toBe(false);
- });
-});
diff --git a/packages/core/src/common/utils/is-promise/is-promise.ts b/packages/core/src/common/utils/is-promise/is-promise.ts
deleted file mode 100644
index 6261f569cd..0000000000
--- a/packages/core/src/common/utils/is-promise/is-promise.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * Copyright (c) OpenLens Authors. All rights reserved.
- * Licensed under MIT License. See LICENSE in root directory for more information.
- */
-export function isPromise(reference: any): reference is Promise {
- return reference?.constructor === Promise;
-}
diff --git a/packages/core/src/common/utils/json.ts b/packages/core/src/common/utils/json.ts
deleted file mode 100644
index 53d357f05c..0000000000
--- a/packages/core/src/common/utils/json.ts
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * Copyright (c) OpenLens Authors. All rights reserved.
- * Licensed under MIT License. See LICENSE in root directory for more information.
- */
-
-import type { JsonValue } from "type-fest";
-
-export function parse(input: string): JsonValue {
- return JSON.parse(input);
-}
diff --git a/packages/core/src/common/utils/n-fircate.ts b/packages/core/src/common/utils/n-fircate.ts
deleted file mode 100644
index 0f195adc10..0000000000
--- a/packages/core/src/common/utils/n-fircate.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Copyright (c) OpenLens Authors. All rights reserved.
- * Licensed under MIT License. See LICENSE in root directory for more information.
- */
-
-/**
- * Split an iterable into several arrays with matching fields
- * @param from The iterable of items to split up
- * @param field The field of each item to split over
- * @param parts What each array will be filtered to
- * @returns A `parts.length` tuple of `T[]` where each array has matching `field` values
- */
-export function nFircate(from: Iterable, field: keyof T, parts: []): [];
-export function nFircate(from: Iterable, field: keyof T, parts: [T[typeof field]]): [T[]];
-export function nFircate(from: Iterable, field: keyof T, parts: [T[typeof field], T[typeof field]]): [T[], T[]];
-export function nFircate(from: Iterable, field: keyof T, parts: [T[typeof field], T[typeof field], T[typeof field]]): [T[], T[], T[]];
-
-export function nFircate(from: Iterable, field: keyof T, parts: T[typeof field][]): T[][] {
- if (new Set(parts).size !== parts.length) {
- throw new TypeError("Duplicate parts entries");
- }
-
- const res = Array.from(parts, () => [] as T[]);
-
- for (const item of from) {
- const index = parts.indexOf(item[field]);
-
- if (index < 0) {
- continue;
- }
-
- res[index].push(item);
- }
-
- return res;
-}
diff --git a/packages/core/src/common/utils/objects.ts b/packages/core/src/common/utils/objects.ts
deleted file mode 100644
index 9b6355d3e7..0000000000
--- a/packages/core/src/common/utils/objects.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Copyright (c) OpenLens Authors. All rights reserved.
- * Licensed under MIT License. See LICENSE in root directory for more information.
- */
-
-/**
- * A better typed version of `Object.fromEntries` where the keys are known to
- * be a specific subset
- */
-export function fromEntries(entries: Iterable): Record {
- return Object.fromEntries(entries) as Record;
-}
-
-export function keys(obj: Partial>): K[];
-
-export function keys(obj: Record): K[] {
- return Object.keys(obj) as K[];
-}
-
-export function entries(obj: Partial> | null | undefined): [K, V][];
-export function entries(obj: Partial> | null | undefined): [K, V][];
-export function entries(obj: Record | null | undefined): [K, V][];
-
-export function entries(obj: Record | null | undefined): [K, V][] {
- if (obj && typeof obj == "object") {
- return Object.entries(obj) as never;
- }
-
- return [] as never;
-}
diff --git a/packages/core/src/common/utils/open-link-in-browser.global-override-for-injectable.ts b/packages/core/src/common/utils/open-link-in-browser.global-override-for-injectable.ts
index 62c1539757..d7e005020e 100644
--- a/packages/core/src/common/utils/open-link-in-browser.global-override-for-injectable.ts
+++ b/packages/core/src/common/utils/open-link-in-browser.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import openLinkInBrowserInjectable from "./open-link-in-browser.injectable";
export default getGlobalOverride(openLinkInBrowserInjectable, () => async () => {});
diff --git a/packages/core/src/common/utils/promise-exec.ts b/packages/core/src/common/utils/promise-exec.ts
deleted file mode 100644
index e2471d2611..0000000000
--- a/packages/core/src/common/utils/promise-exec.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- * Copyright (c) OpenLens Authors. All rights reserved.
- * Licensed under MIT License. See LICENSE in root directory for more information.
- */
-
-import * as util from "util";
-import { execFile } from "child_process";
-
-export const promiseExecFile = util.promisify(execFile);
diff --git a/packages/core/src/common/utils/random-bytes.global-override-for-injectable.ts b/packages/core/src/common/utils/random-bytes.global-override-for-injectable.ts
index 9fce1baebd..d4cc7519cd 100644
--- a/packages/core/src/common/utils/random-bytes.global-override-for-injectable.ts
+++ b/packages/core/src/common/utils/random-bytes.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import randomBytesInjectable from "./random-bytes.injectable";
export default getGlobalOverride(randomBytesInjectable, () => (size) => {
diff --git a/packages/core/src/common/utils/reactive-now/reactive-now.test.tsx b/packages/core/src/common/utils/reactive-now/reactive-now.test.tsx
index ab9b185438..5776388516 100644
--- a/packages/core/src/common/utils/reactive-now/reactive-now.test.tsx
+++ b/packages/core/src/common/utils/reactive-now/reactive-now.test.tsx
@@ -8,8 +8,8 @@ import type { IComputedValue } from "mobx";
import { computed, observe } from "mobx";
import React from "react";
import { observer } from "mobx-react";
-import { advanceFakeTime, testUsingFakeTime } from "../../test-utils/use-fake-time";
import { reactiveNow } from "./reactive-now";
+import { advanceFakeTime, testUsingFakeTime } from "../../../test-utils/use-fake-time";
describe("reactiveNow", () => {
let someComputed: IComputedValue;
diff --git a/packages/core/src/common/utils/replace-observable-object.ts b/packages/core/src/common/utils/replace-observable-object.ts
new file mode 100644
index 0000000000..8b88187b6c
--- /dev/null
+++ b/packages/core/src/common/utils/replace-observable-object.ts
@@ -0,0 +1,18 @@
+/**
+ * Copyright (c) OpenLens Authors. All rights reserved.
+ * Licensed under MIT License. See LICENSE in root directory for more information.
+ */
+
+import { runInAction } from "mobx";
+
+export function replaceObservableObject(target: Partial>, source: Partial>): void {
+ runInAction(() => {
+ for (const key in target) {
+ if (!(key in source)) {
+ delete target[key];
+ }
+ }
+
+ Object.assign(target, source);
+ });
+}
diff --git a/packages/core/src/common/utils/toJS.ts b/packages/core/src/common/utils/toJS.ts
index 7a949b46fc..2d70f564cb 100644
--- a/packages/core/src/common/utils/toJS.ts
+++ b/packages/core/src/common/utils/toJS.ts
@@ -13,6 +13,9 @@
import * as mobx from "mobx";
import { isObservable, observable } from "mobx";
+/**
+ * @deprecated Switch to doing toJS on each field instead
+ */
export function toJS(data: T): T {
// make data observable for recursive toJS()-output
if (typeof data === "object" && !isObservable(data)) {
diff --git a/packages/core/src/common/utils/with-error-logging/with-error-logging.injectable.ts b/packages/core/src/common/utils/with-error-logging/with-error-logging.injectable.ts
index 0aaca9f97d..37bf7220c7 100644
--- a/packages/core/src/common/utils/with-error-logging/with-error-logging.injectable.ts
+++ b/packages/core/src/common/utils/with-error-logging/with-error-logging.injectable.ts
@@ -4,7 +4,6 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import logErrorInjectable from "../../log-error.injectable";
-import { isPromise } from "../is-promise/is-promise";
export type WithErrorLoggingFor = (
getErrorMessage: (error: unknown) => string
@@ -33,7 +32,7 @@ const withErrorLoggingInjectable = getInjectable({
throw e;
}
- if (isPromise(returnValue)) {
+ if ((returnValue as any) instanceof Promise) {
return returnValue.catch((e: unknown) => {
const errorMessage = getErrorMessage(e);
diff --git a/packages/core/src/common/utils/with-error-logging/with-error-logging.test.ts b/packages/core/src/common/utils/with-error-logging/with-error-logging.test.ts
index b1140d4e54..9cc5899ce6 100644
--- a/packages/core/src/common/utils/with-error-logging/with-error-logging.test.ts
+++ b/packages/core/src/common/utils/with-error-logging/with-error-logging.test.ts
@@ -8,7 +8,7 @@ import withErrorLoggingInjectable from "./with-error-logging.injectable";
import { pipeline } from "@ogre-tools/fp";
import type { AsyncFnMock } from "@async-fn/jest";
import asyncFn from "@async-fn/jest";
-import { getPromiseStatus } from "../../test-utils/get-promise-status";
+import { getPromiseStatus } from "@k8slens/test-utils";
import logErrorInjectable from "../../log-error.injectable";
describe("with-error-logging", () => {
@@ -18,7 +18,7 @@ describe("with-error-logging", () => {
let logErrorMock: jest.Mock;
beforeEach(() => {
- const di = getDiForUnitTesting({ doGeneralOverrides: true });
+ const di = getDiForUnitTesting();
logErrorMock = jest.fn();
@@ -116,7 +116,7 @@ describe("with-error-logging", () => {
let logErrorMock: jest.Mock;
beforeEach(() => {
- const di = getDiForUnitTesting({ doGeneralOverrides: true });
+ const di = getDiForUnitTesting();
logErrorMock = jest.fn();
diff --git a/packages/core/src/common/utils/with-error-suppression/with-error-suppression.test.ts b/packages/core/src/common/utils/with-error-suppression/with-error-suppression.test.ts
index 12d6a60441..63232ad06d 100644
--- a/packages/core/src/common/utils/with-error-suppression/with-error-suppression.test.ts
+++ b/packages/core/src/common/utils/with-error-suppression/with-error-suppression.test.ts
@@ -5,7 +5,7 @@
import type { AsyncFnMock } from "@async-fn/jest";
import asyncFn from "@async-fn/jest";
-import { getPromiseStatus } from "../../test-utils/get-promise-status";
+import { getPromiseStatus } from "@k8slens/test-utils";
import { withErrorSuppression } from "./with-error-suppression";
describe("with-error-suppression", () => {
diff --git a/packages/core/src/common/utils/with-error-suppression/with-error-suppression.ts b/packages/core/src/common/utils/with-error-suppression/with-error-suppression.ts
index 657ed13c16..22d51b6014 100644
--- a/packages/core/src/common/utils/with-error-suppression/with-error-suppression.ts
+++ b/packages/core/src/common/utils/with-error-suppression/with-error-suppression.ts
@@ -12,7 +12,7 @@ export function withErrorSuppression(toBeDecorated: any) {
try {
const returnValue = toBeDecorated(...args);
- if (isPromise(returnValue)) {
+ if ((returnValue as any) instanceof Promise) {
return returnValue.catch(noop);
}
@@ -22,7 +22,3 @@ export function withErrorSuppression(toBeDecorated: any) {
}
};
}
-
-function isPromise(reference: any): reference is Promise {
- return !!reference?.then;
-}
diff --git a/packages/core/src/common/utils/with-orphan-promise/with-orphan-promise.injectable.ts b/packages/core/src/common/utils/with-orphan-promise/with-orphan-promise.injectable.ts
index 42e6cb9a61..2a005001da 100644
--- a/packages/core/src/common/utils/with-orphan-promise/with-orphan-promise.injectable.ts
+++ b/packages/core/src/common/utils/with-orphan-promise/with-orphan-promise.injectable.ts
@@ -19,7 +19,7 @@ const withOrphanPromiseInjectable = getInjectable({
toBeDecorated,
withErrorLoggingFor(() => "Orphan promise rejection encountered"),
withErrorSuppression,
- );
+ ) as ((...args: any[]) => any);
decorated(...args);
};
diff --git a/packages/core/src/common/utils/with-orphan-promise/with-orphan-promise.test.ts b/packages/core/src/common/utils/with-orphan-promise/with-orphan-promise.test.ts
index 51ebc18e13..a138c152e7 100644
--- a/packages/core/src/common/utils/with-orphan-promise/with-orphan-promise.test.ts
+++ b/packages/core/src/common/utils/with-orphan-promise/with-orphan-promise.test.ts
@@ -14,7 +14,7 @@ describe("with orphan promise, when called", () => {
let logErrorMock: jest.Mock;
beforeEach(() => {
- const di = getDiForUnitTesting({ doGeneralOverrides: true });
+ const di = getDiForUnitTesting();
logErrorMock = jest.fn();
diff --git a/packages/core/src/common/vars.ts b/packages/core/src/common/vars.ts
index 8f53d6354c..f4c19c16e6 100644
--- a/packages/core/src/common/vars.ts
+++ b/packages/core/src/common/vars.ts
@@ -18,6 +18,6 @@ export const apiKubePrefix = "/api-kube"; // k8s cluster apis
// Links
export const issuesTrackerUrl = "https://github.com/lensapp/lens/issues" as string;
-export const slackUrl = "https://k8slens.dev/slack.html" as string;
export const supportUrl = "https://docs.k8slens.dev/support/" as string;
export const docsUrl = "https://docs.k8slens.dev" as string;
+export const forumsUrl = "https://forums.k8slens.dev" as string;
diff --git a/packages/core/src/common/vars/application-information-fake-injectable.ts b/packages/core/src/common/vars/application-information-fake.injectable.testing-env.ts
similarity index 97%
rename from packages/core/src/common/vars/application-information-fake-injectable.ts
rename to packages/core/src/common/vars/application-information-fake.injectable.testing-env.ts
index c881c4c8ca..1fd988b817 100644
--- a/packages/core/src/common/vars/application-information-fake-injectable.ts
+++ b/packages/core/src/common/vars/application-information-fake.injectable.testing-env.ts
@@ -24,6 +24,7 @@ export const applicationInformationFakeInjectable = getInjectable({
welcomeRoute: "/welcome",
copyright: "some-copyright-information",
description: "some-descriptive-text",
+ dependencies: {},
}),
injectionToken: applicationInformationToken,
diff --git a/packages/core/src/common/vars/extension-api-version.global-override-for-injectable.ts b/packages/core/src/common/vars/extension-api-version.global-override-for-injectable.ts
index 6d473eb1de..b1a74f47b6 100644
--- a/packages/core/src/common/vars/extension-api-version.global-override-for-injectable.ts
+++ b/packages/core/src/common/vars/extension-api-version.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import extensionApiVersionInjectable from "./extension-api-version.injectable";
export default getGlobalOverride(extensionApiVersionInjectable, () => "6.0.0");
diff --git a/packages/core/src/common/vars/is-debugging.global-override-for-injectable.ts b/packages/core/src/common/vars/is-debugging.global-override-for-injectable.ts
index 7aa500ff2e..fab25913ed 100644
--- a/packages/core/src/common/vars/is-debugging.global-override-for-injectable.ts
+++ b/packages/core/src/common/vars/is-debugging.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import isDebuggingInjectable from "./is-debugging.injectable";
export default getGlobalOverride(isDebuggingInjectable, () => false);
diff --git a/packages/core/src/common/vars/is-production.injectable.ts b/packages/core/src/common/vars/is-production.injectable.ts
index 661cb397d1..9c1d036bee 100644
--- a/packages/core/src/common/vars/is-production.injectable.ts
+++ b/packages/core/src/common/vars/is-production.injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
-import nodeEnvInjectionToken from "./node-env-injection-token";
+import { nodeEnvInjectionToken } from "./node-env-injection-token";
const isProductionInjectable = getInjectable({
id: "is-production",
diff --git a/packages/core/src/common/vars/is-snap-package.global-override-for-injectable.ts b/packages/core/src/common/vars/is-snap-package.global-override-for-injectable.ts
index cb3ff0a6e9..a18d89f221 100644
--- a/packages/core/src/common/vars/is-snap-package.global-override-for-injectable.ts
+++ b/packages/core/src/common/vars/is-snap-package.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import isSnapPackageInjectable from "./is-snap-package.injectable";
export default getGlobalOverride(isSnapPackageInjectable, () => false);
diff --git a/packages/core/src/common/vars/lens-resources-dir.global-override-for-injectable.ts b/packages/core/src/common/vars/lens-resources-dir.global-override-for-injectable.ts
index 1a72b0ccf7..f40bbe6cd4 100644
--- a/packages/core/src/common/vars/lens-resources-dir.global-override-for-injectable.ts
+++ b/packages/core/src/common/vars/lens-resources-dir.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import lensResourcesDirInjectable from "./lens-resources-dir.injectable";
export default getGlobalOverride(lensResourcesDirInjectable, () => "/irrelavent-dir-for-lens-resources");
diff --git a/packages/core/src/common/vars/node-env-injection-token.ts b/packages/core/src/common/vars/node-env-injection-token.ts
index 9de463c1cb..5f50ad2e06 100644
--- a/packages/core/src/common/vars/node-env-injection-token.ts
+++ b/packages/core/src/common/vars/node-env-injection-token.ts
@@ -4,7 +4,7 @@
*/
import { getInjectionToken } from "@ogre-tools/injectable";
-const nodeEnvInjectionToken = getInjectionToken({
+export const nodeEnvInjectionToken = getInjectionToken({
id: "node-env-injection-token",
});
diff --git a/packages/core/src/common/vars/node-env.injectable.testing-env.ts b/packages/core/src/common/vars/node-env.injectable.testing-env.ts
new file mode 100644
index 0000000000..20d041330f
--- /dev/null
+++ b/packages/core/src/common/vars/node-env.injectable.testing-env.ts
@@ -0,0 +1,14 @@
+/**
+ * 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 { nodeEnvInjectionToken } from "./node-env-injection-token";
+
+const nodeEnvFakeInjectable = getInjectable({
+ id: "node-env-fake",
+ instantiate: () => "production",
+ injectionToken: nodeEnvInjectionToken,
+});
+
+export default nodeEnvFakeInjectable;
diff --git a/packages/core/src/common/vars/platform.global-override-for-injectable.ts b/packages/core/src/common/vars/platform.global-override-for-injectable.ts
index 4bb06dec5e..2825ebe8cf 100644
--- a/packages/core/src/common/vars/platform.global-override-for-injectable.ts
+++ b/packages/core/src/common/vars/platform.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import platformInjectable from "./platform.injectable";
export default getGlobalOverride(platformInjectable, () => "darwin");
diff --git a/packages/core/src/common/vars/process-arch.global-override-for-injectable.ts b/packages/core/src/common/vars/process-arch.global-override-for-injectable.ts
index 42d74d4ec8..bdc4c5e823 100644
--- a/packages/core/src/common/vars/process-arch.global-override-for-injectable.ts
+++ b/packages/core/src/common/vars/process-arch.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import processArchInjectable from "./process-arch.injectable";
export default getGlobalOverride(processArchInjectable, () => "x64");
diff --git a/packages/core/src/common/vars/static-files-directory.global-override-for-injectable.ts b/packages/core/src/common/vars/static-files-directory.global-override-for-injectable.ts
index 3b8ec43046..2ed47dd1a4 100644
--- a/packages/core/src/common/vars/static-files-directory.global-override-for-injectable.ts
+++ b/packages/core/src/common/vars/static-files-directory.global-override-for-injectable.ts
@@ -2,7 +2,7 @@
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import staticFilesDirectoryInjectable from "./static-files-directory.injectable";
export default getGlobalOverride(staticFilesDirectoryInjectable, () => "/some-static-directory");
diff --git a/packages/core/src/common/vars/store-migration-version.injectable.ts b/packages/core/src/common/vars/store-migration-version.injectable.ts
index 6dfbff2e94..37169463ae 100644
--- a/packages/core/src/common/vars/store-migration-version.injectable.ts
+++ b/packages/core/src/common/vars/store-migration-version.injectable.ts
@@ -2,12 +2,11 @@
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { applicationInformationToken } from "@k8slens/application";
import { getInjectable } from "@ogre-tools/injectable";
const storeMigrationVersionInjectable = getInjectable({
id: "store-migration-version",
- instantiate: (di) => di.inject(applicationInformationToken).version,
+ instantiate: () => "6.4.0",
});
export default storeMigrationVersionInjectable;
diff --git a/packages/core/src/common/winston-logger.injectable.ts b/packages/core/src/common/winston-logger.injectable.ts
deleted file mode 100644
index ec3854d8b9..0000000000
--- a/packages/core/src/common/winston-logger.injectable.ts
+++ /dev/null
@@ -1,20 +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 { createLogger, format } from "winston";
-import { loggerTransportInjectionToken } from "./logger/transports";
-
-const winstonLoggerInjectable = getInjectable({
- id: "winston-logger",
- instantiate: (di) => createLogger({
- format: format.combine(
- format.splat(),
- format.simple(),
- ),
- transports: di.injectMany(loggerTransportInjectionToken),
- }),
-});
-
-export default winstonLoggerInjectable;
diff --git a/packages/core/src/extensions/__tests__/extension-loader.test.ts b/packages/core/src/extensions/__tests__/extension-loader.test.ts
index 1c010f7640..4ded8cdbb9 100644
--- a/packages/core/src/extensions/__tests__/extension-loader.test.ts
+++ b/packages/core/src/extensions/__tests__/extension-loader.test.ts
@@ -7,7 +7,7 @@ import type { ExtensionLoader } from "../extension-loader";
import extensionLoaderInjectable from "../extension-loader/extension-loader.injectable";
import { runInAction } from "mobx";
import updateExtensionsStateInjectable from "../extension-loader/update-extensions-state/update-extensions-state.injectable";
-import { delay } from "../../renderer/utils";
+import { delay } from "@k8slens/utilities";
import { getDiForUnitTesting } from "../../renderer/getDiForUnitTesting";
import ipcRendererInjectable from "../../renderer/utils/channel/ipc-renderer.injectable";
import type { IpcRenderer } from "electron";
@@ -23,7 +23,7 @@ describe("ExtensionLoader", () => {
let updateExtensionStateMock: jest.Mock;
beforeEach(() => {
- const di = getDiForUnitTesting({ doGeneralOverrides: true });
+ const di = getDiForUnitTesting();
di.override(directoryForUserDataInjectable, () => "/some-directory-for-user-data");
di.override(currentlyInClusterFrameInjectable, () => false);
diff --git a/packages/core/src/extensions/as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api-with-modifications.test.ts b/packages/core/src/extensions/as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api-with-modifications.test.ts
index ebfc77f40e..5c6c60f8e0 100644
--- a/packages/core/src/extensions/as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api-with-modifications.test.ts
+++ b/packages/core/src/extensions/as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api-with-modifications.test.ts
@@ -9,7 +9,7 @@ import {
createContainer,
getInjectable,
} from "@ogre-tools/injectable";
-import { Environments, setLegacyGlobalDiForExtensionApi } from "./legacy-global-di-for-extension-api";
+import { setLegacyGlobalDiForExtensionApi } from "./legacy-global-di-for-extension-api";
import { asLegacyGlobalObjectForExtensionApiWithModifications } from "./as-legacy-global-object-for-extension-api-with-modifications";
describe("asLegacyGlobalObjectForExtensionApiWithModifications", () => {
@@ -25,7 +25,7 @@ describe("asLegacyGlobalObjectForExtensionApiWithModifications", () => {
jest.spyOn(di, "inject");
- setLegacyGlobalDiForExtensionApi(di, Environments.renderer);
+ setLegacyGlobalDiForExtensionApi(di, "renderer");
someInjectable = getInjectable({
id: "some-injectable",
diff --git a/packages/core/src/extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api.ts b/packages/core/src/extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api.ts
index 4d7d9ca8f5..59d3a5465c 100644
--- a/packages/core/src/extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api.ts
+++ b/packages/core/src/extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api.ts
@@ -4,17 +4,11 @@
*/
import type { DiContainer } from "@ogre-tools/injectable";
+export type Environments = "main" | "renderer";
+
const legacyGlobalDis = new Map();
-export enum Environments {
- renderer,
- main,
-}
-
-export const setLegacyGlobalDiForExtensionApi = (
- di: DiContainer,
- environment: Environments,
-) => {
+export const setLegacyGlobalDiForExtensionApi = (di: DiContainer, environment: Environments) => {
legacyGlobalDis.set(environment, di);
};
diff --git a/packages/core/src/extensions/common-api/app.ts b/packages/core/src/extensions/common-api/app.ts
index dd9227cd0e..8c190b984b 100644
--- a/packages/core/src/extensions/common-api/app.ts
+++ b/packages/core/src/extensions/common-api/app.ts
@@ -11,7 +11,7 @@ import isWindowsInjectable from "../../common/vars/is-windows.injectable";
import { asLegacyGlobalFunctionForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-function-for-extension-api";
import { getLegacyGlobalDiForExtensionApi } from "../as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
import getEnabledExtensionsInjectable from "./get-enabled-extensions/get-enabled-extensions.injectable";
-import { slackUrl, issuesTrackerUrl } from "../../common/vars";
+import { issuesTrackerUrl } from "../../common/vars";
import { buildVersionInjectionToken } from "../../common/vars/build-semantic-version.injectable";
import { asLegacyGlobalForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
import userStoreInjectable from "../../common/user-store/user-store.injectable";
@@ -53,6 +53,9 @@ export const App = {
return di.inject(isLinuxInjectable);
},
- slackUrl,
+ /**
+ * @deprecated This value is now `""` and is left here for backwards compatability.
+ */
+ slackUrl: "",
issuesTrackerUrl,
} as const;
diff --git a/packages/core/src/extensions/common-api/k8s-api.ts b/packages/core/src/extensions/common-api/k8s-api.ts
index 0b9a05353f..20e687ff6d 100644
--- a/packages/core/src/extensions/common-api/k8s-api.ts
+++ b/packages/core/src/extensions/common-api/k8s-api.ts
@@ -47,17 +47,29 @@ const getKubeApiDeps = (): KubeApiDependencies => {
};
};
+export interface ExternalKubeApiOptions {
+ /**
+ * If `true` then on creation of the `KubeApi`instance a call to `apiManager.registerApi` will be
+ * made. This is `true` by default to maintain backwards compatability.
+ *
+ * Setting this to `false` might make `KubeObject`'s details drawer stop working.
+ *
+ * @default true
+ */
+ autoRegister?: boolean;
+}
+
// NOTE: this is done to preserve `instanceOf` behaviour
function KubeApiCstr<
Object extends KubeObject = KubeObject,
Data extends KubeJsonApiDataFor = KubeJsonApiDataFor,
->(opts: KubeApiOptions) {
+>({ autoRegister = true, ...opts }: KubeApiOptions & ExternalKubeApiOptions) {
const api = new InternalKubeApi(getKubeApiDeps(), opts);
const di = getLegacyGlobalDiForExtensionApi();
const storesAndApisCanBeCreated = di.inject(storesAndApisCanBeCreatedInjectionToken);
- if (storesAndApisCanBeCreated) {
+ if (storesAndApisCanBeCreated && autoRegister) {
apiManager.registerApi(api);
}
@@ -72,7 +84,7 @@ export type KubeApi<
export const KubeApi = KubeApiCstr as unknown as new<
Object extends KubeObject = KubeObject,
Data extends KubeJsonApiDataFor = KubeJsonApiDataFor,
->(opts: KubeApiOptions) => InternalKubeApi;
+>(opts: KubeApiOptions & ExternalKubeApiOptions) => InternalKubeApi;
/**
* @deprecated Switch to using `Common.createResourceStack` instead
diff --git a/packages/core/src/extensions/common-api/utils.ts b/packages/core/src/extensions/common-api/utils.ts
index a129cfda60..40f8e00175 100644
--- a/packages/core/src/extensions/common-api/utils.ts
+++ b/packages/core/src/extensions/common-api/utils.ts
@@ -8,11 +8,49 @@ import buildVersionInjectable from "../../main/vars/build-version/build-version.
import { asLegacyGlobalFunctionForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-function-for-extension-api";
import { getLegacyGlobalDiForExtensionApi } from "../as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
-export { Singleton } from "../../common/utils";
-export { prevDefault, stopPropagation } from "../../renderer/utils/prevDefault";
+export { Singleton } from "../../common/utils/singleton";
-export type { IClassName, IgnoredClassNames } from "../../renderer/utils";
-export { cssNames } from "../../renderer/utils/cssNames";
+export {
+ /**
+ * @deprecated Switch to using the `@k8slens/utilities` package
+ */
+ prevDefault,
+ /**
+ * @deprecated Switch to using the `@k8slens/utilities` package
+ */
+ stopPropagation,
+ /**
+ * @deprecated Switch to using the `@k8slens/utilities` package
+ */
+ cssNames,
+ /**
+ * @deprecated Switch to using the `@k8slens/utilities` package
+ */
+ disposer,
+} from "@k8slens/utilities";
+
+export type {
+ /**
+ * @deprecated Switch to using the `@k8slens/utilities` package
+ */
+ IClassName,
+ /**
+ * @deprecated Switch to using the `@k8slens/utilities` package
+ */
+ IgnoredClassNames,
+ /**
+ * @deprecated Switch to using the `@k8slens/utilities` package
+ */
+ Disposer,
+ /**
+ * @deprecated Switch to using the `@k8slens/utilities` package
+ */
+ Disposable,
+ /**
+ * @deprecated Switch to using the `@k8slens/utilities` package
+ */
+ ExtendableDisposer,
+} from "@k8slens/utilities";
export type { OpenLinkInBrowser } from "../../common/utils/open-link-in-browser.injectable";
@@ -24,6 +62,3 @@ export const getAppVersion = () => {
return di.inject(buildVersionInjectable).get();
};
-
-export { disposer } from "../../common/utils";
-export type { Disposer, Disposable, ExtendableDisposer } from "../../common/utils";
diff --git a/packages/core/src/extensions/extension-discovery/extension-discovery.injectable.ts b/packages/core/src/extensions/extension-discovery/extension-discovery.injectable.ts
index 378f519bb7..5e2a4cd84d 100644
--- a/packages/core/src/extensions/extension-discovery/extension-discovery.injectable.ts
+++ b/packages/core/src/extensions/extension-discovery/extension-discovery.injectable.ts
@@ -8,8 +8,8 @@ import extensionLoaderInjectable from "../extension-loader/extension-loader.inje
import isCompatibleExtensionInjectable from "./is-compatible-extension/is-compatible-extension.injectable";
import extensionsStoreInjectable from "../extensions-store/extensions-store.injectable";
import extensionInstallationStateStoreInjectable from "../extension-installation-state-store/extension-installation-state-store.injectable";
-import installExtensionInjectable from "../extension-installer/install-extension/install-extension.injectable";
-import extensionPackageRootDirectoryInjectable from "../extension-installer/extension-package-root-directory/extension-package-root-directory.injectable";
+import installExtensionInjectable from "../install-extension/install-extension.injectable";
+import extensionPackageRootDirectoryInjectable from "../install-extension/extension-package-root-directory.injectable";
import readJsonFileInjectable from "../../common/fs/read-json-file.injectable";
import loggerInjectable from "../../common/logger.injectable";
import pathExistsInjectable from "../../common/fs/path-exists.injectable";
diff --git a/packages/core/src/extensions/extension-discovery/extension-discovery.test.ts b/packages/core/src/extensions/extension-discovery/extension-discovery.test.ts
index d71f8c5292..e27d00a34e 100644
--- a/packages/core/src/extensions/extension-discovery/extension-discovery.test.ts
+++ b/packages/core/src/extensions/extension-discovery/extension-discovery.test.ts
@@ -7,9 +7,9 @@ import type { FSWatcher } from "chokidar";
import { getDiForUnitTesting } from "../../main/getDiForUnitTesting";
import extensionDiscoveryInjectable from "../extension-discovery/extension-discovery.injectable";
import type { ExtensionDiscovery } from "../extension-discovery/extension-discovery";
-import installExtensionInjectable from "../extension-installer/install-extension/install-extension.injectable";
+import installExtensionInjectable from "../install-extension/install-extension.injectable";
import directoryForUserDataInjectable from "../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
-import { delay } from "../../renderer/utils";
+import { delay } from "@k8slens/utilities";
import { observable, runInAction, when } from "mobx";
import readJsonFileInjectable from "../../common/fs/read-json-file.injectable";
import pathExistsInjectable from "../../common/fs/path-exists.injectable";
@@ -32,7 +32,7 @@ describe("ExtensionDiscovery", () => {
let homeDirectoryPath: string;
beforeEach(() => {
- const di = getDiForUnitTesting({ doGeneralOverrides: true });
+ const di = getDiForUnitTesting();
di.override(directoryForUserDataInjectable, () => "/some-directory-for-user-data");
di.override(installExtensionInjectable, () => () => Promise.resolve());
diff --git a/packages/core/src/extensions/extension-discovery/extension-discovery.ts b/packages/core/src/extensions/extension-discovery/extension-discovery.ts
index bd9baff2c8..a91bf9e406 100644
--- a/packages/core/src/extensions/extension-discovery/extension-discovery.ts
+++ b/packages/core/src/extensions/extension-discovery/extension-discovery.ts
@@ -7,7 +7,8 @@ import { ipcRenderer } from "electron";
import { EventEmitter } from "events";
import { makeObservable, observable, reaction, when } from "mobx";
import { broadcastMessage, ipcMainHandle, ipcRendererOn } from "../../common/ipc";
-import { isErrnoException, toJS } from "../../common/utils";
+import { toJS } from "../../common/utils";
+import { isErrnoException } from "@k8slens/utilities";
import type { ExtensionsStore } from "../extensions-store/extensions-store";
import type { ExtensionLoader } from "../extension-loader";
import type { LensExtensionId, LensExtensionManifest } from "../lens-extension";
diff --git a/packages/core/src/extensions/extension-installation-state-store/extension-installation-state-store.ts b/packages/core/src/extensions/extension-installation-state-store/extension-installation-state-store.ts
index 093c80934b..8553ce9c40 100644
--- a/packages/core/src/extensions/extension-installation-state-store/extension-installation-state-store.ts
+++ b/packages/core/src/extensions/extension-installation-state-store/extension-installation-state-store.ts
@@ -4,8 +4,8 @@
*/
import { action, computed, observable } from "mobx";
-import { disposer } from "../../renderer/utils";
-import type { ExtendableDisposer } from "../../renderer/utils";
+import { disposer } from "@k8slens/utilities";
+import type { ExtendableDisposer } from "@k8slens/utilities";
import * as uuid from "uuid";
import { broadcastMessage } from "../../common/ipc";
import { ipcRenderer } from "electron";
diff --git a/packages/core/src/extensions/extension-installer/extension-installer.injectable.ts b/packages/core/src/extensions/extension-installer/extension-installer.injectable.ts
deleted file mode 100644
index 92b4436701..0000000000
--- a/packages/core/src/extensions/extension-installer/extension-installer.injectable.ts
+++ /dev/null
@@ -1,21 +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 pathToNpmCliInjectable from "../../common/app-paths/path-to-npm-cli.injectable";
-import loggerInjectable from "../../common/logger.injectable";
-import { ExtensionInstaller } from "./extension-installer";
-import extensionPackageRootDirectoryInjectable from "./extension-package-root-directory/extension-package-root-directory.injectable";
-
-const extensionInstallerInjectable = getInjectable({
- id: "extension-installer",
-
- instantiate: (di) => new ExtensionInstaller({
- extensionPackageRootDirectory: di.inject(extensionPackageRootDirectoryInjectable),
- logger: di.inject(loggerInjectable),
- pathToNpmCli: di.inject(pathToNpmCliInjectable),
- }),
-});
-
-export default extensionInstallerInjectable;
diff --git a/packages/core/src/extensions/extension-installer/extension-installer.ts b/packages/core/src/extensions/extension-installer/extension-installer.ts
deleted file mode 100644
index 223477d0c4..0000000000
--- a/packages/core/src/extensions/extension-installer/extension-installer.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * Copyright (c) OpenLens Authors. All rights reserved.
- * Licensed under MIT License. See LICENSE in root directory for more information.
- */
-
-import AwaitLock from "await-lock";
-import child_process from "child_process";
-import type { Logger } from "../../common/logger";
-
-const logModule = "[EXTENSION-INSTALLER]";
-
-interface Dependencies {
- readonly extensionPackageRootDirectory: string;
- readonly logger: Logger;
- readonly pathToNpmCli: string;
-}
-
-const baseNpmInstallArgs = [
- "install",
- "--audit=false",
- "--fund=false",
- // NOTE: we do not omit the `optional` dependencies because that is how we specify the non-bundled extensions
- "--omit=dev",
- "--omit=peer",
- "--prefer-offline",
-];
-
-/**
- * Installs dependencies for extensions
- */
-export class ExtensionInstaller {
- private readonly installLock = new AwaitLock();
-
- constructor(private readonly dependencies: Dependencies) {}
-
- /**
- * Install single package using npm
- */
- installPackage = async (name: string): Promise => {
- // Mutual exclusion to install packages in sequence
- await this.installLock.acquireAsync();
-
- try {
- this.dependencies.logger.info(`${logModule} installing package from ${name} to ${this.dependencies.extensionPackageRootDirectory}`);
- await this.npm(...baseNpmInstallArgs, name);
- this.dependencies.logger.info(`${logModule} package ${name} installed to ${this.dependencies.extensionPackageRootDirectory}`);
- } finally {
- this.installLock.release();
- }
- };
-
- private npm(...args: string[]): Promise {
- return new Promise((resolve, reject) => {
- const child = child_process.fork(this.dependencies.pathToNpmCli, args, {
- cwd: this.dependencies.extensionPackageRootDirectory,
- silent: true,
- env: {},
- });
- let stderr = "";
-
- child.stderr?.on("data", data => {
- stderr += String(data);
- });
-
- child.on("close", (code) => {
- if (code !== 0) {
- reject(new Error(stderr));
- } else {
- resolve();
- }
- });
-
- child.on("error", error => {
- reject(error);
- });
- });
- }
-}
diff --git a/packages/core/src/extensions/extension-installer/install-extension/install-extension.injectable.ts b/packages/core/src/extensions/extension-installer/install-extension/install-extension.injectable.ts
deleted file mode 100644
index 940c5987a5..0000000000
--- a/packages/core/src/extensions/extension-installer/install-extension/install-extension.injectable.ts
+++ /dev/null
@@ -1,13 +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 extensionInstallerInjectable from "../extension-installer.injectable";
-
-const installExtensionInjectable = getInjectable({
- id: "install-extension",
- instantiate: (di) => di.inject(extensionInstallerInjectable).installPackage,
-});
-
-export default installExtensionInjectable;
diff --git a/packages/core/src/extensions/extension-loader/extension-loader.ts b/packages/core/src/extensions/extension-loader/extension-loader.ts
index 5dce874e54..b82fe5c159 100644
--- a/packages/core/src/extensions/extension-loader/extension-loader.ts
+++ b/packages/core/src/extensions/extension-loader/extension-loader.ts
@@ -6,9 +6,9 @@
import { ipcMain, ipcRenderer } from "electron";
import { isEqual } from "lodash";
import type { ObservableMap } from "mobx";
-import { action, computed, makeObservable, observable, observe, reaction, when } from "mobx";
+import { action, computed, makeObservable, toJS, observable, observe, reaction, when } from "mobx";
import { broadcastMessage, ipcMainOn, ipcRendererOn, ipcMainHandle } from "../../common/ipc";
-import { isDefined, toJS } from "../../common/utils";
+import { isDefined } from "@k8slens/utilities";
import type { InstalledExtension } from "../extension-discovery/extension-discovery";
import type { LensExtension, LensExtensionConstructor, LensExtensionId } from "../lens-extension";
import type { LensExtensionState } from "../extensions-store/extensions-store";
diff --git a/packages/core/src/extensions/extension-loader/extension/extension.injectable.ts b/packages/core/src/extensions/extension-loader/extension/extension.injectable.ts
index 6b9424cea4..07f054d3fd 100644
--- a/packages/core/src/extensions/extension-loader/extension/extension.injectable.ts
+++ b/packages/core/src/extensions/extension-loader/extension/extension.injectable.ts
@@ -6,7 +6,7 @@ import type { Injectable } from "@ogre-tools/injectable";
import { getInjectable, lifecycleEnum } from "@ogre-tools/injectable";
import { difference, find, map } from "lodash";
import { reaction, runInAction } from "mobx";
-import { disposer } from "../../../common/utils/disposer";
+import { disposer } from "@k8slens/utilities";
import type { LensExtension } from "../../lens-extension";
import { extensionRegistratorInjectionToken } from "../extension-registrator-injection-token";
@@ -43,7 +43,7 @@ const extensionInjectable = getInjectable({
reactionDisposer.push(
// injectables is either an array or a computed array, in which case
- // we need to update the registered injectables with a reaction every time they change
+ // we need to update the registered injectables with a reaction every time they change
reaction(
() => Array.isArray(injectables) ? injectables : injectables.get(),
(currentInjectables, previousInjectables = []) => {
diff --git a/packages/core/src/extensions/extension-loader/file-system-provisioner-store/ensure-hashed-directory-for-extension.injectable.ts b/packages/core/src/extensions/extension-loader/file-system-provisioner-store/ensure-hashed-directory-for-extension.injectable.ts
index 50051bf094..90bad89625 100644
--- a/packages/core/src/extensions/extension-loader/file-system-provisioner-store/ensure-hashed-directory-for-extension.injectable.ts
+++ b/packages/core/src/extensions/extension-loader/file-system-provisioner-store/ensure-hashed-directory-for-extension.injectable.ts
@@ -5,7 +5,7 @@
import { getInjectable } from "@ogre-tools/injectable";
-import { getOrInsert } from "../../../common/utils";
+import { getOrInsert } from "@k8slens/utilities";
import randomBytesInjectable from "../../../common/utils/random-bytes.injectable";
import joinPathsInjectable from "../../../common/path/join-paths.injectable";
import directoryForExtensionDataInjectable from "./directory-for-extension-data.injectable";
diff --git a/packages/core/src/extensions/extension-loader/file-system-provisioner-store/ensure-hashed-directory-for-extension.test.ts b/packages/core/src/extensions/extension-loader/file-system-provisioner-store/ensure-hashed-directory-for-extension.test.ts
index dab86f68b2..2ba20bab8c 100644
--- a/packages/core/src/extensions/extension-loader/file-system-provisioner-store/ensure-hashed-directory-for-extension.test.ts
+++ b/packages/core/src/extensions/extension-loader/file-system-provisioner-store/ensure-hashed-directory-for-extension.test.ts
@@ -18,7 +18,7 @@ describe("ensure-hashed-directory-for-extension", () => {
let registeredExtensions: ObservableMap;
beforeEach(() => {
- const di = getDiForUnitTesting({ doGeneralOverrides: true });
+ const di = getDiForUnitTesting();
ensureDirMock = jest.fn();
diff --git a/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.ts b/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.ts
index 37bff649ad..86d978d47c 100644
--- a/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.ts
+++ b/packages/core/src/extensions/extension-loader/file-system-provisioner-store/file-system-provisioner-store.ts
@@ -8,7 +8,6 @@ import { action, makeObservable } from "mobx";
import type { BaseStoreDependencies } from "../../../common/base-store/base-store";
import { BaseStore } from "../../../common/base-store/base-store";
import type { LensExtensionId } from "../../lens-extension";
-import { toJS } from "../../../common/utils";
import type { EnsureHashedDirectoryForExtension } from "./ensure-hashed-directory-for-extension.injectable";
interface FSProvisionModel {
@@ -46,8 +45,8 @@ export class FileSystemProvisionerStore extends BaseStore {
}
toJSON(): FSProvisionModel {
- return toJS({
- extensions: Object.fromEntries(this.dependencies.registeredExtensions),
- });
+ return {
+ extensions: Object.fromEntries(this.dependencies.registeredExtensions.toJSON()),
+ };
}
}
diff --git a/packages/core/src/extensions/extension-store.ts b/packages/core/src/extensions/extension-store.ts
index e72f394005..cf435fb474 100644
--- a/packages/core/src/extensions/extension-store.ts
+++ b/packages/core/src/extensions/extension-store.ts
@@ -8,8 +8,8 @@ import { BaseStore } from "../common/base-store/base-store";
import * as path from "path";
import type { LensExtension } from "./lens-extension";
import assert from "assert";
-import type { StaticThis } from "../common/utils";
-import { getOrInsertWith } from "../common/utils";
+import type { StaticThis } from "../common/utils/singleton";
+import { getOrInsertWith } from "@k8slens/utilities";
import { getLegacyGlobalDiForExtensionApi } from "./as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
import directoryForUserDataInjectable from "../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
import getConfigurationFileModelInjectable from "../common/get-configuration-file-model/get-configuration-file-model.injectable";
diff --git a/packages/core/src/extensions/extensions-store/extensions-store.ts b/packages/core/src/extensions/extensions-store/extensions-store.ts
index 3b2dc80eb1..1a8e5376b6 100644
--- a/packages/core/src/extensions/extensions-store/extensions-store.ts
+++ b/packages/core/src/extensions/extensions-store/extensions-store.ts
@@ -5,7 +5,6 @@
import type { LensExtensionId } from "../lens-extension";
import { action, computed, makeObservable, observable } from "mobx";
-import { toJS } from "../../common/utils";
import type { BaseStoreDependencies } from "../../common/base-store/base-store";
import { BaseStore } from "../../common/base-store/base-store";
@@ -57,8 +56,8 @@ export class ExtensionsStore extends BaseStore {
}
toJSON(): LensExtensionsStoreModel {
- return toJS({
- extensions: Object.fromEntries(this.state),
- });
+ return {
+ extensions: Object.fromEntries(this.state.toJSON()),
+ };
}
}
diff --git a/packages/core/src/extensions/extension-installer/extension-package-root-directory/extension-package-root-directory.injectable.ts b/packages/core/src/extensions/install-extension/extension-package-root-directory.injectable.ts
similarity index 76%
rename from packages/core/src/extensions/extension-installer/extension-package-root-directory/extension-package-root-directory.injectable.ts
rename to packages/core/src/extensions/install-extension/extension-package-root-directory.injectable.ts
index 72bd0ad8c2..ffa0a7666d 100644
--- a/packages/core/src/extensions/extension-installer/extension-package-root-directory/extension-package-root-directory.injectable.ts
+++ b/packages/core/src/extensions/install-extension/extension-package-root-directory.injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
-import directoryForUserDataInjectable from "../../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
+import directoryForUserDataInjectable from "../../common/app-paths/directory-for-user-data/directory-for-user-data.injectable";
const extensionPackageRootDirectoryInjectable = getInjectable({
id: "extension-package-root-directory",
diff --git a/packages/core/src/extensions/install-extension/install-extension.injectable.ts b/packages/core/src/extensions/install-extension/install-extension.injectable.ts
new file mode 100644
index 0000000000..6737b7362b
--- /dev/null
+++ b/packages/core/src/extensions/install-extension/install-extension.injectable.ts
@@ -0,0 +1,111 @@
+/**
+ * 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 { fork } from "child_process";
+import AwaitLock from "await-lock";
+import pathToNpmCliInjectable from "../../common/app-paths/path-to-npm-cli.injectable";
+import extensionPackageRootDirectoryInjectable from "./extension-package-root-directory.injectable";
+import prefixedLoggerInjectable from "../../common/logger/prefixed-logger.injectable";
+import readJsonFileInjectable from "../../common/fs/read-json-file.injectable";
+import joinPathsInjectable from "../../common/path/join-paths.injectable";
+import type { PackageJson } from "../common-api";
+import writeJsonFileInjectable from "../../common/fs/write-json-file.injectable";
+import { once } from "lodash";
+import { isErrnoException } from "@k8slens/utilities";
+
+const baseNpmInstallArgs = [
+ "install",
+ "--save-optional",
+ "--audit=false",
+ "--fund=false",
+ // NOTE: we do not omit the `optional` dependencies because that is how we specify the non-bundled extensions
+ "--omit=dev",
+ "--omit=peer",
+ "--prefer-offline",
+];
+
+export type InstallExtension = (name: string) => Promise;
+
+const installExtensionInjectable = getInjectable({
+ id: "install-extension",
+ instantiate: (di): InstallExtension => {
+ const pathToNpmCli = di.inject(pathToNpmCliInjectable);
+ const extensionPackageRootDirectory = di.inject(extensionPackageRootDirectoryInjectable);
+ const readJsonFile = di.inject(readJsonFileInjectable);
+ const writeJsonFile = di.inject(writeJsonFileInjectable);
+ const joinPaths = di.inject(joinPathsInjectable);
+ const logger = di.inject(prefixedLoggerInjectable, "EXTENSION-INSTALLER");
+
+ const forkNpm = (...args: string[]) => new Promise((resolve, reject) => {
+ const child = fork(pathToNpmCli, args, {
+ cwd: extensionPackageRootDirectory,
+ silent: true,
+ env: {},
+ });
+ let stderr = "";
+
+ child.stderr?.on("data", data => {
+ stderr += String(data);
+ });
+
+ child.on("close", (code) => {
+ if (code !== 0) {
+ reject(new Error(stderr));
+ } else {
+ resolve();
+ }
+ });
+
+ child.on("error", error => {
+ reject(error);
+ });
+ });
+
+ const packageJsonPath = joinPaths(extensionPackageRootDirectory, "package.json");
+
+ /**
+ * NOTES:
+ * - We have to keep the `package.json` because `npm install` removes files from `node_modules`
+ * if they are no longer in the `package.json`
+ * - In v6.2.X we saved bundled extensions as `"dependencies"` and external extensions as
+ * `"optionalDependencies"` at startup. This was done because `"optionalDependencies"` can
+ * fail to install and that is OK.
+ * - We continue to maintain this behavior here by only installing new dependencies as
+ * `"optionalDependencies"`
+ */
+ const fixupPackageJson = once(async () => {
+ try {
+ const packageJson = await readJsonFile(packageJsonPath) as PackageJson;
+
+ delete packageJson.dependencies;
+
+ await writeJsonFile(packageJsonPath, packageJson);
+ } catch (error) {
+ if (isErrnoException(error) && error.code === "ENOENT") {
+ return;
+ }
+
+ throw error;
+ }
+ });
+
+ const installLock = new AwaitLock();
+
+ return async (name) => {
+ await installLock.acquireAsync();
+ await fixupPackageJson();
+
+ try {
+ logger.info(`installing package for extension "${name}"`);
+ await forkNpm(...baseNpmInstallArgs, name);
+ logger.info(`installed package for extension "${name}"`);
+ } finally {
+ installLock.release();
+ }
+ };
+ },
+});
+
+export default installExtensionInjectable;
diff --git a/packages/core/src/extensions/ipc/ipc-main.ts b/packages/core/src/extensions/ipc/ipc-main.ts
index 8bb0ada63d..a4f4ec14df 100644
--- a/packages/core/src/extensions/ipc/ipc-main.ts
+++ b/packages/core/src/extensions/ipc/ipc-main.ts
@@ -6,7 +6,7 @@ import { ipcMain } from "electron";
import { IpcPrefix, IpcRegistrar } from "./ipc-registrar";
import { Disposers, lensExtensionDependencies } from "../lens-extension";
import type { LensMainExtension } from "../lens-main-extension";
-import type { Disposer } from "../../common/utils";
+import type { Disposer } from "@k8slens/utilities";
import { once } from "lodash";
import { ipcMainHandle } from "../../common/ipc";
diff --git a/packages/core/src/extensions/ipc/ipc-registrar.ts b/packages/core/src/extensions/ipc/ipc-registrar.ts
index 04222bd64b..7fc27ba0fd 100644
--- a/packages/core/src/extensions/ipc/ipc-registrar.ts
+++ b/packages/core/src/extensions/ipc/ipc-registrar.ts
@@ -2,7 +2,7 @@
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { Singleton } from "../../common/utils";
+import { Singleton } from "../../common/utils/singleton";
import type { LensExtension } from "../lens-extension";
import { createHash } from "crypto";
import { broadcastMessage } from "../../common/ipc";
diff --git a/packages/core/src/extensions/ipc/ipc-renderer.ts b/packages/core/src/extensions/ipc/ipc-renderer.ts
index ff61738113..9060a19154 100644
--- a/packages/core/src/extensions/ipc/ipc-renderer.ts
+++ b/packages/core/src/extensions/ipc/ipc-renderer.ts
@@ -6,7 +6,7 @@ import { ipcRenderer } from "electron";
import { IpcPrefix, IpcRegistrar } from "./ipc-registrar";
import { Disposers } from "../lens-extension";
import type { LensRendererExtension } from "../lens-renderer-extension";
-import type { Disposer } from "../../common/utils";
+import type { Disposer } from "@k8slens/utilities";
import { once } from "lodash";
export abstract class IpcRenderer extends IpcRegistrar {
diff --git a/packages/core/src/extensions/lens-extension.ts b/packages/core/src/extensions/lens-extension.ts
index 53c9343607..30cf19e4a4 100644
--- a/packages/core/src/extensions/lens-extension.ts
+++ b/packages/core/src/extensions/lens-extension.ts
@@ -6,7 +6,7 @@
import type { InstalledExtension } from "./extension-discovery/extension-discovery";
import { action, computed, makeObservable, observable } from "mobx";
import type { PackageJson } from "type-fest";
-import { disposer } from "../common/utils";
+import { disposer } from "@k8slens/utilities";
import type { LensExtensionDependencies } from "./lens-extension-set-dependencies";
import type { ProtocolHandlerRegistration } from "../common/protocol-handler/registration";
diff --git a/packages/core/src/extensions/lens-renderer-extension.ts b/packages/core/src/extensions/lens-renderer-extension.ts
index aa00fd8ba3..5a64a6ec6c 100644
--- a/packages/core/src/extensions/lens-renderer-extension.ts
+++ b/packages/core/src/extensions/lens-renderer-extension.ts
@@ -5,7 +5,7 @@
import { Disposers, LensExtension, lensExtensionDependencies } from "./lens-extension";
import type { CatalogEntity, CategoryFilter } from "../common/catalog";
-import type { Disposer } from "../common/utils";
+import type { Disposer } from "@k8slens/utilities";
import type { EntityFilter } from "../renderer/api/catalog/entity/registry";
import type { TopBarRegistration } from "../renderer/components/layout/top-bar/top-bar-registration";
import type { KubernetesCluster } from "../common/catalog-entities";
diff --git a/packages/core/src/extensions/main-api/navigation.ts b/packages/core/src/extensions/main-api/navigation.ts
index 375d2bac74..2bd870a262 100644
--- a/packages/core/src/extensions/main-api/navigation.ts
+++ b/packages/core/src/extensions/main-api/navigation.ts
@@ -3,16 +3,11 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import {
- Environments,
- getEnvironmentSpecificLegacyGlobalDiForExtensionApi,
-} from "../as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
-
+import { getEnvironmentSpecificLegacyGlobalDiForExtensionApi } from "../as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api";
import navigateInjectable from "../../main/start-main-application/lens-window/navigate.injectable";
export function navigate(url: string) {
- const di = getEnvironmentSpecificLegacyGlobalDiForExtensionApi(Environments.main);
-
+ const di = getEnvironmentSpecificLegacyGlobalDiForExtensionApi("main");
const navigate = di.inject(navigateInjectable);
return navigate(url);
diff --git a/packages/core/src/extensions/main-api/power.ts b/packages/core/src/extensions/main-api/power.ts
index 671308798a..bf9f61b480 100644
--- a/packages/core/src/extensions/main-api/power.ts
+++ b/packages/core/src/extensions/main-api/power.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { powerMonitor } from "electron";
-import type { Disposer } from "../../common/utils/disposer";
+import type { Disposer } from "@k8slens/utilities";
/**
* Event listener for system power events
diff --git a/packages/core/src/extensions/renderer-api/catalog.ts b/packages/core/src/extensions/renderer-api/catalog.ts
index 43b840a39a..9de698c725 100644
--- a/packages/core/src/extensions/renderer-api/catalog.ts
+++ b/packages/core/src/extensions/renderer-api/catalog.ts
@@ -6,7 +6,7 @@
import type { CatalogCategory, CatalogEntity } from "../../common/catalog";
import type { CatalogEntityOnBeforeRun } from "../../renderer/api/catalog/entity/registry";
-import type { Disposer } from "../../common/utils";
+import type { Disposer } from "@k8slens/utilities";
import catalogCategoryRegistryInjectable from "../../common/catalog/category-registry.injectable";
import { asLegacyGlobalForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-object-for-extension-api";
import catalogEntityRegistryInjectable from "../../renderer/api/catalog/entity/registry.injectable";
diff --git a/packages/core/src/extensions/renderer-api/components.ts b/packages/core/src/extensions/renderer-api/components.ts
index e4102433bf..8d2bb6840a 100644
--- a/packages/core/src/extensions/renderer-api/components.ts
+++ b/packages/core/src/extensions/renderer-api/components.ts
@@ -106,6 +106,8 @@ export {
type MonacoEditorProps, type MonacoEditorId,
type MonacoTheme, type MonacoCustomTheme,
} from "../../renderer/components/monaco-editor";
+export * from "../../renderer/components/resource-metrics/resource-metrics";
+export * from "../../renderer/components/+workloads-pods/pod-charts";
/**
* @deprecated Use `Renderer.Navigation.getDetailsUrl`
diff --git a/packages/core/src/extensions/renderer-api/navigation.ts b/packages/core/src/extensions/renderer-api/navigation.ts
index ec7081c948..667fa7135e 100644
--- a/packages/core/src/extensions/renderer-api/navigation.ts
+++ b/packages/core/src/extensions/renderer-api/navigation.ts
@@ -3,6 +3,8 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
+import hideEntityDetailsInjectable from "../../renderer/components/+catalog/entity-details/hide.injectable";
+import showEntityDetailsInjectable from "../../renderer/components/+catalog/entity-details/show.injectable";
import getDetailsUrlInjectable from "../../renderer/components/kube-detail-params/get-details-url.injectable";
import hideDetailsInjectable from "../../renderer/components/kube-detail-params/hide-details.injectable";
import showDetailsInjectable from "../../renderer/components/kube-detail-params/show-details.injectable";
@@ -12,7 +14,7 @@ import navigateInjectable from "../../renderer/navigation/navigate.injectable";
import { asLegacyGlobalFunctionForExtensionApi } from "../as-legacy-globals-for-extension-api/as-legacy-global-function-for-extension-api";
export type { PageParamInit, PageParam } from "../../renderer/navigation/page-param";
-export type { URLParams } from "../../common/utils/buildUrl";
+export type { URLParams } from "@k8slens/utilities";
export const getDetailsUrl = asLegacyGlobalFunctionForExtensionApi(getDetailsUrlInjectable);
export const showDetails = asLegacyGlobalFunctionForExtensionApi(showDetailsInjectable);
@@ -20,3 +22,6 @@ export const hideDetails = asLegacyGlobalFunctionForExtensionApi(hideDetailsInje
export const createPageParam = asLegacyGlobalFunctionForExtensionApi(createPageParamInjectable);
export const isActiveRoute = asLegacyGlobalFunctionForExtensionApi(isActiveRouteInjectable);
export const navigate = asLegacyGlobalFunctionForExtensionApi(navigateInjectable);
+
+export const showEntityDetails = asLegacyGlobalFunctionForExtensionApi(showEntityDetailsInjectable);
+export const hideEntityDetails = asLegacyGlobalFunctionForExtensionApi(hideEntityDetailsInjectable);
diff --git a/packages/core/src/features/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap b/packages/core/src/features/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap
index ccf3a4153f..03e2a2cd8a 100644
--- a/packages/core/src/features/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap
+++ b/packages/core/src/features/__snapshots__/extension-special-characters-in-page-registrations.test.tsx.snap
@@ -107,11 +107,11 @@ exports[`extension special characters in page registrations renders 1`] = `
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
diff --git a/packages/core/src/features/__snapshots__/navigate-to-extension-page.test.tsx.snap b/packages/core/src/features/__snapshots__/navigate-to-extension-page.test.tsx.snap
index b66ac6c4b3..5a864f8096 100644
--- a/packages/core/src/features/__snapshots__/navigate-to-extension-page.test.tsx.snap
+++ b/packages/core/src/features/__snapshots__/navigate-to-extension-page.test.tsx.snap
@@ -107,11 +107,11 @@ exports[`navigate to extension page renders 1`] = `
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
diff --git a/packages/core/src/features/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap b/packages/core/src/features/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap
index 28cdcc4b8d..4bd662e2f0 100644
--- a/packages/core/src/features/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap
+++ b/packages/core/src/features/add-cluster/__snapshots__/navigation-using-application-menu.test.tsx.snap
@@ -107,11 +107,11 @@ exports[`add-cluster - navigation using application menu renders 1`] = `
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
diff --git a/packages/core/src/features/application-menu/application-menu.test.ts b/packages/core/src/features/application-menu/application-menu.test.ts
index 0db35db744..bd9d016548 100644
--- a/packages/core/src/features/application-menu/application-menu.test.ts
+++ b/packages/core/src/features/application-menu/application-menu.test.ts
@@ -5,7 +5,7 @@
import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
import populateApplicationMenuInjectable from "./main/populate-application-menu.injectable";
-import { advanceFakeTime, testUsingFakeTime } from "../../common/test-utils/use-fake-time";
+import { advanceFakeTime, testUsingFakeTime } from "../../test-utils/use-fake-time";
import { getCompositePaths } from "../../common/utils/composite/get-composite-paths/get-composite-paths";
import platformInjectable, { allPlatforms } from "../../common/vars/platform.injectable";
diff --git a/packages/core/src/features/application-menu/handling-of-orphan-application-menu-items.test.ts b/packages/core/src/features/application-menu/handling-of-orphan-application-menu-items.test.ts
index 7f35861a45..465fa48f54 100644
--- a/packages/core/src/features/application-menu/handling-of-orphan-application-menu-items.test.ts
+++ b/packages/core/src/features/application-menu/handling-of-orphan-application-menu-items.test.ts
@@ -5,7 +5,7 @@
import type { ApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
import { getApplicationBuilder } from "../../renderer/components/test-utils/get-application-builder";
import populateApplicationMenuInjectable from "./main/populate-application-menu.injectable";
-import { advanceFakeTime, testUsingFakeTime } from "../../common/test-utils/use-fake-time";
+import { advanceFakeTime, testUsingFakeTime } from "../../test-utils/use-fake-time";
import { getCompositePaths } from "../../common/utils/composite/get-composite-paths/get-composite-paths";
import { getInjectable } from "@ogre-tools/injectable";
import applicationMenuItemInjectionToken from "./main/menu-items/application-menu-item-injection-token";
diff --git a/packages/core/src/features/application-menu/main/menu-items/special-menu-for-mac-application/show-about-application/about-bundled-extensions.injectable.ts b/packages/core/src/features/application-menu/main/menu-items/special-menu-for-mac-application/show-about-application/about-bundled-extensions.injectable.ts
index 449ce5f4a8..59ae1e1491 100644
--- a/packages/core/src/features/application-menu/main/menu-items/special-menu-for-mac-application/show-about-application/about-bundled-extensions.injectable.ts
+++ b/packages/core/src/features/application-menu/main/menu-items/special-menu-for-mac-application/show-about-application/about-bundled-extensions.injectable.ts
@@ -2,22 +2,34 @@
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
+import { applicationInformationToken } from "@k8slens/application";
import { getInjectable } from "@ogre-tools/injectable";
import { bundledExtensionInjectionToken } from "../../../../../../common/library";
+import { object } from "@k8slens/utilities";
import buildSemanticVersionInjectable from "../../../../../../common/vars/build-semantic-version.injectable";
-const aboutBundledExtensionsInjectable = getInjectable({
- id: "about-bundled-extensions",
+const specificVersionsInjectable = getInjectable({
+ id: "specific-versions",
instantiate: (di) => {
const buildSemanticVersion = di.inject(buildSemanticVersionInjectable);
const bundledExtensions = di.injectMany(bundledExtensionInjectionToken);
+ const applicationInformation = di.inject(applicationInformationToken);
if (buildSemanticVersion.get().prerelease[0] === "latest") {
return [];
}
- return bundledExtensions.map(ext => `${ext.manifest.name}: ${ext.manifest.version}`);
+ const corePackageVersions = object.entries(applicationInformation.dependencies)
+ .filter(([name]) => name.startsWith("@k8slens/"))
+ .map(([name, version]) => `${name}: ${version}`);
+ const bundledExtensionVersions = bundledExtensions
+ .map(ext => `${ext.manifest.name}: ${ext.manifest.version}`);
+
+ return [
+ ...corePackageVersions,
+ ...bundledExtensionVersions,
+ ];
},
});
-export default aboutBundledExtensionsInjectable;
+export default specificVersionsInjectable;
diff --git a/packages/core/src/features/application-menu/main/menu-items/special-menu-for-mac-application/show-about-application/show-about.injectable.ts b/packages/core/src/features/application-menu/main/menu-items/special-menu-for-mac-application/show-about-application/show-about.injectable.ts
index 8bc78ae8c3..309b0b2af7 100644
--- a/packages/core/src/features/application-menu/main/menu-items/special-menu-for-mac-application/show-about-application/show-about.injectable.ts
+++ b/packages/core/src/features/application-menu/main/menu-items/special-menu-for-mac-application/show-about-application/show-about.injectable.ts
@@ -10,7 +10,7 @@ import productNameInjectable from "../../../../../../common/vars/product-name.in
import buildVersionInjectable from "../../../../../../main/vars/build-version/build-version.injectable";
import extensionApiVersionInjectable from "../../../../../../common/vars/extension-api-version.injectable";
import applicationCopyrightInjectable from "../../../../../../common/vars/application-copyright.injectable";
-import aboutBundledExtensionsInjectable from "./about-bundled-extensions.injectable";
+import specificVersionsInjectable from "./about-bundled-extensions.injectable";
const showAboutInjectable = getInjectable({
id: "show-about",
@@ -23,7 +23,7 @@ const showAboutInjectable = getInjectable({
const appName = di.inject(appNameInjectable);
const productName = di.inject(productNameInjectable);
const applicationCopyright = di.inject(applicationCopyrightInjectable);
- const aboutBundledExtensions = di.inject(aboutBundledExtensionsInjectable);
+ const specificVersions = di.inject(specificVersionsInjectable);
return () => {
const appInfo = [
@@ -32,14 +32,26 @@ const showAboutInjectable = getInjectable({
`Electron: ${process.versions.electron}`,
`Chrome: ${process.versions.chrome}`,
`Node: ${process.versions.node}`,
- ...aboutBundledExtensions,
applicationCopyright,
];
+ if (specificVersions.length > 0) {
+ appInfo.push(
+ "",
+ "",
+ ...specificVersions,
+ );
+ }
+
showMessagePopup(
`${isWindows ? " ".repeat(2) : ""}${appName}`,
productName,
appInfo.join("\r\n"),
+ {
+ textWidth: specificVersions.length > 0
+ ? 300
+ : undefined,
+ },
);
};
},
diff --git a/packages/core/src/features/application-menu/main/populate-application-menu.global-override-for-injectable.ts b/packages/core/src/features/application-menu/main/populate-application-menu.global-override-for-injectable.ts
index acd4f5f14e..23f877e2bb 100644
--- a/packages/core/src/features/application-menu/main/populate-application-menu.global-override-for-injectable.ts
+++ b/packages/core/src/features/application-menu/main/populate-application-menu.global-override-for-injectable.ts
@@ -3,6 +3,6 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import populateApplicationMenuInjectable from "./populate-application-menu.injectable";
-import { getGlobalOverride } from "../../../common/test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
export default getGlobalOverride(populateApplicationMenuInjectable, () => () => {});
diff --git a/packages/core/src/features/application-menu/main/start-application-menu.injectable.ts b/packages/core/src/features/application-menu/main/start-application-menu.injectable.ts
index a3edd09ca1..b9a48cb0bd 100644
--- a/packages/core/src/features/application-menu/main/start-application-menu.injectable.ts
+++ b/packages/core/src/features/application-menu/main/start-application-menu.injectable.ts
@@ -4,23 +4,18 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import applicationMenuReactivityInjectable from "./application-menu-reactivity.injectable";
-import { onLoadOfApplicationInjectionToken } from "../../../main/start-main-application/runnable-tokens/on-load-of-application-injection-token";
+import { onLoadOfApplicationInjectionToken } from "@k8slens/application";
const startApplicationMenuInjectable = getInjectable({
id: "start-application-menu",
- instantiate: (di) => {
- const applicationMenu = di.inject(
- applicationMenuReactivityInjectable,
- );
+ instantiate: (di) => ({
+ run: () => {
+ const applicationMenu = di.inject(applicationMenuReactivityInjectable);
- return {
- id: "start-application-menu",
- run: () => {
- applicationMenu.start();
- },
- };
- },
+ applicationMenu.start();
+ },
+ }),
injectionToken: onLoadOfApplicationInjectionToken,
});
diff --git a/packages/core/src/features/application-menu/main/stop-application-menu.injectable.ts b/packages/core/src/features/application-menu/main/stop-application-menu.injectable.ts
index 62abd439df..816683b2de 100644
--- a/packages/core/src/features/application-menu/main/stop-application-menu.injectable.ts
+++ b/packages/core/src/features/application-menu/main/stop-application-menu.injectable.ts
@@ -4,19 +4,20 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import applicationMenuReactivityInjectable from "./application-menu-reactivity.injectable";
-import { beforeQuitOfBackEndInjectionToken } from "../../../main/start-main-application/runnable-tokens/before-quit-of-back-end-injection-token";
+import { beforeQuitOfBackEndInjectionToken } from "../../../main/start-main-application/runnable-tokens/phases";
const stopApplicationMenuInjectable = getInjectable({
id: "stop-application-menu",
- instantiate: (di) => {
- const applicationMenu = di.inject(applicationMenuReactivityInjectable);
+ instantiate: (di) => ({
+ run: () => {
+ const applicationMenu = di.inject(applicationMenuReactivityInjectable);
- return {
- id: "stop-application-menu",
- run: () => void applicationMenu.stop(),
- };
- },
+ applicationMenu.stop();
+
+ return undefined;
+ },
+ }),
injectionToken: beforeQuitOfBackEndInjectionToken,
});
diff --git a/packages/core/src/features/application-update/__snapshots__/installing-update.test.ts.snap b/packages/core/src/features/application-update/__snapshots__/installing-update.test.ts.snap
index 6e61ea5e5d..0b32c94831 100644
--- a/packages/core/src/features/application-update/__snapshots__/installing-update.test.ts.snap
+++ b/packages/core/src/features/application-update/__snapshots__/installing-update.test.ts.snap
@@ -108,11 +108,11 @@ exports[`installing update when started renders 1`] = `
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
@@ -393,11 +393,11 @@ exports[`installing update when started when user checks for updates renders 1`]
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
@@ -678,11 +678,11 @@ exports[`installing update when started when user checks for updates when new up
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
@@ -988,11 +988,11 @@ exports[`installing update when started when user checks for updates when new up
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
@@ -1298,11 +1298,11 @@ exports[`installing update when started when user checks for updates when new up
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
@@ -1583,11 +1583,11 @@ exports[`installing update when started when user checks for updates when no new
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
diff --git a/packages/core/src/features/application-update/analytics-for-installing-update.test.ts b/packages/core/src/features/application-update/analytics-for-installing-update.test.ts
index ce77d37229..e93c414027 100644
--- a/packages/core/src/features/application-update/analytics-for-installing-update.test.ts
+++ b/packages/core/src/features/application-update/analytics-for-installing-update.test.ts
@@ -17,7 +17,7 @@ import type { DownloadPlatformUpdate } from "./main/download-update/download-pla
import downloadPlatformUpdateInjectable from "./main/download-update/download-platform-update/download-platform-update.injectable";
import quitAndInstallUpdateInjectable from "./main/quit-and-install-update.injectable";
import periodicalCheckForUpdatesInjectable from "./child-features/periodical-checking-of-updates/main/periodical-check-for-updates.injectable";
-import { advanceFakeTime, testUsingFakeTime } from "../../common/test-utils/use-fake-time";
+import { advanceFakeTime, testUsingFakeTime } from "../../test-utils/use-fake-time";
import emitEventInjectable from "../../common/app-event-bus/emit-event.injectable";
import getBuildVersionInjectable from "../../main/vars/build-version/get-build-version.injectable";
diff --git a/packages/core/src/features/application-update/child-features/application-update-using-top-bar/__snapshots__/installing-update-using-topbar-button.test.tsx.snap b/packages/core/src/features/application-update/child-features/application-update-using-top-bar/__snapshots__/installing-update-using-topbar-button.test.tsx.snap
index a4787d0de3..26fd923e16 100644
--- a/packages/core/src/features/application-update/child-features/application-update-using-top-bar/__snapshots__/installing-update-using-topbar-button.test.tsx.snap
+++ b/packages/core/src/features/application-update/child-features/application-update-using-top-bar/__snapshots__/installing-update-using-topbar-button.test.tsx.snap
@@ -133,11 +133,11 @@ exports[`encourage user to update when sufficient time passed since update was d
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
@@ -418,11 +418,11 @@ exports[`encourage user to update when sufficient time passed since update was d
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
diff --git a/packages/core/src/features/application-update/child-features/application-update-using-top-bar/installing-update-using-topbar-button.test.tsx b/packages/core/src/features/application-update/child-features/application-update-using-top-bar/installing-update-using-topbar-button.test.tsx
index adede427d2..d2b83844a4 100644
--- a/packages/core/src/features/application-update/child-features/application-update-using-top-bar/installing-update-using-topbar-button.test.tsx
+++ b/packages/core/src/features/application-update/child-features/application-update-using-top-bar/installing-update-using-topbar-button.test.tsx
@@ -16,7 +16,7 @@ import type { ApplicationBuilder } from "../../../../renderer/components/test-ut
import { getApplicationBuilder } from "../../../../renderer/components/test-utils/get-application-builder";
import processCheckingForUpdatesInjectable from "../../main/process-checking-for-updates.injectable";
import quitAndInstallUpdateInjectable from "../../main/quit-and-install-update.injectable";
-import { advanceFakeTime, testUsingFakeTime } from "../../../../common/test-utils/use-fake-time";
+import { testUsingFakeTime, advanceFakeTime } from "../../../../test-utils/use-fake-time";
function daysToMilliseconds(days: number) {
return Math.round(days * 24 * 60 * 60 * 1000);
diff --git a/packages/core/src/features/application-update/child-features/application-update-using-top-bar/renderer/update-application-top-bar-item/update-button/update-button.tsx b/packages/core/src/features/application-update/child-features/application-update-using-top-bar/renderer/update-application-top-bar-item/update-button/update-button.tsx
index acdd9929f2..a99501128c 100644
--- a/packages/core/src/features/application-update/child-features/application-update-using-top-bar/renderer/update-application-top-bar-item/update-button/update-button.tsx
+++ b/packages/core/src/features/application-update/child-features/application-update-using-top-bar/renderer/update-application-top-bar-item/update-button/update-button.tsx
@@ -8,7 +8,7 @@ import styles from "./styles.module.scss";
import type { HTMLAttributes } from "react";
import React, { useState } from "react";
import { Menu, MenuItem } from "../../../../../../../renderer/components/menu";
-import { cssNames } from "../../../../../../../renderer/utils";
+import { cssNames } from "@k8slens/utilities";
import type { IconProps } from "../../../../../../../renderer/components/icon";
import { Icon } from "../../../../../../../renderer/components/icon";
import { withInjectables } from "@ogre-tools/injectable-react";
diff --git a/packages/core/src/features/application-update/child-features/application-update-using-tray/__snapshots__/installing-update-using-tray.test.ts.snap b/packages/core/src/features/application-update/child-features/application-update-using-tray/__snapshots__/installing-update-using-tray.test.ts.snap
index a2ea7a417b..57b2dd6f48 100644
--- a/packages/core/src/features/application-update/child-features/application-update-using-tray/__snapshots__/installing-update-using-tray.test.ts.snap
+++ b/packages/core/src/features/application-update/child-features/application-update-using-tray/__snapshots__/installing-update-using-tray.test.ts.snap
@@ -108,11 +108,11 @@ exports[`installing update using tray when started renders 1`] = `
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
@@ -393,11 +393,11 @@ exports[`installing update using tray when started when user checks for updates
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
@@ -678,11 +678,11 @@ exports[`installing update using tray when started when user checks for updates
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
@@ -988,11 +988,11 @@ exports[`installing update using tray when started when user checks for updates
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
@@ -1298,11 +1298,11 @@ exports[`installing update using tray when started when user checks for updates
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
@@ -1583,11 +1583,11 @@ exports[`installing update using tray when started when user checks for updates
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
diff --git a/packages/core/src/features/application-update/child-features/force-update/__snapshots__/force-update.test.ts.snap b/packages/core/src/features/application-update/child-features/force-update/__snapshots__/force-update.test.ts.snap
index 95101e8294..5dd749857a 100644
--- a/packages/core/src/features/application-update/child-features/force-update/__snapshots__/force-update.test.ts.snap
+++ b/packages/core/src/features/application-update/child-features/force-update/__snapshots__/force-update.test.ts.snap
@@ -133,11 +133,11 @@ exports[`force user to update when too long since update was downloaded when app
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
@@ -443,11 +443,11 @@ exports[`force user to update when too long since update was downloaded when app
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
@@ -800,11 +800,11 @@ exports[`force user to update when too long since update was downloaded when app
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
diff --git a/packages/core/src/features/application-update/child-features/force-update/force-update.test.ts b/packages/core/src/features/application-update/child-features/force-update/force-update.test.ts
index 39ac24570a..1f35592dc7 100644
--- a/packages/core/src/features/application-update/child-features/force-update/force-update.test.ts
+++ b/packages/core/src/features/application-update/child-features/force-update/force-update.test.ts
@@ -14,11 +14,11 @@ import type { DiContainer } from "@ogre-tools/injectable";
import processCheckingForUpdatesInjectable from "../../main/process-checking-for-updates.injectable";
import type { RenderResult } from "@testing-library/react";
import { fireEvent } from "@testing-library/react";
-import { advanceFakeTime, testUsingFakeTime } from "../../../../common/test-utils/use-fake-time";
import quitAndInstallUpdateInjectable from "../../main/quit-and-install-update.injectable";
import timeAfterUpdateMustBeInstalledInjectable from "./renderer/force-update-modal/time-after-update-must-be-installed.injectable";
import secondsAfterInstallStartsInjectable from "./renderer/force-update-modal/seconds-after-install-starts.injectable";
import forceUpdateModalRootFrameComponentInjectable from "./renderer/force-update-modal/force-update-modal-root-frame-component.injectable";
+import { testUsingFakeTime, advanceFakeTime } from "../../../../test-utils/use-fake-time";
const TIME_AFTER_UPDATE_MUST_BE_INSTALLED = 1000;
const TIME_AFTER_INSTALL_STARTS = 5 * 1000;
diff --git a/packages/core/src/features/application-update/child-features/force-update/renderer/force-update-modal/force-update-modal-root-frame-component.global-override-for-injectable.ts b/packages/core/src/features/application-update/child-features/force-update/renderer/force-update-modal/force-update-modal-root-frame-component.global-override-for-injectable.ts
index 49c4be5075..6de3bb5600 100644
--- a/packages/core/src/features/application-update/child-features/force-update/renderer/force-update-modal/force-update-modal-root-frame-component.global-override-for-injectable.ts
+++ b/packages/core/src/features/application-update/child-features/force-update/renderer/force-update-modal/force-update-modal-root-frame-component.global-override-for-injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { computed } from "mobx";
-import { getGlobalOverride } from "../../../../../../common/test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import forceUpdateModalRootFrameComponentInjectable from "./force-update-modal-root-frame-component.injectable";
export default getGlobalOverride(
diff --git a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/__snapshots__/periodical-checking-of-updates.test.ts.snap b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/__snapshots__/periodical-checking-of-updates.test.ts.snap
index 413477ef9a..e6ae682c92 100644
--- a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/__snapshots__/periodical-checking-of-updates.test.ts.snap
+++ b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/__snapshots__/periodical-checking-of-updates.test.ts.snap
@@ -108,11 +108,11 @@ exports[`periodical checking of updates given updater is enabled and configurati
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
diff --git a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/periodical-check-for-updates.global-override-for-injectable.ts b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/periodical-check-for-updates.global-override-for-injectable.ts
index db86b30e37..53c808ba5f 100644
--- a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/periodical-check-for-updates.global-override-for-injectable.ts
+++ b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/periodical-check-for-updates.global-override-for-injectable.ts
@@ -4,7 +4,7 @@
*/
import periodicalCheckForUpdatesInjectable from "./periodical-check-for-updates.injectable";
-import { getGlobalOverride } from "../../../../../common/test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
export default getGlobalOverride(periodicalCheckForUpdatesInjectable, () => ({
start: () => {},
diff --git a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/start-checking-for-updates.injectable.ts b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/start-checking-for-updates.injectable.ts
index 20b60af2fa..5e8ab6622c 100644
--- a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/start-checking-for-updates.injectable.ts
+++ b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/start-checking-for-updates.injectable.ts
@@ -5,24 +5,21 @@
import { getInjectable } from "@ogre-tools/injectable";
import periodicalCheckForUpdatesInjectable from "./periodical-check-for-updates.injectable";
import updatingIsEnabledInjectable from "../../../main/updating-is-enabled/updating-is-enabled.injectable";
-import { afterApplicationIsLoadedInjectionToken } from "../../../../../main/start-main-application/runnable-tokens/after-application-is-loaded-injection-token";
+import { afterApplicationIsLoadedInjectionToken } from "@k8slens/application";
const startCheckingForUpdatesInjectable = getInjectable({
id: "start-checking-for-updates",
- instantiate: (di) => {
- const periodicalCheckForUpdates = di.inject(periodicalCheckForUpdatesInjectable);
- const updatingIsEnabled = di.inject(updatingIsEnabledInjectable);
+ instantiate: (di) => ({
+ run: () => {
+ const periodicalCheckForUpdates = di.inject(periodicalCheckForUpdatesInjectable);
+ const updatingIsEnabled = di.inject(updatingIsEnabledInjectable);
- return {
- id: "start-checking-for-updates",
- run: () => {
- if (updatingIsEnabled && !periodicalCheckForUpdates.started) {
- periodicalCheckForUpdates.start();
- }
- },
- };
- },
+ if (updatingIsEnabled && !periodicalCheckForUpdates.started) {
+ periodicalCheckForUpdates.start();
+ }
+ },
+ }),
injectionToken: afterApplicationIsLoadedInjectionToken,
});
diff --git a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/stop-checking-for-updates.injectable.ts b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/stop-checking-for-updates.injectable.ts
index 6e58d7dd77..df1557466e 100644
--- a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/stop-checking-for-updates.injectable.ts
+++ b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/main/stop-checking-for-updates.injectable.ts
@@ -4,25 +4,22 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import periodicalCheckForUpdatesInjectable from "./periodical-check-for-updates.injectable";
-import { beforeQuitOfBackEndInjectionToken } from "../../../../../main/start-main-application/runnable-tokens/before-quit-of-back-end-injection-token";
+import { beforeQuitOfBackEndInjectionToken } from "../../../../../main/start-main-application/runnable-tokens/phases";
const stopCheckingForUpdatesInjectable = getInjectable({
id: "stop-checking-for-updates",
- instantiate: (di) => {
- const periodicalCheckForUpdates = di.inject(periodicalCheckForUpdatesInjectable);
+ instantiate: (di) => ({
+ run: () => {
+ const periodicalCheckForUpdates = di.inject(periodicalCheckForUpdatesInjectable);
- return {
- id: "stop-checking-for-updates",
- run: () => {
- if (periodicalCheckForUpdates.started) {
- periodicalCheckForUpdates.stop();
- }
+ if (periodicalCheckForUpdates.started) {
+ periodicalCheckForUpdates.stop();
+ }
- return undefined;
- },
- };
- },
+ return undefined;
+ },
+ }),
injectionToken: beforeQuitOfBackEndInjectionToken,
});
diff --git a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/periodical-checking-of-updates.test.ts b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/periodical-checking-of-updates.test.ts
index 22765b85de..63dfb4cc14 100644
--- a/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/periodical-checking-of-updates.test.ts
+++ b/packages/core/src/features/application-update/child-features/periodical-checking-of-updates/periodical-checking-of-updates.test.ts
@@ -9,7 +9,7 @@ import electronUpdaterIsActiveInjectable from "../../../../main/electron-app/fea
import publishIsConfiguredInjectable from "../../main/updating-is-enabled/publish-is-configured/publish-is-configured.injectable";
import processCheckingForUpdatesInjectable from "../../main/process-checking-for-updates.injectable";
import periodicalCheckForUpdatesInjectable from "./main/periodical-check-for-updates.injectable";
-import { advanceFakeTime, testUsingFakeTime } from "../../../../common/test-utils/use-fake-time";
+import { testUsingFakeTime, advanceFakeTime } from "../../../../test-utils/use-fake-time";
const ENOUGH_TIME = 1000 * 60 * 60 * 2;
diff --git a/packages/core/src/features/application-update/child-features/selection-of-update-stability/__snapshots__/selection-of-update-stability.test.ts.snap b/packages/core/src/features/application-update/child-features/selection-of-update-stability/__snapshots__/selection-of-update-stability.test.ts.snap
index 7da7f42004..9e77201bf3 100644
--- a/packages/core/src/features/application-update/child-features/selection-of-update-stability/__snapshots__/selection-of-update-stability.test.ts.snap
+++ b/packages/core/src/features/application-update/child-features/selection-of-update-stability/__snapshots__/selection-of-update-stability.test.ts.snap
@@ -108,11 +108,11 @@ exports[`selection of update stability when started renders 1`] = `
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
diff --git a/packages/core/src/features/application-update/installing-update.test.ts b/packages/core/src/features/application-update/installing-update.test.ts
index 81529a851f..719bb879bf 100644
--- a/packages/core/src/features/application-update/installing-update.test.ts
+++ b/packages/core/src/features/application-update/installing-update.test.ts
@@ -16,7 +16,7 @@ import type { DownloadPlatformUpdate } from "./main/download-update/download-pla
import downloadPlatformUpdateInjectable from "./main/download-update/download-platform-update/download-platform-update.injectable";
import setUpdateOnQuitInjectable from "../../main/electron-app/features/set-update-on-quit.injectable";
import processCheckingForUpdatesInjectable from "./main/process-checking-for-updates.injectable";
-import { testUsingFakeTime } from "../../common/test-utils/use-fake-time";
+import { testUsingFakeTime } from "../../test-utils/use-fake-time";
import staticFilesDirectoryInjectable from "../../common/vars/static-files-directory.injectable";
describe("installing update", () => {
diff --git a/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.global-override-for-injectable.ts b/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.global-override-for-injectable.ts
index 5e271eaa30..d8d336ef56 100644
--- a/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.global-override-for-injectable.ts
+++ b/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.global-override-for-injectable.ts
@@ -3,6 +3,6 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import checkForPlatformUpdatesInjectable from "./check-for-platform-updates.injectable";
-import { getGlobalOverrideForFunction } from "../../../../../common/test-utils/get-global-override-for-function";
+import { getGlobalOverrideForFunction } from "@k8slens/test-utils";
export default getGlobalOverrideForFunction(checkForPlatformUpdatesInjectable);
diff --git a/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.test.ts b/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.test.ts
index 07875dd728..5a4262baf1 100644
--- a/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.test.ts
+++ b/packages/core/src/features/application-update/main/check-for-updates/check-for-platform-updates/check-for-platform-updates.test.ts
@@ -10,9 +10,9 @@ import type { AppUpdater, UpdateCheckResult } from "electron-updater";
import type { CheckForPlatformUpdates } from "./check-for-platform-updates.injectable";
import checkForPlatformUpdatesInjectable from "./check-for-platform-updates.injectable";
import type { UpdateChannel, ReleaseChannel } from "../../../common/update-channels";
-import { getPromiseStatus } from "../../../../../common/test-utils/get-promise-status";
+import { getPromiseStatus } from "@k8slens/test-utils";
import loggerInjectable from "../../../../../common/logger.injectable";
-import { noop } from "../../../../../common/utils";
+import { noop } from "@k8slens/utilities";
describe("check-for-platform-updates", () => {
let checkForPlatformUpdates: CheckForPlatformUpdates;
@@ -23,6 +23,8 @@ describe("check-for-platform-updates", () => {
beforeEach(() => {
const di = getDiForUnitTesting();
+ di.unoverride(checkForPlatformUpdatesInjectable);
+
checkForUpdatesMock = asyncFn();
electronUpdaterFake = {
diff --git a/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.global-override-for-injectable.ts b/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.global-override-for-injectable.ts
index 15df5d835b..5a339e3ea3 100644
--- a/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.global-override-for-injectable.ts
+++ b/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.global-override-for-injectable.ts
@@ -2,7 +2,7 @@
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverrideForFunction } from "../../../../../common/test-utils/get-global-override-for-function";
+import { getGlobalOverrideForFunction } from "@k8slens/test-utils";
import downloadPlatformUpdateInjectable from "./download-platform-update.injectable";
export default getGlobalOverrideForFunction(downloadPlatformUpdateInjectable);
diff --git a/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.test.ts b/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.test.ts
index 2cedacb68b..d39931e6ac 100644
--- a/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.test.ts
+++ b/packages/core/src/features/application-update/main/download-update/download-platform-update/download-platform-update.test.ts
@@ -9,10 +9,10 @@ import downloadPlatformUpdateInjectable from "./download-platform-update.injecta
import type { AppUpdater } from "electron-updater";
import type { AsyncFnMock } from "@async-fn/jest";
import asyncFn from "@async-fn/jest";
-import { getPromiseStatus } from "../../../../../common/test-utils/get-promise-status";
+import { getPromiseStatus } from "@k8slens/test-utils";
import type { DiContainer } from "@ogre-tools/injectable";
import loggerInjectable from "../../../../../common/logger.injectable";
-import { noop } from "../../../../../common/utils";
+import { noop } from "@k8slens/utilities";
describe("download-platform-update", () => {
let downloadPlatformUpdate: DownloadPlatformUpdate;
@@ -26,6 +26,8 @@ describe("download-platform-update", () => {
beforeEach(() => {
di = getDiForUnitTesting();
+ di.unoverride(downloadPlatformUpdateInjectable);
+
downloadUpdateMock = asyncFn();
electronUpdaterOnMock = jest.fn();
electronUpdaterOffMock = jest.fn();
diff --git a/packages/core/src/features/application-update/main/emit-current-version-to-analytics.injectable.ts b/packages/core/src/features/application-update/main/emit-current-version-to-analytics.injectable.ts
index 17fdf89944..cef23c9860 100644
--- a/packages/core/src/features/application-update/main/emit-current-version-to-analytics.injectable.ts
+++ b/packages/core/src/features/application-update/main/emit-current-version-to-analytics.injectable.ts
@@ -3,7 +3,7 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
-import { afterApplicationIsLoadedInjectionToken } from "../../../main/start-main-application/runnable-tokens/after-application-is-loaded-injection-token";
+import { afterApplicationIsLoadedInjectionToken } from "@k8slens/application";
import emitAppEventInjectable from "../../../common/app-event-bus/emit-event.injectable";
import { getCurrentDateTime } from "../../../common/utils/date/get-current-date-time";
import buildVersionInjectable from "../../../main/vars/build-version/build-version.injectable";
@@ -11,25 +11,22 @@ import buildVersionInjectable from "../../../main/vars/build-version/build-versi
const emitCurrentVersionToAnalyticsInjectable = getInjectable({
id: "emit-current-version-to-analytics",
- instantiate: (di) => {
- const emitAppEvent = di.inject(emitAppEventInjectable);
- const buildVersion = di.inject(buildVersionInjectable);
+ instantiate: (di) => ({
+ run: () => {
+ const emitAppEvent = di.inject(emitAppEventInjectable);
+ const buildVersion = di.inject(buildVersionInjectable);
- return {
- id: "emit-current-version-to-analytics",
- run: () => {
- emitAppEvent({
- name: "app",
- action: "current-version",
+ emitAppEvent({
+ name: "app",
+ action: "current-version",
- params: {
- version: buildVersion.get(),
- currentDateTime: getCurrentDateTime(),
- },
- });
- },
- };
- },
+ params: {
+ version: buildVersion.get(),
+ currentDateTime: getCurrentDateTime(),
+ },
+ });
+ },
+ }),
injectionToken: afterApplicationIsLoadedInjectionToken,
});
diff --git a/packages/core/src/features/application-update/main/updating-is-enabled/publish-is-configured/publish-is-configured.global-override-for-injectable.ts b/packages/core/src/features/application-update/main/updating-is-enabled/publish-is-configured/publish-is-configured.global-override-for-injectable.ts
index f8c36953c6..109958838d 100644
--- a/packages/core/src/features/application-update/main/updating-is-enabled/publish-is-configured/publish-is-configured.global-override-for-injectable.ts
+++ b/packages/core/src/features/application-update/main/updating-is-enabled/publish-is-configured/publish-is-configured.global-override-for-injectable.ts
@@ -2,7 +2,7 @@
* Copyright (c) OpenLens Authors. All rights reserved.
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
-import { getGlobalOverride } from "../../../../../common/test-utils/get-global-override";
+import { getGlobalOverride } from "@k8slens/test-utils";
import publishIsConfiguredInjectable from "./publish-is-configured.injectable";
export default getGlobalOverride(publishIsConfiguredInjectable, () => false);
diff --git a/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/start-watching-if-update-should-happen-on-quit.injectable.ts b/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/start-watching-if-update-should-happen-on-quit.injectable.ts
index 2609f8f46f..2739119a13 100644
--- a/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/start-watching-if-update-should-happen-on-quit.injectable.ts
+++ b/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/start-watching-if-update-should-happen-on-quit.injectable.ts
@@ -3,22 +3,19 @@
* Licensed under MIT License. See LICENSE in root directory for more information.
*/
import { getInjectable } from "@ogre-tools/injectable";
-import { onLoadOfApplicationInjectionToken } from "../../../../main/start-main-application/runnable-tokens/on-load-of-application-injection-token";
+import { onLoadOfApplicationInjectionToken } from "@k8slens/application";
import watchIfUpdateShouldHappenOnQuitInjectable from "./watch-if-update-should-happen-on-quit.injectable";
const startWatchingIfUpdateShouldHappenOnQuitInjectable = getInjectable({
id: "start-watching-if-update-should-happen-on-quit",
- instantiate: (di) => {
- const watchIfUpdateShouldHappenOnQuit = di.inject(watchIfUpdateShouldHappenOnQuitInjectable);
+ instantiate: (di) => ({
+ run: () => {
+ const watchIfUpdateShouldHappenOnQuit = di.inject(watchIfUpdateShouldHappenOnQuitInjectable);
- return {
- id: "start-watching-if-update-should-happen-on-quit",
- run: () => {
- watchIfUpdateShouldHappenOnQuit.start();
- },
- };
- },
+ watchIfUpdateShouldHappenOnQuit.start();
+ },
+ }),
injectionToken: onLoadOfApplicationInjectionToken,
});
diff --git a/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/stop-watching-if-update-should-happen-on-quit.injectable.ts b/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/stop-watching-if-update-should-happen-on-quit.injectable.ts
index faf67b4ffc..36a6d3174d 100644
--- a/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/stop-watching-if-update-should-happen-on-quit.injectable.ts
+++ b/packages/core/src/features/application-update/main/watch-if-update-should-happen-on-quit/stop-watching-if-update-should-happen-on-quit.injectable.ts
@@ -4,19 +4,20 @@
*/
import { getInjectable } from "@ogre-tools/injectable";
import watchIfUpdateShouldHappenOnQuitInjectable from "./watch-if-update-should-happen-on-quit.injectable";
-import { beforeQuitOfBackEndInjectionToken } from "../../../../main/start-main-application/runnable-tokens/before-quit-of-back-end-injection-token";
+import { beforeQuitOfBackEndInjectionToken } from "../../../../main/start-main-application/runnable-tokens/phases";
const stopWatchingIfUpdateShouldHappenOnQuitInjectable = getInjectable({
id: "stop-watching-if-update-should-happen-on-quit",
- instantiate: (di) => {
- const watchIfUpdateShouldHappenOnQuit = di.inject(watchIfUpdateShouldHappenOnQuitInjectable);
+ instantiate: (di) => ({
+ run: () => {
+ const watchIfUpdateShouldHappenOnQuit = di.inject(watchIfUpdateShouldHappenOnQuitInjectable);
- return {
- id: "stop-watching-if-update-should-happen-on-quit",
- run: () => void watchIfUpdateShouldHappenOnQuit.stop(),
- };
- },
+ watchIfUpdateShouldHappenOnQuit.stop();
+
+ return undefined;
+ },
+ }),
injectionToken: beforeQuitOfBackEndInjectionToken,
});
diff --git a/packages/core/src/features/catalog/__snapshots__/entity-running.test.tsx.snap b/packages/core/src/features/catalog/__snapshots__/entity-running.test.tsx.snap
new file mode 100644
index 0000000000..2d5653372c
--- /dev/null
+++ b/packages/core/src/features/catalog/__snapshots__/entity-running.test.tsx.snap
@@ -0,0 +1,1608 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`entity running technical tests when navigated to catalog renders 1`] = `
+
+
+
+
+
+
+
+
+ home
+
+
+
+
+
+
+
+ arrow_back
+
+
+
+
+
+
+
+ arrow_forward
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ arrow_left
+
+
+
+
+
+ arrow_right
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`entity running technical tests when navigated to catalog when details panel is opened renders 1`] = `
+
+
+
+
+
+
+
+
+ home
+
+
+
+
+
+
+
+ arrow_back
+
+
+
+
+
+
+
+ arrow_forward
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ arrow_left
+
+
+
+
+
+ arrow_right
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Mock: a catalog entity
+
+
+ content_copy
+
+
+
+ Copy
+
+
+
+
+ close
+
+
+
+ Close
+
+
+
+
+
+
+ ace
+
+
+ Click to open
+
+
+
+
+
+
+
+
+
+
+`;
diff --git a/packages/core/src/features/catalog/__snapshots__/opening-entity-details.test.tsx.snap b/packages/core/src/features/catalog/__snapshots__/opening-entity-details.test.tsx.snap
index 49d085fc85..69f175cfcd 100644
--- a/packages/core/src/features/catalog/__snapshots__/opening-entity-details.test.tsx.snap
+++ b/packages/core/src/features/catalog/__snapshots__/opening-entity-details.test.tsx.snap
@@ -108,11 +108,11 @@ exports[`opening catalog entity details panel renders 1`] = `
If you have any questions or feedback, please join our
- Lens Community slack channel
+ Lens Forums
.
@@ -1925,10 +1925,10 @@ exports[`opening catalog entity details panel when navigated to the catalog when
/>
+
+
+
+
+
+
+
+ home
+
+
+
+
+
+
+
+ arrow_back
+
+
+
+
+
+
+
+ arrow_forward
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Welcome to some-product-name!
+
+
+ To get you started we have auto-detected your clusters in your
+
+ kubeconfig file and added them to the catalog, your centralized
+
+ view for managing all your cloud-native resources.
+
+
+ If you have any questions or feedback, please join our
+
+ Lens Forums
+
+ .
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ arrow_left
+
+
+
+
+
+ arrow_right
+
+
+
+
+
+
+
+
+
+
+
+
+ WebLink: some-weblink
+
+
+ content_copy
+
+
+
+ Copy
+
+
+
+
+ close
+
+
+
+ Close
+
+
+
+
+
+
+ sw
+
+
+ Click to open
+
+
+
+
+
+
+ More Information
+
+
+
+ URL
+
+
+ https://my-websome.com
+
+
+
+
+
+
+
+