diff --git a/.dockerignore b/.dockerignore
index 144cfe16a..3df5a15b5 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -7,7 +7,6 @@
/currentdirectory
/node_modules
/built
-/dist-frontend
/captain-sample-apps
# JetBrains
@@ -17,4 +16,7 @@
npm-debug.log
-.DS_Store
\ No newline at end of file
+.DS_Store
+
+.github
+.vscode
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 6d3c35e84..afa69a1b8 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -4,27 +4,22 @@ about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
-
---
**IMPORTANT:** This is a bug report. If you are having problem with deploying a particular app use the deployment issue type.
> If you are having problems with deploying a particular app using a customized dockerfile - please change your questions to Dockerfile and post it where appropriate such as StackOverflow. This is a Docker question, not a CapRover specific issue.
---------------------------------------------------------------------------
+---
What is the problem?
-
-
If applicable, content of `captain-definition` file:
-
-
Steps to reproduce the problem:
+Output of the following command on your server:
-
-Answers to the following questions where applicable:
-- Your OS and version?
-- RAM?
+```
+uname -a && lsb_release -a && free -h
+```
diff --git a/.github/ISSUE_TEMPLATE/deployment-issue.md b/.github/ISSUE_TEMPLATE/deployment-issue.md
index 856289541..ba904a539 100644
--- a/.github/ISSUE_TEMPLATE/deployment-issue.md
+++ b/.github/ISSUE_TEMPLATE/deployment-issue.md
@@ -1,30 +1,25 @@
---
name: Deployment Issue
about: Problem with deploying your apps
-title: "[Deployment Issue]"
+title: '[Deployment Issue]'
labels: deployment-issue
assignees: ''
-
---
**IMPORTANT:** Please avoid posting issues that are not specific to CapRover. Issues and questions related to Docker will get closed.
> If you are trying to see how to deploy a particular app using a customized dockerfile - please change your questions to Dockerfile and post it where appropriate such as StackOverflow. This is a Docker question, not a CapRover specific issue.
---------------------------------------------------------------------------
+---
What is the problem?
-
-
If applicable, content of `captain-definition` file:
-
-
Steps to reproduce the problem:
+Output of the following command on your server:
-
-Answers to the following questions if applicable:
-- Your OS and version?
-- RAM?
+```
+uname -a && lsb_release -a && free -h
+```
diff --git a/.github/workflows/build_project.yml b/.github/workflows/build_project.yml
index 7293e3ada..15d23a6ac 100644
--- a/.github/workflows/build_project.yml
+++ b/.github/workflows/build_project.yml
@@ -1,19 +1,23 @@
name: Run build
on:
- push:
- branches:
- - master
- pull_request:
- branches:
- - master
+ push:
+ branches:
+ - master
+ pull_request:
+ branches:
+ - master
jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v1
- - uses: actions/setup-node@v1
- with:
- node-version: 10
- - run: sudo mkdir /captain && npm ci && npm run build && sudo npm run test
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions/setup-node@v3
+ with:
+ node-version: 18
+ - run: |
+ sudo bash -c "mkdir /captain && chown -R `whoami` /captain"
+ npm ci
+ npm run build
+ npm run test
diff --git a/.github/workflows/format_project.yml b/.github/workflows/format_project.yml
index 866e23ea7..85dbf48cd 100644
--- a/.github/workflows/format_project.yml
+++ b/.github/workflows/format_project.yml
@@ -1,19 +1,19 @@
name: Run formatter
on:
- push:
- branches:
- - master
- pull_request:
- branches:
- - master
+ push:
+ branches:
+ - master
+ pull_request:
+ branches:
+ - master
jobs:
- check-code-formatting:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v1
- - uses: actions/setup-node@v1
- with:
- node-version: 10
- - run: npm ci && npm run formatter
+ check-code-formatting:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions/setup-node@v3
+ with:
+ node-version: 18
+ - run: npm ci && npm run formatter
diff --git a/.github/workflows/lint_project.yml b/.github/workflows/lint_project.yml
index fc82228ea..5dac41495 100644
--- a/.github/workflows/lint_project.yml
+++ b/.github/workflows/lint_project.yml
@@ -1,19 +1,19 @@
name: Run lint
on:
- push:
- branches:
- - master
- pull_request:
- branches:
- - master
+ push:
+ branches:
+ - master
+ pull_request:
+ branches:
+ - master
jobs:
- run-tslint:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v1
- - uses: actions/setup-node@v1
- with:
- node-version: 10
- - run: npm ci && npm run tslint
+ run-lint:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions/setup-node@v3
+ with:
+ node-version: 18
+ - run: npm ci && npm run lint
diff --git a/.github/workflows/publish_edge.yml b/.github/workflows/publish_edge.yml
index e50784f6b..7ce658851 100644
--- a/.github/workflows/publish_edge.yml
+++ b/.github/workflows/publish_edge.yml
@@ -9,17 +9,17 @@ jobs:
run-pre-checks:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v1
- - uses: actions/setup-node@v1
+ - uses: actions/checkout@v3
+ - uses: actions/setup-node@v3
with:
- node-version: 14
+ node-version: 18
- run: |
- sudo mkdir /captain
+ sudo bash -c "mkdir /captain && chown -R `whoami` /captain"
npm ci
npm run build
- npm run tslint
+ npm run lint
npm run formatter
- sudo npm run test
+ npm run test
build-publish-docker-hub:
needs: run-pre-checks
runs-on: ubuntu-latest
diff --git a/.github/workflows/publish_release.yml b/.github/workflows/publish_release.yml
index a0db3e535..490d0718c 100644
--- a/.github/workflows/publish_release.yml
+++ b/.github/workflows/publish_release.yml
@@ -9,17 +9,17 @@ jobs:
run-pre-checks:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v1
- - uses: actions/setup-node@v1
+ - uses: actions/checkout@v3
+ - uses: actions/setup-node@v3
with:
- node-version: 14
+ node-version: 18
- run: |
- sudo mkdir /captain
+ sudo bash -c "mkdir /captain && chown -R `whoami` /captain"
npm ci
npm run build
- npm run tslint
+ npm run lint
npm run formatter
- sudo npm run test
+ npm run test
build-publish-docker-hub:
needs: run-pre-checks
runs-on: ubuntu-latest
diff --git a/.gitignore b/.gitignore
index f3981afda..642461bf6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,7 @@
/node_modules
/built
/dist-frontend
+/temp-frontend
version
@@ -18,3 +19,4 @@ npm-debug.log
.DS_Store
/.project
+config-override.json
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index 23d725ea1..bcc145ec3 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -1,10 +1,10 @@
{
"recommendations": [
- "eg2.tslint",
"streetsidesoftware.code-spell-checker",
"pflannery.vscode-versionlens",
"remimarsal.prettier-now",
"hookyqr.beautify",
- "esbenp.prettier-vscode"
+ "esbenp.prettier-vscode",
+ "dbaeumer.vscode-eslint"
]
-}
\ No newline at end of file
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index ae0375d23..053e1a9d8 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -3,17 +3,26 @@
"search.exclude": {
"**/node_modules": true,
"**/bower_components": true,
- "**/dist": true,
+ "**/built": true,
"**/coverge": true
},
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
- "source.organizeImports": true
+ "source.organizeImports": "explicit",
+ "source.fixAll.eslint": "explicit",
+ "source.addMissingImports": "explicit"
},
"typescript.referencesCodeLens.enabled": true,
- "tslint.ignoreDefinitionFiles": false,
- "tslint.autoFixOnSave": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
- "tslint.exclude": "**/node_modules/**/*",
- "cSpell.words": ["csrf", "definitelytyped", "promisified"]
+ "cSpell.words": ["csrf", "definitelytyped", "dockerode", "promisified"],
+ "[shellscript]": {
+ "editor.defaultFormatter": "foxundermoon.shell-format"
+ },
+ "[plaintext]": {
+ "editor.formatOnSave": false,
+ "editor.defaultFormatter": null
+ },
+ "files.associations": {
+ "*.theme": "plaintext"
+ }
}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f7593b2f0..c93576b1d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,151 +1,235 @@
## [Next Version - available as `edge`]
-- Fixed: Editing a docker remote registry does not trigger an authentication check [Issue-1027](https://github.com/caprover/caprover/issues/1027)
-- Fixed: Show Password caches the modal in registry [Issue-69](https://github.com/caprover/caprover-frontend/issues/69)
-- New: Now git sha values are available during the build process and runtime as `CAPROVER_GIT_COMMIT_SHA` [PR-1094](https://github.com/caprover/caprover/pull/1049/files)
-- New: UI components and typeface are now more modern looking
-- New: Support for app tokens [Issue-698](https://github.com/caprover/caprover/issues/698)
-- New: Support for Markdown formatting in one click apps [Issue-1151](https://github.com/caprover/caprover/issues/1151)
+## [1.14.0] - 2025-06-07
+
+- Added functionality for custom ports [issue-2220](https://github.com/caprover/caprover/pull/2220)
+- Added GoAccess as a built-in statistics engine [issue-2182](https://github.com/caprover/caprover/pull/2182)
+- Enhanced URL parsing for git repositories to address some uncommon but valid URL patterns [issue-2182](https://github.com/caprover/caprover/pull/2286)
+- Dependency updates and security patches
+- Added new languages in translations
+- Fixed other bugs and issues
+
+## [1.13.3] - 2024-12-01
+
+- Critical security patches
+- Added UDP port mapping for nginx to allow http/3
+
+## [1.13.2] - 2024-11-09
+
+- Fixed crash on private registry without push auth [ca9831](https://github.com/caprover/caprover/commit/ca9831399e05de9144cfd1fb63c9f88790a4cad2)
+- Fixed local timestamp issue [PR-169](https://github.com/caprover/caprover-frontend/pull/169)
+- Fixed line wrap issue with Firefox [issue-2179](https://github.com/caprover/caprover/issues/2179)
+- Fixed some translation issues
+
+## [1.13.1] - 2024-10-19
+
+- Fixed an auth issue on frontend [cd916c](https://github.com/caprover/caprover-frontend/commit/cd916c53c4b15ec3f71863075dc4d2a729e2266e)
+
+## [1.13.0] - 2024-10-19
+
+- New: Added project structure [issue-158](https://github.com/caprover/caprover-frontend/pull/158)
+- New: Added translations in multiple languages [issue-159](https://github.com/caprover/caprover-frontend/pull/159)
+- New: Added themes! Now you can pick your favorite theme or build a new one! [issue-160](https://github.com/caprover/caprover-frontend/pull/160)
+- New: Added automatic IP fallback on installation [ca196e5](https://github.com/caprover/caprover/commit/ca196e51be2df80836ff027a99bb92dde83c4f7f)
+- New: Disallow passphrase protected SSH keys [issue-2153](https://github.com/caprover/caprover/issues/2153)
+- Fixed: Deploy time now uses the proper locale [issue-157](https://github.com/caprover/caprover-frontend/issues/157)
+- Fixed: The app log box is resizable again [issue-2112](https://github.com/caprover/caprover/issues/2112)
+- Fixed: Showing the missing timezones due to daylight saving time [issue-2110](https://github.com/caprover/caprover/issues/2110)
+- Fixed: Log Search filter crash on invalid Regex [issue-2128](https://github.com/caprover/caprover/issues/2128)
+
+## [1.12.0] - 2024-08-17
+
+**IMPORTANT**: this version bumps the minimum Docker API to 1.43. Please run `docker version | grep API` before upgrading your CapRover installation.
+
+- New: Ability to delete multiple apps at once
+- New: Ability to setup automated disk cleanup
+- New: Support for custom Certbot commands allowing support for DNS challenges [Issue-1761](https://github.com/caprover/caprover/issues/1761)
+- New: Ability to search app logs on the web [Issue-149](https://github.com/caprover/caprover-frontend/issues/149)
+- New: Added support for Docker capabilities (enabling VPN one click apps etc)
+- Improved: Now the redirects include the path
+- Improved: SSH key handling to avoid human mistakes
+- Security: Updated npm dependencies security update
+- Security: Updated Certbot image (2.11.0)
+
+## [1.11.1] - 2023-09-16
+
+- Fixed: Malformatted SSH issue [Issue-1863](https://github.com/caprover/caprover/issues/1863)
+- Fixed: Cannot save due to undefined property [Issue-1871](https://github.com/caprover/caprover/issues/1871)
+- New/Experimental: Added a helper script for disabling the OTP
+- Improved: Locking the nginx version to avoid unstable deployments and upgrades
+
+## [1.11.0] - 2023-08-27
+
+- Improved: Pulling the new image before attempt to upgrade the CapRover engine to improve reliability of upgrades
+- Improved: Allowed custom git usernames [PR-1254](https://github.com/caprover/caprover/pull/1254)
+- Improved: Enabled gzip for the dashboard for a faster load
+- Improved: Allowed custom captain domain for webhooks [PR-1330](https://github.com/caprover/caprover/pull/1330)
+- Improved: Updated Netdata version [PR-1432](https://github.com/caprover/caprover/pull/1432). This is a major upgrade. Make sure to test your notifications and emails.
+- Improved: Added support for overwriting app defaults NGINX config [PR-1377](https://github.com/caprover/caprover/pull/1377)
+- Improved: Added support for overriding mesh network settings and using an existing Docker Swarm [56e739c](https://github.com/caprover/caprover/commit/56e739c0f57ce873bf8d032de838c415548041b7)
+- Improved: Updated the Docker image to use Alpine base image. Image size is now less than half!
+- New/Experimental: Added support for domain aliases (redirecting to specific domains) [PR-1744](https://github.com/caprover/caprover/pull/1744)
+- New/Experimental: Added support for app tags for grouping [PR-118](https://github.com/caprover/caprover-frontend/pull/118)
+- New/Experimental: Premium features (two factor auth, build success and failure alerts, login alerts) - will be rolled out gradually.
+- New/Experimental: Anonymous metric reporting added to CapRover. Please be sure to read TERMS_AND_CONDITIONS.md for details.
+- Fixed: Allowing dots to be present in repo names [PR-1553](https://github.com/caprover/caprover/pull/1553)
+
+## [1.10.1] - 2021-10-09
+
+- Fixed: Fixed expired SSL certs issue [Issue-1215](https://github.com/caprover/caprover/issues/1215)
+- Fixed: On some VMs the initial installation used to fail due to issues with Docker's ingress network. [Issue-1206](https://github.com/caprover/caprover/issues/1206)
+- Fixed: CAPROVER_GIT_COMMIT_SHA wasn't available if deployed using webhook [Issue-1198](https://github.com/caprover/caprover/issues/1198)
+
+## [1.10.0] - 2021-08-31
+
+- Fixed: Editing a docker remote registry does not trigger an authentication check [Issue-1027](https://github.com/caprover/caprover/issues/1027)
+- Fixed: Show Password caches the modal in registry [Issue-69](https://github.com/caprover/caprover-frontend/issues/69)
+- Fixed: Remember Me throws an error if the server restarts [Issue-1056](https://github.com/caprover/caprover/issues/1056)
+- New: Now git sha values are available during the build process and runtime as `CAPROVER_GIT_COMMIT_SHA` [PR-1094](https://github.com/caprover/caprover/pull/1049/files)
+- New: UI components and typeface are now more modern looking
+- New: Support for app tokens [Issue-698](https://github.com/caprover/caprover/issues/698)
+- New: Support for Markdown formatting in one click apps [Issue-1151](https://github.com/caprover/caprover/issues/1151)
+- Update: npm modules updated to the latest versions.
## [1.9.0] - 2021-02-15
-- New: Automatically adding Docker Hub credentials to the public images to improve limit rate [Issue-906](https://github.com/caprover/caprover/issues/906)
-- New: Dark mode is added [PR-62](https://github.com/caprover/caprover-frontend/pull/62)
-- New: Open in New Window functionality is added [PR-63](https://github.com/caprover/caprover-frontend/pull/63)
-- Fixed: Enable https on app only works if https is enabled on dashboard [Issue-998](https://github.com/caprover/caprover/issues/998)
-- Update: npm modules updated to the latest versions.
+- New: Automatically adding Docker Hub credentials to the public images to improve limit rate [Issue-906](https://github.com/caprover/caprover/issues/906)
+- New: Dark mode is added [PR-62](https://github.com/caprover/caprover-frontend/pull/62)
+- New: Open in New Window functionality is added [PR-63](https://github.com/caprover/caprover-frontend/pull/63)
+- Fixed: Enable https on app only works if https is enabled on dashboard [Issue-998](https://github.com/caprover/caprover/issues/998)
+- Update: npm modules updated to the latest versions.
## [1.8.2] - 2020-11-02
-- Fixed: The following frontend bug fixes didn't make it to 1.8.1 due to a release mistake
-- Fixed: Logout did not clear cookies. [issue-810](https://github.com/caprover/caprover/issues/810)
-- Fixed: Creating a new app while another app is building breaks the UI [Issue-56](https://github.com/caprover/caprover-frontend/issues/56)
+- Fixed: The following frontend bug fixes didn't make it to 1.8.1 due to a release mistake
+- Fixed: Logout did not clear cookies. [issue-810](https://github.com/caprover/caprover/issues/810)
+- Fixed: Creating a new app while another app is building breaks the UI [Issue-56](https://github.com/caprover/caprover-frontend/issues/56)
## [1.8.1] - 2020-10-31
-- New: CapRover now supports ARM processors [issue-445](https://github.com/caprover/caprover/issues/445)
-- Fixed: Logout did not clear cookies. [issue-810](https://github.com/caprover/caprover/issues/810)
-- Fixed: Creating a new app while another app is building breaks the UI [Issue-56](https://github.com/caprover/caprover-frontend/issues/56)
+- New: CapRover now supports ARM processors [issue-445](https://github.com/caprover/caprover/issues/445)
+- Fixed: Logout did not clear cookies. [issue-810](https://github.com/caprover/caprover/issues/810)
+- Fixed: Creating a new app while another app is building breaks the UI [Issue-56](https://github.com/caprover/caprover-frontend/issues/56)
## [1.8.0] - 2020-08-16
-- New: Update Docker API to v1.40 - Make sure to have Docker v19.03 or above. [Issue-797](https://github.com/caprover/caprover/issues/797)
-- New: Change one-click app schema to be more compatible with Docker compose. [Issue-786](https://github.com/caprover/caprover/issues/786)
-- New: Added hostname support for one-click apps which was necessary for some apps. [Issue-404](https://github.com/caprover/caprover/issues/404)
-- New: Added ability to override docker service configs that are not present in CapRover (read-only volumes, CPU/RAM limitation and reservation and many more. [See docs](https://caprover.com/docs/service-update-override.html)
-- New: Allow logs timestamp to be disabled for services. [Issue-602](https://github.com/caprover/caprover/issues/602)
-- New: Added --advertise-addr for Docker swarm join. [Issue-572](https://github.com/caprover/caprover/issues/572)
-- New: Added deletion capability to selfhost Docker Registry. [Issue-580](https://github.com/caprover/caprover/issues/580)
-- New: Remove "Exposed Webapp" in apps table in favor of adding last deployed time. [Issue-47](https://github.com/caprover/caprover-frontend/issues/47)
-- New: Default to a Apps tab if the instance is fully set up. [Issue-48](https://github.com/caprover/caprover-frontend/issues/48)
-- Bugfix: Fixed a edge case where dhparam file is empty [Issue-745](https://github.com/caprover/caprover/issues/745)
-- Bugfix: Fixed an issue with app renaming where the app was deleted [Issue-701](https://github.com/caprover/caprover/issues/701)
-- Bugfix: Fixed an issue with HTTPS redirection on query parameters [PR-788](https://github.com/caprover/caprover/pull/788)
-- Security: Updated Node dependencies
+- New: Update Docker API to v1.40 - Make sure to have Docker v19.03 or above. [Issue-797](https://github.com/caprover/caprover/issues/797)
+- New: Change one-click app schema to be more compatible with Docker compose. [Issue-786](https://github.com/caprover/caprover/issues/786)
+- New: Added hostname support for one-click apps which was necessary for some apps. [Issue-404](https://github.com/caprover/caprover/issues/404)
+- New: Added ability to override docker service configs that are not present in CapRover (read-only volumes, CPU/RAM limitation and reservation and many more. [See docs](https://caprover.com/docs/service-update-override.html)
+- New: Allow logs timestamp to be disabled for services. [Issue-602](https://github.com/caprover/caprover/issues/602)
+- New: Added --advertise-addr for Docker swarm join. [Issue-572](https://github.com/caprover/caprover/issues/572)
+- New: Added deletion capability to selfhost Docker Registry. [Issue-580](https://github.com/caprover/caprover/issues/580)
+- New: Remove "Exposed Webapp" in apps table in favor of adding last deployed time. [Issue-47](https://github.com/caprover/caprover-frontend/issues/47)
+- New: Default to a Apps tab if the instance is fully set up. [Issue-48](https://github.com/caprover/caprover-frontend/issues/48)
+- Bugfix: Fixed a edge case where dhparam file is empty [Issue-745](https://github.com/caprover/caprover/issues/745)
+- Bugfix: Fixed an issue with app renaming where the app was deleted [Issue-701](https://github.com/caprover/caprover/issues/701)
+- Bugfix: Fixed an issue with HTTPS redirection on query parameters [PR-788](https://github.com/caprover/caprover/pull/788)
+- Security: Updated Node dependencies
## [1.7.1] - 2020-07-03
-- New: Improved TLS security settings for the built-in docker registry (https://github.com/caprover/caprover/pull/595)
-- New: Allowing custom ports for git remote repositories. (https://github.com/caprover/caprover/issues/606)
-- New: Default to http2 (https://github.com/caprover/caprover/pull/667)
-- New: Disallowing all contents on dashboard for robots (https://github.com/caprover/caprover-frontend/pull/38)
-- New: Added random hex generator for one click apps (https://github.com/caprover/caprover/issues/637)
-- New: Added ability to customize port and user when attaching a new node (https://github.com/caprover/caprover/issues/574)
-- New: Added a step to create dhparams during installation to improve security.
-- New: Added docker API version to the config params so that it can be changed by the users (https://github.com/caprover/caprover/issues/620)
-- New: Added ability to add 3rd party one-click app repositories (https://github.com/caprover/caprover/issues/691)
-- New: Added image name deploy to web UI panel - UI Improvement
+- New: Improved TLS security settings for the built-in docker registry (https://github.com/caprover/caprover/pull/595)
+- New: Allowing custom ports for git remote repositories. (https://github.com/caprover/caprover/issues/606)
+- New: Default to http2 (https://github.com/caprover/caprover/pull/667)
+- New: Disallowing all contents on dashboard for robots (https://github.com/caprover/caprover-frontend/pull/38)
+- New: Added random hex generator for one click apps (https://github.com/caprover/caprover/issues/637)
+- New: Added ability to customize port and user when attaching a new node (https://github.com/caprover/caprover/issues/574)
+- New: Added a step to create dhparams during installation to improve security.
+- New: Added docker API version to the config params so that it can be changed by the users (https://github.com/caprover/caprover/issues/620)
+- New: Added ability to add 3rd party one-click app repositories (https://github.com/caprover/caprover/issues/691)
+- New: Added image name deploy to web UI panel - UI Improvement
-- Bugfix: Root domain change prevented nginx from booting up if a local registry was enabled (https://github.com/caprover/caprover/issues/686)
-- Bugfix: Refreshing the webhook URL to appear right after Save & Update (https://github.com/caprover/caprover-frontend/issues/41)
-- Bugfix: Fixed Certbot certs issues on servers without any active deploys in 30 days (https://github.com/caprover/caprover/issues/700)
+- Bugfix: Root domain change prevented nginx from booting up if a local registry was enabled (https://github.com/caprover/caprover/issues/686)
+- Bugfix: Refreshing the webhook URL to appear right after Save & Update (https://github.com/caprover/caprover-frontend/issues/41)
+- Bugfix: Fixed Certbot certs issues on servers without any active deploys in 30 days (https://github.com/caprover/caprover/issues/700)
-- Security: Updated Node version to 14
-- Security: Updated Node dependencies
-- Security: Updated Certbot to 1.5.0
+- Security: Updated Node version to 14
+- Security: Updated Node dependencies
+- Security: Updated Certbot to 1.5.0
-- Refactoring: Moved SSL configs to `http` context in nginx to avoid duplicating the snippet (https://github.com/caprover/caprover/commit/f896eef1cf64cd8433e1262e9d64f592b5b0caac). If you have customized nginx configs for your root, make sure to update it.
+- Refactoring: Moved SSL configs to `http` context in nginx to avoid duplicating the snippet (https://github.com/caprover/caprover/commit/f896eef1cf64cd8433e1262e9d64f592b5b0caac). If you have customized nginx configs for your root, make sure to update it.
## [1.6.1] - 2020-01-02
-- Fixed dockerfile parsing warning: https://github.com/caprover/caprover/issues/570
+- Fixed dockerfile parsing warning: https://github.com/caprover/caprover/issues/570
## [1.6.0] - 2019-12-16
-- Improved renaming process. We now automatically generate new webhook when the app is renamed. (https://github.com/caprover/caprover/pull/499)
-- Improved renaming process - now checking for name clash before renaming. (https://github.com/caprover/caprover/pull/498)
-- Improved validation logic for the webhook build trigger. (https://github.com/caprover/caprover/pull/496)
-- Fixed bug with pulling from private registries running on custom ports, (https://github.com/caprover/caprover/pull/500)
-- Automatically focusing on password field upong admin page load.
-- Fixing Progressive Web App prsentation of the admin page (https://github.com/caprover/caprover-frontend/pull/24)
-- Keeping tabs on Apps Details page when the page reloads.
-- Allowing user to remove the webhook git repo info.
-- Blocking navigation when one-click app build is in progress.
-- Fixed new bug for monitoring on new installations (https://github.com/caprover/caprover/issues/550)
-- Envrionmental variables are now available during build time (https://github.com/caprover/caprover/pull/561)
-- Updated SSL default config (https://github.com/caprover/caprover/issues/562)
-- Updated new look for one-click apps! Now with logos and description!
+- Improved renaming process. We now automatically generate new webhook when the app is renamed. (https://github.com/caprover/caprover/pull/499)
+- Improved renaming process - now checking for name clash before renaming. (https://github.com/caprover/caprover/pull/498)
+- Improved validation logic for the webhook build trigger. (https://github.com/caprover/caprover/pull/496)
+- Fixed bug with pulling from private registries running on custom ports, (https://github.com/caprover/caprover/pull/500)
+- Automatically focusing on password field upong admin page load.
+- Fixing Progressive Web App prsentation of the admin page (https://github.com/caprover/caprover-frontend/pull/24)
+- Keeping tabs on Apps Details page when the page reloads.
+- Allowing user to remove the webhook git repo info.
+- Blocking navigation when one-click app build is in progress.
+- Fixed new bug for monitoring on new installations (https://github.com/caprover/caprover/issues/550)
+- Envrionmental variables are now available during build time (https://github.com/caprover/caprover/pull/561)
+- Updated SSL default config (https://github.com/caprover/caprover/issues/562)
+- Updated new look for one-click apps! Now with logos and description!
## [1.5.2] - 2019-08-15
-- Fixed a problem with one-click app deployment on new installations. https://github.com/caprover/caprover/issues/481
+- Fixed a problem with one-click app deployment on new installations. https://github.com/caprover/caprover/issues/481
## [1.5.1] - 2019-08-14
New features & Improvements:
-- Ablity to use websockets without having to manually edit nginx config (https://github.com/caprover/caprover/issues/439)
-- Double hyphen in "image name" is now changed to single hyphen, `img-captain--myapp` is now changed to `img-captain-myapp`. This is to address the problem with 3rd party docker registries. See (https://github.com/caprover/caprover/issues/454). Note that this is only applied to the newly built images. All existing images will stay intact. Also keep in mind that service names and volume names remain the same with double hyphens for now.
-- Builds are now being queued instead of dropping the build if another one is in progress. See (https://github.com/caprover/caprover/issues/266)
-- Ability to rename apps (https://github.com/caprover/caprover/issues/402)
-- Limiting login failures to avoid brute-forcing the password (https://github.com/caprover/caprover/issues/419)
-- Switched to fake certs for https catch all to avoid disclosing dashboard address.
-- Pulling nginx and certbot images to ensure smooth install even on buggy docker installations. See this: https://github.com/caprover/caprover/issues/450
-- Make the root domain available as a variable in one-click apps. See https://github.com/caprover/caprover/issues/435
+- Ablity to use websockets without having to manually edit nginx config (https://github.com/caprover/caprover/issues/439)
+- Double hyphen in "image name" is now changed to single hyphen, `img-captain--myapp` is now changed to `img-captain-myapp`. This is to address the problem with 3rd party docker registries. See (https://github.com/caprover/caprover/issues/454). Note that this is only applied to the newly built images. All existing images will stay intact. Also keep in mind that service names and volume names remain the same with double hyphens for now.
+- Builds are now being queued instead of dropping the build if another one is in progress. See (https://github.com/caprover/caprover/issues/266)
+- Ability to rename apps (https://github.com/caprover/caprover/issues/402)
+- Limiting login failures to avoid brute-forcing the password (https://github.com/caprover/caprover/issues/419)
+- Switched to fake certs for https catch all to avoid disclosing dashboard address.
+- Pulling nginx and certbot images to ensure smooth install even on buggy docker installations. See this: https://github.com/caprover/caprover/issues/450
+- Make the root domain available as a variable in one-click apps. See https://github.com/caprover/caprover/issues/435
Bug fixes:
-- Backup creation was fixed for instances that were migrated from CaptainDuckDuck
-- Python and Ruby templates were patched to allow using latest version of Linux automatically
-- updated npm packages to address potential vulnerabilities
+- Backup creation was fixed for instances that were migrated from CaptainDuckDuck
+- Python and Ruby templates were patched to allow using latest version of Linux automatically
+- updated npm packages to address potential vulnerabilities
## [1.4.0] - 2019-04-07
New Features:
-- Added SSH key support for git webhook automatic deploy (https://github.com/caprover/caprover/issues/342)
-- Added built-in support for HTTP basic auth (https://github.com/caprover/caprover/issues/336)
-- Added option to add some app notes (description) to your apps (https://github.com/caprover/caprover/issues/403)
-- Changed One-Click app selector to allow search (https://github.com/caprover/caprover/issues/394)
-- Setting maximum version history to last 50 versions to keep the config file small
-- Added Remember Me to web dashboard
-- Added option to delete volumes when persistent app is being deleted
+- Added SSH key support for git webhook automatic deploy (https://github.com/caprover/caprover/issues/342)
+- Added built-in support for HTTP basic auth (https://github.com/caprover/caprover/issues/336)
+- Added option to add some app notes (description) to your apps (https://github.com/caprover/caprover/issues/403)
+- Changed One-Click app selector to allow search (https://github.com/caprover/caprover/issues/394)
+- Setting maximum version history to last 50 versions to keep the config file small
+- Added Remember Me to web dashboard
+- Added option to delete volumes when persistent app is being deleted
Bug fixes:
-- Auto redirect after Force SSL was broken on frontend (https://github.com/caprover/caprover/issues/399)
+- Auto redirect after Force SSL was broken on frontend (https://github.com/caprover/caprover/issues/399)
## [1.3.0] - 2019-03-04
Added:
-- Backup capability added (for configs and SSL certs). See docs for more details.
-- Health checks are now excluded from CapRover and nginx logs
-- Front-end is now _almost_ mobile friendly.
-- Improved default SSL (https://github.com/caprover/caprover/issues/371)
-- Ability to change the root domain post installation
+- Backup capability added (for configs and SSL certs). See docs for more details.
+- Health checks are now excluded from CapRover and nginx logs
+- Front-end is now _almost_ mobile friendly.
+- Improved default SSL (https://github.com/caprover/caprover/issues/371)
+- Ability to change the root domain post installation
Fixed:
-- Web UI now waits for logs to get retrieved before sending another refresh. This fixes the rare case where the entire UI hangs because of Docker being unresponsive.
-- Fixed non English characters in the logs
-- Logs are now correctly sorted on the front-end
+- Web UI now waits for logs to get retrieved before sending another refresh. This fixes the rare case where the entire UI hangs because of Docker being unresponsive.
+- Fixed non English characters in the logs
+- Logs are now correctly sorted on the front-end
## [1.2.1] - 2019-02-11
Fixed
-- Pulling images from third party remote private repositories (https://github.com/caprover/caprover/issues/370)
+- Pulling images from third party remote private repositories (https://github.com/caprover/caprover/issues/370)
## [1.2.0] - 2019-02-05
@@ -154,17 +238,17 @@ https://caprover.com/docs/cdd-migration.html
Added:
-- Monorepos are now first class citizens, thanks to this suggestion https://github.com/caprover/caprover/issues/356#issuecomment-459675615 by @robgraeber
-- Custom One-Click apps. Now everyone can create a one click app as the templates are now easily testable. Use the last option in One-Click apps list (Template) and create a Pull Request here: https://github.com/caprover/one-click-apps
-- Force git build button
-- Hide/Show password clear text password fields
-- Fall back to `Dockerfile` if `captain-definition` file does not exist
+- Monorepos are now first class citizens, thanks to this suggestion https://github.com/caprover/caprover/issues/356#issuecomment-459675615 by @robgraeber
+- Custom One-Click apps. Now everyone can create a one click app as the templates are now easily testable. Use the last option in One-Click apps list (Template) and create a Pull Request here: https://github.com/caprover/one-click-apps
+- Force git build button
+- Hide/Show password clear text password fields
+- Fall back to `Dockerfile` if `captain-definition` file does not exist
Fixed:
-- Removal of Ports and Volumes (https://github.com/caprover/caprover/issues/355)
-- Not saving SMTP if username is not provided (some password managers autofill password field!)
-- Fixed deploy when some version are manually removed from `config-captain.json` file.
+- Removal of Ports and Volumes (https://github.com/caprover/caprover/issues/355)
+- Not saving SMTP if username is not provided (some password managers autofill password field!)
+- Fixed deploy when some version are manually removed from `config-captain.json` file.
Donation campaign launched ❤
https://opencollective.com/caprover#backer
@@ -175,15 +259,15 @@ https://opencollective.com/caprover#backer
Fixed:
-- Persistent data directory with fixed path (https://github.com/caprover/caprover/issues/351)
+- Persistent data directory with fixed path (https://github.com/caprover/caprover/issues/351)
Added:
-- App Logs are now accessible via dashboard (https://github.com/caprover/caprover/issues/196)
+- App Logs are now accessible via dashboard (https://github.com/caprover/caprover/issues/196)
### Dev:
-- Backend and frontend dependencies updated
+- Backend and frontend dependencies updated
## [1.0.0] - 2019-01-19
@@ -193,37 +277,37 @@ Script for upgrading from CaptainDuckDuck to CapRover will be ready in a few wee
### Breaking Changes:
-- schemaVersion in captain-definition file is now upgraded to 2
-- The extra ./src prefix is no longer needed for captain-definition dockerfiles. You need to remove ./src from the first argument in your COPY and ADD statements in your dockerfileLines
+- schemaVersion in captain-definition file is now upgraded to 2
+- The extra ./src prefix is no longer needed for captain-definition dockerfiles. You need to remove ./src from the first argument in your COPY and ADD statements in your dockerfileLines
### Features:
-- One Click Rollback
-- Improved build logs on webview.
-- Improved downtime between deploys
-- Allowing Dockerfile to be referenced in captain-definition (https://github.com/caprover/caprover/issues/113)
-- Ability to reference imageName inside captain-definition directly when you want o deploy an already built image from DockerHub.
-- Easy to copy and paste environmental variables UI: (https://github.com/caprover/caprover/issues/256)
-- Added a separate one-click repository which can be updated continuously - built based on docker compose (https://github.com/caprover/one-click-apps)
-- Ability to simply copy and paste a Dockerfile and captain-definition files on web dashboard.
-- Improved cluster support by adding ability to turn on/off the registry, have multiple private registries, change default registry.
-- Web dashboard UI improvements.
+- One Click Rollback
+- Improved build logs on webview.
+- Improved downtime between deploys
+- Allowing Dockerfile to be referenced in captain-definition (https://github.com/caprover/caprover/issues/113)
+- Ability to reference imageName inside captain-definition directly when you want o deploy an already built image from DockerHub.
+- Easy to copy and paste environmental variables UI: (https://github.com/caprover/caprover/issues/256)
+- Added a separate one-click repository which can be updated continuously - built based on docker compose (https://github.com/caprover/one-click-apps)
+- Ability to simply copy and paste a Dockerfile and captain-definition files on web dashboard.
+- Improved cluster support by adding ability to turn on/off the registry, have multiple private registries, change default registry.
+- Web dashboard UI improvements.
### Dev work:
-- Backend rewrite in TypeScript.
-- Frontend rewrite in TypeScript via React + ant.design
-- CLI rewrite in TypeScript
-- Updated Certbot (Let's Encrypt)
+- Backend rewrite in TypeScript.
+- Frontend rewrite in TypeScript via React + ant.design
+- CLI rewrite in TypeScript
+- Updated Certbot (Let's Encrypt)
## [V0.7.3] - 2018-11-28
-- npm package updates for major security vulnerabilities
-- Updated default tags for MySQL in WordPress
-- Updated links in the front end app
-- Fixed the issue with HTTPS repos https://github.com/githubsaturn/captainduckduck/issues/283
-- Fixed port mapping disabled on app push
-- Added VSTS Agent as one-click app
+- npm package updates for major security vulnerabilities
+- Updated default tags for MySQL in WordPress
+- Updated links in the front end app
+- Fixed the issue with HTTPS repos https://github.com/githubsaturn/captainduckduck/issues/283
+- Fixed port mapping disabled on app push
+- Added VSTS Agent as one-click app
## [V0.7.2] - 2018-05-16
@@ -235,61 +319,61 @@ Although it's not a bug in CaptainDuckDuck, it might cause confusion for new use
Added:
-- Ability to override default values. This includes overriding default Captain dashboard subdomain and etc.
-- Allowing precheck for wildcard domain to be skipped if the provider doesn't support wildcard
-- One-click apps can now be deployed with specific tags (versions)
-- The user can now optionally change the instance count of persistent apps.
-- Unused images clean up added to settings
+- Ability to override default values. This includes overriding default Captain dashboard subdomain and etc.
+- Allowing precheck for wildcard domain to be skipped if the provider doesn't support wildcard
+- One-click apps can now be deployed with specific tags (versions)
+- The user can now optionally change the instance count of persistent apps.
+- Unused images clean up added to settings
Improved:
-- Back button works as expected in apps settings page
-- Sticky footer for Save and Delete buttons on the app page
-- Move Docker registry settings to Nodes page from the main dashboard page
-- Revealing real IP by using `mode=host` for nginx
+- Back button works as expected in apps settings page
+- Sticky footer for Save and Delete buttons on the app page
+- Move Docker registry settings to Nodes page from the main dashboard page
+- Revealing real IP by using `mode=host` for nginx
## [V0.6.0] - 2018-02-10
Added:
-- Build logs are now available on web dashboard, you can view build logs initiated with Github webhooks as well.
-- Added Redis as a one-click app
-- Added prechecks on OS and Docker version when installing CaptainDuckDuck to ensure maximum compatibility
+- Build logs are now available on web dashboard, you can view build logs initiated with Github webhooks as well.
+- Added Redis as a one-click app
+- Added prechecks on OS and Docker version when installing CaptainDuckDuck to ensure maximum compatibility
Fixed:
-- NetData container removal is retrofitted to avoid some Docker deadlocks
-- Flashing issue for logged out state on Dashboard
-- Login issue on small phone screen
-- Fixed issue with very long domain names
+- NetData container removal is retrofitted to avoid some Docker deadlocks
+- Flashing issue for logged out state on Dashboard
+- Login issue on small phone screen
+- Fixed issue with very long domain names
Improved:
-- Default client max size for Captain is changed to 500mb
-- Message for self-hosted registry is changed to be more clear so user won't be surprised with an expected error
-- More details on error messages related to custom domains
+- Default client max size for Captain is changed to 500mb
+- Message for self-hosted registry is changed to be more clear so user won't be surprised with an expected error
+- More details on error messages related to custom domains
## [0.5.3] - 2018-01-11
Fixed:
-- Third-party private registries limited via username scope were not correctly getting authenticated (https://github.com/githubsaturn/captainduckduck/commit/81fe0408b05dae0d9f4c84c5546c54dfb6845259)
+- Third-party private registries limited via username scope were not correctly getting authenticated (https://github.com/githubsaturn/captainduckduck/commit/81fe0408b05dae0d9f4c84c5546c54dfb6845259)
Improved:
-- Push error are now throwing proper error rather than confusing 500 error
-- If something fails when app is getting created, the premature entry is now automatically deleted from the app database
+- Push error are now throwing proper error rather than confusing 500 error
+- If something fails when app is getting created, the premature entry is now automatically deleted from the app database
## [V0.5.1] - 2018-01-09
**BREAKING CHANGES:**:
-- Make sure that your CLI version is at least `1.0.11`
- -- To check your current version: `captainduckduck -V`
- -- To update: `sudo npm install -g captainduckduck`
-- Breaking change in your `captain-definition` files:
- -- if you have `python` as your template, you should change it to `python-django`
-- Setting a max on log size files does not apply to existing containers. To use the same log size cap for current services, run:
+- Make sure that your CLI version is at least `1.0.11`
+ -- To check your current version: `captainduckduck -V`
+ -- To update: `sudo npm install -g captainduckduck`
+- Breaking change in your `captain-definition` files:
+ -- if you have `python` as your template, you should change it to `python-django`
+- Setting a max on log size files does not apply to existing containers. To use the same log size cap for current services, run:
```
docker service update --log-driver json-file --log-opt max-size=512m captain-nginx
@@ -302,82 +386,82 @@ docker service update --log-driver json-file --log-opt max-size=512m captain-a
### Features added:
-- Ruby/Rack support added (see https://github.com/githubsaturn/captainduckduck/pull/45)
-- Support for showing build logs when deploying via command line added (https://github.com/githubsaturn/captainduckduck/commit/b64c3172df5dc8da1970e64d480f9a546ec53851). Simply running `captainduckduck deploy` now shows the build logs.
-- Added CouchDB as one-click app
+- Ruby/Rack support added (see https://github.com/githubsaturn/captainduckduck/pull/45)
+- Support for showing build logs when deploying via command line added (https://github.com/githubsaturn/captainduckduck/commit/b64c3172df5dc8da1970e64d480f9a546ec53851). Simply running `captainduckduck deploy` now shows the build logs.
+- Added CouchDB as one-click app
### Improved:
-- Added UDP protocol to Port Forwarding (previously it was only TCP)
-- Container log files are now maxed at 512MB per container by default in order to avoid high unnecessary disk usage. It can be changed by updating service manually, e.g., `docker service update srv-captain--app-name --log-driver json-file --log-opt max-size=2048m`
-- Captain now runs a `docker container prune` to clean up stopped containers
-- NetData startup script improved and auto restart is now enabled by default
-- Wrong app name during deploy now returns a more specific message to hint the user instead of plain 500
+- Added UDP protocol to Port Forwarding (previously it was only TCP)
+- Container log files are now maxed at 512MB per container by default in order to avoid high unnecessary disk usage. It can be changed by updating service manually, e.g., `docker service update srv-captain--app-name --log-driver json-file --log-opt max-size=2048m`
+- Captain now runs a `docker container prune` to clean up stopped containers
+- NetData startup script improved and auto restart is now enabled by default
+- Wrong app name during deploy now returns a more specific message to hint the user instead of plain 500
## [0.4.0] - 2017-12-31
New:
-- Added ability to Enorce HTTPS for apps! (https://github.com/githubsaturn/captainduckduck/issues/2)
-- Advanced users are now able to customize their nginx configurations (allowing http2, process counts, cache config, custom redirects and etc). https://github.com/githubsaturn/captainduckduck/issues/44
-- Added a custom `nginx-shared` directory for using custom files in nginx container (https://github.com/githubsaturn/captainduckduck/issues/71). Using this combined with customized nginx config, you can use custom SSL certificates, custom static assets and etc.
-- Persistent directories (volumes) can now be specified as path on host machine.
+- Added ability to Enorce HTTPS for apps! (https://github.com/githubsaturn/captainduckduck/issues/2)
+- Advanced users are now able to customize their nginx configurations (allowing http2, process counts, cache config, custom redirects and etc). https://github.com/githubsaturn/captainduckduck/issues/44
+- Added a custom `nginx-shared` directory for using custom files in nginx container (https://github.com/githubsaturn/captainduckduck/issues/71). Using this combined with customized nginx config, you can use custom SSL certificates, custom static assets and etc.
+- Persistent directories (volumes) can now be specified as path on host machine.
Improved:
-- Health-check calls are now more reliable with the newly added timeout.
+- Health-check calls are now more reliable with the newly added timeout.
Fixed:
-- Force HTTPS button on web dashboard now gets disabled if Force HTTPS is activated. (https://github.com/githubsaturn/captainduckduck/commit/efc43849e892e6f1032072f4c64317f0946b23af)
+- Force HTTPS button on web dashboard now gets disabled if Force HTTPS is activated. (https://github.com/githubsaturn/captainduckduck/commit/efc43849e892e6f1032072f4c64317f0946b23af)
CLI (1.0.9):
-- Added a `--default` flag to `captainduckduck deploy` to avoid re-entering server address and other information.
+- Added a `--default` flag to `captainduckduck deploy` to avoid re-entering server address and other information.
## [0.3.1] - 2017-12-27
Fixed:
-- In cluster mode, the initial instance was always getting created on main node due to wrong image tag (https://github.com/githubsaturn/captainduckduck/commit/c6e9e4b0c25181ecf9ae7f8eec42379685a6726c)
-- GitLab support added for automated deployment
+- In cluster mode, the initial instance was always getting created on main node due to wrong image tag (https://github.com/githubsaturn/captainduckduck/commit/c6e9e4b0c25181ecf9ae7f8eec42379685a6726c)
+- GitLab support added for automated deployment
Improved:
-- Deploy now reports all kinds of errors. No more ambiguous status 500 error.
-- Changed healthcheck interval to 20sec from 5sec to make the logs less verbose
+- Deploy now reports all kinds of errors. No more ambiguous status 500 error.
+- Changed healthcheck interval to 20sec from 5sec to make the logs less verbose
CLI improvements (1.0.8)
-- Fixed logout causing all other instances to get logged out
-- Improved deploy process by pre-checking `captain-definition` file.
-- Improved saving app name if it's getting re-deployed.
+- Fixed logout causing all other instances to get logged out
+- Improved deploy process by pre-checking `captain-definition` file.
+- Improved saving app name if it's getting re-deployed.
## [0.3.0] - 2017-12-19
Features:
-- :octocat: automatic branch tracking and deployment through Github and Bitbucket :confetti_ball:
-- Added ability to expose container ports and map them to host ports
-- Adding ability to change nodeId of apps with persistent data
-- Added ability to set a custom initial password instead of `captain42`
-- Allow customDomain === rootDomain, see https://github.com/githubsaturn/captainduckduck/pull/24
-- Improve build error messages by including last 20 lines of logs that led to build error.
-- Changed max request size to 500mb for apps (temporary solution until fully customizable nginx config is ready)
+- :octocat: automatic branch tracking and deployment through Github and Bitbucket :confetti_ball:
+- Added ability to expose container ports and map them to host ports
+- Adding ability to change nodeId of apps with persistent data
+- Added ability to set a custom initial password instead of `captain42`
+- Allow customDomain === rootDomain, see https://github.com/githubsaturn/captainduckduck/pull/24
+- Improve build error messages by including last 20 lines of logs that led to build error.
+- Changed max request size to 500mb for apps (temporary solution until fully customizable nginx config is ready)
Bugfixes:
-- Instance count of `0` is not respected. FIXED. https://github.com/githubsaturn/captainduckduck/issues/48#issuecomment-352289264
+- Instance count of `0` is not respected. FIXED. https://github.com/githubsaturn/captainduckduck/issues/48#issuecomment-352289264
Breaking Change:
-- If you were manually setting port mapping on your containers before this release, make sure to re-map them through Captain interface. Since port mapping is added to the interface, Captain would override the current port mapping that you might have on your containers. If you didn't manually modified your containers `--publish-add` flag, you don't need to worry about this.
+- If you were manually setting port mapping on your containers before this release, make sure to re-map them through Captain interface. Since port mapping is added to the interface, Captain would override the current port mapping that you might have on your containers. If you didn't manually modified your containers `--publish-add` flag, you don't need to worry about this.
## [ v0.2.2] - 2017-12-05
Hotfix:
-- Fix a bug in web UI that was introduced in v0.2.1. Save configuration button was not functioning.
+- Fix a bug in web UI that was introduced in v0.2.1. Save configuration button was not functioning.
## [0.2.1] - 2017-12-04
@@ -385,25 +469,25 @@ A major release!! 🎉🎉
**New Features:**
-- Support for Persistent Data:
- Previously, Captain only had support for apps with no persistent. The main drawback was that one could not deploy a database using Captain. Now the feature is fully supported.
-- One-click apps:
- This is perhaps the most interesting feature of new release. Although adding support for persistent data, technically speaking, was enough for the developers to deploy databases. But wouldn't it be nicer if installing MySql, MongoDB and etc becomes as easy as selecting a name from a list? :wink: Done! Not only that, off-the-shelf apps are being slowly added to this list. Installing WordPress, Parse-Server, Tumbor is now as easy as installing apps on your phone!
+- Support for Persistent Data:
+ Previously, Captain only had support for apps with no persistent. The main drawback was that one could not deploy a database using Captain. Now the feature is fully supported.
+- One-click apps:
+ This is perhaps the most interesting feature of new release. Although adding support for persistent data, technically speaking, was enough for the developers to deploy databases. But wouldn't it be nicer if installing MySql, MongoDB and etc becomes as easy as selecting a name from a list? :wink: Done! Not only that, off-the-shelf apps are being slowly added to this list. Installing WordPress, Parse-Server, Tumbor is now as easy as installing apps on your phone!
**Improvements:**
-- New tabular design for the apps page enables you to have tens of apps and be able to navigate easily from one to another.
-- Deployment from the web interface now accepts tar archive files of the source directory, not necessarity content. See https://github.com/githubsaturn/captainduckduck/issues/22
+- New tabular design for the apps page enables you to have tens of apps and be able to navigate easily from one to another.
+- Deployment from the web interface now accepts tar archive files of the source directory, not necessarity content. See https://github.com/githubsaturn/captainduckduck/issues/22
## [0.1.2] - 2017-11-17
Bugfixes:
-- Added support for build errors: now build errors get reported as build failure and the image is not created. Previously, build errors were being ignored.
+- Added support for build errors: now build errors get reported as build failure and the image is not created. Previously, build errors were being ignored.
Improvements:
-- Fixed multiple typos
-- Added more details on how apps internally can talk to each other
-- Added functionality to disable "Expose As Web App". Now if you are deploying an app that's only being used as an internal service, you have the option not to expose it via a public URL. This is also useful when in the next release Captain starts supporting databases as they are web-apps at all.
-- Added underlying structure for supporting databases. Since it's not thoroughly tested, the UI is still hidden.
+- Fixed multiple typos
+- Added more details on how apps internally can talk to each other
+- Added functionality to disable "Expose As Web App". Now if you are deploying an app that's only being used as an internal service, you have the option not to expose it via a public URL. This is also useful when in the next release Captain starts supporting databases as they are web-apps at all.
+- Added underlying structure for supporting databases. Since it's not thoroughly tested, the UI is still hidden.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 506b5dba6..425f86915 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -7,48 +7,80 @@ Please note we have a code of conduct, please follow it in all your interactions
## IMPORTANT: CapRover Goals & Scope
-Since the birth of CapRover, there has been many contributions and suggestions that shaped CapRover as we know it today. One of the very important factor in the contribution you make is to stick with CapRover design philosophy.- CapRover is not an enterprise grade application like Kubernetes. *Do not* patch it with half-done features that make it look like one - it will eventually fail as we don't have resources to support such features.- CapRover scope is a helper around Docker, nginx and Let's Encrypt.
+Since the birth of CapRover, there has been many contributions and suggestions that shaped CapRover as we know it today. One of the very important factor in the contribution you make is to stick with CapRover design philosophy.- CapRover is not an enterprise grade application like Kubernetes. _Do not_ patch it with half-done features that make it look like one - it will eventually fail as we don't have resources to support such features.- CapRover scope is a helper around Docker, nginx and Let's Encrypt.
The goal is to make the common use-cases exposed via simple controls on UI while allowing further customizations to be done through hooks and scripts. If a new feature is doable via the existing features, or a basic tool, do not add it to CapRover. We do not want to bloat this application. One example is: "Add a flag to customize the placement constraints of containers". This is definitely doable in Docker, but we don't want to mirror every single functionality of Docker to CapRover. If we do that, CapRover becomes a very hard to maintain project. Instead we should add customization hooks for these advanced and rare use cases. For example, instead of mirroring every single nginx config, we added the ability of customizing the nginx config for advanced users.- Last but not least AVOID LARGE PULL REQUESTS at all cost as they won't get reviewed unless they are discussed in the Slack channel beforehand.
## Pull Request Process
-1. IF APPLICABLE: Update the docs (https://github.com/caprover/caprover-website) with details of changes to the interface, this includes new environment
+1. IF APPLICABLE: Update the docs (https://github.com/caprover/caprover-website) with details of changes to the interface, this includes new environment
variables, exposed ports, useful file locations and container parameters.
2. Make sure your commit comments are self explanatory.
3. Discuss the changes you want to make beforehand.
-4. Please avoid making opinion-based changes if it's just a code-style change - this includes, but not limited to, changes to how we work with promises, class inheritence and etc.
+4. Please avoid making opinion-based changes if it's just a code-style change - this includes, but not limited to, changes to how we work with promises, class inheritance and etc.
5. To keep the process simple with just a few contributors, development happens directly on the master branch
and releases will be deployed on the same branch.
6. By creating a Pull Request, you agree to all terms in https://github.com/caprover/caprover/blob/master/contrib.md
-
-## Running dev environment
+
+### Running backend dev environment
First, you need a Captain instance running in debug mode, this can be a remote server, a VM on your local machine,
or your local machine itself. Needless to say, Docker is required (same minimum version as mentioned in README). Ubuntu is the best dev environment for CapRover.
-> Docker for Mac users: You need to add `/captain` to shared paths.
-> To do so, click on the Docker icon -> Preferences -> File Sharing and add `/captain`
-
Log in to your machine, clone the git repo and run the following lines:
+#### On Linux and Windows
+
```bash
$ npm install
$ npm run build
-$ ./dev-scripts/dev-clean-run-as-dev.sh
+$ sudo ./dev-scripts/dev-clean-run-as-dev.sh
```
+
You are good to go! You can run the following line to see the logs for the back-end service.
```bash
npm run dev
```
+
+#### On macOs
+
+##### Prepare your system (for Catalina and above)
+
+Because of security restriction we have more step to apply on macOs.
+Create a folder wherever you want (for me it will be /opt/captain).
+Link this folder to the root folder (Apple does not allow to create folder on the root but you can do it with a symb link by adding the file in `/etc/synthetic.conf` [see](https://stackoverflow.com/questions/58396821/what-is-the-proper-way-to-create-a-root-sym-link-in-catalina))
+(don't panic id the file does not exist, if you create it will work well.)
+
+1. `sudo vi /etc/synthetic.conf`
+2. add `captain opt/captain` into this file (note this is a tab and not a space ((Ctrl-V + Tab) character))
+3. reboot
+4. Prepare your docker system
+
+##### Prepare your docker (for all macOs User)
+
+> You need to add `/captain` to shared paths.
+> To do so, click on the Docker icon -> Preferences -> Resources -> File Sharing and add `/captain`
+
+#####
+
+use node 18 then
+
+```bash
+$ npm install
+$ npm run build
+$ sudo ./dev-scripts/dev-clean-run-as-dev-macos-step-1.sh
+$ ./dev-scripts/dev-clean-run-as-dev-macos-step-2.sh
+```
+
The main differences between the release and debug mode are:
-- docker image is created from the local source file, instead of getting pulled from Docker hub
-- security is much weaker is debug due to a static salt
-- self health monitoring is disabled in debug so that we can see possible crashes
-- same origin policy is disabled in debug mode to make front end development easier
-- an additional endpoint is available at `/force-exit` which force restarts the backend service
-- static resources (including front end app) are not being served in debug build.
+
+- docker image is created from the local source file, instead of getting pulled from Docker hub
+- security is much weaker is debug due to a static salt
+- self health monitoring is disabled in debug so that we can see possible crashes
+- same origin policy is disabled in debug mode to make front end development easier
+- an additional endpoint is available at `/force-exit` which force restarts the backend service
+- static resources (including front end app) are not being served in debug build.
Captain by default uses `captain.localhost` as its root domain. It's not always needed, but if you need a root
domain for your development, you can simply run a local DNS server on your local machine and point
@@ -60,8 +92,10 @@ And add this line to it: `address=/captain.localhost/192.168.1.2` where `192.168
To make sure you have dnsmasq, you can run `which dnsmasq` on your terminal, if it's available,
path of it will be printed on the terminal, otherwise, there won't be anything printed on your terminal.
+To test the API, you can import the Postman collection JSON in `./dev-scripts` directory.
### front end development:
+
See https://github.com/caprover/caprover-frontend
### CLI development:
@@ -69,13 +103,14 @@ See https://github.com/caprover/caprover-frontend
See https://github.com/caprover/caprover-cli
### Backend development:
+
Start the debug build for the backend service as explained above. To see any changes you make,
first save the changes, then you need to restart the service either by sending a request to `/force-exit` endpoint,
or by running `npm run dev`.
### Security Issues
-Security issues are high priority and they will be addressed immediately. If you find a security issue, please do not post as a public issue, instead, please email it to us: security at caprover dot com.
+Security issues are high priority and they will be addressed immediately. If you find a security issue, please do not post as a public issue, instead, please email it to us: security at caprover dot com.
## Code of Conduct
@@ -93,22 +128,22 @@ orientation.
Examples of behavior that contributes to creating a positive environment
include:
-* Using welcoming and inclusive language
-* Being respectful of differing viewpoints and experiences
-* Gracefully accepting constructive criticism
-* Focusing on what is best for the community
-* Showing empathy towards other community members
+- Using welcoming and inclusive language
+- Being respectful of differing viewpoints and experiences
+- Gracefully accepting constructive criticism
+- Focusing on what is best for the community
+- Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
-* The use of sexualized language or imagery and unwelcome sexual attention or
-advances
-* Trolling, insulting/derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others' private information, such as a physical or electronic
- address, without explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
- professional setting
+- The use of sexualized language or imagery and unwelcome sexual attention or
+ advances
+- Trolling, insulting/derogatory comments, and personal or political attacks
+- Public or private harassment
+- Publishing others' private information, such as a physical or electronic
+ address, without explicit permission
+- Other conduct which could reasonably be considered inappropriate in a
+ professional setting
### Our Responsibilities
diff --git a/LICENSE b/LICENSE
index 5bf91a739..bb28cddc7 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright 2017-2020 Kasra Bigdeli
+Copyright 2017-2024 BigZee Ventures LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -11,3 +11,14 @@ distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+
+Appendix:
+In case of a conflict, the terms of this appendix supersede the general apache license.
+
+- Unless provided with a written agreement, the paid features of CapRover (as a service) cannot be modified.
+- Unless provided with a written agreement, no persons are permitted to redistribute another paid version of CapRover.
+- Furthermore, any modifications of free features of CapRover should be distributed as free & opensource software.
+
+If you have any questions, please feel free to reach out to us.
+
+For terms and conditions of the software and the service, please see TERMS_AND_CONDITIONS.md
diff --git a/README.md b/README.md
index 6ff116053..120107fa2 100644
--- a/README.md
+++ b/README.md
@@ -14,16 +14,14 @@ Easiest app/database deployment platform and webserver package for your NodeJS,
No Docker, nginx knowledge required!
-[](https://twitter.com/intent/tweet?url=https%3A%2F%2Fgithub.com%2Fcaprover%2Fcaprover&via=cap_rover&text=I%20found%20the%20easiest%20webserver%20package%20for%20NodeJS%2C%20PHP%2C%20MySQL%2C%20WordPress%20and%20everything%21&hashtags=CapRover%2Cnodejs%2Cdocker%2Cnginx%2Cwebdev)
-
-
+
## What's this?
-CapRover is an extremely easy to use app/database deployment & web server manager for your **NodeJS, Python, PHP, ASP.NET, Ruby, MySQL, MongoDB, Postgres, WordPress (and etc...)** applications!
+CapRover is an extremely easy to use app/database deployment & web server manager for your **NodeJS, Python, PHP, ASP.NET, Ruby, MariaDB, MySQL, MongoDB, Postgres, WordPress (and etc...)** applications!
It's blazingly fast and very robust as it uses Docker, nginx, LetsEncrypt and NetData under the hood behind its simple-to-use interface.
@@ -42,9 +40,9 @@ It's blazingly fast and very robust as it uses Docker, nginx, LetsEncrypt and Ne
### Seriously! Who should care about CapRover?
- A [web] developer who does not like spending hours and days setting up a server, build tools, sending code to server, build it, get an SSL certificate, install it, update nginx over and over again.
-- A developer who uses expensive services like Heroku, Microsoft Azure and etc. And is interested in reducing their cost by 4x (Heroku charges 25$/month for their 1gb instance, the same server is 5$ on vultr!!)
+- A developer who uses expensive services like Heroku, Microsoft Azure and etc. And is interested in reducing their cost by 50x (Heroku charges 250USD/month for their 2gb instance, the same server is 5$ on Hetzner!!)
- Someone who prefers to write more of `showResults(getUserList())` and not much of `$ apt-get install libstdc++6 > /dev/null`
-- A developer who likes installing MySQL, MongoDB and etc on their server by selecting from a dropdown and clicking on install!
+- A developer who likes installing MariaDB, MySQL, MongoDB and etc on their server by selecting from a dropdown and clicking on install!
- How much server/docker/linux knowledge is required to set up a CapRover server? Answer: Knowledge of Copy & Paste!! Head over to "Getting Started" for information on what to copy & paste ;-)
## Learn More!
@@ -53,11 +51,11 @@ For more details and documentation, please visit https://CapRover.com/
## Contributors
-This project exists thanks to all the people who contribute. [[Contribute](CONTRIBUTING.md)].
+CapRover exists thanks to all the great people who have contributed to this project. [[Contribute](CONTRIBUTING.md)].
-## Backers
+## Financial Supporters
-Thank you to all our backers! 🙏
+A big thank you to all our supporters! 🙏
[](https://opencollective.com/caprover#backer)
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 000000000..55974ff00
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,9 @@
+# Security Policy
+
+## Supported Versions
+Only the last version receives security patches. To receive the security patches, you must make sure that your instances is using the most recent release.
+
+## Reporting a Vulnerability
+
+Security issues are high priority and they will be addressed immediately. If you find a security issue, please do not post as a public issue, instead, please email it to us: security at caprover dot com.
+
diff --git a/TERMS_AND_CONDITIONS.md b/TERMS_AND_CONDITIONS.md
new file mode 100644
index 000000000..0c919415b
--- /dev/null
+++ b/TERMS_AND_CONDITIONS.md
@@ -0,0 +1,28 @@
+# Terms & Conditions
+
+_In future versions, this will be added to the installation_
+
+CapRover core is a free and source-available program developed collectively by tens of developers across the world. Use CapRover at your own risk.
+
+Developers of CapRover do their best to prevent bugs and issues through rigorous testing processes and clean code principles. CapRover is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and limitations under the [License](https://github.com/caprover/caprover/blob/master/LICENSE).
+
+By using CapRover you agree to Terms and Conditions, and the license of CapRover.
+
+### Description of Service:
+
+CapRover core is an open source program and in no way it should be considered a service. It is a free program that you can optionally install on your machine. You are more than welcome to read and understand every bit of this open source program.
+
+CapRover Pro is additional functionality that is provided on top of CapRover core. It is an optional service.
+
+### Our Responsibility
+
+CapRover developers will do their best to ensure that CapRover remains functional and major bugs are resolved quickly. If you have a feature request, you are more than welcome to open a request for it, but the ultimate decision whether or not the feature will be added is taken by CapRover's core developers. Since they will be the ones who have to maintain the feature moving forward. Take a moment and familiarize yourself with our [scope and goals](https://github.com/caprover/caprover/blob/master/CONTRIBUTING.md#important-caprover-goals--scope)
+
+### Analytics
+
+CapRover has built in anonymous usage analytics starting v1.11. CapRover **never** sends any private data, such as env vars, private images, etc. This anonymous information is only used to understand usage patterns of CapRover and optimize the experience for the users. For example, in the future, we will have the possibility to add download counts to one click apps. If you wish to disable anonymous analytics, you can do so by passing an env variable CAPROVER_DISABLE_ANALYTICS=true to CapRover service. You can add this to the installation line, or use `docker service update --env-add CAPROVER_DISABLE_ANALYTICS=true captain-captain` for an existing service. In the future, we will use this information to find out which one click apps are popular, whether or not we should focus on supporting multiple nodes (percentage of single node vs multi node), whether or not we should invest in supporting multi CPU clusters, and etc. Here is [the link](https://github.com/caprover/caprover/blob/master/src/user/events/emitter/AnalyticsLogger.ts#L22-L25) to all analytics events that CapRover collects.
+
+### Future changes
+
+Terms of Service / Terms & Conditions may change at any point without a prior notice.
diff --git a/captain-sample-apps/go-sample.tar b/captain-sample-apps/go-sample.tar
index 85fd89bf9..87a142ce9 100644
Binary files a/captain-sample-apps/go-sample.tar and b/captain-sample-apps/go-sample.tar differ
diff --git a/dev-scripts/CapRover_Postman_Collection.json b/dev-scripts/CapRover_Postman_Collection.json
new file mode 100644
index 000000000..5bc7458ae
--- /dev/null
+++ b/dev-scripts/CapRover_Postman_Collection.json
@@ -0,0 +1,876 @@
+{
+ "info": {
+ "_postman_id": "5152aadd-9cc9-fae5-ca8a-f2c51f9797a2",
+ "name": "CapRover",
+ "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
+ },
+ "item": [
+ {
+ "name": "RUN FIRST: Get Auth Token",
+ "event": [
+ {
+ "listen": "prerequest",
+ "script": {
+ "exec": [
+ "postman.setGlobalVariable(\"baseUrl\", \"http://captain.captain.localhost/api/v2\");",
+ "// ",
+ ""
+ ],
+ "type": "text/javascript"
+ }
+ },
+ {
+ "listen": "test",
+ "script": {
+ "exec": [
+ "var jsonData = JSON.parse(responseBody);",
+ "tests[\"Your test name\"] = jsonData.status === 100;",
+ "",
+ "postman.setGlobalVariable(\"captain_auth_token\", jsonData.data.token);",
+ ""
+ ],
+ "type": "text/javascript"
+ }
+ }
+ ],
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "Content-Type",
+ "value": "application/x-www-form-urlencoded"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "body": {
+ "mode": "urlencoded",
+ "urlencoded": [
+ {
+ "key": "password",
+ "value": "captain42",
+ "type": "text"
+ }
+ ]
+ },
+ "url": {
+ "raw": "{{baseUrl}}/login",
+ "host": ["{{baseUrl}}"],
+ "path": ["login"]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "FORCE RESTART",
+ "request": {
+ "method": "POST",
+ "header": [],
+ "body": {
+ "mode": "formdata",
+ "formdata": []
+ },
+ "url": {
+ "raw": "{{baseUrl}}/force-exit",
+ "host": ["{{baseUrl}}"],
+ "path": ["force-exit"]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "Change Password",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"oldPassword\": \"captain42\",\n \"newPassword\": \"captain4242\"\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/user/changepassword",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "changepassword"]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "POST Custom Domain",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"rootDomain\": \"test.x.com\"\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/user/system/changerootdomain",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "system", "changerootdomain"]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "POST Enable SSL Captain",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"emailAddress\": \"noreply@gmail.com\"\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/user/system/enablessl",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "system", "enablessl"]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "POST update NetData",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"netDataInfo\": {\n \t\"isEnabled\":false\n }\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/user/system/netdata/",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "system", "netdata", ""]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "Join a Node",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"nodeType\": \"worker\",\n \"privateKey\": \"-----BEGIN RSA PRIVATE KEY-----\\xxxxxxxxxxxxxxxxxx\\n-----END RSA PRIVATE KEY-----\",\n \"captainIpAddress\": \"200.200.200.200\",\n \"remoteNodeIpAddress\": \"100.100.100.100\",\n \"remoteUserName\": \"root\"\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/user/system/nodes",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "system", "nodes"]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "GET appDefinitions",
+ "request": {
+ "method": "GET",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "url": {
+ "raw": "{{baseUrl}}/user/apps/appDefinitions/",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "apps", "appDefinitions", ""]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "GET OneClick Repos List",
+ "request": {
+ "method": "GET",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "url": {
+ "raw": "{{baseUrl}}/user/oneclick/repositories/",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "oneclick", "repositories", ""]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "GET OneClick Repos DELETE",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"repositoryUrl\":\"https://oneclickapps.caprover.com\"\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/user/oneclick/repositories/delete/",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "oneclick", "repositories", "delete", ""]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "GET OneClick Repos INSERT",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"repositoryUrl\":\"https://oneclickapps.caprover.com\"\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/user/oneclick/repositories/insert/",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "oneclick", "repositories", "insert", ""]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "GET OneClick List",
+ "request": {
+ "method": "GET",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "url": {
+ "raw": "{{baseUrl}}/user/oneclick/template/list/",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "oneclick", "template", "list", ""]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "GET OneClick MySQL",
+ "request": {
+ "method": "GET",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "url": {
+ "raw": "{{baseUrl}}/user/oneclick/template/app?appName=mysql&baseDomain=https%3A%2F%2Foneclickapps.caprover.com",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "oneclick", "template", "app"],
+ "query": [
+ {
+ "key": "appName",
+ "value": "mysql"
+ },
+ {
+ "key": "baseDomain",
+ "value": "https%3A%2F%2Foneclickapps.caprover.com"
+ }
+ ]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "GET app logs",
+ "request": {
+ "method": "GET",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "url": {
+ "raw": "{{baseUrl}}/user/apps/appData/q1/logs",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "apps", "appData", "q1", "logs"]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "GET Docker Regs",
+ "request": {
+ "method": "GET",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "url": {
+ "raw": "{{baseUrl}}/user/registries/",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "registries", ""]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "GET nodes",
+ "request": {
+ "method": "GET",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "url": {
+ "raw": "{{baseUrl}}/user/system/nodes",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "system", "nodes"]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "Create Backup",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "url": {
+ "raw": "{{baseUrl}}/user/system/createbackup",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "system", "createbackup"]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "GET unusedImages",
+ "request": {
+ "method": "GET",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "url": {
+ "raw": "{{baseUrl}}/user/apps/appDefinitions/unusedImages",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "apps", "appDefinitions", "unusedImages"]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "GET captainInfo",
+ "event": [
+ {
+ "listen": "prerequest",
+ "script": {
+ "exec": [""],
+ "type": "text/javascript"
+ }
+ }
+ ],
+ "request": {
+ "method": "GET",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "url": {
+ "raw": "{{baseUrl}}/user/system/info",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "system", "info"]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "GET versionInfo",
+ "event": [
+ {
+ "listen": "prerequest",
+ "script": {
+ "exec": [""],
+ "type": "text/javascript"
+ }
+ }
+ ],
+ "request": {
+ "method": "GET",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "url": {
+ "raw": "{{baseUrl}}/user/system/versionInfo",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "system", "versionInfo"]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "GET loadBalancerInfo",
+ "request": {
+ "method": "GET",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "url": {
+ "raw": "{{baseUrl}}/user/system/loadbalancerinfo",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "system", "loadbalancerinfo"]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "POST appDefinitions REGISTER",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"appName\": \"my-first-app-001\"\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/user/apps/appDefinitions/register/",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "apps", "appDefinitions", "register", ""]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "POST appDefinitions DELETE",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"appName\": \"my-first-app-001\"\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/user/apps/appDefinitions/delete/",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "apps", "appDefinitions", "delete", ""]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "POST appDefinitions UPDATE",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"appName\": \"test1\",\n \"instanceCount\":\"1\",\n \"notExposeAsWebApp\":true,\n \"ports\":[\n \t{\n \t\t\"containerPort\":\"1000\",\n \t\t\"hostPort\":\"6000\"\n \t}]\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/user/appDefinitions/update/",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "appDefinitions", "update", ""]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "POST Enable SSL for subdomain",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"appName\": \"my-first-app-001\"\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/user/appDefinitions/enablessl/",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "appDefinitions", "enablessl", ""]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "POST Custom App Domain",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"appName\": \"my-first-app-001\",\n \"customDomain\": \"y.x.com\"\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/user/appDefinitions/customdomain/",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "appDefinitions", "customdomain", ""]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "POST Custom App Domain REMOVE",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"appName\": \"my-first-app-001\",\n \"customDomain\": \"y.x.com\"\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/user/appDefinitions/removecustomdomain/",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "appDefinitions", "removecustomdomain", ""]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "POST Custom App Domain SSL",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "Content-Type",
+ "value": "application/json"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "body": {
+ "mode": "raw",
+ "raw": "{\n \"appName\": \"my-first-app-001\",\n \"customDomain\": \"x.y.com\"\n}"
+ },
+ "url": {
+ "raw": "{{baseUrl}}/user/appDefinitions/customdomainssl/",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "appDefinitions", "customdomainssl", ""]
+ }
+ },
+ "response": []
+ },
+ {
+ "name": "POST appData",
+ "request": {
+ "method": "POST",
+ "header": [
+ {
+ "key": "x-captain-auth",
+ "value": "{{captain_auth_token}}"
+ },
+ {
+ "key": "x-namespace",
+ "value": "captain"
+ }
+ ],
+ "body": {
+ "mode": "formdata",
+ "formdata": [
+ {
+ "key": "sourceFile",
+ "type": "file",
+ "src": []
+ }
+ ]
+ },
+ "url": {
+ "raw": "{{baseUrl}}/user/appData/my-first-app-001",
+ "host": ["{{baseUrl}}"],
+ "path": ["user", "appData", "my-first-app-001"]
+ }
+ },
+ "response": []
+ }
+ ]
+}
diff --git a/dev-scripts/build_and_push_edge.sh b/dev-scripts/build_and_push_edge.sh
index 3a3bcc26e..1dc61c53b 100755
--- a/dev-scripts/build_and_push_edge.sh
+++ b/dev-scripts/build_and_push_edge.sh
@@ -4,7 +4,7 @@
set -e
# Print all commands
-set -x
+set -x
pwd
@@ -16,33 +16,50 @@ else
echo "Running on CI"
fi
-docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
-
CAPROVER_VERSION=0.0.1
IMAGE_NAME=caprover/caprover-edge
if [ ! -f ./package-lock.json ]; then
echo "package-lock.json not found!"
- exit 1;
+ exit 1
fi
-
# BRANCH=$(git rev-parse --abbrev-ref HEAD)
# On Github the line above does not work, instead:
BRANCH=${GITHUB_REF##*/}
echo "on branch $BRANCH"
if [[ "$BRANCH" != "master" ]]; then
- echo 'Not on master branch! Aborting script!';
- exit 1;
+ echo 'Not on master branch! Aborting script!'
+ exit 1
fi
+## Building frontend app
+ORIG_DIR=$(pwd)
+FRONTEND_DIR=/home/runner/app-frontend
+curl -Iv https://registry.yarnpkg.com/
+mkdir -p $FRONTEND_DIR && cd $FRONTEND_DIR
+git clone https://github.com/githubsaturn/caprover-frontend.git
+cd caprover-frontend
+git log --max-count=1
+yarn install --no-cache --frozen-lockfile --network-timeout 600000
+echo "Installation finished"
+yarn run build
+echo "Building finished"
+cd $ORIG_DIR
+mv $FRONTEND_DIR/caprover-frontend/build ./dist-frontend
-
-
-
-export DOCKER_CLI_EXPERIMENTAL=enabled
+sudo apt-get update && sudo apt-get install qemu-user-static
+# docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
+docker run --rm --privileged tonistiigi/binfmt --install all
+# export DOCKER_CLI_EXPERIMENTAL=enabled
docker buildx ls
+docker buildx rm mybuilder || echo "mybuilder not found"
docker buildx create --name mybuilder
docker buildx use mybuilder
-docker buildx build --platform linux/amd64,linux/arm64,linux/arm -t $IMAGE_NAME:$CAPROVER_VERSION -t $IMAGE_NAME:latest -f dockerfile-captain.edge --push .
\ No newline at end of file
+# docker buildx build --platform linux/arm -t $IMAGE_NAME:$CAPROVER_VERSION -t $IMAGE_NAME:latest -f dockerfile-captain.edge --push .
+docker buildx build --platform linux/amd64,linux/arm64,linux/arm -t $IMAGE_NAME:$CAPROVER_VERSION -t $IMAGE_NAME:latest -f dockerfile-captain.edge --push .
+
+# docker build -t $IMAGE_NAME:$CAPROVER_VERSION -t $IMAGE_NAME:latest -f dockerfile-captain.edge .
+# docker push $IMAGE_NAME:latest
+# docker push $IMAGE_NAME:$CAPROVER_VERSION
diff --git a/dev-scripts/build_and_push_release.sh b/dev-scripts/build_and_push_release.sh
index c655fbb05..e46d322ee 100755
--- a/dev-scripts/build_and_push_release.sh
+++ b/dev-scripts/build_and_push_release.sh
@@ -4,7 +4,7 @@
set -e
# Print all commands
-set -x
+set -x
pwd
@@ -16,38 +16,59 @@ else
echo "Running on CI"
fi
-docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
-
-
IMAGE_NAME=caprover/caprover
if [ ! -f ./package-lock.json ]; then
echo "package-lock.json not found!"
- exit 1;
+ exit 1
fi
-
# BRANCH=$(git rev-parse --abbrev-ref HEAD)
# On Github the line above does not work, instead:
BRANCH=${GITHUB_REF##*/}
echo "on branch $BRANCH"
if [[ "$BRANCH" != "release" ]]; then
- echo 'Not on release branch! Aborting script!';
- exit 1;
+ echo 'Not on release branch! Aborting script!'
+ exit 1
fi
-
-git clean -fdx .
npm ci
npm run build
-
node ./dev-scripts/validate-build-version-docker-hub.js
-
source ./version
-
-export DOCKER_CLI_EXPERIMENTAL=enabled
+git clean -fdx
+
+echo "**************************************"
+echo "**************************************"
+echo $IMAGE_NAME:$CAPROVER_VERSION
+echo "**************************************"
+echo "**************************************"
+
+FRONTEND_COMMIT_HASH=c816df013277d5fc857157adbcf6529108a55f9f
+
+## Building frontend app
+ORIG_DIR=$(pwd)
+FRONTEND_DIR=/home/runner/app-frontend
+curl -Iv https://registry.yarnpkg.com/
+mkdir -p $FRONTEND_DIR && cd $FRONTEND_DIR
+git clone https://github.com/githubsaturn/caprover-frontend.git
+cd caprover-frontend
+git reset --hard $FRONTEND_COMMIT_HASH
+git log --max-count=1
+yarn install --no-cache --frozen-lockfile --network-timeout 600000
+echo "Installation finished"
+yarn run build
+echo "Building finished"
+cd $ORIG_DIR
+mv $FRONTEND_DIR/caprover-frontend/build ./dist-frontend
+
+sudo apt-get update && sudo apt-get install qemu-user-static
+# docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
+docker run --rm --privileged tonistiigi/binfmt --install all
+# export DOCKER_CLI_EXPERIMENTAL=enabled
docker buildx ls
+docker buildx rm mybuilder || echo "mybuilder not found"
docker buildx create --name mybuilder
docker buildx use mybuilder
-docker buildx build --platform linux/amd64,linux/arm64,linux/arm -t $IMAGE_NAME:$CAPROVER_VERSION -t $IMAGE_NAME:latest -f dockerfile-captain.release --push .
\ No newline at end of file
+docker buildx build --platform linux/amd64,linux/arm64,linux/arm -t $IMAGE_NAME:$CAPROVER_VERSION -t $IMAGE_NAME:latest -f dockerfile-captain.release --push .
diff --git a/dev-scripts/build_dev_image.sh b/dev-scripts/build_dev_image.sh
new file mode 100755
index 000000000..f7aa4a2f0
--- /dev/null
+++ b/dev-scripts/build_dev_image.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+# Exit early if any command fails
+set -e
+
+sudo echo OK
+
+mkdir temp-frontend || echo OK
+
+rm -rf temp-frontend/*
+
+cp -r ../caprover-frontend/* ./temp-frontend
+
+rm -rf ./temp-frontend/node_modules
+rm -rf ./temp-frontend/.git
+
+pwd
+
+sudo docker build -f dockerfile-captain.dev -t caprover-dev-image:0.0.1 .
\ No newline at end of file
diff --git a/dev-scripts/clear-pro-config.js b/dev-scripts/clear-pro-config.js
new file mode 100644
index 000000000..49c8bb14b
--- /dev/null
+++ b/dev-scripts/clear-pro-config.js
@@ -0,0 +1,16 @@
+/*jshint esversion: 6 */
+
+const fs = require('fs-extra')
+const CONFIG_FILE_PATH = '/captain/data/config-captain.json'
+
+const fileContent = JSON.parse(
+ fs.readFileSync(CONFIG_FILE_PATH, {
+ encoding: 'utf-8',
+ })
+)
+
+fs.writeFileSync(CONFIG_FILE_PATH + '.backup', JSON.stringify(fileContent))
+
+fileContent.pro = {}
+
+fs.writeFileSync(CONFIG_FILE_PATH, JSON.stringify(fileContent))
diff --git a/dev-scripts/dev-clean-run-as-dev-macos-step-1.sh b/dev-scripts/dev-clean-run-as-dev-macos-step-1.sh
new file mode 100755
index 000000000..a8aded0cd
--- /dev/null
+++ b/dev-scripts/dev-clean-run-as-dev-macos-step-1.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+if ! [ $(id -u) = 0 ]; then
+ echo "Must run as sudo or root"
+ exit 1
+fi
+
+# on macos Catalina and above, /captain is a symb link. we cannot remove the folder so we delete all files inside
+# rm -rf /captain && mkdir /captain
+rm -rf /captain/*
+chmod -R 777 /captain/
diff --git a/dev-scripts/dev-clean-run-as-dev-macos-step-2.sh b/dev-scripts/dev-clean-run-as-dev-macos-step-2.sh
new file mode 100755
index 000000000..3070f9a34
--- /dev/null
+++ b/dev-scripts/dev-clean-run-as-dev-macos-step-2.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+
+if ! [ $(id -u) ] <>0; then
+ echo "Must not be run as sudo or root on macos (macos security) please run the step 1 as root and this step as standard user"
+ exit 1
+fi
+
+pwd >currentdirectory
+docker service rm $(docker service ls -q)
+sleep 1
+docker secret rm captain-salt
+docker build -t captain-debug -f dockerfile-captain.debug .
+docker run \
+ -e "CAPTAIN_IS_DEBUG=1" \
+ -e "MAIN_NODE_IP_ADDRESS=127.0.0.1" \
+ -v /var/run/docker.sock:/var/run/docker.sock \
+ -v /captain:/captain \
+ -v $(pwd):/usr/src/app captain-debug
+sleep 2s
+docker service logs captain-captain --follow
diff --git a/dev-scripts/dev-clean-run-as-dev.sh b/dev-scripts/dev-clean-run-as-dev.sh
index 432adc565..cd660efdc 100755
--- a/dev-scripts/dev-clean-run-as-dev.sh
+++ b/dev-scripts/dev-clean-run-as-dev.sh
@@ -5,18 +5,25 @@ if ! [ $(id -u) = 0 ]; then
exit 1
fi
-pwd > currentdirectory
+pwd >currentdirectory
docker service rm $(docker service ls -q)
sleep 1s
docker secret rm captain-salt
docker build -t captain-debug -f dockerfile-captain.debug .
rm -rf /captain && mkdir /captain
+mkdir -p /captain/data/shared-logs
chmod -R 777 /captain
+
docker run \
-e "CAPTAIN_IS_DEBUG=1" \
-e "MAIN_NODE_IP_ADDRESS=127.0.0.1" \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /captain:/captain \
-v $(pwd):/usr/src/app captain-debug
+
+# -e "CAPTAIN_HOST_HTTP_PORT=10083" \
+# -e "CAPTAIN_HOST_HTTPS_PORT=10443" \
+# -e "CAPTAIN_HOST_ADMIN_PORT=13000" \
+
sleep 2s
docker service logs captain-captain --follow
diff --git a/dev-scripts/digitalocean-oneclick-app-generator b/dev-scripts/digitalocean-oneclick-app-generator
index d243f3d4f..5a726a792 100644
--- a/dev-scripts/digitalocean-oneclick-app-generator
+++ b/dev-scripts/digitalocean-oneclick-app-generator
@@ -9,7 +9,7 @@ apt -y update && apt -y full-upgrade && apt autoclean -y && apt autoremove -y
############################ WAIT
-docker pull caprover/caprover:1.9.0
+docker pull caprover/caprover:1.10.0
cd /var/lib/cloud/scripts/per-instance
@@ -23,7 +23,7 @@ cat <> z_01_caprover_installation.sh
ufw allow 80,443,3000,996,7946,4789,2377/tcp; ufw allow 7946,4789,2377/udp;
-docker run -p 80:80 -p 443:443 -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock -v /captain:/captain caprover/caprover:1.9.0
+docker run -p 80:80 -p 443:443 -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock -v /captain:/captain caprover/caprover:1.10.0
EOT
@@ -80,9 +80,9 @@ apt -y update && apt -y full-upgrade
cd /etc
-wget https://raw.githubusercontent.com/digitalocean/marketplace-partners/master/scripts/cleanup.sh
-chmod +x cleanup.sh
-./cleanup.sh
+wget https://raw.githubusercontent.com/digitalocean/marketplace-partners/master/scripts/99-img-check.sh
+chmod +x 99-img-check.sh
+./99-img-check.sh
############################ WAIT
@@ -90,9 +90,9 @@ chmod +x cleanup.sh
cd /etc
-wget https://raw.githubusercontent.com/digitalocean/marketplace-partners/master/scripts/img_check.sh
-chmod +x img_check.sh
-./img_check.sh
+wget https://raw.githubusercontent.com/digitalocean/marketplace-partners/master/scripts/90-cleanup.sh
+chmod +x 90-cleanup.sh
+./90-cleanup.sh
diff --git a/dev-scripts/migrate-from-cdd.sh b/dev-scripts/migrate-from-cdd.sh
deleted file mode 100755
index 22de55d88..000000000
--- a/dev-scripts/migrate-from-cdd.sh
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/bin/sh
-
-# Run this script on the server to migrate from CaptainDuckDuck.
-
-cd / && \
-docker pull caprover/caprover && \
-docker service scale captain-captain=0 && \
-docker service rm captain-certbot captain-nginx && \
-(docker service rm captain-registry || true) && \
-sleep 3s && echo "waiting..." && sleep 3s && echo "waiting..." && \
-rm -rf /captain/generated && rm -rf /captain/temp && \
-tar -cvf /captain-bk-$(date +%Y_%m_%d_%H_%M_%S).tar /captain && \
-mkdir -p /captain/data && \
-mv /captain/letencrypt /captain/data/ && \
-mv /captain/nginx-shared /captain/data/ && \
-mv /captain/registry /captain/data/ && \
-mv /captain/config.conf /captain/data/ && \
-docker service update --image caprover/caprover captain-captain && \
-docker service scale captain-captain=1 --detach && \
-docker service logs captain-captain --follow
\ No newline at end of file
diff --git a/dev-scripts/openstack/single-instance.yml b/dev-scripts/openstack/single-instance.yml
new file mode 100644
index 000000000..6b7f4dd53
--- /dev/null
+++ b/dev-scripts/openstack/single-instance.yml
@@ -0,0 +1,91 @@
+heat_template_version: 2018-08-31
+
+description: OpenStack Heat template to deploy a single VM running CapRover.
+
+parameters:
+ image_id:
+ type: string
+ label: Image ID
+ description: Image to be used for compute instance. Ubuntu is recommended.
+ instance_type:
+ type: string
+ label: Instance Type
+ description: Type of instance (flavor) to be used
+ network:
+ type: string
+ label: Network
+ description: Network for the instance
+
+resources:
+ inbound_ssh_security_group:
+ type: OS::Neutron::SecurityGroup
+ properties:
+ name: inbound_ssh_security_group
+ description: Security Group for allowing SSH access
+ rules:
+ - protocol: tcp
+ port_range_min: 22
+ port_range_max: 22
+ remote_ip_prefix: 0.0.0.0/0 # Allows ingress from any IP address
+ inbound_http_security_group:
+ type: OS::Neutron::SecurityGroup
+ properties:
+ name: inbound_http_security_group
+ description: Security Group for allowing HTTP access
+ rules:
+ - protocol: tcp
+ port_range_min: 80
+ port_range_max: 80
+ remote_ip_prefix: 0.0.0.0/0 # Allows ingress from any IP address
+ inbound_https_security_group:
+ type: OS::Neutron::SecurityGroup
+ properties:
+ name: inbound_https_security_group
+ description: Security Group for allowing HTTPS access
+ rules:
+ - protocol: tcp
+ port_range_min: 443
+ port_range_max: 443
+ remote_ip_prefix: 0.0.0.0/0 # Allows ingress from any IP address
+ inbound_caprover_install_security_group:
+ type: OS::Neutron::SecurityGroup
+ properties:
+ name: inbound_caprover_install_security_group
+ description: Security Group for allowing access to port 3000, which is used for CapRover setup.
+ rules:
+ - protocol: tcp
+ port_range_min: 3000
+ port_range_max: 3000
+ remote_ip_prefix: 0.0.0.0/0 # Allows ingress from any IP address
+ caprover_manager:
+ type: OS::Nova::Server
+ properties:
+ key_name: caprover
+ image: { get_param: image_id }
+ flavor: { get_param: instance_type }
+ networks:
+ - network: { get_param: network }
+ security_groups:
+ - default
+ - get_resource: inbound_ssh_security_group
+ - get_resource: inbound_http_security_group
+ - get_resource: inbound_https_security_group
+ - get_resource: inbound_caprover_install_security_group
+ user_data: |
+ #!/bin/sh
+ echo "Installing Docker with commands copied from https://docs.docker.com/engine/install/ubuntu/"
+ # Add Docker's official GPG key:
+ apt-get update
+ apt-get install -y ca-certificates curl
+ install -m 0755 -d /etc/apt/keyrings
+ curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
+ chmod a+r /etc/apt/keyrings/docker.asc
+ # Add the repository to Apt sources:
+ echo \
+ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
+ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" > etc/apt/sources.list.d/docker.list
+ apt-get update
+ apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
+ docker run hello-world
+ echo "Installing CapRover with command copied from https://caprover.com/docs/get-started.html"
+ docker run -p 80:80 -p 443:443 -p 3000:3000 -e ACCEPTED_TERMS=true -v /var/run/docker.sock:/var/run/docker.sock -v /captain:/captain caprover/caprover
diff --git a/dev-scripts/play_with_caprover.sh b/dev-scripts/play_with_caprover.sh
index 799bf845b..f3bb505fb 100755
--- a/dev-scripts/play_with_caprover.sh
+++ b/dev-scripts/play_with_caprover.sh
@@ -3,13 +3,13 @@
# Run the following line on a PlayWithDocker instance
# curl -L https://pwd.caprover.com | bash
-sleepWithTimer(){
- secs=${1}
- while [ $secs -gt 0 ]; do
- echo -ne " Waiting $secs seconds... \033[0K\r"
- sleep 1
- : $((secs--))
- done
+sleepWithTimer() {
+ secs=${1}
+ while [ $secs -gt 0 ]; do
+ echo -ne " Waiting $secs seconds... \033[0K\r"
+ sleep 1
+ : $((secs--))
+ done
}
if [[ -z "${PWD_HOST_FQDN}" ]]; then
@@ -18,14 +18,13 @@ else
echo "Installing and setting up CapRover on play-with-docker.com environment"
fi
-docker run -e MAIN_NODE_IP_ADDRESS='127.0.0.1' -p 80:80 -p 443:443 -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock -v /captain:/captain caprover/caprover
+docker run -e ACCEPTED_TERMS=true -e MAIN_NODE_IP_ADDRESS='127.0.0.1' -p 80:80 -p 443:443 -p 3000:3000 -v /var/run/docker.sock:/var/run/docker.sock -v /captain:/captain caprover/caprover
-IP_WITH_DASH=`ifconfig eth1 | grep 'inet addr' | cut -d: -f2 | awk '{print $1}' | sed 's/\./-/g'`
+IP_WITH_DASH=$(ifconfig eth1 | grep 'inet addr' | cut -d: -f2 | awk '{print $1}' | sed 's/\./-/g')
## ip172-18-0-34-bo5qqunad2eg00a35t5g-80.direct.labs.play-with-docker.com
CAPROVER_ROOT_DOMAIN="ip${IP_WITH_DASH}-${SESSION_ID}-80.direct.labs.play-with-docker.com"
echo "CapRover Root Domain: ${CAPROVER_ROOT_DOMAIN}"
-
echo "=============================================="
echo "=============================================="
echo "Waiting for CapRover to finish installation..."
@@ -35,11 +34,11 @@ echo " "
echo " "
echo " "
CAPTAIN_INITED=""
-while [[ -z "${CAPTAIN_INITED}" ]];do
- CAPTAIN_INITED=`docker service logs captain-captain --since 3s | grep "Captain is initialized"`
- docker service logs captain-captain --since 2s
- sleep 2
-done
+while [[ -z "${CAPTAIN_INITED}" ]]; do
+ CAPTAIN_INITED=$(docker service logs captain-captain --since 3s | grep "Captain is initialized")
+ docker service logs captain-captain --since 2s
+ sleep 2
+done
echo " "
echo " "
@@ -50,13 +49,12 @@ sleepWithTimer 6
echo "{
\"namespace\": \"captain\",
\"customDomain\": \"${CAPROVER_ROOT_DOMAIN}\"
-}" > /captain/data/config-captain.json
+}" >/captain/data/config-captain.json
cat /captain/data/config-captain.json
-echo "{\"skipVerifyingDomains\":\"true\"}" > /captain/data/config-override.json
+echo "{\"skipVerifyingDomains\":\"true\"}" >/captain/data/config-override.json
docker container prune --force
docker service scale captain-captain=1
-
echo "==================================="
echo "==================================="
echo "Waiting for CapRover to finalize..."
@@ -67,12 +65,11 @@ echo " "
sleepWithTimer 6
CAPTAIN_INITED=""
-while [[ -z "${CAPTAIN_INITED}" ]];do
- CAPTAIN_INITED=`docker service logs captain-captain --since 3s | grep "Captain is initialized"`
- docker service logs captain-captain --since 2s
- sleep 2
-done
-
+while [[ -z "${CAPTAIN_INITED}" ]]; do
+ CAPTAIN_INITED=$(docker service logs captain-captain --since 3s | grep "Captain is initialized")
+ docker service logs captain-captain --since 2s
+ sleep 2
+done
echo " "
echo " "
@@ -84,4 +81,3 @@ echo "CapRover is available at http://captain.${CAPROVER_ROOT_DOMAIN}"
echo "Default password is: captain42"
echo "==================================="
echo "==================================="
-
diff --git a/dockerfile-captain.debug b/dockerfile-captain.debug
index cc2e3ac94..c70e6641c 100644
--- a/dockerfile-captain.debug
+++ b/dockerfile-captain.debug
@@ -1,6 +1,7 @@
-FROM node:14
-RUN apt-get update
-RUN apt-get -y install netcat socat
+FROM node:18
+RUN apt-get update && apt-get full-upgrade -yqq && apt-get install build-essential cmake -yqq
+
+RUN apt-get -y install netcat-traditional socat
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
@@ -9,6 +10,8 @@ ENV NODE_ENV development
EXPOSE 38000
EXPOSE 3000
+ENV ACCEPTED_TERMS=true
+
# I don't know why, but for some reason this port
# forwarding is necessary for NodeJs debugger to be able to attach!!
diff --git a/dockerfile-captain.dev b/dockerfile-captain.dev
new file mode 100644
index 000000000..a69964e64
--- /dev/null
+++ b/dockerfile-captain.dev
@@ -0,0 +1,35 @@
+FROM node:18-alpine
+RUN apk update && apk upgrade --no-cache && apk add --update --no-cache make gcc g++ git curl openssl openssh
+
+RUN mkdir -p /usr/src/app
+WORKDIR /usr/src/app
+
+
+# Build backend code
+
+COPY . /usr/src/app
+
+RUN npm ci && \
+ npm cache clean --force && \
+ npm run build
+
+
+# Build frontend code
+
+ # This quick hack invalidates the cache.
+ADD https://www.google.com /time.now
+
+# armV7 fails: https://github.com/yarnpkg/yarn/issues/5259 https://github.com/nodejs/docker-node/issues/1335
+RUN curl -Iv https://registry.yarnpkg.com/@ant-design/icons-svg/-/icons-svg-4.1.0.tgz && \
+ cd temp-frontend && \
+ yarn install --no-cache --frozen-lockfile --network-timeout 600000 && echo "Installation finished" && \
+ yarn run build && echo "Building finished" && \
+ mv ./build ../dist-frontend && \
+ cd / && \
+ rm -rf /usr/src/app/temp-frontend
+
+ENV NODE_ENV production
+ENV PORT 3000
+EXPOSE 3000
+
+CMD ["node" , "./built/server.js"]
diff --git a/dockerfile-captain.edge b/dockerfile-captain.edge
index 310d32251..40b6678b7 100644
--- a/dockerfile-captain.edge
+++ b/dockerfile-captain.edge
@@ -1,40 +1,25 @@
-FROM node:14-alpine
+# NodeJS v20 freezes when building for multiarch
+# https://github.com/nodejs/docker-node/issues/2155
-RUN apk update && apk upgrade && \
- apk add --no-cache bash git openssh openssl
+FROM node:18-alpine
+RUN apk add --update --no-cache make gcc g++ git curl openssl openssh
-RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
-
+COPY . ./
# Build backend code
-
-COPY . /usr/src/app
-
-RUN npm ci --production && \
- npm cache clean --force && \
+RUN npm ci && \
npm run build && \
+ npm ci --omit=dev && \
+ npm cache clean --force && \
mv ./edge-override.json ./config-override.json
-
-# Build frontend code
-
- # This quick hack invalidates the cache
+# This quick hack invalidates the cache.
ADD https://www.google.com /time.now
-RUN mkdir -p /usr/src/app-frontend && cd /usr/src/app-frontend && \
- git clone https://github.com/githubsaturn/caprover-frontend.git && \
- cd caprover-frontend && \
- git log --max-count=1 && \
- npm ci --production && npm cache clean --force && \
- npm run build && \
- mv ./build ../../app/dist-frontend && \
- cd / && \
- rm -rf /usr/src/app-frontend
-
ENV NODE_ENV production
ENV PORT 3000
EXPOSE 3000
-CMD ["npm" , "start"]
+CMD ["node" , "./built/server.js"]
\ No newline at end of file
diff --git a/dockerfile-captain.release b/dockerfile-captain.release
index eb3e0481c..873d06d81 100644
--- a/dockerfile-captain.release
+++ b/dockerfile-captain.release
@@ -1,34 +1,20 @@
-FROM node:14
-RUN mkdir -p /usr/src/app
-WORKDIR /usr/src/app
-
-
-# Build backend code.
-
-COPY . /usr/src/app
-RUN npm ci --production && \
- npm cache clean --force && \
- npm run build
-
+# NodeJS v20 freezes when building for multiarch
+# https://github.com/nodejs/docker-node/issues/2155
+FROM node:18-alpine
+RUN apk add --update --no-cache make gcc g++ git curl openssl openssh
-
-# Build frontend code using a fixed hash commit.
-
-ENV FRONTEND_COMMIT_HASH c28107f530ef23a87aee503cc2ac815a822edeee
-
-RUN mkdir -p /usr/src/app-frontend && cd /usr/src/app-frontend && \
- git clone https://github.com/githubsaturn/caprover-frontend.git && \
- cd caprover-frontend && \
- git reset --hard ${FRONTEND_COMMIT_HASH} && \
- npm ci --production && npm cache clean --force && \
- npm run build && \
- mv ./build ../../app/dist-frontend && \
- cd / && \
- rm -rf /usr/src/app-frontend
-
+WORKDIR /usr/src/app
+COPY . ./
+
+# Build backend code
+RUN npm ci && \
+ npm run build && \
+ npm ci --omit=dev && \
+ npm cache clean --force
+
ENV NODE_ENV production
ENV PORT 3000
EXPOSE 3000
-CMD ["npm" , "start"]
+CMD ["node" , "./built/server.js"]
diff --git a/eslint.config.mjs b/eslint.config.mjs
new file mode 100644
index 000000000..68f61ecb8
--- /dev/null
+++ b/eslint.config.mjs
@@ -0,0 +1,18 @@
+import pluginJs from '@eslint/js'
+import globals from 'globals'
+import tseslint from 'typescript-eslint'
+
+export default [
+ { languageOptions: { globals: globals.browser } },
+ pluginJs.configs.recommended,
+ ...tseslint.configs.recommended,
+ {
+ rules: {
+ '@typescript-eslint/no-unused-vars': 'off',
+ '@typescript-eslint/no-explicit-any': 'off',
+ '@typescript-eslint/no-this-alias': 'off',
+ '@typescript-eslint/no-require-imports': 'off',
+ 'no-useless-escape': 'off',
+ },
+ },
+]
diff --git a/jest.config.js b/jest.config.js
index 089645a92..d5d288769 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -1,4 +1,7 @@
+/* eslint-disable no-undef */
module.exports = {
+ preset: 'ts-jest',
+ testEnvironment: 'node',
transform: {
"^.+\\.tsx?$": "ts-jest",
"^.+\\.ts?$": "ts-jest",
diff --git a/package-lock.json b/package-lock.json
index 09ce4baae..350d81946 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,330 +1,303 @@
{
"name": "caprover",
"version": "0.0.0",
- "lockfileVersion": 2,
+ "lockfileVersion": 3,
"requires": true,
"packages": {
"": {
+ "name": "caprover",
"version": "0.0.0",
"dependencies": {
- "@types/bcryptjs": "^2.4.2",
- "@types/configstore": "^4.0.0",
- "@types/cookie-parser": "^1.4.2",
- "@types/dockerode": "^3.2.2",
- "@types/ejs": "^3.0.5",
- "@types/express": "^4.17.11",
- "@types/fs-extra": "^9.0.7",
- "@types/http-proxy": "^1.17.5",
- "@types/jest": "^26.0.20",
- "@types/js-base64": "^3.0.0",
- "@types/jsonwebtoken": "^8.5.0",
- "@types/morgan": "^1.9.2",
- "@types/multer": "^1.4.5",
- "@types/on-finished": "^2.3.1",
- "@types/request": "^2.48.5",
- "@types/require-from-string": "^1.2.0",
- "@types/serve-favicon": "^2.5.2",
- "@types/ssh2": "^0.5.46",
- "@types/tar": "^4.0.4",
- "@types/uuid": "^8.3.0",
- "@types/validator": "^13.1.3",
- "axios": "^0.21.1",
- "bcryptjs": "^2.4.3",
- "body-parser": "^1.19.0",
+ "axios": "^1.9.0",
+ "bcryptjs": "^3.0.2",
+ "body-parser": "^2.2.0",
"configstore": "^5.0.1",
- "cookie-parser": "~1.4.5",
- "debug": "~4.3.1",
- "dockerode": "^3.2.1",
- "ejs": "^3.1.6",
- "express": "^4.17.1",
- "fs-extra": "^9.1.0",
+ "cookie-parser": "~1.4.7",
+ "cron": "^4.3.0",
+ "debug": "~4.4.1",
+ "dockerode": "^4.0.6",
+ "ejs": "^3.1.10",
+ "express": "^5.1.0",
+ "fs-extra": "^11.3.0",
"http-proxy": "^1.18.1",
"is-valid-path": "^0.1.1",
- "js-base64": "^3.6.0",
- "jsonwebtoken": "^8.5.1",
- "madge": "^4.0.0",
- "moment": "^2.29.1",
+ "js-base64": "^3.7.7",
+ "jsonwebtoken": "^9.0.2",
+ "moment": "^2.30.1",
"morgan": "^1.10.0",
- "multer": "^1.4.2",
- "on-finished": "^2.3.0",
- "prettier": "^2.2.1",
- "public-ip": "^4.0.3",
- "recursive-readdir": "^2.2.2",
+ "multer": "^2.0.0",
+ "on-finished": "^2.4.1",
+ "prettier": "3.5.3",
+ "public-ip": "^7.0.1",
+ "recursive-readdir": "^2.2.3",
"request": "^2.88.2",
"require-from-string": "^2.0.2",
"serve-favicon": "~2.5.0",
- "simple-git": "^2.34.2",
- "ssh2": "^0.8.9",
- "tar": "^6.1.0",
- "tslint": "^6.1.3",
- "typescript": "^4.1.5",
- "uuid": "^8.3.2",
- "validator": "^13.5.2",
- "yaml": "^1.10.0"
+ "shell-quote": "^1.8.2",
+ "simple-git": "^3.27.0",
+ "ssh2": "^1.16.0",
+ "tar": "^7.4.3",
+ "typescript": "^5.8.3",
+ "uuid": "^11.1.0",
+ "validator": "^13.15.0",
+ "yaml": "^2.8.0"
},
"devDependencies": {
- "jest": "^26.6.3",
- "ts-jest": "^26.5.1"
+ "@eslint/js": "^9.27.0",
+ "@types/bcryptjs": "^3.0.0",
+ "@types/configstore": "^5.0.1",
+ "@types/cookie-parser": "^1.4.8",
+ "@types/debug": "^4.1.12",
+ "@types/dockerode": "^3.3.39",
+ "@types/ejs": "^3.1.5",
+ "@types/express": "^5.0.2",
+ "@types/fs-extra": "^11.0.4",
+ "@types/http-proxy": "^1.17.16",
+ "@types/is-valid-path": "^0.1.2",
+ "@types/jest": "^29.5.14",
+ "@types/js-base64": "^3.3.1",
+ "@types/jsonwebtoken": "^9.0.9",
+ "@types/moment": "^2.13.0",
+ "@types/morgan": "^1.9.9",
+ "@types/multer": "^1.4.12",
+ "@types/on-finished": "^2.3.4",
+ "@types/request": "^2.48.12",
+ "@types/require-from-string": "^1.2.3",
+ "@types/serve-favicon": "^2.5.7",
+ "@types/shell-quote": "^1.7.5",
+ "@types/ssh2": "^1.15.5",
+ "@types/tar": "^6.1.13",
+ "@types/uuid": "^10.0.0",
+ "@types/validator": "^13.15.1",
+ "@typescript-eslint/eslint-plugin": "^8.32.1",
+ "@typescript-eslint/parser": "^8.32.1",
+ "eslint": "^9.27.0",
+ "globals": "^16.2.0",
+ "jest": "^29.7.0",
+ "madge": "^8.0.0",
+ "ts-jest": "^29.3.4",
+ "typescript-eslint": "^8.32.1"
+ }
+ },
+ "node_modules/@ampproject/remapping": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
}
},
"node_modules/@babel/code-frame": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz",
- "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
+ "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/highlight": "^7.12.13"
+ "@babel/helper-validator-identifier": "^7.27.1",
+ "js-tokens": "^4.0.0",
+ "picocolors": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "node_modules/@babel/core": {
- "version": "7.12.16",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.16.tgz",
- "integrity": "sha512-t/hHIB504wWceOeaOoONOhu+gX+hpjfeN6YRBT209X/4sibZQfSF1I0HFRRlBe97UZZosGx5XwUg1ZgNbelmNw==",
+ "node_modules/@babel/compat-data": {
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.2.tgz",
+ "integrity": "sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==",
"dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.12.13",
- "@babel/generator": "^7.12.15",
- "@babel/helper-module-transforms": "^7.12.13",
- "@babel/helpers": "^7.12.13",
- "@babel/parser": "^7.12.16",
- "@babel/template": "^7.12.13",
- "@babel/traverse": "^7.12.13",
- "@babel/types": "^7.12.13",
- "convert-source-map": "^1.7.0",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/core": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz",
+ "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.27.1",
+ "@babel/generator": "^7.27.1",
+ "@babel/helper-compilation-targets": "^7.27.1",
+ "@babel/helper-module-transforms": "^7.27.1",
+ "@babel/helpers": "^7.27.1",
+ "@babel/parser": "^7.27.1",
+ "@babel/template": "^7.27.1",
+ "@babel/traverse": "^7.27.1",
+ "@babel/types": "^7.27.1",
+ "convert-source-map": "^2.0.0",
"debug": "^4.1.0",
- "gensync": "^1.0.0-beta.1",
- "json5": "^2.1.2",
- "lodash": "^4.17.19",
- "semver": "^5.4.1",
- "source-map": "^0.5.0"
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/babel"
}
},
"node_modules/@babel/core/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
+ "license": "ISC",
"bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/@babel/core/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "semver": "bin/semver.js"
}
},
"node_modules/@babel/generator": {
- "version": "7.12.15",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.15.tgz",
- "integrity": "sha512-6F2xHxBiFXWNSGb7vyCUTBF8RCLY66rS0zEPcP8t/nQyXjha5EuK4z7H5o7fWG8B4M7y6mqVWq1J+1PuwRhecQ==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz",
+ "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.12.13",
- "jsesc": "^2.5.1",
- "source-map": "^0.5.0"
- }
- },
- "node_modules/@babel/generator/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true,
+ "@babel/parser": "^7.27.1",
+ "@babel/types": "^7.27.1",
+ "@jridgewell/gen-mapping": "^0.3.5",
+ "@jridgewell/trace-mapping": "^0.3.25",
+ "jsesc": "^3.0.2"
+ },
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@babel/helper-function-name": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz",
- "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-get-function-arity": "^7.12.13",
- "@babel/template": "^7.12.13",
- "@babel/types": "^7.12.13"
+ "node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-get-function-arity": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz",
- "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==",
+ "node_modules/@babel/helper-compilation-targets": {
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
+ "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.12.13"
+ "@babel/compat-data": "^7.27.2",
+ "@babel/helper-validator-option": "^7.27.1",
+ "browserslist": "^4.24.0",
+ "lru-cache": "^5.1.1",
+ "semver": "^6.3.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.12.16",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.16.tgz",
- "integrity": "sha512-zYoZC1uvebBFmj1wFAlXwt35JLEgecefATtKp20xalwEK8vHAixLBXTGxNrVGEmTT+gzOThUgr8UEdgtalc1BQ==",
+ "node_modules/@babel/helper-compilation-targets/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
- "dependencies": {
- "@babel/types": "^7.12.13"
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz",
- "integrity": "sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
+ "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.12.13"
+ "@babel/traverse": "^7.27.1",
+ "@babel/types": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.13.tgz",
- "integrity": "sha512-acKF7EjqOR67ASIlDTupwkKM1eUisNAjaSduo5Cz+793ikfnpe7p4Q7B7EWU2PCoSTPWsQkR7hRUWEIZPiVLGA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-module-imports": "^7.12.13",
- "@babel/helper-replace-supers": "^7.12.13",
- "@babel/helper-simple-access": "^7.12.13",
- "@babel/helper-split-export-declaration": "^7.12.13",
- "@babel/helper-validator-identifier": "^7.12.11",
- "@babel/template": "^7.12.13",
- "@babel/traverse": "^7.12.13",
- "@babel/types": "^7.12.13",
- "lodash": "^4.17.19"
- }
- },
- "node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz",
- "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz",
+ "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.12.13"
+ "@babel/helper-module-imports": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.27.1",
+ "@babel/traverse": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.12.13.tgz",
- "integrity": "sha512-C+10MXCXJLiR6IeG9+Wiejt9jmtFpxUc3MQqCmPY8hfCjyUGl9kT+B2okzEZrtykiwrc4dbCPdDoz0A/HQbDaA==",
- "dev": true
- },
- "node_modules/@babel/helper-replace-supers": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.13.tgz",
- "integrity": "sha512-pctAOIAMVStI2TMLhozPKbf5yTEXc0OJa0eENheb4w09SrgOWEs+P4nTOZYJQCqs8JlErGLDPDJTiGIp3ygbLg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-member-expression-to-functions": "^7.12.13",
- "@babel/helper-optimise-call-expression": "^7.12.13",
- "@babel/traverse": "^7.12.13",
- "@babel/types": "^7.12.13"
- }
- },
- "node_modules/@babel/helper-simple-access": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz",
- "integrity": "sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
+ "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
"dev": true,
- "dependencies": {
- "@babel/types": "^7.12.13"
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-split-export-declaration": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz",
- "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==",
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
"dev": true,
- "dependencies": {
- "@babel/types": "^7.12.13"
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
- "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
- },
- "node_modules/@babel/helpers": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.13.tgz",
- "integrity": "sha512-oohVzLRZ3GQEk4Cjhfs9YkJA4TdIDTObdBEZGrd6F/T0GPSnuV6l22eMcxlvcvzVIPH3VTtxbseudM1zIE+rPQ==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+ "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
"dev": true,
- "dependencies": {
- "@babel/template": "^7.12.13",
- "@babel/traverse": "^7.12.13",
- "@babel/types": "^7.12.13"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz",
- "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==",
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.12.11",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- }
- },
- "node_modules/@babel/highlight/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
+ "license": "MIT",
"engines": {
- "node": ">=4"
- }
- },
- "node_modules/@babel/highlight/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dependencies": {
- "color-name": "1.1.3"
+ "node": ">=6.9.0"
}
},
- "node_modules/@babel/highlight/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "node_modules/@babel/highlight/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "node_modules/@babel/helper-validator-option": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=4"
+ "node": ">=6.9.0"
}
},
- "node_modules/@babel/highlight/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "node_modules/@babel/helpers": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz",
+ "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "has-flag": "^3.0.0"
+ "@babel/template": "^7.27.1",
+ "@babel/types": "^7.27.1"
},
"engines": {
- "node": ">=4"
+ "node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.12.16",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.16.tgz",
- "integrity": "sha512-c/+u9cqV6F0+4Hpq01jnJO+GLp2DdT63ppz9Xa+6cHaajM9VFzK/iDXiKK65YtpeVwu+ctfS6iqlMqRgQRzeCw==",
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz",
+ "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.27.1"
+ },
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -337,8 +310,12 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
"integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-bigint": {
@@ -346,8 +323,12 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
"integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-class-properties": {
@@ -355,8 +336,44 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
"integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.12.13"
+ },
+ "peerDependencies": {
+ "@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==",
+ "dev": true,
+ "license": "MIT",
+ "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-import-attributes": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz",
+ "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-import-meta": {
@@ -364,8 +381,12 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
"integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-json-strings": {
@@ -373,8 +394,28 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
"integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",
+ "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-logical-assignment-operators": {
@@ -382,8 +423,12 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
"integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
@@ -391,8 +436,12 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
"integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-numeric-separator": {
@@ -400,8 +449,12 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
"integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.10.4"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-object-rest-spread": {
@@ -409,8 +462,12 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
"integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-optional-catch-binding": {
@@ -418,8 +475,12 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
"integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/plugin-syntax-optional-chaining": {
@@ -427,12733 +488,6082 @@
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
"integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.0"
+ },
+ "peerDependencies": {
+ "@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==",
+ "dev": true,
+ "license": "MIT",
+ "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.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz",
- "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==",
+ "version": "7.14.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
+ "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.12.13"
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
+ "node_modules/@babel/plugin-syntax-typescript": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz",
+ "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
}
},
"node_modules/@babel/template": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz",
- "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==",
+ "version": "7.27.2",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
+ "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.12.13",
- "@babel/parser": "^7.12.13",
- "@babel/types": "^7.12.13"
+ "@babel/code-frame": "^7.27.1",
+ "@babel/parser": "^7.27.2",
+ "@babel/types": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.13.tgz",
- "integrity": "sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz",
+ "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/code-frame": "^7.12.13",
- "@babel/generator": "^7.12.13",
- "@babel/helper-function-name": "^7.12.13",
- "@babel/helper-split-export-declaration": "^7.12.13",
- "@babel/parser": "^7.12.13",
- "@babel/types": "^7.12.13",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.19"
+ "@babel/code-frame": "^7.27.1",
+ "@babel/generator": "^7.27.1",
+ "@babel/parser": "^7.27.1",
+ "@babel/template": "^7.27.1",
+ "@babel/types": "^7.27.1",
+ "debug": "^4.3.1",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse/node_modules/globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
}
},
"node_modules/@babel/types": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz",
- "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==",
+ "version": "7.27.1",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz",
+ "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-validator-identifier": "^7.12.11",
- "lodash": "^4.17.19",
- "to-fast-properties": "^2.0.0"
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.27.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
}
},
+ "node_modules/@balena/dockerignore": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@balena/dockerignore/-/dockerignore-1.0.2.tgz",
+ "integrity": "sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==",
+ "license": "Apache-2.0"
+ },
"node_modules/@bcoe/v8-coverage": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/@cnakazawa/watch": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz",
- "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==",
+ "node_modules/@dependents/detective-less": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@dependents/detective-less/-/detective-less-5.0.1.tgz",
+ "integrity": "sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "exec-sh": "^0.3.2",
- "minimist": "^1.2.0"
- },
- "bin": {
- "watch": "cli.js"
+ "gonzales-pe": "^4.3.0",
+ "node-source-walk": "^7.0.1"
},
"engines": {
- "node": ">=0.1.95"
+ "node": ">=18"
}
},
- "node_modules/@istanbuljs/load-nyc-config": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
- "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "node_modules/@eslint-community/eslint-utils": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz",
+ "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "camelcase": "^5.3.1",
- "find-up": "^4.1.0",
- "get-package-type": "^0.1.0",
- "js-yaml": "^3.13.1",
- "resolve-from": "^5.0.0"
+ "eslint-visitor-keys": "^3.4.3"
},
"engines": {
- "node": ">=8"
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
}
},
- "node_modules/@istanbuljs/schema": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
- "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+ "node_modules/@eslint-community/regexpp": {
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+ "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=8"
+ "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
},
- "node_modules/@jest/console": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz",
- "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==",
+ "node_modules/@eslint/config-array": {
+ "version": "0.20.0",
+ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz",
+ "integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "jest-message-util": "^26.6.2",
- "jest-util": "^26.6.2",
- "slash": "^3.0.0"
+ "@eslint/object-schema": "^2.1.6",
+ "debug": "^4.3.1",
+ "minimatch": "^3.1.2"
},
"engines": {
- "node": ">= 10.14.2"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
- "node_modules/@jest/core": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz",
- "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==",
+ "node_modules/@eslint/config-array/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/console": "^26.6.2",
- "@jest/reporters": "^26.6.2",
- "@jest/test-result": "^26.6.2",
- "@jest/transform": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-changed-files": "^26.6.2",
- "jest-config": "^26.6.3",
- "jest-haste-map": "^26.6.2",
- "jest-message-util": "^26.6.2",
- "jest-regex-util": "^26.0.0",
- "jest-resolve": "^26.6.2",
- "jest-resolve-dependencies": "^26.6.3",
- "jest-runner": "^26.6.3",
- "jest-runtime": "^26.6.3",
- "jest-snapshot": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-validate": "^26.6.2",
- "jest-watcher": "^26.6.2",
- "micromatch": "^4.0.2",
- "p-each-series": "^2.1.0",
- "rimraf": "^3.0.0",
- "slash": "^3.0.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">= 10.14.2"
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
- "node_modules/@jest/environment": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz",
- "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==",
+ "node_modules/@eslint/config-array/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "@jest/fake-timers": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "jest-mock": "^26.6.2"
+ "brace-expansion": "^1.1.7"
},
"engines": {
- "node": ">= 10.14.2"
+ "node": "*"
}
},
- "node_modules/@jest/fake-timers": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz",
- "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==",
+ "node_modules/@eslint/config-helpers": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.2.tgz",
+ "integrity": "sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==",
"dev": true,
- "dependencies": {
- "@jest/types": "^26.6.2",
- "@sinonjs/fake-timers": "^6.0.1",
- "@types/node": "*",
- "jest-message-util": "^26.6.2",
- "jest-mock": "^26.6.2",
- "jest-util": "^26.6.2"
- },
+ "license": "Apache-2.0",
"engines": {
- "node": ">= 10.14.2"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
- "node_modules/@jest/globals": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz",
- "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==",
+ "node_modules/@eslint/core": {
+ "version": "0.14.0",
+ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.14.0.tgz",
+ "integrity": "sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@jest/environment": "^26.6.2",
- "@jest/types": "^26.6.2",
- "expect": "^26.6.2"
+ "@types/json-schema": "^7.0.15"
},
"engines": {
- "node": ">= 10.14.2"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
- "node_modules/@jest/reporters": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz",
- "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==",
+ "node_modules/@eslint/eslintrc": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz",
+ "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^26.6.2",
- "@jest/test-result": "^26.6.2",
- "@jest/transform": "^26.6.2",
- "@jest/types": "^26.6.2",
- "chalk": "^4.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.2",
- "graceful-fs": "^4.2.4",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^4.0.3",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.0.2",
- "jest-haste-map": "^26.6.2",
- "jest-resolve": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-worker": "^26.6.2",
- "slash": "^3.0.0",
- "source-map": "^0.6.0",
- "string-length": "^4.0.1",
- "terminal-link": "^2.0.0",
- "v8-to-istanbul": "^7.0.0"
+ "ajv": "^6.12.4",
+ "debug": "^4.3.2",
+ "espree": "^10.0.1",
+ "globals": "^14.0.0",
+ "ignore": "^5.2.0",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "minimatch": "^3.1.2",
+ "strip-json-comments": "^3.1.1"
},
"engines": {
- "node": ">= 10.14.2"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
- "optionalDependencies": {
- "node-notifier": "^8.0.0"
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
- "node_modules/@jest/source-map": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz",
- "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==",
+ "node_modules/@eslint/eslintrc/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "callsites": "^3.0.0",
- "graceful-fs": "^4.2.4",
- "source-map": "^0.6.0"
- },
- "engines": {
- "node": ">= 10.14.2"
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
- "node_modules/@jest/test-result": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz",
- "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==",
+ "node_modules/@eslint/eslintrc/node_modules/globals": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
+ "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
"dev": true,
- "dependencies": {
- "@jest/console": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "collect-v8-coverage": "^1.0.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
},
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@eslint/eslintrc/node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">= 10.14.2"
+ "node": ">= 4"
}
},
- "node_modules/@jest/test-sequencer": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz",
- "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==",
+ "node_modules/@eslint/eslintrc/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "@jest/test-result": "^26.6.2",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^26.6.2",
- "jest-runner": "^26.6.3",
- "jest-runtime": "^26.6.3"
+ "brace-expansion": "^1.1.7"
},
"engines": {
- "node": ">= 10.14.2"
+ "node": "*"
}
},
- "node_modules/@jest/transform": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz",
- "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==",
+ "node_modules/@eslint/js": {
+ "version": "9.27.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.27.0.tgz",
+ "integrity": "sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==",
"dev": true,
- "dependencies": {
- "@babel/core": "^7.1.0",
- "@jest/types": "^26.6.2",
- "babel-plugin-istanbul": "^6.0.0",
- "chalk": "^4.0.0",
- "convert-source-map": "^1.4.0",
- "fast-json-stable-stringify": "^2.0.0",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^26.6.2",
- "jest-regex-util": "^26.0.0",
- "jest-util": "^26.6.2",
- "micromatch": "^4.0.2",
- "pirates": "^4.0.1",
- "slash": "^3.0.0",
- "source-map": "^0.6.1",
- "write-file-atomic": "^3.0.0"
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
+ "funding": {
+ "url": "https://eslint.org/donate"
+ }
+ },
+ "node_modules/@eslint/object-schema": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz",
+ "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==",
+ "dev": true,
+ "license": "Apache-2.0",
"engines": {
- "node": ">= 10.14.2"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
- "node_modules/@jest/types": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
- "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
+ "node_modules/@eslint/plugin-kit": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.1.tgz",
+ "integrity": "sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^15.0.0",
- "chalk": "^4.0.0"
+ "@eslint/core": "^0.14.0",
+ "levn": "^0.4.1"
},
"engines": {
- "node": ">= 10.14.2"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
- "node_modules/@kwsites/file-exists": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
- "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
+ "node_modules/@grpc/grpc-js": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.13.4.tgz",
+ "integrity": "sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==",
+ "license": "Apache-2.0",
"dependencies": {
- "debug": "^4.1.1"
+ "@grpc/proto-loader": "^0.7.13",
+ "@js-sdsl/ordered-map": "^4.4.2"
+ },
+ "engines": {
+ "node": ">=12.10.0"
}
},
- "node_modules/@kwsites/promise-deferred": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
- "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw=="
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz",
- "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==",
+ "node_modules/@grpc/proto-loader": {
+ "version": "0.7.15",
+ "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.15.tgz",
+ "integrity": "sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==",
+ "license": "Apache-2.0",
"dependencies": {
- "@nodelib/fs.stat": "2.0.4",
- "run-parallel": "^1.1.9"
+ "lodash.camelcase": "^4.3.0",
+ "long": "^5.0.0",
+ "protobufjs": "^7.2.5",
+ "yargs": "^17.7.2"
+ },
+ "bin": {
+ "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js"
},
"engines": {
- "node": ">= 8"
+ "node": ">=6"
}
},
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz",
- "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==",
+ "node_modules/@humanfs/core": {
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
+ "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
+ "dev": true,
+ "license": "Apache-2.0",
"engines": {
- "node": ">= 8"
+ "node": ">=18.18.0"
}
},
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz",
- "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==",
+ "node_modules/@humanfs/node": {
+ "version": "0.16.6",
+ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz",
+ "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@nodelib/fs.scandir": "2.1.4",
- "fastq": "^1.6.0"
+ "@humanfs/core": "^0.19.1",
+ "@humanwhocodes/retry": "^0.3.0"
},
"engines": {
- "node": ">= 8"
+ "node": ">=18.18.0"
}
},
- "node_modules/@sindresorhus/is": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
- "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
+ "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz",
+ "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==",
+ "dev": true,
+ "license": "Apache-2.0",
"engines": {
- "node": ">=6"
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
}
},
- "node_modules/@sinonjs/commons": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz",
- "integrity": "sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw==",
+ "node_modules/@humanwhocodes/module-importer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
+ "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
"dev": true,
- "dependencies": {
- "type-detect": "4.0.8"
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=12.22"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
}
},
- "node_modules/@sinonjs/fake-timers": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
- "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
+ "node_modules/@humanwhocodes/retry": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
+ "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
"dev": true,
- "dependencies": {
- "@sinonjs/commons": "^1.7.0"
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=18.18"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
}
},
- "node_modules/@szmarczak/http-timer": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
- "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
+ "node_modules/@isaacs/fs-minipass": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
+ "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
+ "license": "ISC",
"dependencies": {
- "defer-to-connect": "^1.0.1"
+ "minipass": "^7.0.4"
},
"engines": {
- "node": ">=6"
+ "node": ">=18.0.0"
}
},
- "node_modules/@types/babel__core": {
- "version": "7.1.12",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz",
- "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==",
+ "node_modules/@isaacs/fs-minipass/node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
+ },
+ "node_modules/@istanbuljs/load-nyc-config": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0",
- "@types/babel__generator": "*",
- "@types/babel__template": "*",
- "@types/babel__traverse": "*"
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "get-package-type": "^0.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/@types/babel__generator": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz",
- "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==",
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.0.0"
+ "sprintf-js": "~1.0.2"
}
},
- "node_modules/@types/babel__template": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz",
- "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==",
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0"
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/@types/babel__traverse": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.0.tgz",
- "integrity": "sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg==",
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.3.0"
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/@types/bcryptjs": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.2.tgz",
- "integrity": "sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ=="
- },
- "node_modules/@types/body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==",
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/connect": "*",
- "@types/node": "*"
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/@types/caseless": {
- "version": "0.12.2",
- "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz",
- "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w=="
- },
- "node_modules/@types/configstore": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/configstore/-/configstore-4.0.0.tgz",
- "integrity": "sha512-SvCBBPzOIe/3Tu7jTl2Q8NjITjLmq9m7obzjSyb8PXWWZ31xVK6w4T6v8fOx+lrgQnqk3Yxc00LDolFsSakKCA=="
- },
- "node_modules/@types/connect": {
- "version": "3.4.34",
- "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz",
- "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==",
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@types/cookie-parser": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.2.tgz",
- "integrity": "sha512-uwcY8m6SDQqciHsqcKDGbo10GdasYsPCYkH3hVegj9qAah6pX5HivOnOuI3WYmyQMnOATV39zv/Ybs0bC/6iVg==",
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/express": "*"
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/@types/dockerode": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.2.2.tgz",
- "integrity": "sha512-YtdVvc+WmxShwx0iBmn0AtiLL2Zbcak9gXqdeBp0UpiRyOcshZM0eVTOEkUKd4mIjHzSEpA+1P3lXb7ouYvDtQ==",
- "dependencies": {
- "@types/node": "*"
+ "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/@types/ejs": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.0.5.tgz",
- "integrity": "sha512-k4ef69sS4sIqAPW9GoBnN+URAON2LeL1H0duQvL4RgdEBna19/WattYSA1qYqvbVEDRTSWzOw56tCLhC/m/IOw=="
+ "node_modules/@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
},
- "node_modules/@types/express": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.11.tgz",
- "integrity": "sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==",
+ "node_modules/@jest/console": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz",
+ "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/body-parser": "*",
- "@types/express-serve-static-core": "^4.17.18",
- "@types/qs": "*",
- "@types/serve-static": "*"
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/@types/express-serve-static-core": {
- "version": "4.17.18",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.18.tgz",
- "integrity": "sha512-m4JTwx5RUBNZvky/JJ8swEJPKFd8si08pPF2PfizYjGZOKr/svUWPcoUmLow6MmPzhasphB7gSTINY67xn3JNA==",
+ "node_modules/@jest/core": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz",
+ "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
+ "@jest/console": "^29.7.0",
+ "@jest/reporters": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
- "@types/qs": "*",
- "@types/range-parser": "*"
+ "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.7.0",
+ "jest-config": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-resolve-dependencies": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "jest-watcher": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
}
},
- "node_modules/@types/fs-extra": {
- "version": "9.0.7",
- "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.7.tgz",
- "integrity": "sha512-YGq2A6Yc3bldrLUlm17VNWOnUbnEzJ9CMgOeLFtQF3HOCN5lQBO8VyjG00a5acA5NNSM30kHVGp1trZgnVgi1Q==",
+ "node_modules/@jest/environment": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz",
+ "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-mock": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/@types/graceful-fs": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
- "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==",
+ "node_modules/@jest/expect": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "expect": "^29.7.0",
+ "jest-snapshot": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/@types/http-proxy": {
- "version": "1.17.5",
- "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.5.tgz",
- "integrity": "sha512-GNkDE7bTv6Sf8JbV2GksknKOsk7OznNYHSdrtvPJXO0qJ9odZig6IZKUi5RFGi6d1bf6dgIAe4uXi3DBc7069Q==",
+ "node_modules/@jest/expect-utils": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz",
+ "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "jest-get-type": "^29.6.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/@types/istanbul-lib-coverage": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
- "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw=="
- },
- "node_modules/@types/istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
+ "node_modules/@jest/fake-timers": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz",
+ "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/istanbul-lib-coverage": "*"
+ "@jest/types": "^29.6.3",
+ "@sinonjs/fake-timers": "^10.0.2",
+ "@types/node": "*",
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/@types/istanbul-reports": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz",
- "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==",
+ "node_modules/@jest/globals": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz",
+ "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/istanbul-lib-report": "*"
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "jest-mock": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/@types/jest": {
- "version": "26.0.20",
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.20.tgz",
- "integrity": "sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA==",
+ "node_modules/@jest/reporters": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz",
+ "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "jest-diff": "^26.0.0",
- "pretty-format": "^26.0.0"
+ "@bcoe/v8-coverage": "^0.2.3",
+ "@jest/console": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "collect-v8-coverage": "^1.0.0",
+ "exit": "^0.1.2",
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-instrument": "^6.0.0",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.1.3",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "slash": "^3.0.0",
+ "string-length": "^4.0.1",
+ "strip-ansi": "^6.0.0",
+ "v8-to-istanbul": "^9.0.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
+ }
}
},
- "node_modules/@types/js-base64": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/js-base64/-/js-base64-3.0.0.tgz",
- "integrity": "sha512-BnEyOcDE4H6bkg8m84xhdbkYoAoCg8sYERmAvE4Ff50U8jTfbmOinRdJpauBn1P9XsCCQgCLuSiyz3PM4WHYOA=="
- },
- "node_modules/@types/jsonwebtoken": {
- "version": "8.5.0",
- "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.0.tgz",
- "integrity": "sha512-9bVao7LvyorRGZCw0VmH/dr7Og+NdjYSsKAxB43OQoComFbBgsEpoR9JW6+qSq/ogwVBg8GI2MfAlk4SYI4OLg==",
+ "node_modules/@jest/schemas": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+ "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "@sinclair/typebox": "^0.27.8"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/@types/mime": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
- "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="
+ "node_modules/@jest/source-map": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz",
+ "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "callsites": "^3.0.0",
+ "graceful-fs": "^4.2.9"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
},
- "node_modules/@types/minipass": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@types/minipass/-/minipass-2.2.0.tgz",
- "integrity": "sha512-wuzZksN4w4kyfoOv/dlpov4NOunwutLA/q7uc00xU02ZyUY+aoM5PWIXEKBMnm0NHd4a+N71BMjq+x7+2Af1fg==",
+ "node_modules/@jest/test-result": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz",
+ "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "@jest/console": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "collect-v8-coverage": "^1.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/@types/morgan": {
- "version": "1.9.2",
- "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.2.tgz",
- "integrity": "sha512-edtGMEdit146JwwIeyQeHHg9yID4WSolQPxpEorHmN3KuytuCHyn2ELNr5Uxy8SerniFbbkmgKMrGM933am5BQ==",
+ "node_modules/@jest/test-sequencer": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz",
+ "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "@jest/test-result": "^29.7.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/@types/multer": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.5.tgz",
- "integrity": "sha512-9b/0a8JyrR0r2nQhL73JR86obWL7cogfX12augvlrvcpciCo/hkvEsgu80Z4S2g2DHGVXHr8pUIi1VhqFJ8Ufw==",
+ "node_modules/@jest/transform": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
+ "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/express": "*"
+ "@babel/core": "^7.11.6",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "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.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "pirates": "^4.0.4",
+ "slash": "^3.0.0",
+ "write-file-atomic": "^4.0.2"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/@types/node": {
- "version": "14.14.28",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.28.tgz",
- "integrity": "sha512-lg55ArB+ZiHHbBBttLpzD07akz0QPrZgUODNakeC09i62dnrywr9mFErHuaPlB6I7z+sEbK+IYmplahvplCj2g=="
+ "node_modules/@jest/transform/node_modules/write-file-atomic": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
+ "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.7"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ }
},
- "node_modules/@types/normalize-package-data": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
- "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
- "dev": true
+ "node_modules/@jest/types": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/schemas": "^29.6.3",
+ "@types/istanbul-lib-coverage": "^2.0.0",
+ "@types/istanbul-reports": "^3.0.0",
+ "@types/node": "*",
+ "@types/yargs": "^17.0.8",
+ "chalk": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
},
- "node_modules/@types/on-finished": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/@types/on-finished/-/on-finished-2.3.1.tgz",
- "integrity": "sha512-mzVYaYcFs5Jd2n/O6uYIRUsFRR1cHyZLRvkLCU0E7+G5WhY0qBDAR5fUCeZbvecYOSh9ikhlesyi2UfI8B9ckQ==",
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
+ "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "@jridgewell/set-array": "^1.2.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.24"
+ },
+ "engines": {
+ "node": ">=6.0.0"
}
},
- "node_modules/@types/prettier": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.1.tgz",
- "integrity": "sha512-DxZZbyMAM9GWEzXL+BMZROWz9oo6A9EilwwOMET2UVu2uZTqMWS5S69KVtuVKaRjCUpcrOXRalet86/OpG4kqw==",
- "dev": true
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
},
- "node_modules/@types/qs": {
- "version": "6.9.5",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz",
- "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ=="
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
},
- "node_modules/@types/range-parser": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz",
- "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA=="
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/@types/request": {
- "version": "2.48.5",
- "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.5.tgz",
- "integrity": "sha512-/LO7xRVnL3DxJ1WkPGDQrp4VTV1reX9RkC85mJ+Qzykj2Bdw+mG15aAfDahc76HtknjzE16SX/Yddn6MxVbmGQ==",
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.25",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/caseless": "*",
- "@types/node": "*",
- "@types/tough-cookie": "*",
- "form-data": "^2.5.0"
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/@types/require-from-string": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@types/require-from-string/-/require-from-string-1.2.0.tgz",
- "integrity": "sha512-5vE9WoOOC9/DoD3Zj53UISpM+5tSvh8k0mL4fe2zFI6vO715/W4IQ3EdVUrWVMrFi1/NZhyMvm2iKsDFkEGddQ=="
+ "node_modules/@js-sdsl/ordered-map": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz",
+ "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==",
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/js-sdsl"
+ }
},
- "node_modules/@types/serve-favicon": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@types/serve-favicon/-/serve-favicon-2.5.2.tgz",
- "integrity": "sha512-tGpJ3ZdAxnmuHX/BCRnZcPNQe2J8PbmwWFB2Fi6BvepDYuakFKraMG7orLkv387HS2C4MJm2UCINaxv4p7kP9A==",
+ "node_modules/@kwsites/file-exists": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
+ "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
+ "license": "MIT",
"dependencies": {
- "@types/express": "*"
+ "debug": "^4.1.1"
}
},
- "node_modules/@types/serve-static": {
- "version": "1.13.9",
- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz",
- "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==",
+ "node_modules/@kwsites/promise-deferred": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
+ "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==",
+ "license": "MIT"
+ },
+ "node_modules/@leichtgewicht/ip-codec": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz",
+ "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==",
+ "license": "MIT"
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/mime": "^1",
- "@types/node": "*"
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
}
},
- "node_modules/@types/ssh2": {
- "version": "0.5.46",
- "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-0.5.46.tgz",
- "integrity": "sha512-1pC8FHrMPYdkLoUOwTYYifnSEPzAFZRsp3JFC/vokQ+dRrVI+hDBwz0SNmQ3pL6h39OSZlPs0uCG7wKJkftnaA==",
- "dependencies": {
- "@types/node": "*",
- "@types/ssh2-streams": "*"
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
}
},
- "node_modules/@types/ssh2-streams": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/@types/ssh2-streams/-/ssh2-streams-0.1.8.tgz",
- "integrity": "sha512-I7gixRPUvVIyJuCEvnmhr3KvA2dC0639kKswqD4H5b4/FOcnPtNU+qWLiXdKIqqX9twUvi5j0U1mwKE5CUsrfA==",
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@types/node": "*"
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
}
},
- "node_modules/@types/stack-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz",
- "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==",
- "dev": true
+ "node_modules/@protobufjs/aspromise": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
+ "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==",
+ "license": "BSD-3-Clause"
},
- "node_modules/@types/tar": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/@types/tar/-/tar-4.0.4.tgz",
- "integrity": "sha512-0Xv+xcmkTsOZdIF4yCnd7RkOOyfyqPaqJ7RZFKnwdxfDbkN3eAAE9sHl8zJFqBz4VhxolW9EErbjR1oyH7jK2A==",
+ "node_modules/@protobufjs/base64": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
+ "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@protobufjs/codegen": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
+ "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@protobufjs/eventemitter": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
+ "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/@protobufjs/fetch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
+ "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==",
+ "license": "BSD-3-Clause",
"dependencies": {
- "@types/minipass": "*",
- "@types/node": "*"
+ "@protobufjs/aspromise": "^1.1.1",
+ "@protobufjs/inquire": "^1.1.0"
}
},
- "node_modules/@types/tough-cookie": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.0.tgz",
- "integrity": "sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A=="
+ "node_modules/@protobufjs/float": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
+ "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==",
+ "license": "BSD-3-Clause"
},
- "node_modules/@types/uuid": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz",
- "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ=="
+ "node_modules/@protobufjs/inquire": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
+ "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==",
+ "license": "BSD-3-Clause"
},
- "node_modules/@types/validator": {
- "version": "13.1.3",
- "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.1.3.tgz",
- "integrity": "sha512-DaOWN1zf7j+8nHhqXhIgNmS+ltAC53NXqGxYuBhWqWgqolRhddKzfZU814lkHQSTG0IUfQxU7Cg0gb8fFWo2mA=="
+ "node_modules/@protobufjs/path": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
+ "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==",
+ "license": "BSD-3-Clause"
},
- "node_modules/@types/yargs": {
- "version": "15.0.13",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz",
- "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==",
- "dependencies": {
- "@types/yargs-parser": "*"
- }
+ "node_modules/@protobufjs/pool": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
+ "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==",
+ "license": "BSD-3-Clause"
},
- "node_modules/@types/yargs-parser": {
- "version": "20.2.0",
- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz",
- "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA=="
+ "node_modules/@protobufjs/utf8": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
+ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==",
+ "license": "BSD-3-Clause"
},
- "node_modules/@typescript-eslint/types": {
- "version": "4.15.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.15.1.tgz",
- "integrity": "sha512-iGsaUyWFyLz0mHfXhX4zO6P7O3sExQpBJ2dgXB0G5g/8PRVfBBsmQIc3r83ranEQTALLR3Vko/fnCIVqmH+mPw==",
+ "node_modules/@sinclair/typebox": {
+ "version": "0.27.8",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@sindresorhus/is": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz",
+ "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==",
+ "license": "MIT",
"engines": {
- "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/is?sponsor=1"
}
},
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "4.15.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.1.tgz",
- "integrity": "sha512-z8MN3CicTEumrWAEB2e2CcoZa3KP9+SMYLIA2aM49XW3cWIaiVSOAGq30ffR5XHxRirqE90fgLw3e6WmNx5uNw==",
+ "node_modules/@sinonjs/commons": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
+ "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
+ "dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
- "@typescript-eslint/types": "4.15.1",
- "@typescript-eslint/visitor-keys": "4.15.1",
- "debug": "^4.1.1",
- "globby": "^11.0.1",
- "is-glob": "^4.0.1",
- "semver": "^7.3.2",
- "tsutils": "^3.17.1"
- },
- "engines": {
- "node": "^10.12.0 || >=12.0.0"
+ "type-detect": "4.0.8"
}
},
- "node_modules/@typescript-eslint/typescript-estree/node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "engines": {
- "node": ">=0.10.0"
+ "node_modules/@sinonjs/fake-timers": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
+ "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@sinonjs/commons": "^3.0.0"
}
},
- "node_modules/@typescript-eslint/typescript-estree/node_modules/is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "node_modules/@szmarczak/http-timer": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz",
+ "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==",
+ "license": "MIT",
"dependencies": {
- "is-extglob": "^2.1.1"
+ "defer-to-connect": "^2.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=14.16"
}
},
- "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
- "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
+ "node_modules/@ts-graphviz/adapter": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@ts-graphviz/adapter/-/adapter-2.0.6.tgz",
+ "integrity": "sha512-kJ10lIMSWMJkLkkCG5gt927SnGZcBuG0s0HHswGzcHTgvtUe7yk5/3zTEr0bafzsodsOq5Gi6FhQeV775nC35Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ts-graphviz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/ts-graphviz"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
+ "@ts-graphviz/common": "^2.1.5"
},
"engines": {
- "node": ">=10"
+ "node": ">=18"
}
},
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "4.15.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.1.tgz",
- "integrity": "sha512-tYzaTP9plooRJY8eNlpAewTOqtWW/4ff/5wBjNVaJ0S0wC4Gpq/zDVRTJa5bq2v1pCNQ08xxMCndcvR+h7lMww==",
+ "node_modules/@ts-graphviz/ast": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@ts-graphviz/ast/-/ast-2.0.7.tgz",
+ "integrity": "sha512-e6+2qtNV99UT6DJSoLbHfkzfyqY84aIuoV8Xlb9+hZAjgpum8iVHprGeAMQ4rF6sKUAxrmY8rfF/vgAwoPc3gw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ts-graphviz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/ts-graphviz"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "4.15.1",
- "eslint-visitor-keys": "^2.0.0"
+ "@ts-graphviz/common": "^2.1.5"
},
"engines": {
- "node": "^8.10.0 || ^10.13.0 || >=11.10.1"
+ "node": ">=18"
}
},
- "node_modules/abab": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
- "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
- "dev": true
- },
- "node_modules/accepts": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
- "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
- "dependencies": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
- },
+ "node_modules/@ts-graphviz/common": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@ts-graphviz/common/-/common-2.1.5.tgz",
+ "integrity": "sha512-S6/9+T6x8j6cr/gNhp+U2olwo1n0jKj/682QVqsh7yXWV6ednHYqxFw0ZsY3LyzT0N8jaZ6jQY9YD99le3cmvg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ts-graphviz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/ts-graphviz"
+ }
+ ],
+ "license": "MIT",
"engines": {
- "node": ">= 0.6"
+ "node": ">=18"
}
},
- "node_modules/acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
+ "node_modules/@ts-graphviz/core": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@ts-graphviz/core/-/core-2.0.7.tgz",
+ "integrity": "sha512-w071DSzP94YfN6XiWhOxnLpYT3uqtxJBDYdh6Jdjzt+Ce6DNspJsPQgpC7rbts/B8tEkq0LHoYuIF/O5Jh5rPg==",
"dev": true,
- "bin": {
- "acorn": "bin/acorn"
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ts-graphviz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/ts-graphviz"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ts-graphviz/ast": "^2.0.7",
+ "@ts-graphviz/common": "^2.1.5"
},
"engines": {
- "node": ">=0.4.0"
+ "node": ">=18"
}
},
- "node_modules/acorn-globals": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
- "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+ "node_modules/@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1"
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
}
},
- "node_modules/acorn-walk": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
+ "node_modules/@types/babel__generator": {
+ "version": "7.27.0",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
"dev": true,
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "license": "MIT",
"dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
+ "@babel/types": "^7.0.0"
}
},
- "node_modules/ansi-escapes": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
- "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "type-fest": "^0.11.0"
- },
- "engines": {
- "node": ">=8"
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
}
},
- "node_modules/ansi-escapes/node_modules/type-fest": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
- "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
+ "node_modules/@types/babel__traverse": {
+ "version": "7.20.7",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz",
+ "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==",
"dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "engines": {
- "node": ">=8"
+ "license": "MIT",
+ "dependencies": {
+ "@babel/types": "^7.20.7"
}
},
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "node_modules/@types/bcryptjs": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-3.0.0.tgz",
+ "integrity": "sha512-WRZOuCuaz8UcZZE4R5HXTco2goQSI2XxjGY3hbM/xDvwmqFWd4ivooImsMx65OKM6CtNKbnZ5YL+YwAwK7c1dg==",
+ "deprecated": "This is a stub types definition. bcryptjs provides its own type definitions, so you do not need this installed.",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
+ "bcryptjs": "*"
}
},
- "node_modules/anymatch": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
- "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+ "node_modules/@types/body-parser": {
+ "version": "1.19.5",
+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
+ "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
+ "@types/connect": "*",
+ "@types/node": "*"
}
},
- "node_modules/app-module-path": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz",
- "integrity": "sha1-ZBqlXft9am8KgUHEucCqULbCTdU="
+ "node_modules/@types/caseless": {
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz",
+ "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/append-field": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
- "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY="
+ "node_modules/@types/configstore": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/@types/configstore/-/configstore-5.0.1.tgz",
+ "integrity": "sha512-c/QCznvk7bLKGhHETj29rqKufui3jaAxjBhK4R2zUrMG5UG0qTwfWYxBoUbH8JCyDjdCWMIxPJ7/Fdz1UcAnWg==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "node_modules/@types/connect": {
+ "version": "3.4.38",
+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
+ "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "sprintf-js": "~1.0.2"
+ "@types/node": "*"
}
},
- "node_modules/arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "node_modules/@types/cookie-parser": {
+ "version": "1.4.8",
+ "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.8.tgz",
+ "integrity": "sha512-l37JqFrOJ9yQfRQkljb41l0xVphc7kg5JTjjr+pLRZ0IyZ49V4BQ8vbF4Ut2C2e+WH4al3xD3ZwYwIUfnbT4NQ==",
"dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "license": "MIT",
+ "peerDependencies": {
+ "@types/express": "*"
}
},
- "node_modules/arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "node_modules/@types/debug": {
+ "version": "4.1.12",
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
+ "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
"dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "license": "MIT",
+ "dependencies": {
+ "@types/ms": "*"
}
},
- "node_modules/arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "node_modules/@types/docker-modem": {
+ "version": "3.0.6",
+ "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.6.tgz",
+ "integrity": "sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==",
"dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*",
+ "@types/ssh2": "*"
}
},
- "node_modules/array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
- },
- "node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "engines": {
- "node": ">=8"
+ "node_modules/@types/dockerode": {
+ "version": "3.3.39",
+ "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.3.39.tgz",
+ "integrity": "sha512-uMPmxehH6ofeYjaslASPtjvyH8FRJdM9fZ+hjhGzL4Jq3bGjr9D7TKmp9soSwgFncNk0HOwmyBxjqOb3ikjjsA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/docker-modem": "*",
+ "@types/node": "*",
+ "@types/ssh2": "*"
}
},
- "node_modules/array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "node_modules/@types/ejs": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz",
+ "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==",
"dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
+ "license": "MIT"
},
- "node_modules/asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
+ "node_modules/@types/estree": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
+ "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/express": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.2.tgz",
+ "integrity": "sha512-BtjL3ZwbCQriyb0DGw+Rt12qAXPiBTPs815lsUvtt1Grk0vLRMZNMUZ741d5rjk+UQOxfDiBZ3dxpX00vSkK3g==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "safer-buffer": "~2.1.0"
+ "@types/body-parser": "*",
+ "@types/express-serve-static-core": "^5.0.0",
+ "@types/serve-static": "*"
}
},
- "node_modules/assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
- "engines": {
- "node": ">=0.8"
+ "node_modules/@types/express-serve-static-core": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz",
+ "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*",
+ "@types/qs": "*",
+ "@types/range-parser": "*",
+ "@types/send": "*"
}
},
- "node_modules/assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "node_modules/@types/fs-extra": {
+ "version": "11.0.4",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz",
+ "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==",
"dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "license": "MIT",
+ "dependencies": {
+ "@types/jsonfile": "*",
+ "@types/node": "*"
}
},
- "node_modules/ast-module-types": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-2.7.1.tgz",
- "integrity": "sha512-Rnnx/4Dus6fn7fTqdeLEAn5vUll5w7/vts0RN608yFa6si/rDOUonlIIiwugHBFWjylHjxm9owoSZn71KwG4gw=="
- },
- "node_modules/async": {
- "version": "0.9.2",
- "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
- "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0="
+ "node_modules/@types/graceful-fs": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
+ "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
+ }
},
- "node_modules/asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ "node_modules/@types/http-cache-semantics": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz",
+ "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==",
+ "license": "MIT"
},
- "node_modules/at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "engines": {
- "node": ">= 4.0.0"
- }
+ "node_modules/@types/http-errors": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
+ "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "node_modules/@types/http-proxy": {
+ "version": "1.17.16",
+ "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz",
+ "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==",
"dev": true,
- "bin": {
- "atob": "bin/atob.js"
- },
- "engines": {
- "node": ">= 4.5.0"
+ "license": "MIT",
+ "dependencies": {
+ "@types/node": "*"
}
},
- "node_modules/aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
- "engines": {
- "node": "*"
- }
+ "node_modules/@types/is-valid-path": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@types/is-valid-path/-/is-valid-path-0.1.2.tgz",
+ "integrity": "sha512-BsZtkfiPpnzDWFjSZanYllttVW7/46ayPZkcHBCSFBkBqIO9rWrflUvEmT2tF///hnPLwBJU3TJPzbBxpUEqCg==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/aws4": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
- "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
+ "node_modules/@types/istanbul-lib-coverage": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
+ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/axios": {
- "version": "0.21.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
- "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
+ "node_modules/@types/istanbul-lib-report": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
+ "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "follow-redirects": "^1.10.0"
+ "@types/istanbul-lib-coverage": "*"
}
},
- "node_modules/babel-jest": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz",
- "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==",
+ "node_modules/@types/istanbul-reports": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
+ "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@jest/transform": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/babel__core": "^7.1.7",
- "babel-plugin-istanbul": "^6.0.0",
- "babel-preset-jest": "^26.6.2",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">= 10.14.2"
+ "@types/istanbul-lib-report": "*"
}
},
- "node_modules/babel-plugin-istanbul": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz",
- "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==",
+ "node_modules/@types/jest": {
+ "version": "29.5.14",
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.14.tgz",
+ "integrity": "sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^4.0.0",
- "test-exclude": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
+ "expect": "^29.0.0",
+ "pretty-format": "^29.0.0"
}
},
- "node_modules/babel-plugin-jest-hoist": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz",
- "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==",
+ "node_modules/@types/js-base64": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/@types/js-base64/-/js-base64-3.3.1.tgz",
+ "integrity": "sha512-Zw33oQNAvDdAN9b0IE5stH0y2MylYvtU7VVTKEJPxhyM2q57CVaNJhtJW258ah24NRtaiA23tptUmVn3dmTKpw==",
+ "deprecated": "This is a stub types definition. js-base64 provides its own type definitions, so you do not need this installed.",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__core": "^7.0.0",
- "@types/babel__traverse": "^7.0.6"
- },
- "engines": {
- "node": ">= 10.14.2"
+ "js-base64": "*"
}
},
- "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",
- "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
+ "node_modules/@types/json-schema": {
+ "version": "7.0.15",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/jsonfile": {
+ "version": "6.1.4",
+ "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz",
+ "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.8.3",
- "@babel/plugin-syntax-import-meta": "^7.8.3",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.8.3",
- "@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-top-level-await": "^7.8.3"
+ "@types/node": "*"
}
},
- "node_modules/babel-preset-jest": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz",
- "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==",
+ "node_modules/@types/jsonwebtoken": {
+ "version": "9.0.9",
+ "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.9.tgz",
+ "integrity": "sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "babel-plugin-jest-hoist": "^26.6.2",
- "babel-preset-current-node-syntax": "^1.0.0"
- },
- "engines": {
- "node": ">= 10.14.2"
+ "@types/ms": "*",
+ "@types/node": "*"
}
},
- "node_modules/balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ "node_modules/@types/luxon": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.6.2.tgz",
+ "integrity": "sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw==",
+ "license": "MIT"
+ },
+ "node_modules/@types/mime": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
+ "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "node_modules/@types/moment": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/@types/moment/-/moment-2.13.0.tgz",
+ "integrity": "sha512-DyuyYGpV6r+4Z1bUznLi/Y7HpGn4iQ4IVcGn8zrr1P4KotKLdH0sbK1TFR6RGyX6B+G8u83wCzL+bpawKU/hdQ==",
+ "deprecated": "This is a stub types definition for Moment (https://github.com/moment/moment). Moment provides its own type definitions, so you don't need @types/moment installed!",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
+ "moment": "*"
}
},
- "node_modules/base/node_modules/define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "node_modules/@types/morgan": {
+ "version": "1.9.9",
+ "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.9.tgz",
+ "integrity": "sha512-iRYSDKVaC6FkGSpEVVIvrRGw0DfJMiQzIn3qr2G5B3C//AWkulhXgaBd7tS9/J79GWSYMTHGs7PfI5b3Y8m+RQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-descriptor": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
+ "@types/node": "*"
}
},
- "node_modules/base/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "node_modules/@types/ms": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
+ "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/multer": {
+ "version": "1.4.12",
+ "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.12.tgz",
+ "integrity": "sha512-pQ2hoqvXiJt2FP9WQVLPRO+AmiIm/ZYkavPlIQnx282u4ZrVdztx0pkh3jjpQt0Kz+YI0YhSG264y08UJKoUQg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
+ "@types/express": "*"
}
},
- "node_modules/base/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
+ "node_modules/@types/node": {
+ "version": "22.15.21",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.21.tgz",
+ "integrity": "sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==",
+ "license": "MIT",
"dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
+ "undici-types": "~6.21.0"
}
},
- "node_modules/base/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "node_modules/@types/on-finished": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/@types/on-finished/-/on-finished-2.3.4.tgz",
+ "integrity": "sha512-Ld4UQD3udYcKPaAWlI1EYXKhefkZcTlpqOLkQRmN3u5Ml/tUypMivUHbNH8LweP4H4FlhGGO+uBjJI1Y1dkE1g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
+ "@types/node": "*"
}
},
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
+ "node_modules/@types/qs": {
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz",
+ "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/basic-auth": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
- "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
- "dependencies": {
- "safe-buffer": "5.1.2"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/basic-auth/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "node_modules/@types/range-parser": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
+ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
+ "node_modules/@types/request": {
+ "version": "2.48.12",
+ "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz",
+ "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "tweetnacl": "^0.14.3"
+ "@types/caseless": "*",
+ "@types/node": "*",
+ "@types/tough-cookie": "*",
+ "form-data": "^2.5.0"
}
},
- "node_modules/bcryptjs": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
- "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms="
+ "node_modules/@types/require-from-string": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/@types/require-from-string/-/require-from-string-1.2.3.tgz",
+ "integrity": "sha512-kxLU5xvefySGpp1Z7VCt4m5AhQJUZ8HjW8ADdeS7GieqFPHLAde007fd9bxeXEsFXyaA0LeWIoQXyXP17mGpIg==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/bl": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
- "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+ "node_modules/@types/send": {
+ "version": "0.17.4",
+ "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
+ "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
+ "@types/mime": "^1",
+ "@types/node": "*"
}
},
- "node_modules/bl/node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "node_modules/body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+ "node_modules/@types/serve-favicon": {
+ "version": "2.5.7",
+ "resolved": "https://registry.npmjs.org/@types/serve-favicon/-/serve-favicon-2.5.7.tgz",
+ "integrity": "sha512-z9TNUQXdQ+W/OJMP1e3KOYUZ99qJS4+ZfFOIrPGImcayqKoyifbJSEFkVq1MCKBbqjMZpjPj3B5ilrQAR2+TOw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "bytes": "3.1.0",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.7.0",
- "raw-body": "2.4.0",
- "type-is": "~1.6.17"
- },
- "engines": {
- "node": ">= 0.8"
+ "@types/express": "*"
}
},
- "node_modules/body-parser/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "node_modules/@types/serve-static": {
+ "version": "1.15.7",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz",
+ "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "ms": "2.0.0"
+ "@types/http-errors": "*",
+ "@types/node": "*",
+ "@types/send": "*"
}
},
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "node_modules/@types/shell-quote": {
+ "version": "1.7.5",
+ "resolved": "https://registry.npmjs.org/@types/shell-quote/-/shell-quote-1.7.5.tgz",
+ "integrity": "sha512-+UE8GAGRPbJVQDdxi16dgadcBfQ+KG2vgZhV1+3A1XmHbmwcdwhCUwIdy+d3pAGrbvgRoVSjeI9vOWyq376Yzw==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@types/ssh2": {
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.15.5.tgz",
+ "integrity": "sha512-N1ASjp/nXH3ovBHddRJpli4ozpk6UdDYIX4RJWFa9L1YKnzdhTlVmiGHm4DZnj/jLbqZpes4aeR30EFGQtvhQQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
+ "@types/node": "^18.11.18"
}
},
- "node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "node_modules/@types/ssh2/node_modules/@types/node": {
+ "version": "18.19.103",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.103.tgz",
+ "integrity": "sha512-hHTHp+sEz6SxFsp+SA+Tqrua3AbmlAw+Y//aEwdHrdZkYVRWdvWD3y5uPZ0flYOkgskaFWqZ/YGFm3FaFQ0pRw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "fill-range": "^7.0.1"
- },
- "engines": {
- "node": ">=8"
+ "undici-types": "~5.26.4"
}
},
- "node_modules/browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
- "dev": true
+ "node_modules/@types/ssh2/node_modules/undici-types": {
+ "version": "5.26.5",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
+ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/bs-logger": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz",
- "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==",
+ "node_modules/@types/stack-utils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
+ "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
"dev": true,
- "dependencies": {
- "fast-json-stable-stringify": "2.x"
- },
- "engines": {
- "node": ">= 6"
- }
+ "license": "MIT"
},
- "node_modules/bser": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
- "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
+ "node_modules/@types/tar": {
+ "version": "6.1.13",
+ "resolved": "https://registry.npmjs.org/@types/tar/-/tar-6.1.13.tgz",
+ "integrity": "sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "node-int64": "^0.4.0"
+ "@types/node": "*",
+ "minipass": "^4.0.0"
}
},
- "node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
+ "node_modules/@types/tough-cookie": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz",
+ "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/buffer-equal-constant-time": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
- "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
+ "node_modules/@types/uuid": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz",
+ "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
+ "node_modules/@types/validator": {
+ "version": "13.15.1",
+ "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.15.1.tgz",
+ "integrity": "sha512-9gG6ogYcoI2mCMLdcO0NYI0AYrbxIjv0MDmy/5Ywo6CpWWrqYayc+mmgxRsCgtcGJm9BSbXkMsmxGah1iGHAAQ==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/builtin-modules": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
- "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "node_modules/@types/yargs": {
+ "version": "17.0.33",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
+ "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@types/yargs-parser": "*"
+ }
+ },
+ "node_modules/@types/yargs-parser": {
+ "version": "21.0.3",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
+ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "8.32.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.1.tgz",
+ "integrity": "sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/regexpp": "^4.10.0",
+ "@typescript-eslint/scope-manager": "8.32.1",
+ "@typescript-eslint/type-utils": "8.32.1",
+ "@typescript-eslint/utils": "8.32.1",
+ "@typescript-eslint/visitor-keys": "8.32.1",
+ "graphemer": "^1.4.0",
+ "ignore": "^7.0.0",
+ "natural-compare": "^1.4.0",
+ "ts-api-utils": "^2.1.0"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0",
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
}
},
- "node_modules/busboy": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz",
- "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=",
+ "node_modules/@typescript-eslint/parser": {
+ "version": "8.32.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.1.tgz",
+ "integrity": "sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "dicer": "0.2.5",
- "readable-stream": "1.1.x"
+ "@typescript-eslint/scope-manager": "8.32.1",
+ "@typescript-eslint/types": "8.32.1",
+ "@typescript-eslint/typescript-estree": "8.32.1",
+ "@typescript-eslint/visitor-keys": "8.32.1",
+ "debug": "^4.3.4"
},
"engines": {
- "node": ">=0.8.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
}
},
- "node_modules/busboy/node_modules/readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.32.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.1.tgz",
+ "integrity": "sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
+ "@typescript-eslint/types": "8.32.1",
+ "@typescript-eslint/visitor-keys": "8.32.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/busboy/node_modules/string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
+ "node_modules/@typescript-eslint/type-utils": {
+ "version": "8.32.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.1.tgz",
+ "integrity": "sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "8.32.1",
+ "@typescript-eslint/utils": "8.32.1",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^2.1.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
+ }
},
- "node_modules/bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
+ "node_modules/@typescript-eslint/types": {
+ "version": "8.32.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.1.tgz",
+ "integrity": "sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">= 0.8"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.32.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.1.tgz",
+ "integrity": "sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
+ "@typescript-eslint/types": "8.32.1",
+ "@typescript-eslint/visitor-keys": "8.32.1",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.2",
+ "is-glob": "^4.0.3",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^2.1.0"
},
"engines": {
- "node": ">=0.10.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4 <5.9.0"
}
},
- "node_modules/cacheable-request": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
- "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
+ "node_modules/@typescript-eslint/utils": {
+ "version": "8.32.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.1.tgz",
+ "integrity": "sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^3.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^4.1.0",
- "responselike": "^1.0.2"
+ "@eslint-community/eslint-utils": "^4.7.0",
+ "@typescript-eslint/scope-manager": "8.32.1",
+ "@typescript-eslint/types": "8.32.1",
+ "@typescript-eslint/typescript-estree": "8.32.1"
},
"engines": {
- "node": ">=8"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
}
},
- "node_modules/cacheable-request/node_modules/get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
+ "node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.32.1",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.1.tgz",
+ "integrity": "sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "pump": "^3.0.0"
+ "@typescript-eslint/types": "8.32.1",
+ "eslint-visitor-keys": "^4.2.0"
},
"engines": {
- "node": ">=8"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/cacheable-request/node_modules/lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
+ "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
+ "license": "Apache-2.0",
"engines": {
- "node": ">=8"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
- "node_modules/callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "node_modules/@vue/compiler-core": {
+ "version": "3.5.15",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.15.tgz",
+ "integrity": "sha512-nGRc6YJg/kxNqbv/7Tg4juirPnjHvuVdhcmDvQWVZXlLHjouq7VsKmV1hIxM/8yKM0VUfwT/Uzc0lO510ltZqw==",
"dev": true,
- "engines": {
- "node": ">=6"
+ "license": "MIT",
+ "dependencies": {
+ "@babel/parser": "^7.27.2",
+ "@vue/shared": "3.5.15",
+ "entities": "^4.5.0",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.2.1"
}
},
- "node_modules/camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "node_modules/@vue/compiler-dom": {
+ "version": "3.5.15",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.15.tgz",
+ "integrity": "sha512-ZelQd9n+O/UCBdL00rlwCrsArSak+YLZpBVuNDio1hN3+wrCshYZEDUO3khSLAzPbF1oQS2duEoMDUHScUlYjA==",
"dev": true,
- "engines": {
- "node": ">=6"
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-core": "3.5.15",
+ "@vue/shared": "3.5.15"
}
},
- "node_modules/capture-exit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
- "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
+ "node_modules/@vue/compiler-sfc": {
+ "version": "3.5.15",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.15.tgz",
+ "integrity": "sha512-3zndKbxMsOU6afQWer75Zot/aydjtxNj0T2KLg033rAFaQUn2PGuE32ZRe4iMhflbTcAxL0yEYsRWFxtPro8RQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "rsvp": "^4.8.4"
- },
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
+ "@babel/parser": "^7.27.2",
+ "@vue/compiler-core": "3.5.15",
+ "@vue/compiler-dom": "3.5.15",
+ "@vue/compiler-ssr": "3.5.15",
+ "@vue/shared": "3.5.15",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.17",
+ "postcss": "^8.5.3",
+ "source-map-js": "^1.2.1"
}
},
- "node_modules/caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ "node_modules/@vue/compiler-ssr": {
+ "version": "3.5.15",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.15.tgz",
+ "integrity": "sha512-gShn8zRREZbrXqTtmLSCffgZXDWv8nHc/GhsW+mbwBfNZL5pI96e7IWcIq8XGQe1TLtVbu7EV9gFIVSmfyarPg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@vue/compiler-dom": "3.5.15",
+ "@vue/shared": "3.5.15"
+ }
},
- "node_modules/chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
+ "node_modules/@vue/shared": {
+ "version": "3.5.15",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.15.tgz",
+ "integrity": "sha512-bKvgFJJL1ZX9KxMCTQY6xD9Dhe3nusd1OhyOb1cJYGqvAr0Vg8FIjHPMOEVbJ9GDT9HG+Bjdn4oS8ohKP8EvoA==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/accepts": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",
+ "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",
+ "license": "MIT",
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "mime-types": "^3.0.0",
+ "negotiator": "^1.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">= 0.6"
}
},
- "node_modules/char-regex": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
- "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
+ "node_modules/acorn": {
+ "version": "8.14.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
+ "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
"dev": true,
+ "license": "MIT",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
"engines": {
- "node": ">=10"
+ "node": ">=0.4.0"
}
},
- "node_modules/chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
- },
- "node_modules/ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
- "dev": true
- },
- "node_modules/cjs-module-lexer": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz",
- "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==",
- "dev": true
- },
- "node_modules/class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "node_modules/acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
"dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "license": "MIT",
"dependencies": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
},
- "engines": {
- "node": ">=0.10.0"
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/class-utils/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "node_modules/ansi-escapes": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
+ "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-descriptor": "^0.1.0"
+ "type-fest": "^0.21.3"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
- "dependencies": {
- "restore-cursor": "^3.1.0"
- },
+ "node_modules/ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
- "node_modules/cli-spinners": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz",
- "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dev": true,
+ "node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "license": "MIT",
"dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "node_modules/clone": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
+ "color-convert": "^2.0.1"
+ },
"engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
- "dependencies": {
- "mimic-response": "^1.0.0"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "node_modules/any-promise": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
"dev": true,
- "engines": {
- "iojs": ">= 1.0.0",
- "node": ">= 0.12.0"
- }
+ "license": "MIT"
},
- "node_modules/collect-v8-coverage": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
- "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
- "dev": true
- },
- "node_modules/collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "node_modules/anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 8"
}
},
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
+ "node_modules/app-module-path": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz",
+ "integrity": "sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==",
+ "dev": true,
+ "license": "BSD-2-Clause"
},
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ "node_modules/append-field": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
+ "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==",
+ "license": "MIT"
},
- "node_modules/colorette": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
- "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw=="
+ "node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true,
+ "license": "Python-2.0"
},
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "node_modules/asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "license": "MIT",
"dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
+ "safer-buffer": "~2.1.0"
}
},
- "node_modules/commander": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
- "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+ "node_modules/assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==",
+ "license": "MIT",
"engines": {
- "node": ">= 6"
+ "node": ">=0.8"
}
},
- "node_modules/commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
- },
- "node_modules/component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
- },
- "node_modules/concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "engines": [
- "node >= 0.8"
- ],
- "dependencies": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
+ "node_modules/ast-module-types": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-6.0.1.tgz",
+ "integrity": "sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/concat-stream/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "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==",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
+ "node_modules/async": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
+ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
+ "license": "MIT"
},
- "node_modules/concat-stream/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "node_modules/asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
+ "license": "MIT"
},
- "node_modules/concat-stream/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dependencies": {
- "safe-buffer": "~5.1.0"
+ "node_modules/aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
}
},
- "node_modules/configstore": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
- "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
+ "node_modules/aws4": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz",
+ "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==",
+ "license": "MIT"
+ },
+ "node_modules/axios": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz",
+ "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==",
+ "license": "MIT",
"dependencies": {
- "dot-prop": "^5.2.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^3.0.0",
- "unique-string": "^2.0.0",
- "write-file-atomic": "^3.0.0",
- "xdg-basedir": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
+ "follow-redirects": "^1.15.6",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
}
},
- "node_modules/content-disposition": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
- "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
+ "node_modules/axios/node_modules/form-data": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz",
+ "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==",
+ "license": "MIT",
"dependencies": {
- "safe-buffer": "5.1.2"
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "mime-types": "^2.1.12"
},
"engines": {
- "node": ">= 0.6"
+ "node": ">= 6"
}
},
- "node_modules/content-disposition/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "node_modules/content-type": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
+ "node_modules/axios/node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
- "node_modules/convert-source-map": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
- "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
- "dev": true,
+ "node_modules/axios/node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
"dependencies": {
- "safe-buffer": "~5.1.1"
- }
- },
- "node_modules/convert-source-map/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "node_modules/cookie": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
+ "mime-db": "1.52.0"
+ },
"engines": {
"node": ">= 0.6"
}
},
- "node_modules/cookie-parser": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz",
- "integrity": "sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==",
+ "node_modules/babel-jest": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz",
+ "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "cookie": "0.4.0",
- "cookie-signature": "1.0.6"
+ "@jest/transform": "^29.7.0",
+ "@types/babel__core": "^7.1.14",
+ "babel-plugin-istanbul": "^6.1.1",
+ "babel-preset-jest": "^29.6.3",
+ "chalk": "^4.0.0",
+ "graceful-fs": "^4.2.9",
+ "slash": "^3.0.0"
},
"engines": {
- "node": ">= 0.8.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.8.0"
}
},
- "node_modules/cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
- },
- "node_modules/copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "node_modules/babel-plugin-istanbul": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
+ "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==",
"dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-instrument": "^5.0.4",
+ "test-exclude": "^6.0.0"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
}
},
- "node_modules/core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "node_modules/cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz",
+ "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==",
"dev": true,
+ "license": "BSD-3-Clause",
"dependencies": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
+ "@babel/core": "^7.12.3",
+ "@babel/parser": "^7.14.7",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^6.3.0"
},
"engines": {
- "node": ">=4.8"
+ "node": ">=8"
}
},
- "node_modules/cross-spawn/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "node_modules/babel-plugin-istanbul/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"dev": true,
+ "license": "ISC",
"bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/crypto-random-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
- "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
- "engines": {
- "node": ">=8"
+ "semver": "bin/semver.js"
}
},
- "node_modules/cssom": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
- "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
- "dev": true
- },
- "node_modules/cssstyle": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
- "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
+ "node_modules/babel-plugin-jest-hoist": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz",
+ "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "cssom": "~0.3.6"
+ "@babel/template": "^7.3.3",
+ "@babel/types": "^7.3.3",
+ "@types/babel__core": "^7.1.14",
+ "@types/babel__traverse": "^7.0.6"
},
"engines": {
- "node": ">=8"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/cssstyle/node_modules/cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
- "dev": true
- },
- "node_modules/dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "node_modules/babel-preset-current-node-syntax": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz",
+ "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "assert-plus": "^1.0.0"
+ "@babel/plugin-syntax-async-generators": "^7.8.4",
+ "@babel/plugin-syntax-bigint": "^7.8.3",
+ "@babel/plugin-syntax-class-properties": "^7.12.13",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5",
+ "@babel/plugin-syntax-import-attributes": "^7.24.7",
+ "@babel/plugin-syntax-import-meta": "^7.10.4",
+ "@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"
},
- "engines": {
- "node": ">=0.10"
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/data-urls": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
- "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
+ "node_modules/babel-preset-jest": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz",
+ "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "abab": "^2.0.3",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0"
+ "babel-plugin-jest-hoist": "^29.6.3",
+ "babel-preset-current-node-syntax": "^1.0.0"
},
"engines": {
- "node": ">=10"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/debug": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
- "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "license": "MIT"
+ },
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/basic-auth": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
+ "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
+ "license": "MIT",
"dependencies": {
- "ms": "2.1.2"
+ "safe-buffer": "5.1.2"
},
"engines": {
- "node": ">=6.0"
+ "node": ">= 0.8"
}
},
- "node_modules/debug/node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ "node_modules/basic-auth/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "license": "MIT"
},
- "node_modules/decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "node_modules/bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tweetnacl": "^0.14.3"
}
},
- "node_modules/decimal.js": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz",
- "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==",
- "dev": true
- },
- "node_modules/decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true,
- "engines": {
- "node": ">=0.10"
+ "node_modules/bcryptjs": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-3.0.2.tgz",
+ "integrity": "sha512-k38b3XOZKv60C4E2hVsXTolJWfkGRMbILBIe2IBITXciy5bOsTKot5kDrf3ZfufQtQOUN5mXceUEpU1rTl9Uog==",
+ "license": "BSD-3-Clause",
+ "bin": {
+ "bcrypt": "bin/bcrypt"
}
},
- "node_modules/decomment": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/decomment/-/decomment-0.9.3.tgz",
- "integrity": "sha512-5skH5BfUL3n09RDmMVaHS1QGCiZRnl2nArUwmsE9JRY93Ueh3tihYl5wIrDdAuXnoFhxVis/DmRWREO2c6DG3w==",
+ "node_modules/bl": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+ "license": "MIT",
"dependencies": {
- "esprima": "4.0.1"
- },
- "engines": {
- "node": ">=6.4",
- "npm": ">=2.15"
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
}
},
- "node_modules/decompress-response": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+ "node_modules/body-parser": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz",
+ "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==",
+ "license": "MIT",
"dependencies": {
- "mimic-response": "^1.0.0"
+ "bytes": "^3.1.2",
+ "content-type": "^1.0.5",
+ "debug": "^4.4.0",
+ "http-errors": "^2.0.0",
+ "iconv-lite": "^0.6.3",
+ "on-finished": "^2.4.1",
+ "qs": "^6.14.0",
+ "raw-body": "^3.0.0",
+ "type-is": "^2.0.0"
},
"engines": {
- "node": ">=4"
- }
- },
- "node_modules/deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
- },
- "node_modules/deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "node": ">=18"
}
},
- "node_modules/defaults": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
- "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
+ "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==",
+ "license": "MIT",
"dependencies": {
- "clone": "^1.0.2"
+ "balanced-match": "^1.0.0"
}
},
- "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=="
- },
- "node_modules/define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "node_modules/braces": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
+ "fill-range": "^7.1.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
}
},
- "node_modules/define-property/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "node_modules/browserslist": {
+ "version": "4.24.5",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz",
+ "integrity": "sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==",
"dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "kind-of": "^6.0.0"
+ "caniuse-lite": "^1.0.30001716",
+ "electron-to-chromium": "^1.5.149",
+ "node-releases": "^2.0.19",
+ "update-browserslist-db": "^1.1.3"
+ },
+ "bin": {
+ "browserslist": "cli.js"
},
"engines": {
- "node": ">=0.10.0"
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
- "node_modules/define-property/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "node_modules/bs-logger": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz",
+ "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "kind-of": "^6.0.0"
+ "fast-json-stable-stringify": "2.x"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 6"
}
},
- "node_modules/define-property/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "node_modules/bser": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
+ "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
+ "node-int64": "^0.4.0"
}
},
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
- "engines": {
- "node": ">=0.4.0"
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
}
},
- "node_modules/depd": {
+ "node_modules/buffer-equal-constant-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+ "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==",
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/buffer-from": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "license": "MIT"
+ },
+ "node_modules/buildcheck": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz",
+ "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==",
+ "optional": true,
"engines": {
- "node": ">= 0.6"
+ "node": ">=10.0.0"
}
},
- "node_modules/dependency-tree": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-8.0.0.tgz",
- "integrity": "sha512-zagnV3jgizudEWY3FIFkGCrRr3+GukSMLlw1snIWAOL2beceC22hBXdeNjCnnfPZvbHIPB9DvacSCfD+IoOG3w==",
+ "node_modules/busboy": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
"dependencies": {
- "commander": "^2.20.3",
- "debug": "^4.3.1",
- "filing-cabinet": "^3.0.0",
- "precinct": "^7.0.0",
- "typescript": "^3.9.7"
- },
- "bin": {
- "dependency-tree": "bin/cli.js"
+ "streamsearch": "^1.1.0"
},
"engines": {
- "node": "^10.13 || ^12 || >=14"
+ "node": ">=10.16.0"
}
},
- "node_modules/dependency-tree/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "node_modules/dependency-tree/node_modules/typescript": {
- "version": "3.9.9",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz",
- "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
+ "node_modules/bytes": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
+ "license": "MIT",
"engines": {
- "node": ">=4.2.0"
+ "node": ">= 0.8"
}
},
- "node_modules/destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
- },
- "node_modules/detect-newline": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
- "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
- "dev": true,
+ "node_modules/cacheable-lookup": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz",
+ "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==",
+ "license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">=14.16"
}
},
- "node_modules/detective-amd": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-3.0.1.tgz",
- "integrity": "sha512-vJgluSKkPyo+/McW9hzwmZwY1VPA3BS0VS1agdpPAWAhr65HwC1ox4Ig82rVfGYDYCa4GcKQON5JWBk++2Kf1Q==",
+ "node_modules/cacheable-request": {
+ "version": "10.2.14",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz",
+ "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==",
+ "license": "MIT",
"dependencies": {
- "ast-module-types": "^2.7.0",
- "escodegen": "^1.8.0",
- "get-amd-module-type": "^3.0.0",
- "node-source-walk": "^4.0.0"
- },
- "bin": {
- "detective-amd": "bin/detective-amd.js"
+ "@types/http-cache-semantics": "^4.0.2",
+ "get-stream": "^6.0.1",
+ "http-cache-semantics": "^4.1.1",
+ "keyv": "^4.5.3",
+ "mimic-response": "^4.0.0",
+ "normalize-url": "^8.0.0",
+ "responselike": "^3.0.0"
},
"engines": {
- "node": ">= 6.0"
+ "node": ">=14.16"
}
},
- "node_modules/detective-cjs": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-3.1.1.tgz",
- "integrity": "sha512-JQtNTBgFY6h8uT6pgph5QpV3IyxDv+z3qPk/FZRDT9TlFfm5dnRtpH39WtQEr1khqsUxVqXzKjZHpdoQvQbllg==",
+ "node_modules/call-bind-apply-helpers": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
+ "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
+ "license": "MIT",
"dependencies": {
- "ast-module-types": "^2.4.0",
- "node-source-walk": "^4.0.0"
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2"
},
"engines": {
- "node": ">= 6.0"
+ "node": ">= 0.4"
}
},
- "node_modules/detective-es6": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-2.2.0.tgz",
- "integrity": "sha512-fSpNY0SLER7/sVgQZ1NxJPwmc9uCTzNgdkQDhAaj8NPYwr7Qji9QBcmbNvtMCnuuOGMuKn3O7jv0An+/WRWJZQ==",
+ "node_modules/call-bound": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
+ "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
+ "license": "MIT",
"dependencies": {
- "node-source-walk": "^4.0.0"
+ "call-bind-apply-helpers": "^1.0.2",
+ "get-intrinsic": "^1.3.0"
},
"engines": {
- "node": ">= 6.0"
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/detective-less": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/detective-less/-/detective-less-1.0.2.tgz",
- "integrity": "sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA==",
- "dependencies": {
- "debug": "^4.0.0",
- "gonzales-pe": "^4.2.3",
- "node-source-walk": "^4.0.0"
- },
+ "node_modules/callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">= 6.0"
+ "node": ">=6"
}
},
- "node_modules/detective-postcss": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-4.0.0.tgz",
- "integrity": "sha512-Fwc/g9VcrowODIAeKRWZfVA/EufxYL7XfuqJQFroBKGikKX83d2G7NFw6kDlSYGG3LNQIyVa+eWv1mqre+v4+A==",
- "dependencies": {
- "debug": "^4.1.1",
- "is-url": "^1.2.4",
- "postcss": "^8.1.7",
- "postcss-values-parser": "^2.0.1"
- },
+ "node_modules/camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": "^10 || ^12 || >=14"
+ "node": ">=6"
}
},
- "node_modules/detective-sass": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-3.0.1.tgz",
- "integrity": "sha512-oSbrBozRjJ+QFF4WJFbjPQKeakoaY1GiR380NPqwdbWYd5wfl5cLWv0l6LsJVqrgWfFN1bjFqSeo32Nxza8Lbw==",
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001718",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001718.tgz",
+ "integrity": "sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "CC-BY-4.0"
+ },
+ "node_modules/caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "license": "MIT",
"dependencies": {
- "debug": "^4.1.1",
- "gonzales-pe": "^4.2.3",
- "node-source-walk": "^4.0.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
},
"engines": {
- "node": ">= 6.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/detective-scss": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-2.0.1.tgz",
- "integrity": "sha512-VveyXW4WQE04s05KlJ8K0bG34jtHQVgTc9InspqoQxvnelj/rdgSAy7i2DXAazyQNFKlWSWbS+Ro2DWKFOKTPQ==",
- "dependencies": {
- "debug": "^4.1.1",
- "gonzales-pe": "^4.2.3",
- "node-source-walk": "^4.0.0"
- },
+ "node_modules/char-regex": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
+ "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">= 6.0"
+ "node": ">=10"
}
},
- "node_modules/detective-stylus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-1.0.0.tgz",
- "integrity": "sha1-UK7n24uruZA4HwEMY/q7pbWOVM0="
- },
- "node_modules/detective-typescript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-6.0.0.tgz",
- "integrity": "sha512-vTidcSDK3QostdbrH2Rwf9FhvrgJ4oIaVw5jbolgruTejexk6nNa9DShGpuS8CFVDb1IP86jct5BaZt1wSxpkA==",
- "dependencies": {
- "@typescript-eslint/typescript-estree": "^4.8.2",
- "ast-module-types": "^2.7.1",
- "node-source-walk": "^4.2.0",
- "typescript": "^3.9.7"
- },
+ "node_modules/chownr": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
+ "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
+ "license": "BlueOak-1.0.0",
"engines": {
- "node": "^10.13 || >=12.0.0"
+ "node": ">=18"
}
},
- "node_modules/detective-typescript/node_modules/typescript": {
- "version": "3.9.9",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz",
- "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
+ "node_modules/ci-info": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
+ "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
+ "license": "MIT",
"engines": {
- "node": ">=4.2.0"
+ "node": ">=8"
}
},
- "node_modules/dicer": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz",
- "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=",
+ "node_modules/cjs-module-lexer": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz",
+ "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/cli-cursor": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
+ "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "readable-stream": "1.1.x",
- "streamsearch": "0.1.2"
+ "restore-cursor": "^3.1.0"
},
"engines": {
- "node": ">=0.8.0"
+ "node": ">=8"
}
},
- "node_modules/dicer/node_modules/readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
+ "node_modules/cli-spinners": {
+ "version": "2.9.2",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
+ "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/dicer/node_modules/string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
- },
- "node_modules/diff": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "node_modules/cliui": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
+ "license": "ISC",
+ "dependencies": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.1",
+ "wrap-ansi": "^7.0.0"
+ },
"engines": {
- "node": ">=0.3.1"
+ "node": ">=12"
}
},
- "node_modules/diff-sequences": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz",
- "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==",
+ "node_modules/clone": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
+ "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">= 10.14.2"
+ "node": ">=0.8"
}
},
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "node_modules/clone-regexp": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-3.0.0.tgz",
+ "integrity": "sha512-ujdnoq2Kxb8s3ItNBtnYeXdm07FcU0u8ARAT1lQ2YdMwQC+cdiXX8KoqMVuglztILivceTtp4ivqGSmEmhBUJw==",
+ "license": "MIT",
"dependencies": {
- "path-type": "^4.0.0"
+ "is-regexp": "^3.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/dns-packet": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.2.1.tgz",
- "integrity": "sha512-JHj2yJeKOqlxzeuYpN1d56GfhzivAxavNwHj9co3qptECel27B1rLY5PifJAvubsInX5pGLDjAHuCfCUc2Zv/w==",
- "dependencies": {
- "ip": "^1.1.5"
- },
+ "node_modules/clone-regexp/node_modules/is-regexp": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-3.1.0.tgz",
+ "integrity": "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==",
+ "license": "MIT",
"engines": {
- "node": ">=6"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/dns-socket": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/dns-socket/-/dns-socket-4.2.1.tgz",
- "integrity": "sha512-fNvDq86lS522+zMbh31X8cQzYQd6xumCNlxsuZF5TKxQThF/e+rJbVM6K8mmlsdcSm6yNjKJQq3Sf38viAJj8g==",
- "dependencies": {
- "dns-packet": "^5.1.2"
- },
+ "node_modules/co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=6"
+ "iojs": ">= 1.0.0",
+ "node": ">= 0.12.0"
}
},
- "node_modules/docker-modem": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-2.1.4.tgz",
- "integrity": "sha512-vDTzZjjO1sXMY7m0xKjGdFMMZL7vIUerkC3G4l6rnrpOET2M6AOufM8ajmQoOB+6RfSn6I/dlikCUq/Y91Q1sQ==",
+ "node_modules/collect-v8-coverage": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
+ "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "license": "MIT",
"dependencies": {
- "debug": "^4.1.1",
- "readable-stream": "^3.5.0",
- "split-ca": "^1.0.1",
- "ssh2": "^0.8.7"
+ "color-name": "~1.1.4"
},
"engines": {
- "node": ">= 8.0"
+ "node": ">=7.0.0"
}
},
- "node_modules/dockerode": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.2.1.tgz",
- "integrity": "sha512-XsSVB5Wu5HWMg1aelV5hFSqFJaKS5x1aiV/+sT7YOzOq1IRl49I/UwV8Pe4x6t0iF9kiGkWu5jwfvbkcFVupBw==",
+ "node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "license": "MIT"
+ },
+ "node_modules/combined-stream": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+ "license": "MIT",
"dependencies": {
- "docker-modem": "^2.1.0",
- "tar-fs": "~2.0.1"
+ "delayed-stream": "~1.0.0"
},
"engines": {
- "node": ">= 8.0"
+ "node": ">= 0.8"
}
},
- "node_modules/domexception": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
- "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
+ "node_modules/commander": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
+ "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
"dev": true,
- "dependencies": {
- "webidl-conversions": "^5.0.0"
- },
+ "license": "MIT",
"engines": {
- "node": ">=8"
+ "node": ">= 10"
}
},
- "node_modules/domexception/node_modules/webidl-conversions": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
- "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
+ "node_modules/commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
"dev": true,
- "engines": {
- "node": ">=8"
+ "license": "MIT"
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "license": "MIT"
+ },
+ "node_modules/concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "engines": [
+ "node >= 0.8"
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
}
},
- "node_modules/dot-prop": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
- "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
+ "node_modules/concat-stream/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "license": "MIT",
"dependencies": {
- "is-obj": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
}
},
- "node_modules/duplexer3": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
- "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
+ "node_modules/concat-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "license": "MIT"
},
- "node_modules/ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
+ "node_modules/concat-stream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "license": "MIT",
"dependencies": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
+ "safe-buffer": "~5.1.0"
}
},
- "node_modules/ecdsa-sig-formatter": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
- "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+ "node_modules/configstore": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
+ "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
+ "license": "BSD-2-Clause",
"dependencies": {
- "safe-buffer": "^5.0.1"
+ "dot-prop": "^5.2.0",
+ "graceful-fs": "^4.1.2",
+ "make-dir": "^3.0.0",
+ "unique-string": "^2.0.0",
+ "write-file-atomic": "^3.0.0",
+ "xdg-basedir": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
- },
- "node_modules/ejs": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz",
- "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==",
+ "node_modules/content-disposition": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz",
+ "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==",
+ "license": "MIT",
"dependencies": {
- "jake": "^10.6.1"
- },
- "bin": {
- "ejs": "bin/cli.js"
+ "safe-buffer": "5.2.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.6"
}
},
- "node_modules/emittery": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz",
- "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==",
- "dev": true,
+ "node_modules/content-type": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
+ "license": "MIT",
"engines": {
- "node": ">=10"
+ "node": ">= 0.6"
}
},
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
+ "node_modules/convert-hrtime": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-5.0.0.tgz",
+ "integrity": "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==",
+ "license": "MIT",
"engines": {
- "node": ">= 0.8"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dependencies": {
- "once": "^1.4.0"
- }
+ "node_modules/convert-source-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
+ "dev": true,
+ "license": "MIT"
},
- "node_modules/enhanced-resolve": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz",
- "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==",
- "dependencies": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
- },
+ "node_modules/cookie": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
+ "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
+ "license": "MIT",
"engines": {
- "node": ">=10.13.0"
+ "node": ">= 0.6"
}
},
- "node_modules/error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
+ "node_modules/cookie-parser": {
+ "version": "1.4.7",
+ "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.7.tgz",
+ "integrity": "sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==",
+ "license": "MIT",
"dependencies": {
- "is-arrayish": "^0.2.1"
+ "cookie": "0.7.2",
+ "cookie-signature": "1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "node_modules/escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
+ "node_modules/cookie-signature": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
+ "license": "MIT"
},
- "node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "node_modules/core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==",
+ "license": "MIT"
+ },
+ "node_modules/cpu-features": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.10.tgz",
+ "integrity": "sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==",
+ "hasInstallScript": true,
+ "optional": true,
+ "dependencies": {
+ "buildcheck": "~0.0.6",
+ "nan": "^2.19.0"
+ },
"engines": {
- "node": ">=0.8.0"
+ "node": ">=10.0.0"
}
},
- "node_modules/escodegen": {
- "version": "1.14.3",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
- "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
+ "node_modules/create-jest": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz",
+ "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "esprima": "^4.0.1",
- "estraverse": "^4.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1",
- "source-map": "~0.6.1"
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "exit": "^0.1.2",
+ "graceful-fs": "^4.2.9",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "prompts": "^2.0.1"
},
"bin": {
- "escodegen": "bin/escodegen.js",
- "esgenerate": "bin/esgenerate.js"
+ "create-jest": "bin/create-jest.js"
},
"engines": {
- "node": ">=4.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "node_modules/eslint-visitor-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
- "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
+ "node_modules/cron": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/cron/-/cron-4.3.0.tgz",
+ "integrity": "sha512-ciiYNLfSlF9MrDqnbMdRWFiA6oizSF7kA1osPP9lRzNu0Uu+AWog1UKy7SkckiDY2irrNjeO6qLyKnXC8oxmrw==",
+ "license": "MIT",
+ "dependencies": {
+ "@types/luxon": "~3.6.0",
+ "luxon": "~3.6.0"
+ },
"engines": {
- "node": ">=10"
+ "node": ">=18.x"
}
},
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
+ "node_modules/cross-spawn": {
+ "version": "7.0.6",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
+ "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
},
"engines": {
- "node": ">=4"
+ "node": ">= 8"
}
},
- "node_modules/estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "node_modules/crypto-random-string": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
+ "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
+ "license": "MIT",
"engines": {
- "node": ">=4.0"
+ "node": ">=8"
}
},
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "node_modules/dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "license": "MIT",
+ "dependencies": {
+ "assert-plus": "^1.0.0"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=0.10"
}
},
- "node_modules/etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
+ "node_modules/debug": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
+ "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.3"
+ },
"engines": {
- "node": ">= 0.6"
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
}
},
- "node_modules/eventemitter3": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
- "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
- },
- "node_modules/exec-sh": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz",
- "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==",
- "dev": true
- },
- "node_modules/execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "dev": true,
+ "node_modules/decompress-response": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+ "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+ "license": "MIT",
"dependencies": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
+ "mimic-response": "^3.1.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/exit": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
- "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
- "dev": true,
+ "node_modules/decompress-response/node_modules/mimic-response": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+ "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+ "license": "MIT",
"engines": {
- "node": ">= 0.8.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "node_modules/dedent": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz",
+ "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==",
"dev": true,
- "dependencies": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
+ "license": "MIT",
+ "peerDependencies": {
+ "babel-plugin-macros": "^3.1.0"
},
- "engines": {
- "node": ">=0.10.0"
+ "peerDependenciesMeta": {
+ "babel-plugin-macros": {
+ "optional": true
+ }
}
},
- "node_modules/expand-brackets/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
"dev": true,
- "dependencies": {
- "ms": "2.0.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0.0"
}
},
- "node_modules/expand-brackets/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "node_modules/deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
"dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/expand-brackets/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "node_modules/defaults": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
+ "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-extendable": "^0.1.0"
+ "clone": "^1.0.2"
},
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/defer-to-connect": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
+ "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
+ "license": "MIT",
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10"
}
},
- "node_modules/expect": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz",
- "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^26.6.2",
- "ansi-styles": "^4.0.0",
- "jest-get-type": "^26.3.0",
- "jest-matcher-utils": "^26.6.2",
- "jest-message-util": "^26.6.2",
- "jest-regex-util": "^26.0.0"
- },
+ "node_modules/delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+ "license": "MIT",
"engines": {
- "node": ">= 10.14.2"
+ "node": ">=0.4.0"
}
},
- "node_modules/express": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
- "dependencies": {
- "accepts": "~1.3.7",
- "array-flatten": "1.1.1",
- "body-parser": "1.19.0",
- "content-disposition": "0.5.3",
- "content-type": "~1.0.4",
- "cookie": "0.4.0",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "~1.1.2",
- "fresh": "0.5.2",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.5",
- "qs": "6.7.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.1.2",
- "send": "0.17.1",
- "serve-static": "1.14.1",
- "setprototypeof": "1.1.1",
- "statuses": "~1.5.0",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
+ "node_modules/depd": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
+ "license": "MIT",
"engines": {
- "node": ">= 0.10.0"
+ "node": ">= 0.8"
}
},
- "node_modules/express/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "node_modules/dependency-tree": {
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-11.1.1.tgz",
+ "integrity": "sha512-pnkCd8VGOq70EVaEQxDC9mZCjCwYj4yG4j8h+PEJswuWp+rdE6p8zbtVvWk+yPwaVimOjlhNi782U9K5KOU9MQ==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "ms": "2.0.0"
+ "commander": "^12.1.0",
+ "filing-cabinet": "^5.0.3",
+ "precinct": "^12.2.0",
+ "typescript": "^5.7.3"
+ },
+ "bin": {
+ "dependency-tree": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=18"
}
},
- "node_modules/express/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "node_modules/dependency-tree/node_modules/commander": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
},
- "node_modules/extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+ "node_modules/detect-newline": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
+ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
},
- "node_modules/extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "node_modules/detective-amd": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-6.0.1.tgz",
+ "integrity": "sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
+ "ast-module-types": "^6.0.1",
+ "escodegen": "^2.1.0",
+ "get-amd-module-type": "^6.0.1",
+ "node-source-walk": "^7.0.1"
+ },
+ "bin": {
+ "detective-amd": "bin/cli.js"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=18"
}
},
- "node_modules/extend-shallow/node_modules/is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "node_modules/detective-cjs": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-6.0.1.tgz",
+ "integrity": "sha512-tLTQsWvd2WMcmn/60T2inEJNhJoi7a//PQ7DwRKEj1yEeiQs4mrONgsUtEJKnZmrGWBBmE0kJ1vqOG/NAxwaJw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-plain-object": "^2.0.4"
+ "ast-module-types": "^6.0.1",
+ "node-source-walk": "^7.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=18"
}
},
- "node_modules/extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "node_modules/detective-es6": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-5.0.1.tgz",
+ "integrity": "sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
+ "node-source-walk": "^7.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=18"
}
},
- "node_modules/extglob/node_modules/define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "node_modules/detective-postcss": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-7.0.1.tgz",
+ "integrity": "sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-descriptor": "^1.0.0"
+ "is-url": "^1.2.4",
+ "postcss-values-parser": "^6.0.2"
},
"engines": {
- "node": ">=0.10.0"
+ "node": "^14.0.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.4.47"
}
},
- "node_modules/extglob/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "node_modules/detective-sass": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-6.0.1.tgz",
+ "integrity": "sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-extendable": "^0.1.0"
+ "gonzales-pe": "^4.3.0",
+ "node-source-walk": "^7.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=18"
}
},
- "node_modules/extglob/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "node_modules/detective-scss": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-5.0.1.tgz",
+ "integrity": "sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "kind-of": "^6.0.0"
+ "gonzales-pe": "^4.3.0",
+ "node-source-walk": "^7.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=18"
}
},
- "node_modules/extglob/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "node_modules/detective-stylus": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-5.0.1.tgz",
+ "integrity": "sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==",
"dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
+ "license": "MIT",
"engines": {
- "node": ">=0.10.0"
+ "node": ">=18"
}
},
- "node_modules/extglob/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "node_modules/detective-typescript": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-14.0.0.tgz",
+ "integrity": "sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "@typescript-eslint/typescript-estree": "^8.23.0",
+ "ast-module-types": "^6.0.1",
+ "node-source-walk": "^7.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "typescript": "^5.4.4"
}
},
- "node_modules/extsprintf": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
- "engines": [
- "node >=0.6.0"
- ]
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
- },
- "node_modules/fast-glob": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz",
- "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==",
+ "node_modules/detective-vue2": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/detective-vue2/-/detective-vue2-2.2.0.tgz",
+ "integrity": "sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.0",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.2",
- "picomatch": "^2.2.1"
+ "@dependents/detective-less": "^5.0.1",
+ "@vue/compiler-sfc": "^3.5.13",
+ "detective-es6": "^5.0.1",
+ "detective-sass": "^6.0.1",
+ "detective-scss": "^5.0.1",
+ "detective-stylus": "^5.0.1",
+ "detective-typescript": "^14.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "typescript": "^5.4.4"
}
},
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+ "node_modules/diff-sequences": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
+ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
},
- "node_modules/fastq": {
- "version": "1.10.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.1.tgz",
- "integrity": "sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA==",
+ "node_modules/dns-packet": {
+ "version": "5.6.1",
+ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz",
+ "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==",
+ "license": "MIT",
"dependencies": {
- "reusify": "^1.0.4"
+ "@leichtgewicht/ip-codec": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "node_modules/fb-watchman": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
- "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
- "dev": true,
+ "node_modules/dns-socket": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/dns-socket/-/dns-socket-4.2.2.tgz",
+ "integrity": "sha512-BDeBd8najI4/lS00HSKpdFia+OvUMytaVjfzR9n5Lq8MlZRSvtbI+uLtx1+XmQFls5wFU9dssccTmQQ6nfpjdg==",
+ "license": "MIT",
"dependencies": {
- "bser": "2.1.1"
+ "dns-packet": "^5.2.4"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "node_modules/filelist": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz",
- "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==",
+ "node_modules/docker-modem": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-5.0.6.tgz",
+ "integrity": "sha512-ens7BiayssQz/uAxGzH8zGXCtiV24rRWXdjNha5V4zSOcxmAZsfGVm/PPFbwQdqEkDnhG+SyR9E3zSHUbOKXBQ==",
+ "license": "Apache-2.0",
"dependencies": {
- "minimatch": "^3.0.4"
+ "debug": "^4.1.1",
+ "readable-stream": "^3.5.0",
+ "split-ca": "^1.0.1",
+ "ssh2": "^1.15.0"
+ },
+ "engines": {
+ "node": ">= 8.0"
}
},
- "node_modules/filing-cabinet": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-3.0.0.tgz",
- "integrity": "sha512-o8Qac5qxZ1uVidR4Sd7ZQbbqObFZlqXU4xu1suAYg9PQPcQFNTzOmxQa/MehIDMgIvXHTb42mWPNV9l3eHBPSw==",
+ "node_modules/dockerode": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-4.0.6.tgz",
+ "integrity": "sha512-FbVf3Z8fY/kALB9s+P9epCpWhfi/r0N2DgYYcYpsAUlaTxPjdsitsFobnltb+lyCgAIvf9C+4PSWlTnHlJMf1w==",
+ "license": "Apache-2.0",
"dependencies": {
- "app-module-path": "^2.2.0",
- "commander": "^2.20.3",
- "debug": "^4.3.1",
- "decomment": "^0.9.3",
- "enhanced-resolve": "^5.3.2",
- "is-relative-path": "^1.0.2",
- "module-definition": "^3.3.1",
- "module-lookup-amd": "^7.0.0",
- "resolve": "^1.19.0",
- "resolve-dependency-path": "^2.0.0",
- "sass-lookup": "^3.0.0",
- "stylus-lookup": "^3.0.1",
- "typescript": "^3.9.7"
- },
- "bin": {
- "filing-cabinet": "bin/cli.js"
+ "@balena/dockerignore": "^1.0.2",
+ "@grpc/grpc-js": "^1.11.1",
+ "@grpc/proto-loader": "^0.7.13",
+ "docker-modem": "^5.0.6",
+ "protobufjs": "^7.3.2",
+ "tar-fs": "~2.1.2",
+ "uuid": "^10.0.0"
},
"engines": {
- "node": ">=10.13.0"
+ "node": ">= 8.0"
}
},
- "node_modules/filing-cabinet/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "node_modules/filing-cabinet/node_modules/typescript": {
- "version": "3.9.9",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz",
- "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==",
+ "node_modules/dockerode/node_modules/uuid": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz",
+ "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
"bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=4.2.0"
+ "uuid": "dist/bin/uuid"
}
},
- "node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "node_modules/dot-prop": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
+ "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
+ "license": "MIT",
"dependencies": {
- "to-regex-range": "^5.0.1"
+ "is-obj": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
- "node_modules/finalhandler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
+ "node_modules/dunder-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
+ "license": "MIT",
"dependencies": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "statuses": "~1.5.0",
- "unpipe": "~1.0.0"
+ "call-bind-apply-helpers": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.2.0"
},
"engines": {
- "node": ">= 0.8"
+ "node": ">= 0.4"
}
},
- "node_modules/finalhandler/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "node_modules/ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "license": "MIT",
"dependencies": {
- "ms": "2.0.0"
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
}
},
- "node_modules/find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
+ "node_modules/ecdsa-sig-formatter": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+ "license": "Apache-2.0",
"dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/flatten": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz",
- "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg=="
- },
- "node_modules/follow-redirects": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.2.tgz",
- "integrity": "sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA==",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "safe-buffer": "^5.0.1"
}
},
- "node_modules/forever-agent": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
- "engines": {
- "node": "*"
- }
+ "node_modules/ee-first": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
+ "license": "MIT"
},
- "node_modules/form-data": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
- "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "node_modules/ejs": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
+ "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==",
+ "license": "Apache-2.0",
"dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
+ "jake": "^10.8.5"
},
- "engines": {
- "node": ">= 0.12"
- }
- },
- "node_modules/forwarded": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
- "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
- "dev": true,
- "dependencies": {
- "map-cache": "^0.2.2"
+ "bin": {
+ "ejs": "bin/cli.js"
},
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fs-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
+ "node_modules/electron-to-chromium": {
+ "version": "1.5.158",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.158.tgz",
+ "integrity": "sha512-9vcp2xHhkvraY6AHw2WMi+GDSLPX42qe2xjYaVoZqFRJiOcilVQFq9mZmpuHEQpzlgGDelKlV7ZiGcmMsc8WxQ==",
+ "dev": true,
+ "license": "ISC"
},
- "node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "dependencies": {
- "at-least-node": "^1.0.0",
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
+ "node_modules/emittery": {
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
+ "dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=10"
- }
- },
- "node_modules/fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
- "dependencies": {
- "minipass": "^3.0.0"
+ "node": ">=12"
},
- "engines": {
- "node": ">= 8"
+ "funding": {
+ "url": "https://github.com/sindresorhus/emittery?sponsor=1"
}
},
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ "node_modules/emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "license": "MIT"
},
- "node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ],
+ "node_modules/encodeurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
+ "license": "MIT",
"engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ "node": ">= 0.8"
}
},
- "node_modules/function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
- },
- "node_modules/gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
+ "node_modules/end-of-stream": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
+ "license": "MIT",
+ "dependencies": {
+ "once": "^1.4.0"
}
},
- "node_modules/get-amd-module-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-3.0.0.tgz",
- "integrity": "sha512-99Q7COuACPfVt18zH9N4VAMyb81S6TUgJm2NgV6ERtkh9VIkAaByZkW530wl3lLN5KTtSrK9jVLxYsoP5hQKsw==",
+ "node_modules/enhanced-resolve": {
+ "version": "5.18.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz",
+ "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "ast-module-types": "^2.3.2",
- "node-source-walk": "^4.0.0"
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
},
"engines": {
- "node": ">=6.0"
+ "node": ">=10.13.0"
}
},
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true,
+ "license": "BSD-2-Clause",
"engines": {
- "node": "6.* || 8.* || >= 10.*"
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
}
},
- "node_modules/get-own-enumerable-property-symbols": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
- "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g=="
- },
- "node_modules/get-package-type": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
- "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true,
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "license": "MIT",
"dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
+ "is-arrayish": "^0.2.1"
}
},
- "node_modules/get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
- "dev": true,
+ "node_modules/es-define-property": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
+ "license": "MIT",
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
- "node_modules/getpass": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "dependencies": {
- "assert-plus": "^1.0.0"
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
}
},
- "node_modules/glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "node_modules/es-object-atoms": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
+ "license": "MIT",
"dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
+ "es-errors": "^1.3.0"
},
"engines": {
- "node": "*"
+ "node": ">= 0.4"
}
},
- "node_modules/glob-parent": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
- "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+ "node_modules/es-set-tostringtag": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
+ "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
+ "license": "MIT",
"dependencies": {
- "is-glob": "^4.0.1"
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.6",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.2"
},
"engines": {
- "node": ">= 6"
+ "node": ">= 0.4"
}
},
- "node_modules/glob-parent/node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+ "node_modules/escalade": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
+ "license": "MIT",
"engines": {
- "node": ">=0.10.0"
+ "node": ">=6"
}
},
- "node_modules/glob-parent/node_modules/is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
+ "node_modules/escape-html": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
+ "license": "MIT"
},
- "node_modules/globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "node_modules/escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
"dev": true,
+ "license": "MIT",
"engines": {
- "node": ">=4"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/globby": {
- "version": "11.0.2",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz",
- "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==",
+ "node_modules/escodegen": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz",
+ "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==",
+ "dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.1.1",
- "ignore": "^5.1.4",
- "merge2": "^1.3.0",
- "slash": "^3.0.0"
+ "esprima": "^4.0.1",
+ "estraverse": "^5.2.0",
+ "esutils": "^2.0.2"
+ },
+ "bin": {
+ "escodegen": "bin/escodegen.js",
+ "esgenerate": "bin/esgenerate.js"
},
"engines": {
- "node": ">=10"
+ "node": ">=6.0"
+ },
+ "optionalDependencies": {
+ "source-map": "~0.6.1"
}
},
- "node_modules/gonzales-pe": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz",
- "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==",
- "dependencies": {
- "minimist": "^1.2.5"
+ "node_modules/eslint": {
+ "version": "9.27.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.27.0.tgz",
+ "integrity": "sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.2.0",
+ "@eslint-community/regexpp": "^4.12.1",
+ "@eslint/config-array": "^0.20.0",
+ "@eslint/config-helpers": "^0.2.1",
+ "@eslint/core": "^0.14.0",
+ "@eslint/eslintrc": "^3.3.1",
+ "@eslint/js": "9.27.0",
+ "@eslint/plugin-kit": "^0.3.1",
+ "@humanfs/node": "^0.16.6",
+ "@humanwhocodes/module-importer": "^1.0.1",
+ "@humanwhocodes/retry": "^0.4.2",
+ "@types/estree": "^1.0.6",
+ "@types/json-schema": "^7.0.15",
+ "ajv": "^6.12.4",
+ "chalk": "^4.0.0",
+ "cross-spawn": "^7.0.6",
+ "debug": "^4.3.2",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^8.3.0",
+ "eslint-visitor-keys": "^4.2.0",
+ "espree": "^10.3.0",
+ "esquery": "^1.5.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^8.0.0",
+ "find-up": "^5.0.0",
+ "glob-parent": "^6.0.2",
+ "ignore": "^5.2.0",
+ "imurmurhash": "^0.1.4",
+ "is-glob": "^4.0.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "lodash.merge": "^4.6.2",
+ "minimatch": "^3.1.2",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.9.3"
},
"bin": {
- "gonzales": "bin/gonzales.js"
+ "eslint": "bin/eslint.js"
},
"engines": {
- "node": ">=0.6.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://eslint.org/donate"
+ },
+ "peerDependencies": {
+ "jiti": "*"
+ },
+ "peerDependenciesMeta": {
+ "jiti": {
+ "optional": true
+ }
}
},
- "node_modules/got": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
- "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
- "dependencies": {
- "@sindresorhus/is": "^0.14.0",
- "@szmarczak/http-timer": "^1.1.2",
- "cacheable-request": "^6.0.0",
- "decompress-response": "^3.3.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^4.1.0",
- "lowercase-keys": "^1.0.1",
- "mimic-response": "^1.0.1",
- "p-cancelable": "^1.0.0",
- "to-readable-stream": "^1.0.0",
- "url-parse-lax": "^3.0.0"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.6",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
- "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ=="
- },
- "node_modules/graphviz": {
- "version": "0.0.9",
- "resolved": "https://registry.npmjs.org/graphviz/-/graphviz-0.0.9.tgz",
- "integrity": "sha512-SmoY2pOtcikmMCqCSy2NO1YsRfu9OO0wpTlOYW++giGjfX1a6gax/m1Fo8IdUd0/3H15cTOfR1SMKwohj4LKsg==",
- "dependencies": {
- "temp": "~0.4.0"
- },
- "engines": {
- "node": ">=0.6.8"
- }
- },
- "node_modules/growly": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
- "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
- "dev": true,
- "optional": true
- },
- "node_modules/har-schema": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/har-validator": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
- "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "dependencies": {
- "ajv": "^6.12.3",
- "har-schema": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
- "dev": true,
- "dependencies": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
- "dev": true,
- "dependencies": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-values/node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-values/node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-values/node_modules/kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/hosted-git-info": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
- "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
- "dev": true
- },
- "node_modules/html-encoding-sniffer": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
- "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
- "dev": true,
- "dependencies": {
- "whatwg-encoding": "^1.0.5"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/html-escaper": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
- "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true
- },
- "node_modules/http-cache-semantics": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
- },
- "node_modules/http-errors": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
- "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
- "dependencies": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/http-proxy": {
- "version": "1.18.1",
- "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
- "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
- "dependencies": {
- "eventemitter3": "^4.0.0",
- "follow-redirects": "^1.0.0",
- "requires-port": "^1.0.0"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/http-signature": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "dependencies": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- },
- "engines": {
- "node": ">=0.8",
- "npm": ">=1.3.7"
- }
- },
- "node_modules/human-signals": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
- "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
- "dev": true,
- "engines": {
- "node": ">=8.12.0"
- }
- },
- "node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
- },
- "node_modules/ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/import-local": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
- "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
- "dev": true,
- "dependencies": {
- "pkg-dir": "^4.2.0",
- "resolve-cwd": "^3.0.0"
- },
- "bin": {
- "import-local-fixture": "fixtures/cli.js"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/indexes-of": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
- "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc="
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
- },
- "node_modules/ini": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
- },
- "node_modules/ip": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
- "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
- },
- "node_modules/ip-regex": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz",
- "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ipaddr.js": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-accessor-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
- },
- "node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/is-ci": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
- "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
- "dev": true,
- "dependencies": {
- "ci-info": "^2.0.0"
- },
- "bin": {
- "is-ci": "bin.js"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
- "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
- "dependencies": {
- "has": "^1.0.3"
- }
- },
- "node_modules/is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-data-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "node_modules/eslint-scope": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
+ "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
- "is-buffer": "^1.1.5"
+ "esrecurse": "^4.3.0",
+ "estraverse": "^5.2.0"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-descriptor/node_modules/kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-docker": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
- "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==",
- "dev": true,
- "optional": true,
- "bin": {
- "is-docker": "cli.js"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-generator-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
- "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "dependencies": {
- "is-extglob": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-interactive": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
- "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-invalid-path": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz",
- "integrity": "sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ=",
- "dependencies": {
- "is-glob": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-ip": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz",
- "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==",
- "dependencies": {
- "ip-regex": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-obj": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
- "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-potential-custom-element-name": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz",
- "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=",
- "dev": true
- },
- "node_modules/is-regexp": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
- "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-relative-path": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-relative-path/-/is-relative-path-1.0.2.tgz",
- "integrity": "sha1-CRtGoNZ8HtD+hfH4z93gBrslHUY="
- },
- "node_modules/is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-typedarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
- },
- "node_modules/is-url": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
- "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="
- },
- "node_modules/is-valid-path": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz",
- "integrity": "sha1-EQ+f90w39mPh7HkV60UfLbk6yd8=",
- "dependencies": {
- "is-invalid-path": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "is-docker": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "node_modules/isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/isstream": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
- },
- "node_modules/istanbul-lib-coverage": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
- "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-instrument": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
- "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.7.5",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.0.0",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
- "dev": true,
- "dependencies": {
- "istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-lib-source-maps": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
- "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
- "dev": true,
- "dependencies": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^3.0.0",
- "source-map": "^0.6.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/istanbul-reports": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
- "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
- "dev": true,
- "dependencies": {
- "html-escaper": "^2.0.0",
- "istanbul-lib-report": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jake": {
- "version": "10.8.2",
- "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz",
- "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==",
- "dependencies": {
- "async": "0.9.x",
- "chalk": "^2.4.2",
- "filelist": "^1.0.1",
- "minimatch": "^3.0.4"
- },
- "bin": {
- "jake": "bin/cli.js"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/jake/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/jake/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/jake/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/jake/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "node_modules/jake/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/jake/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/jest": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz",
- "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==",
- "dev": true,
- "dependencies": {
- "@jest/core": "^26.6.3",
- "import-local": "^3.0.2",
- "jest-cli": "^26.6.3"
- },
- "bin": {
- "jest": "bin/jest.js"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-changed-files": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz",
- "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^26.6.2",
- "execa": "^4.0.0",
- "throat": "^5.0.0"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-changed-files/node_modules/cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/jest-changed-files/node_modules/execa": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
- "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^7.0.0",
- "get-stream": "^5.0.0",
- "human-signals": "^1.1.1",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.0",
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2",
- "strip-final-newline": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/jest-changed-files/node_modules/get-stream": {
- "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"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-changed-files/node_modules/is-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
- "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-changed-files/node_modules/npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "dependencies": {
- "path-key": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-changed-files/node_modules/path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-changed-files/node_modules/shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-changed-files/node_modules/shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/jest-changed-files/node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/jest-config": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz",
- "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^26.6.3",
- "@jest/types": "^26.6.2",
- "babel-jest": "^26.6.3",
- "chalk": "^4.0.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.1",
- "graceful-fs": "^4.2.4",
- "jest-environment-jsdom": "^26.6.2",
- "jest-environment-node": "^26.6.2",
- "jest-get-type": "^26.3.0",
- "jest-jasmine2": "^26.6.3",
- "jest-regex-util": "^26.0.0",
- "jest-resolve": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-validate": "^26.6.2",
- "micromatch": "^4.0.2",
- "pretty-format": "^26.6.2"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-diff": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz",
- "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==",
- "dependencies": {
- "chalk": "^4.0.0",
- "diff-sequences": "^26.6.2",
- "jest-get-type": "^26.3.0",
- "pretty-format": "^26.6.2"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-docblock": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz",
- "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==",
- "dev": true,
- "dependencies": {
- "detect-newline": "^3.0.0"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-each": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz",
- "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^26.6.2",
- "chalk": "^4.0.0",
- "jest-get-type": "^26.3.0",
- "jest-util": "^26.6.2",
- "pretty-format": "^26.6.2"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-environment-jsdom": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz",
- "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==",
- "dev": true,
- "dependencies": {
- "@jest/environment": "^26.6.2",
- "@jest/fake-timers": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "jest-mock": "^26.6.2",
- "jest-util": "^26.6.2",
- "jsdom": "^16.4.0"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-environment-node": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz",
- "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==",
- "dev": true,
- "dependencies": {
- "@jest/environment": "^26.6.2",
- "@jest/fake-timers": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "jest-mock": "^26.6.2",
- "jest-util": "^26.6.2"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-get-type": {
- "version": "26.3.0",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz",
- "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==",
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-haste-map": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz",
- "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^26.6.2",
- "@types/graceful-fs": "^4.1.2",
- "@types/node": "*",
- "anymatch": "^3.0.3",
- "fb-watchman": "^2.0.0",
- "graceful-fs": "^4.2.4",
- "jest-regex-util": "^26.0.0",
- "jest-serializer": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-worker": "^26.6.2",
- "micromatch": "^4.0.2",
- "sane": "^4.0.3",
- "walker": "^1.0.7"
- },
- "engines": {
- "node": ">= 10.14.2"
- },
- "optionalDependencies": {
- "fsevents": "^2.1.2"
- }
- },
- "node_modules/jest-jasmine2": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz",
- "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==",
- "dev": true,
- "dependencies": {
- "@babel/traverse": "^7.1.0",
- "@jest/environment": "^26.6.2",
- "@jest/source-map": "^26.6.2",
- "@jest/test-result": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "expect": "^26.6.2",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^26.6.2",
- "jest-matcher-utils": "^26.6.2",
- "jest-message-util": "^26.6.2",
- "jest-runtime": "^26.6.3",
- "jest-snapshot": "^26.6.2",
- "jest-util": "^26.6.2",
- "pretty-format": "^26.6.2",
- "throat": "^5.0.0"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-leak-detector": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz",
- "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==",
- "dev": true,
- "dependencies": {
- "jest-get-type": "^26.3.0",
- "pretty-format": "^26.6.2"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-matcher-utils": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz",
- "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==",
- "dev": true,
- "dependencies": {
- "chalk": "^4.0.0",
- "jest-diff": "^26.6.2",
- "jest-get-type": "^26.3.0",
- "pretty-format": "^26.6.2"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-message-util": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz",
- "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "@jest/types": "^26.6.2",
- "@types/stack-utils": "^2.0.0",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "micromatch": "^4.0.2",
- "pretty-format": "^26.6.2",
- "slash": "^3.0.0",
- "stack-utils": "^2.0.2"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-mock": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz",
- "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^26.6.2",
- "@types/node": "*"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-pnp-resolver": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
- "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jest-regex-util": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz",
- "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==",
- "dev": true,
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-resolve": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz",
- "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^26.6.2",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "jest-pnp-resolver": "^1.2.2",
- "jest-util": "^26.6.2",
- "read-pkg-up": "^7.0.1",
- "resolve": "^1.18.1",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-resolve-dependencies": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz",
- "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^26.6.2",
- "jest-regex-util": "^26.0.0",
- "jest-snapshot": "^26.6.2"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-runner": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz",
- "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==",
- "dev": true,
- "dependencies": {
- "@jest/console": "^26.6.2",
- "@jest/environment": "^26.6.2",
- "@jest/test-result": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "emittery": "^0.7.1",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-config": "^26.6.3",
- "jest-docblock": "^26.0.0",
- "jest-haste-map": "^26.6.2",
- "jest-leak-detector": "^26.6.2",
- "jest-message-util": "^26.6.2",
- "jest-resolve": "^26.6.2",
- "jest-runtime": "^26.6.3",
- "jest-util": "^26.6.2",
- "jest-worker": "^26.6.2",
- "source-map-support": "^0.5.6",
- "throat": "^5.0.0"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-runtime": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz",
- "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==",
- "dev": true,
- "dependencies": {
- "@jest/console": "^26.6.2",
- "@jest/environment": "^26.6.2",
- "@jest/fake-timers": "^26.6.2",
- "@jest/globals": "^26.6.2",
- "@jest/source-map": "^26.6.2",
- "@jest/test-result": "^26.6.2",
- "@jest/transform": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/yargs": "^15.0.0",
- "chalk": "^4.0.0",
- "cjs-module-lexer": "^0.6.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.3",
- "graceful-fs": "^4.2.4",
- "jest-config": "^26.6.3",
- "jest-haste-map": "^26.6.2",
- "jest-message-util": "^26.6.2",
- "jest-mock": "^26.6.2",
- "jest-regex-util": "^26.0.0",
- "jest-resolve": "^26.6.2",
- "jest-snapshot": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-validate": "^26.6.2",
- "slash": "^3.0.0",
- "strip-bom": "^4.0.0",
- "yargs": "^15.4.1"
- },
- "bin": {
- "jest-runtime": "bin/jest-runtime.js"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-serializer": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz",
- "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==",
- "dev": true,
- "dependencies": {
- "@types/node": "*",
- "graceful-fs": "^4.2.4"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-snapshot": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz",
- "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.0.0",
- "@jest/types": "^26.6.2",
- "@types/babel__traverse": "^7.0.4",
- "@types/prettier": "^2.0.0",
- "chalk": "^4.0.0",
- "expect": "^26.6.2",
- "graceful-fs": "^4.2.4",
- "jest-diff": "^26.6.2",
- "jest-get-type": "^26.3.0",
- "jest-haste-map": "^26.6.2",
- "jest-matcher-utils": "^26.6.2",
- "jest-message-util": "^26.6.2",
- "jest-resolve": "^26.6.2",
- "natural-compare": "^1.4.0",
- "pretty-format": "^26.6.2",
- "semver": "^7.3.2"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-snapshot/node_modules/semver": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
- "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/jest-util": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz",
- "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "is-ci": "^2.0.0",
- "micromatch": "^4.0.2"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-validate": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz",
- "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==",
- "dev": true,
- "dependencies": {
- "@jest/types": "^26.6.2",
- "camelcase": "^6.0.0",
- "chalk": "^4.0.0",
- "jest-get-type": "^26.3.0",
- "leven": "^3.1.0",
- "pretty-format": "^26.6.2"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-validate/node_modules/camelcase": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
- "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/jest-watcher": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz",
- "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==",
- "dev": true,
- "dependencies": {
- "@jest/test-result": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "jest-util": "^26.6.2",
- "string-length": "^4.0.1"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/jest-worker": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
- "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
- "dev": true,
- "dependencies": {
- "@types/node": "*",
- "merge-stream": "^2.0.0",
- "supports-color": "^7.0.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- }
- },
- "node_modules/jest/node_modules/jest-cli": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz",
- "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==",
- "dev": true,
- "dependencies": {
- "@jest/core": "^26.6.3",
- "@jest/test-result": "^26.6.2",
- "@jest/types": "^26.6.2",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "import-local": "^3.0.2",
- "is-ci": "^2.0.0",
- "jest-config": "^26.6.3",
- "jest-util": "^26.6.2",
- "jest-validate": "^26.6.2",
- "prompts": "^2.0.1",
- "yargs": "^15.4.1"
- },
- "bin": {
- "jest": "bin/jest.js"
- },
- "engines": {
- "node": ">= 10.14.2"
- }
- },
- "node_modules/js-base64": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.6.0.tgz",
- "integrity": "sha512-wVdUBYQeY2gY73RIlPrysvpYx+2vheGo8Y1SNQv/BzHToWpAZzJU7Z6uheKMAe+GLSBig5/Ps2nxg/8tRB73xg=="
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "node_modules/js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "dependencies": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/jsbn": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
- },
- "node_modules/jsdom": {
- "version": "16.4.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz",
- "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==",
- "dev": true,
- "dependencies": {
- "abab": "^2.0.3",
- "acorn": "^7.1.1",
- "acorn-globals": "^6.0.0",
- "cssom": "^0.4.4",
- "cssstyle": "^2.2.0",
- "data-urls": "^2.0.0",
- "decimal.js": "^10.2.0",
- "domexception": "^2.0.1",
- "escodegen": "^1.14.1",
- "html-encoding-sniffer": "^2.0.1",
- "is-potential-custom-element-name": "^1.0.0",
- "nwsapi": "^2.2.0",
- "parse5": "5.1.1",
- "request": "^2.88.2",
- "request-promise-native": "^1.0.8",
- "saxes": "^5.0.0",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^3.0.1",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^2.0.0",
- "webidl-conversions": "^6.1.0",
- "whatwg-encoding": "^1.0.5",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0",
- "ws": "^7.2.3",
- "xml-name-validator": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/jsdom/node_modules/ip-regex": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
- "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/jsdom/node_modules/tough-cookie": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",
- "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==",
- "dev": true,
- "dependencies": {
- "ip-regex": "^2.1.0",
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true,
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/json-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
- },
- "node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
- },
- "node_modules/json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
- },
- "node_modules/json-stringify-safe": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
- },
- "node_modules/json5": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
- "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.5"
- },
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dependencies": {
- "graceful-fs": "^4.1.6",
- "universalify": "^2.0.0"
- }
- },
- "node_modules/jsonwebtoken": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
- "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
- "dependencies": {
- "jws": "^3.2.2",
- "lodash.includes": "^4.3.0",
- "lodash.isboolean": "^3.0.3",
- "lodash.isinteger": "^4.0.4",
- "lodash.isnumber": "^3.0.3",
- "lodash.isplainobject": "^4.0.6",
- "lodash.isstring": "^4.0.1",
- "lodash.once": "^4.0.0",
- "ms": "^2.1.1",
- "semver": "^5.6.0"
- },
- "engines": {
- "node": ">=4",
- "npm": ">=1.4.28"
- }
- },
- "node_modules/jsonwebtoken/node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- },
- "node_modules/jsonwebtoken/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "engines": [
- "node >=0.6.0"
- ],
- "dependencies": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "node_modules/jwa": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
- "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
- "dependencies": {
- "buffer-equal-constant-time": "1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jws": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
- "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
- "dependencies": {
- "jwa": "^1.4.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/keyv": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
- "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
- "dependencies": {
- "json-buffer": "3.0.0"
- }
- },
- "node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/leven": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
- "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "dependencies": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/lines-and-columns": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
- "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
- "dev": true
- },
- "node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
- "dev": true
- },
- "node_modules/lodash.includes": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
- "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8="
- },
- "node_modules/lodash.isboolean": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
- "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY="
- },
- "node_modules/lodash.isinteger": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
- "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M="
- },
- "node_modules/lodash.isnumber": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
- "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w="
- },
- "node_modules/lodash.isplainobject": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
- },
- "node_modules/lodash.isstring": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
- "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
- },
- "node_modules/lodash.once": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
- "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
- },
- "node_modules/lodash.sortby": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
- "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
- "dev": true
- },
- "node_modules/log-symbols": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz",
- "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==",
- "dependencies": {
- "chalk": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/lowercase-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/madge": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/madge/-/madge-4.0.2.tgz",
- "integrity": "sha512-l5bnA2dvyk0azLKDbOTCI+wDZ6nB007PhvPdmiYlPmqwVi49JPbhQrH/t4u8E6Akp3gwji1GZuA+v/F5q6yoWQ==",
- "dependencies": {
- "chalk": "^4.1.0",
- "commander": "^6.2.1",
- "commondir": "^1.0.1",
- "debug": "^4.0.1",
- "dependency-tree": "^8.0.0",
- "detective-amd": "^3.0.1",
- "detective-cjs": "^3.1.1",
- "detective-es6": "^2.1.0",
- "detective-less": "^1.0.2",
- "detective-postcss": "^4.0.0",
- "detective-sass": "^3.0.1",
- "detective-scss": "^2.0.1",
- "detective-stylus": "^1.0.0",
- "detective-typescript": "^7.0.0",
- "graphviz": "0.0.9",
- "ora": "^5.1.0",
- "pluralize": "^8.0.0",
- "precinct": "^7.0.0",
- "pretty-ms": "^7.0.0",
- "rc": "^1.2.7",
- "typescript": "^3.9.5",
- "walkdir": "^0.4.1"
- },
- "bin": {
- "madge": "bin/cli.js"
- },
- "engines": {
- "node": "^10.13 || ^12 || >=14"
- },
- "funding": {
- "type": "individual",
- "url": "https://www.paypal.me/pahen"
- }
- },
- "node_modules/madge/node_modules/detective-typescript": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-7.0.0.tgz",
- "integrity": "sha512-y/Ev98AleGvl43YKTNcA2Q+lyFmsmCfTTNWy4cjEJxoLkbobcXtRS0Kvx06daCgr2GdtlwLfNzL553BkktfJoA==",
- "dependencies": {
- "@typescript-eslint/typescript-estree": "^4.8.2",
- "ast-module-types": "^2.7.1",
- "node-source-walk": "^4.2.0",
- "typescript": "^3.9.7"
- },
- "engines": {
- "node": "^10.13 || >=12.0.0"
- }
- },
- "node_modules/madge/node_modules/typescript": {
- "version": "3.9.9",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz",
- "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w==",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=4.2.0"
- }
- },
- "node_modules/make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dependencies": {
- "semver": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/make-error": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
- "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
- "dev": true
- },
- "node_modules/makeerror": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
- "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
- "dev": true,
- "dependencies": {
- "tmpl": "1.0.x"
- }
- },
- "node_modules/map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
- "dev": true,
- "dependencies": {
- "object-visit": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
- },
- "node_modules/merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
- "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
- "dependencies": {
- "braces": "^3.0.1",
- "picomatch": "^2.0.5"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/mime-db": {
- "version": "1.45.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz",
- "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "2.1.28",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz",
- "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==",
- "dependencies": {
- "mime-db": "1.45.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
- },
- "node_modules/minipass": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
- "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
- "dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/minizlib": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
- "dependencies": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/mixin-deep": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "dev": true,
- "dependencies": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/mixin-deep/node_modules/is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "dependencies": {
- "is-plain-object": "^2.0.4"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dependencies": {
- "minimist": "^1.2.5"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
- "node_modules/mkdirp-classic": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
- "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
- },
- "node_modules/module-definition": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-3.3.1.tgz",
- "integrity": "sha512-kLidGPwQ2yq484nSD+D3JoJp4Etc0Ox9P0L34Pu/cU4X4HcG7k7p62XI5BBuvURWMRX3RPyuhOcBHbKus+UH4A==",
- "dependencies": {
- "ast-module-types": "^2.7.1",
- "node-source-walk": "^4.0.0"
- },
- "bin": {
- "module-definition": "bin/module-definition.js"
- },
- "engines": {
- "node": ">=6.0"
- }
- },
- "node_modules/module-lookup-amd": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-7.0.1.tgz",
- "integrity": "sha512-w9mCNlj0S8qviuHzpakaLVc+/7q50jl9a/kmJ/n8bmXQZgDPkQHnPBb8MUOYh3WpAYkXuNc2c+khsozhIp/amQ==",
- "dependencies": {
- "commander": "^2.8.1",
- "debug": "^4.1.0",
- "glob": "^7.1.6",
- "requirejs": "^2.3.5",
- "requirejs-config-file": "^4.0.0"
- },
- "bin": {
- "lookup-amd": "bin/cli.js"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/module-lookup-amd/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "node_modules/moment": {
- "version": "2.29.1",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
- "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/morgan": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
- "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
- "dependencies": {
- "basic-auth": "~2.0.1",
- "debug": "2.6.9",
- "depd": "~2.0.0",
- "on-finished": "~2.3.0",
- "on-headers": "~1.0.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/morgan/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/morgan/node_modules/depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/multer": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz",
- "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==",
- "dependencies": {
- "append-field": "^1.0.0",
- "busboy": "^0.2.11",
- "concat-stream": "^1.5.2",
- "mkdirp": "^0.5.1",
- "object-assign": "^4.1.1",
- "on-finished": "^2.3.0",
- "type-is": "^1.6.4",
- "xtend": "^4.0.0"
- },
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/nanoid": {
- "version": "3.1.20",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz",
- "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw==",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
- "dependencies": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
- "dev": true
- },
- "node_modules/negotiator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true
- },
- "node_modules/node-int64": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
- "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
- "dev": true
- },
- "node_modules/node-modules-regexp": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
- "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/node-notifier": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz",
- "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "growly": "^1.3.0",
- "is-wsl": "^2.2.0",
- "semver": "^7.3.2",
- "shellwords": "^0.1.1",
- "uuid": "^8.3.0",
- "which": "^2.0.2"
- }
- },
- "node_modules/node-notifier/node_modules/semver": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
- "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/node-notifier/node_modules/which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/node-source-walk": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.2.0.tgz",
- "integrity": "sha512-hPs/QMe6zS94f5+jG3kk9E7TNm4P2SulrKiLWMzKszBfNZvL/V6wseHlTd7IvfW0NZWqPtK3+9yYNr+3USGteA==",
- "dependencies": {
- "@babel/parser": "^7.0.0"
- },
- "engines": {
- "node": ">=6.0"
- }
- },
- "node_modules/normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dev": true,
- "dependencies": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "node_modules/normalize-package-data/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/normalize-url": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
- "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
- "dev": true,
- "dependencies": {
- "path-key": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/nwsapi": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
- "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
- "dev": true
- },
- "node_modules/oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "dev": true,
- "dependencies": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
- "dev": true,
- "dependencies": {
- "isobject": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "dev": true,
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/on-headers": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "dependencies": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/ora": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz",
- "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==",
- "dependencies": {
- "bl": "^4.0.3",
- "chalk": "^4.1.0",
- "cli-cursor": "^3.1.0",
- "cli-spinners": "^2.5.0",
- "is-interactive": "^1.0.0",
- "log-symbols": "^4.0.0",
- "strip-ansi": "^6.0.0",
- "wcwidth": "^1.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/p-cancelable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
- "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/p-each-series": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz",
- "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/parse-ms": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz",
- "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parse5": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
- "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
- "dev": true
- },
- "node_modules/parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
- },
- "node_modules/path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
- },
- "node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/performance-now": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
- },
- "node_modules/picomatch": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
- "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/pirates": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
- "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
- "dev": true,
- "dependencies": {
- "node-modules-regexp": "^1.0.0"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "dependencies": {
- "find-up": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pluralize": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
- "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss": {
- "version": "8.2.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.6.tgz",
- "integrity": "sha512-xpB8qYxgPuly166AGlpRjUdEYtmOWx2iCwGmrv4vqZL9YPVviDVPZPRXxnXr6xPZOdxQ9lp3ZBFCRgWJ7LE3Sg==",
- "dependencies": {
- "colorette": "^1.2.1",
- "nanoid": "^3.1.20",
- "source-map": "^0.6.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/postcss-values-parser": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz",
- "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==",
- "dependencies": {
- "flatten": "^1.0.2",
- "indexes-of": "^1.0.1",
- "uniq": "^1.0.1"
- },
- "engines": {
- "node": ">=6.14.4"
- }
- },
- "node_modules/precinct": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/precinct/-/precinct-7.0.0.tgz",
- "integrity": "sha512-ayTxq+fdaoowk4HvdfBs7bChg4ToqdRxjZqy3611dppelGF8UHQZrLta3GolRLoHSJQtKfBGA35IvW8K3tRR7A==",
- "dependencies": {
- "commander": "^2.20.3",
- "debug": "^4.3.1",
- "detective-amd": "^3.0.1",
- "detective-cjs": "^3.1.1",
- "detective-es6": "^2.2.0",
- "detective-less": "^1.0.2",
- "detective-postcss": "^4.0.0",
- "detective-sass": "^3.0.1",
- "detective-scss": "^2.0.1",
- "detective-stylus": "^1.0.0",
- "detective-typescript": "^6.0.0",
- "module-definition": "^3.3.1",
- "node-source-walk": "^4.2.0"
- },
- "bin": {
- "precinct": "bin/cli.js"
- },
- "engines": {
- "node": "^10.13 || ^12 || >=14"
- }
- },
- "node_modules/precinct/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "node_modules/prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/prepend-http": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
- "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/prettier": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz",
- "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==",
- "bin": {
- "prettier": "bin-prettier.js"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/pretty-format": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz",
- "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==",
- "dependencies": {
- "@jest/types": "^26.6.2",
- "ansi-regex": "^5.0.0",
- "ansi-styles": "^4.0.0",
- "react-is": "^17.0.1"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/pretty-ms": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz",
- "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==",
- "dependencies": {
- "parse-ms": "^2.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
- },
- "node_modules/prompts": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz",
- "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==",
- "dev": true,
- "dependencies": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/proxy-addr": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
- "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
- "dependencies": {
- "forwarded": "~0.1.2",
- "ipaddr.js": "1.9.1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
- },
- "node_modules/public-ip": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/public-ip/-/public-ip-4.0.3.tgz",
- "integrity": "sha512-IofiJJWoZ8hZHBk25l4ozLvcET0pjZSxocbUfh4sGkjidMOm4iZNzzWxezGqGsVY7HuxiK7SkyJKHNeT0YQ7uw==",
- "dependencies": {
- "dns-socket": "^4.2.1",
- "got": "^9.6.0",
- "is-ip": "^3.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "node_modules/punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz",
- "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg=="
- },
- "node_modules/range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/raw-body": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
- "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
- "dependencies": {
- "bytes": "3.1.0",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/rc": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
- "dependencies": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "bin": {
- "rc": "cli.js"
- }
- },
- "node_modules/react-is": {
- "version": "17.0.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz",
- "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA=="
- },
- "node_modules/read-pkg": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
- "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
- "dev": true,
- "dependencies": {
- "@types/normalize-package-data": "^2.4.0",
- "normalize-package-data": "^2.5.0",
- "parse-json": "^5.0.0",
- "type-fest": "^0.6.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/read-pkg-up": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
- "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
- "dev": true,
- "dependencies": {
- "find-up": "^4.1.0",
- "read-pkg": "^5.2.0",
- "type-fest": "^0.8.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/read-pkg/node_modules/type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/recursive-readdir": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz",
- "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==",
- "dependencies": {
- "minimatch": "3.0.4"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "dependencies": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
- "dev": true
- },
- "node_modules/repeat-element": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
- "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
- "dev": true,
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/request": {
- "version": "2.88.2",
- "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
- "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "dependencies": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.3",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.5.0",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/request-promise-core": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz",
- "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==",
- "dev": true,
- "dependencies": {
- "lodash": "^4.17.19"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/request-promise-native": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz",
- "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==",
- "dev": true,
- "dependencies": {
- "request-promise-core": "1.1.4",
- "stealthy-require": "^1.1.1",
- "tough-cookie": "^2.3.3"
- },
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/request/node_modules/form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 0.12"
- }
- },
- "node_modules/request/node_modules/qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/request/node_modules/uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "bin": {
- "uuid": "bin/uuid"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
- "dev": true
- },
- "node_modules/requirejs": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz",
- "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==",
- "bin": {
- "r_js": "bin/r.js",
- "r.js": "bin/r.js"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/requirejs-config-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz",
- "integrity": "sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==",
- "dependencies": {
- "esprima": "^4.0.0",
- "stringify-object": "^3.2.1"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/requires-port": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
- },
- "node_modules/resolve": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
- "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
- "dependencies": {
- "is-core-module": "^2.2.0",
- "path-parse": "^1.0.6"
- }
- },
- "node_modules/resolve-cwd": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
- "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
- "dev": true,
- "dependencies": {
- "resolve-from": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/resolve-dependency-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/resolve-dependency-path/-/resolve-dependency-path-2.0.0.tgz",
- "integrity": "sha512-DIgu+0Dv+6v2XwRaNWnumKu7GPufBBOr5I1gRPJHkvghrfCGOooJODFvgFimX/KRxk9j0whD2MnKHzM1jYvk9w==",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
- "dev": true
- },
- "node_modules/responselike": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
- "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
- "dependencies": {
- "lowercase-keys": "^1.0.0"
- }
- },
- "node_modules/restore-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
- "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
- "dependencies": {
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true,
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rimraf": {
- "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"
- },
- "bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/rsvp": {
- "version": "4.8.5",
- "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
- "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
- "dev": true,
- "engines": {
- "node": "6.* || >= 7.*"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- },
- "node_modules/safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "dev": true,
- "dependencies": {
- "ret": "~0.1.10"
- }
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "node_modules/sane": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
- "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
- "dev": true,
- "dependencies": {
- "@cnakazawa/watch": "^1.0.3",
- "anymatch": "^2.0.0",
- "capture-exit": "^2.0.0",
- "exec-sh": "^0.3.2",
- "execa": "^1.0.0",
- "fb-watchman": "^2.0.0",
- "micromatch": "^3.1.4",
- "minimist": "^1.1.1",
- "walker": "~1.0.5"
- },
- "bin": {
- "sane": "src/cli.js"
- },
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/sane/node_modules/anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "dev": true,
- "dependencies": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
- }
- },
- "node_modules/sane/node_modules/braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "dependencies": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/braces/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "dependencies": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "dev": true,
- "dependencies": {
- "remove-trailing-separator": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "dependencies": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sass-lookup": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/sass-lookup/-/sass-lookup-3.0.0.tgz",
- "integrity": "sha512-TTsus8CfFRn1N44bvdEai1no6PqdmDiQUiqW5DlpmtT+tYnIt1tXtDIph5KA1efC+LmioJXSnCtUVpcK9gaKIg==",
- "dependencies": {
- "commander": "^2.16.0"
- },
- "bin": {
- "sass-lookup": "bin/cli.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/sass-lookup/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "node_modules/saxes": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
- "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
- "dev": true,
- "dependencies": {
- "xmlchars": "^2.2.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/send": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
- "dependencies": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.7.2",
- "mime": "1.6.0",
- "ms": "2.1.1",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.1",
- "statuses": "~1.5.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/send/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dependencies": {
- "ms": "2.0.0"
- }
- },
- "node_modules/send/node_modules/debug/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- },
- "node_modules/send/node_modules/ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
- },
- "node_modules/serve-favicon": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz",
- "integrity": "sha1-k10kDN/g9YBTB/3+ln2IlCosvPA=",
- "dependencies": {
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "ms": "2.1.1",
- "parseurl": "~1.3.2",
- "safe-buffer": "5.1.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/serve-favicon/node_modules/ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
- },
- "node_modules/serve-favicon/node_modules/safe-buffer": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
- },
- "node_modules/serve-static": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
- "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
- "dependencies": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.17.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
- },
- "node_modules/set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "dev": true,
- "dependencies": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/set-value/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
- },
- "node_modules/shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dev": true,
- "dependencies": {
- "shebang-regex": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/shellwords": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
- "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
- "dev": true,
- "optional": true
- },
- "node_modules/signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
- },
- "node_modules/simple-git": {
- "version": "2.34.2",
- "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.34.2.tgz",
- "integrity": "sha512-/EX4FtcpAj5L/Bs5zgaBGYDrnkrKflFVNppNLH9VXpIjZBLHx5cZ6/mOYJCoKXKlLRuk3iTvzrIsHo7v42zWHg==",
- "dependencies": {
- "@kwsites/file-exists": "^1.1.1",
- "@kwsites/promise-deferred": "^1.1.1",
- "debug": "^4.3.1"
- }
- },
- "node_modules/sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true
- },
- "node_modules/slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
- "dependencies": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "dependencies": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node/node_modules/define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.2.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-util/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/debug": {
- "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"
- }
- },
- "node_modules/snapdragon/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-resolve": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
- "dev": true,
- "dependencies": {
- "atob": "^2.1.2",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
- }
- },
- "node_modules/source-map-support": {
- "version": "0.5.19",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
- "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
- "dev": true,
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/source-map-url": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
- "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
- "dev": true
- },
- "node_modules/spdx-correct": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
- "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
- "dev": true,
- "dependencies": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
- "dev": true
- },
- "node_modules/spdx-expression-parse": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
- "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
- "dev": true,
- "dependencies": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/spdx-license-ids": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz",
- "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==",
- "dev": true
- },
- "node_modules/split-ca": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz",
- "integrity": "sha1-bIOv82kvphJW4M0ZfgXp3hV2kaY="
- },
- "node_modules/split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "dev": true,
- "dependencies": {
- "extend-shallow": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
- },
- "node_modules/ssh2": {
- "version": "0.8.9",
- "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-0.8.9.tgz",
- "integrity": "sha512-GmoNPxWDMkVpMFa9LVVzQZHF6EW3WKmBwL+4/GeILf2hFmix5Isxm7Amamo8o7bHiU0tC+wXsGcUXOxp8ChPaw==",
- "dependencies": {
- "ssh2-streams": "~0.4.10"
- },
- "engines": {
- "node": ">=5.2.0"
- }
- },
- "node_modules/ssh2-streams": {
- "version": "0.4.10",
- "resolved": "https://registry.npmjs.org/ssh2-streams/-/ssh2-streams-0.4.10.tgz",
- "integrity": "sha512-8pnlMjvnIZJvmTzUIIA5nT4jr2ZWNNVHwyXfMGdRJbug9TpI3kd99ffglgfSWqujVv/0gxwMsDn9j9RVst8yhQ==",
- "dependencies": {
- "asn1": "~0.2.0",
- "bcrypt-pbkdf": "^1.0.2",
- "streamsearch": "~0.1.2"
- },
- "engines": {
- "node": ">=5.2.0"
- }
- },
- "node_modules/sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
- "dependencies": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- },
- "bin": {
- "sshpk-conv": "bin/sshpk-conv",
- "sshpk-sign": "bin/sshpk-sign",
- "sshpk-verify": "bin/sshpk-verify"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/stack-utils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz",
- "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==",
- "dev": true,
- "dependencies": {
- "escape-string-regexp": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/stack-utils/node_modules/escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "dev": true,
- "dependencies": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/stealthy-require": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
- "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/streamsearch": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
- "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string-length": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz",
- "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==",
- "dev": true,
- "dependencies": {
- "char-regex": "^1.0.2",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/stringify-object": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
- "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
- "dependencies": {
- "get-own-enumerable-property-symbols": "^3.0.0",
- "is-obj": "^1.0.1",
- "is-regexp": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/stringify-object/node_modules/is-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dependencies": {
- "ansi-regex": "^5.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-bom": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
- "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/stylus-lookup": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-3.0.2.tgz",
- "integrity": "sha512-oEQGHSjg/AMaWlKe7gqsnYzan8DLcGIHe0dUaFkucZZ14z4zjENRlQMCHT4FNsiWnJf17YN9OvrCfCoi7VvOyg==",
- "dependencies": {
- "commander": "^2.8.1",
- "debug": "^4.1.0"
- },
- "bin": {
- "stylus-lookup": "bin/cli.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/stylus-lookup/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-hyperlinks": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz",
- "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0",
- "supports-color": "^7.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/symbol-tree": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
- "dev": true
- },
- "node_modules/tapable": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz",
- "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/tar": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz",
- "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==",
- "dependencies": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^3.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/tar-fs": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz",
- "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==",
- "dependencies": {
- "chownr": "^1.1.1",
- "mkdirp-classic": "^0.5.2",
- "pump": "^3.0.0",
- "tar-stream": "^2.0.0"
- }
- },
- "node_modules/tar-stream": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
- "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
- "dependencies": {
- "bl": "^4.0.3",
- "end-of-stream": "^1.4.1",
- "fs-constants": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/tar/node_modules/chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/tar/node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/temp": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/temp/-/temp-0.4.0.tgz",
- "integrity": "sha1-ZxrWPVe+D+nXKUZks/xABjZnimA=",
- "engines": [
- "node >=0.4.0"
- ]
- },
- "node_modules/terminal-link": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
- "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
- "dev": true,
- "dependencies": {
- "ansi-escapes": "^4.2.1",
- "supports-hyperlinks": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/test-exclude": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
- "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
- "dev": true,
- "dependencies": {
- "@istanbuljs/schema": "^0.1.2",
- "glob": "^7.1.4",
- "minimatch": "^3.0.4"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/throat": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz",
- "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==",
- "dev": true
- },
- "node_modules/tmpl": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
- "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
- "dev": true
- },
- "node_modules/to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/to-object-path/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/to-readable-stream": {
- "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==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "dev": true,
- "dependencies": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/tough-cookie": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
- "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "dependencies": {
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/tr46": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz",
- "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ts-jest": {
- "version": "26.5.1",
- "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.1.tgz",
- "integrity": "sha512-G7Rmo3OJMvlqE79amJX8VJKDiRcd7/r61wh9fnvvG8cAjhA9edklGw/dCxRSQmfZ/z8NDums5srSVgwZos1qfg==",
- "dev": true,
- "dependencies": {
- "@types/jest": "26.x",
- "bs-logger": "0.x",
- "buffer-from": "1.x",
- "fast-json-stable-stringify": "2.x",
- "jest-util": "^26.1.0",
- "json5": "2.x",
- "lodash": "4.x",
- "make-error": "1.x",
- "mkdirp": "1.x",
- "semver": "7.x",
- "yargs-parser": "20.x"
- },
- "bin": {
- "ts-jest": "cli.js"
- },
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/ts-jest/node_modules/mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true,
- "bin": {
- "mkdirp": "bin/cmd.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/ts-jest/node_modules/semver": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
- "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/ts-jest/node_modules/yargs-parser": {
- "version": "20.2.5",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.5.tgz",
- "integrity": "sha512-jYRGS3zWy20NtDtK2kBgo/TlAoy5YUuhD9/LZ7z7W4j1Fdw2cqD0xEEclf8fxc8xjD6X5Qr+qQQwCEsP8iRiYg==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
- },
- "node_modules/tslint": {
- "version": "6.1.3",
- "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz",
- "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==",
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "builtin-modules": "^1.1.1",
- "chalk": "^2.3.0",
- "commander": "^2.12.1",
- "diff": "^4.0.1",
- "glob": "^7.1.1",
- "js-yaml": "^3.13.1",
- "minimatch": "^3.0.4",
- "mkdirp": "^0.5.3",
- "resolve": "^1.3.2",
- "semver": "^5.3.0",
- "tslib": "^1.13.0",
- "tsutils": "^2.29.0"
- },
- "bin": {
- "tslint": "bin/tslint"
- },
- "engines": {
- "node": ">=4.8.0"
- }
- },
- "node_modules/tslint/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/tslint/node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/tslint/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/tslint/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "node_modules/tslint/node_modules/commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "node_modules/tslint/node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/tslint/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/tslint/node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/tslint/node_modules/tsutils": {
- "version": "2.29.0",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz",
- "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==",
- "dependencies": {
- "tslib": "^1.8.1"
- }
- },
- "node_modules/tsutils": {
- "version": "3.20.0",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz",
- "integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==",
- "dependencies": {
- "tslib": "^1.8.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "dependencies": {
- "safe-buffer": "^5.0.1"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/tweetnacl": {
- "version": "0.14.5",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
- },
- "node_modules/type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "dependencies": {
- "prelude-ls": "~1.1.2"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "dependencies": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
- },
- "node_modules/typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dependencies": {
- "is-typedarray": "^1.0.0"
- }
- },
- "node_modules/typescript": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz",
- "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=4.2.0"
- }
- },
- "node_modules/union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "dev": true,
- "dependencies": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/uniq": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
- "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8="
- },
- "node_modules/unique-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
- "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
- "dependencies": {
- "crypto-random-string": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "dev": true,
- "dependencies": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "dev": true,
- "dependencies": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/has-value/node_modules/isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "dependencies": {
- "isarray": "1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
- "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
- "dev": true
- },
- "node_modules/url-parse-lax": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
- "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
- "dependencies": {
- "prepend-http": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "node_modules/utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/v8-to-istanbul": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz",
- "integrity": "sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g==",
- "dev": true,
- "dependencies": {
- "@types/istanbul-lib-coverage": "^2.0.1",
- "convert-source-map": "^1.6.0",
- "source-map": "^0.7.3"
- },
- "engines": {
- "node": ">=10.10.0"
- }
- },
- "node_modules/v8-to-istanbul/node_modules/source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dev": true,
- "dependencies": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "node_modules/validator": {
- "version": "13.5.2",
- "resolved": "https://registry.npmjs.org/validator/-/validator-13.5.2.tgz",
- "integrity": "sha512-mD45p0rvHVBlY2Zuy3F3ESIe1h5X58GPfAtslBjY7EtTqGquZTj+VX/J4RnHWN8FKq0C9WRVt1oWAcytWRuYLQ==",
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/vary": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/verror": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "engines": [
- "node >=0.6.0"
- ],
- "dependencies": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "node_modules/w3c-hr-time": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
- "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "dev": true,
- "dependencies": {
- "browser-process-hrtime": "^1.0.0"
- }
- },
- "node_modules/w3c-xmlserializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
- "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
- "dev": true,
- "dependencies": {
- "xml-name-validator": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/walkdir": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz",
- "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/walker": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
- "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
- "dev": true,
- "dependencies": {
- "makeerror": "1.0.x"
- }
- },
- "node_modules/wcwidth": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
- "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
- "dependencies": {
- "defaults": "^1.0.3"
- }
- },
- "node_modules/webidl-conversions": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
- "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
- "dev": true,
- "engines": {
- "node": ">=10.4"
- }
- },
- "node_modules/whatwg-encoding": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
- "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
- "dev": true,
- "dependencies": {
- "iconv-lite": "0.4.24"
- }
- },
- "node_modules/whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
- },
- "node_modules/whatwg-url": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz",
- "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==",
- "dev": true,
- "dependencies": {
- "lodash.sortby": "^4.7.0",
- "tr46": "^2.0.2",
- "webidl-conversions": "^6.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "which": "bin/which"
- }
- },
- "node_modules/which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
- },
- "node_modules/word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
- },
- "node_modules/write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
- "dependencies": {
- "imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
- }
- },
- "node_modules/ws": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz",
- "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==",
- "dev": true,
- "engines": {
- "node": ">=8.3.0"
- }
- },
- "node_modules/xdg-basedir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
- "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/xml-name-validator": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
- "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
- "dev": true
- },
- "node_modules/xmlchars": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
- "dev": true
- },
- "node_modules/xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "engines": {
- "node": ">=0.4"
- }
- },
- "node_modules/y18n": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
- "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
- "dev": true
- },
- "node_modules/yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
- },
- "node_modules/yaml": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz",
- "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==",
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "dev": true,
- "dependencies": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
- "dev": true,
- "dependencies": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- },
- "engines": {
- "node": ">=6"
- }
- }
- },
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz",
- "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==",
- "requires": {
- "@babel/highlight": "^7.12.13"
- }
- },
- "@babel/core": {
- "version": "7.12.16",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.16.tgz",
- "integrity": "sha512-t/hHIB504wWceOeaOoONOhu+gX+hpjfeN6YRBT209X/4sibZQfSF1I0HFRRlBe97UZZosGx5XwUg1ZgNbelmNw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.12.13",
- "@babel/generator": "^7.12.15",
- "@babel/helper-module-transforms": "^7.12.13",
- "@babel/helpers": "^7.12.13",
- "@babel/parser": "^7.12.16",
- "@babel/template": "^7.12.13",
- "@babel/traverse": "^7.12.13",
- "@babel/types": "^7.12.13",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.1",
- "json5": "^2.1.2",
- "lodash": "^4.17.19",
- "semver": "^5.4.1",
- "source-map": "^0.5.0"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
- }
- },
- "@babel/generator": {
- "version": "7.12.15",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.15.tgz",
- "integrity": "sha512-6F2xHxBiFXWNSGb7vyCUTBF8RCLY66rS0zEPcP8t/nQyXjha5EuK4z7H5o7fWG8B4M7y6mqVWq1J+1PuwRhecQ==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.12.13",
- "jsesc": "^2.5.1",
- "source-map": "^0.5.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
- }
- },
- "@babel/helper-function-name": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.12.13.tgz",
- "integrity": "sha512-TZvmPn0UOqmvi5G4vvw0qZTpVptGkB1GL61R6lKvrSdIxGm5Pky7Q3fpKiIkQCAtRCBUwB0PaThlx9vebCDSwA==",
- "dev": true,
- "requires": {
- "@babel/helper-get-function-arity": "^7.12.13",
- "@babel/template": "^7.12.13",
- "@babel/types": "^7.12.13"
- }
- },
- "@babel/helper-get-function-arity": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz",
- "integrity": "sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.12.13"
- }
- },
- "@babel/helper-member-expression-to-functions": {
- "version": "7.12.16",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.16.tgz",
- "integrity": "sha512-zYoZC1uvebBFmj1wFAlXwt35JLEgecefATtKp20xalwEK8vHAixLBXTGxNrVGEmTT+gzOThUgr8UEdgtalc1BQ==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.12.13"
- }
- },
- "@babel/helper-module-imports": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz",
- "integrity": "sha512-NGmfvRp9Rqxy0uHSSVP+SRIW1q31a7Ji10cLBcqSDUngGentY4FRiHOFZFE1CLU5eiL0oE8reH7Tg1y99TDM/g==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.12.13"
- }
- },
- "@babel/helper-module-transforms": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.13.tgz",
- "integrity": "sha512-acKF7EjqOR67ASIlDTupwkKM1eUisNAjaSduo5Cz+793ikfnpe7p4Q7B7EWU2PCoSTPWsQkR7hRUWEIZPiVLGA==",
- "dev": true,
- "requires": {
- "@babel/helper-module-imports": "^7.12.13",
- "@babel/helper-replace-supers": "^7.12.13",
- "@babel/helper-simple-access": "^7.12.13",
- "@babel/helper-split-export-declaration": "^7.12.13",
- "@babel/helper-validator-identifier": "^7.12.11",
- "@babel/template": "^7.12.13",
- "@babel/traverse": "^7.12.13",
- "@babel/types": "^7.12.13",
- "lodash": "^4.17.19"
- }
- },
- "@babel/helper-optimise-call-expression": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz",
- "integrity": "sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.12.13"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.12.13.tgz",
- "integrity": "sha512-C+10MXCXJLiR6IeG9+Wiejt9jmtFpxUc3MQqCmPY8hfCjyUGl9kT+B2okzEZrtykiwrc4dbCPdDoz0A/HQbDaA==",
- "dev": true
- },
- "@babel/helper-replace-supers": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.13.tgz",
- "integrity": "sha512-pctAOIAMVStI2TMLhozPKbf5yTEXc0OJa0eENheb4w09SrgOWEs+P4nTOZYJQCqs8JlErGLDPDJTiGIp3ygbLg==",
- "dev": true,
- "requires": {
- "@babel/helper-member-expression-to-functions": "^7.12.13",
- "@babel/helper-optimise-call-expression": "^7.12.13",
- "@babel/traverse": "^7.12.13",
- "@babel/types": "^7.12.13"
- }
- },
- "@babel/helper-simple-access": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz",
- "integrity": "sha512-0ski5dyYIHEfwpWGx5GPWhH35j342JaflmCeQmsPWcrOQDtCN6C1zKAVRFVbK53lPW2c9TsuLLSUDf0tIGJ5hA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.12.13"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz",
- "integrity": "sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.12.13"
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.12.11",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz",
- "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw=="
- },
- "@babel/helpers": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.13.tgz",
- "integrity": "sha512-oohVzLRZ3GQEk4Cjhfs9YkJA4TdIDTObdBEZGrd6F/T0GPSnuV6l22eMcxlvcvzVIPH3VTtxbseudM1zIE+rPQ==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.12.13",
- "@babel/traverse": "^7.12.13",
- "@babel/types": "^7.12.13"
- }
- },
- "@babel/highlight": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.12.13.tgz",
- "integrity": "sha512-kocDQvIbgMKlWxXe9fof3TQ+gkIPOUSEYhJjqUjvKMez3krV7vbzYCDq39Oj11UAVK7JqPVGQPlgE85dPNlQww==",
- "requires": {
- "@babel/helper-validator-identifier": "^7.12.11",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
- }
- },
- "@babel/parser": {
- "version": "7.12.16",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.16.tgz",
- "integrity": "sha512-c/+u9cqV6F0+4Hpq01jnJO+GLp2DdT63ppz9Xa+6cHaajM9VFzK/iDXiKK65YtpeVwu+ctfS6iqlMqRgQRzeCw=="
- },
- "@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",
- "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-bigint": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
- "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-class-properties": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
- "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.12.13"
- }
- },
- "@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",
- "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-json-strings": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
- "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
- "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.8.0"
- }
- },
- "@babel/plugin-syntax-top-level-await": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz",
- "integrity": "sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.12.13"
- }
- },
- "@babel/template": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz",
- "integrity": "sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.12.13",
- "@babel/parser": "^7.12.13",
- "@babel/types": "^7.12.13"
- }
- },
- "@babel/traverse": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.13.tgz",
- "integrity": "sha512-3Zb4w7eE/OslI0fTp8c7b286/cQps3+vdLW3UcwC8VSJC6GbKn55aeVVu2QJNuCDoeKyptLOFrPq8WqZZBodyA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.12.13",
- "@babel/generator": "^7.12.13",
- "@babel/helper-function-name": "^7.12.13",
- "@babel/helper-split-export-declaration": "^7.12.13",
- "@babel/parser": "^7.12.13",
- "@babel/types": "^7.12.13",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.19"
- }
- },
- "@babel/types": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.13.tgz",
- "integrity": "sha512-oKrdZTld2im1z8bDwTOQvUbxKwE+854zc16qWZQlcTqMN00pWxHQ4ZeOq0yDMnisOpRykH2/5Qqcrk/OlbAjiQ==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.12.11",
- "lodash": "^4.17.19",
- "to-fast-properties": "^2.0.0"
- }
- },
- "@bcoe/v8-coverage": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
- "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
- "dev": true
- },
- "@cnakazawa/watch": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz",
- "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==",
- "dev": true,
- "requires": {
- "exec-sh": "^0.3.2",
- "minimist": "^1.2.0"
- }
- },
- "@istanbuljs/load-nyc-config": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
- "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
- "dev": true,
- "requires": {
- "camelcase": "^5.3.1",
- "find-up": "^4.1.0",
- "get-package-type": "^0.1.0",
- "js-yaml": "^3.13.1",
- "resolve-from": "^5.0.0"
- }
- },
- "@istanbuljs/schema": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
- "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
- "dev": true
- },
- "@jest/console": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-26.6.2.tgz",
- "integrity": "sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "jest-message-util": "^26.6.2",
- "jest-util": "^26.6.2",
- "slash": "^3.0.0"
- }
- },
- "@jest/core": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-26.6.3.tgz",
- "integrity": "sha512-xvV1kKbhfUqFVuZ8Cyo+JPpipAHHAV3kcDBftiduK8EICXmTFddryy3P7NfZt8Pv37rA9nEJBKCCkglCPt/Xjw==",
- "dev": true,
- "requires": {
- "@jest/console": "^26.6.2",
- "@jest/reporters": "^26.6.2",
- "@jest/test-result": "^26.6.2",
- "@jest/transform": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "ansi-escapes": "^4.2.1",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-changed-files": "^26.6.2",
- "jest-config": "^26.6.3",
- "jest-haste-map": "^26.6.2",
- "jest-message-util": "^26.6.2",
- "jest-regex-util": "^26.0.0",
- "jest-resolve": "^26.6.2",
- "jest-resolve-dependencies": "^26.6.3",
- "jest-runner": "^26.6.3",
- "jest-runtime": "^26.6.3",
- "jest-snapshot": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-validate": "^26.6.2",
- "jest-watcher": "^26.6.2",
- "micromatch": "^4.0.2",
- "p-each-series": "^2.1.0",
- "rimraf": "^3.0.0",
- "slash": "^3.0.0",
- "strip-ansi": "^6.0.0"
- }
- },
- "@jest/environment": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-26.6.2.tgz",
- "integrity": "sha512-nFy+fHl28zUrRsCeMB61VDThV1pVTtlEokBRgqPrcT1JNq4yRNIyTHfyht6PqtUvY9IsuLGTrbG8kPXjSZIZwA==",
- "dev": true,
- "requires": {
- "@jest/fake-timers": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "jest-mock": "^26.6.2"
- }
- },
- "@jest/fake-timers": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-26.6.2.tgz",
- "integrity": "sha512-14Uleatt7jdzefLPYM3KLcnUl1ZNikaKq34enpb5XG9i81JpppDb5muZvonvKyrl7ftEHkKS5L5/eB/kxJ+bvA==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "@sinonjs/fake-timers": "^6.0.1",
- "@types/node": "*",
- "jest-message-util": "^26.6.2",
- "jest-mock": "^26.6.2",
- "jest-util": "^26.6.2"
- }
- },
- "@jest/globals": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-26.6.2.tgz",
- "integrity": "sha512-85Ltnm7HlB/KesBUuALwQ68YTU72w9H2xW9FjZ1eL1U3lhtefjjl5c2MiUbpXt/i6LaPRvoOFJ22yCBSfQ0JIA==",
- "dev": true,
- "requires": {
- "@jest/environment": "^26.6.2",
- "@jest/types": "^26.6.2",
- "expect": "^26.6.2"
- }
- },
- "@jest/reporters": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-26.6.2.tgz",
- "integrity": "sha512-h2bW53APG4HvkOnVMo8q3QXa6pcaNt1HkwVsOPMBV6LD/q9oSpxNSYZQYkAnjdMjrJ86UuYeLo+aEZClV6opnw==",
- "dev": true,
- "requires": {
- "@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^26.6.2",
- "@jest/test-result": "^26.6.2",
- "@jest/transform": "^26.6.2",
- "@jest/types": "^26.6.2",
- "chalk": "^4.0.0",
- "collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
- "glob": "^7.1.2",
- "graceful-fs": "^4.2.4",
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-instrument": "^4.0.3",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^4.0.0",
- "istanbul-reports": "^3.0.2",
- "jest-haste-map": "^26.6.2",
- "jest-resolve": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-worker": "^26.6.2",
- "node-notifier": "^8.0.0",
- "slash": "^3.0.0",
- "source-map": "^0.6.0",
- "string-length": "^4.0.1",
- "terminal-link": "^2.0.0",
- "v8-to-istanbul": "^7.0.0"
- }
- },
- "@jest/source-map": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-26.6.2.tgz",
- "integrity": "sha512-YwYcCwAnNmOVsZ8mr3GfnzdXDAl4LaenZP5z+G0c8bzC9/dugL8zRmxZzdoTl4IaS3CryS1uWnROLPFmb6lVvA==",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0",
- "graceful-fs": "^4.2.4",
- "source-map": "^0.6.0"
- }
- },
- "@jest/test-result": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-26.6.2.tgz",
- "integrity": "sha512-5O7H5c/7YlojphYNrK02LlDIV2GNPYisKwHm2QTKjNZeEzezCbwYs9swJySv2UfPMyZ0VdsmMv7jIlD/IKYQpQ==",
- "dev": true,
- "requires": {
- "@jest/console": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/istanbul-lib-coverage": "^2.0.0",
- "collect-v8-coverage": "^1.0.0"
- }
- },
- "@jest/test-sequencer": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-26.6.3.tgz",
- "integrity": "sha512-YHlVIjP5nfEyjlrSr8t/YdNfU/1XEt7c5b4OxcXCjyRhjzLYu/rO69/WHPuYcbCWkz8kAeZVZp2N2+IOLLEPGw==",
- "dev": true,
- "requires": {
- "@jest/test-result": "^26.6.2",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^26.6.2",
- "jest-runner": "^26.6.3",
- "jest-runtime": "^26.6.3"
- }
- },
- "@jest/transform": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz",
- "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.1.0",
- "@jest/types": "^26.6.2",
- "babel-plugin-istanbul": "^6.0.0",
- "chalk": "^4.0.0",
- "convert-source-map": "^1.4.0",
- "fast-json-stable-stringify": "^2.0.0",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^26.6.2",
- "jest-regex-util": "^26.0.0",
- "jest-util": "^26.6.2",
- "micromatch": "^4.0.2",
- "pirates": "^4.0.1",
- "slash": "^3.0.0",
- "source-map": "^0.6.1",
- "write-file-atomic": "^3.0.0"
- }
- },
- "@jest/types": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
- "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
- "requires": {
- "@types/istanbul-lib-coverage": "^2.0.0",
- "@types/istanbul-reports": "^3.0.0",
- "@types/node": "*",
- "@types/yargs": "^15.0.0",
- "chalk": "^4.0.0"
- }
- },
- "@kwsites/file-exists": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz",
- "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==",
- "requires": {
- "debug": "^4.1.1"
- }
- },
- "@kwsites/promise-deferred": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz",
- "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw=="
- },
- "@nodelib/fs.scandir": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz",
- "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==",
- "requires": {
- "@nodelib/fs.stat": "2.0.4",
- "run-parallel": "^1.1.9"
- }
- },
- "@nodelib/fs.stat": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz",
- "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q=="
- },
- "@nodelib/fs.walk": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz",
- "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==",
- "requires": {
- "@nodelib/fs.scandir": "2.1.4",
- "fastq": "^1.6.0"
- }
- },
- "@sindresorhus/is": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
- "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ=="
- },
- "@sinonjs/commons": {
- "version": "1.8.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.2.tgz",
- "integrity": "sha512-sruwd86RJHdsVf/AtBoijDmUqJp3B6hF/DGC23C+JaegnDHaZyewCjoVGTdg3J0uz3Zs7NnIT05OBOmML72lQw==",
- "dev": true,
- "requires": {
- "type-detect": "4.0.8"
- }
- },
- "@sinonjs/fake-timers": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-6.0.1.tgz",
- "integrity": "sha512-MZPUxrmFubI36XS1DI3qmI0YdN1gks62JtFZvxR67ljjSNCeK6U08Zx4msEWOXuofgqUt6zPHSi1H9fbjR/NRA==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.7.0"
- }
- },
- "@szmarczak/http-timer": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
- "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
- "requires": {
- "defer-to-connect": "^1.0.1"
- }
- },
- "@types/babel__core": {
- "version": "7.1.12",
- "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.12.tgz",
- "integrity": "sha512-wMTHiiTiBAAPebqaPiPDLFA4LYPKr6Ph0Xq/6rq1Ur3v66HXyG+clfR9CNETkD7MQS8ZHvpQOtA53DLws5WAEQ==",
- "dev": true,
- "requires": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0",
- "@types/babel__generator": "*",
- "@types/babel__template": "*",
- "@types/babel__traverse": "*"
- }
- },
- "@types/babel__generator": {
- "version": "7.6.2",
- "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.2.tgz",
- "integrity": "sha512-MdSJnBjl+bdwkLskZ3NGFp9YcXGx5ggLpQQPqtgakVhsWK0hTtNYhjpZLlWQTviGTvF8at+Bvli3jV7faPdgeQ==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.0.0"
- }
- },
- "@types/babel__template": {
- "version": "7.4.0",
- "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.0.tgz",
- "integrity": "sha512-NTPErx4/FiPCGScH7foPyr+/1Dkzkni+rHiYHHoTjvwou7AQzJkNeD60A9CXRy+ZEN2B1bggmkTMCDb+Mv5k+A==",
- "dev": true,
- "requires": {
- "@babel/parser": "^7.1.0",
- "@babel/types": "^7.0.0"
- }
- },
- "@types/babel__traverse": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.11.0.tgz",
- "integrity": "sha512-kSjgDMZONiIfSH1Nxcr5JIRMwUetDki63FSQfpTCz8ogF3Ulqm8+mr5f78dUYs6vMiB6gBusQqfQmBvHZj/lwg==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.3.0"
- }
- },
- "@types/bcryptjs": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.2.tgz",
- "integrity": "sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ=="
- },
- "@types/body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==",
- "requires": {
- "@types/connect": "*",
- "@types/node": "*"
- }
- },
- "@types/caseless": {
- "version": "0.12.2",
- "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz",
- "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w=="
- },
- "@types/configstore": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/configstore/-/configstore-4.0.0.tgz",
- "integrity": "sha512-SvCBBPzOIe/3Tu7jTl2Q8NjITjLmq9m7obzjSyb8PXWWZ31xVK6w4T6v8fOx+lrgQnqk3Yxc00LDolFsSakKCA=="
- },
- "@types/connect": {
- "version": "3.4.34",
- "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz",
- "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==",
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/cookie-parser": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.2.tgz",
- "integrity": "sha512-uwcY8m6SDQqciHsqcKDGbo10GdasYsPCYkH3hVegj9qAah6pX5HivOnOuI3WYmyQMnOATV39zv/Ybs0bC/6iVg==",
- "requires": {
- "@types/express": "*"
- }
- },
- "@types/dockerode": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/@types/dockerode/-/dockerode-3.2.2.tgz",
- "integrity": "sha512-YtdVvc+WmxShwx0iBmn0AtiLL2Zbcak9gXqdeBp0UpiRyOcshZM0eVTOEkUKd4mIjHzSEpA+1P3lXb7ouYvDtQ==",
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/ejs": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.0.5.tgz",
- "integrity": "sha512-k4ef69sS4sIqAPW9GoBnN+URAON2LeL1H0duQvL4RgdEBna19/WattYSA1qYqvbVEDRTSWzOw56tCLhC/m/IOw=="
- },
- "@types/express": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.11.tgz",
- "integrity": "sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==",
- "requires": {
- "@types/body-parser": "*",
- "@types/express-serve-static-core": "^4.17.18",
- "@types/qs": "*",
- "@types/serve-static": "*"
- }
- },
- "@types/express-serve-static-core": {
- "version": "4.17.18",
- "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.18.tgz",
- "integrity": "sha512-m4JTwx5RUBNZvky/JJ8swEJPKFd8si08pPF2PfizYjGZOKr/svUWPcoUmLow6MmPzhasphB7gSTINY67xn3JNA==",
- "requires": {
- "@types/node": "*",
- "@types/qs": "*",
- "@types/range-parser": "*"
- }
- },
- "@types/fs-extra": {
- "version": "9.0.7",
- "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.7.tgz",
- "integrity": "sha512-YGq2A6Yc3bldrLUlm17VNWOnUbnEzJ9CMgOeLFtQF3HOCN5lQBO8VyjG00a5acA5NNSM30kHVGp1trZgnVgi1Q==",
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/graceful-fs": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
- "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/http-proxy": {
- "version": "1.17.5",
- "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.5.tgz",
- "integrity": "sha512-GNkDE7bTv6Sf8JbV2GksknKOsk7OznNYHSdrtvPJXO0qJ9odZig6IZKUi5RFGi6d1bf6dgIAe4uXi3DBc7069Q==",
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/istanbul-lib-coverage": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz",
- "integrity": "sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw=="
- },
- "@types/istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
- "requires": {
- "@types/istanbul-lib-coverage": "*"
- }
- },
- "@types/istanbul-reports": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.0.tgz",
- "integrity": "sha512-nwKNbvnwJ2/mndE9ItP/zc2TCzw6uuodnF4EHYWD+gCQDVBuRQL5UzbZD0/ezy1iKsFU2ZQiDqg4M9dN4+wZgA==",
- "requires": {
- "@types/istanbul-lib-report": "*"
- }
- },
- "@types/jest": {
- "version": "26.0.20",
- "resolved": "https://registry.npmjs.org/@types/jest/-/jest-26.0.20.tgz",
- "integrity": "sha512-9zi2Y+5USJRxd0FsahERhBwlcvFh6D2GLQnY2FH2BzK8J9s9omvNHIbvABwIluXa0fD8XVKMLTO0aOEuUfACAA==",
- "requires": {
- "jest-diff": "^26.0.0",
- "pretty-format": "^26.0.0"
- }
- },
- "@types/js-base64": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/js-base64/-/js-base64-3.0.0.tgz",
- "integrity": "sha512-BnEyOcDE4H6bkg8m84xhdbkYoAoCg8sYERmAvE4Ff50U8jTfbmOinRdJpauBn1P9XsCCQgCLuSiyz3PM4WHYOA=="
- },
- "@types/jsonwebtoken": {
- "version": "8.5.0",
- "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.0.tgz",
- "integrity": "sha512-9bVao7LvyorRGZCw0VmH/dr7Og+NdjYSsKAxB43OQoComFbBgsEpoR9JW6+qSq/ogwVBg8GI2MfAlk4SYI4OLg==",
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/mime": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
- "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw=="
- },
- "@types/minipass": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@types/minipass/-/minipass-2.2.0.tgz",
- "integrity": "sha512-wuzZksN4w4kyfoOv/dlpov4NOunwutLA/q7uc00xU02ZyUY+aoM5PWIXEKBMnm0NHd4a+N71BMjq+x7+2Af1fg==",
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/morgan": {
- "version": "1.9.2",
- "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.2.tgz",
- "integrity": "sha512-edtGMEdit146JwwIeyQeHHg9yID4WSolQPxpEorHmN3KuytuCHyn2ELNr5Uxy8SerniFbbkmgKMrGM933am5BQ==",
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/multer": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/@types/multer/-/multer-1.4.5.tgz",
- "integrity": "sha512-9b/0a8JyrR0r2nQhL73JR86obWL7cogfX12augvlrvcpciCo/hkvEsgu80Z4S2g2DHGVXHr8pUIi1VhqFJ8Ufw==",
- "requires": {
- "@types/express": "*"
- }
- },
- "@types/node": {
- "version": "14.14.28",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.28.tgz",
- "integrity": "sha512-lg55ArB+ZiHHbBBttLpzD07akz0QPrZgUODNakeC09i62dnrywr9mFErHuaPlB6I7z+sEbK+IYmplahvplCj2g=="
- },
- "@types/normalize-package-data": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
- "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==",
- "dev": true
- },
- "@types/on-finished": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/@types/on-finished/-/on-finished-2.3.1.tgz",
- "integrity": "sha512-mzVYaYcFs5Jd2n/O6uYIRUsFRR1cHyZLRvkLCU0E7+G5WhY0qBDAR5fUCeZbvecYOSh9ikhlesyi2UfI8B9ckQ==",
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/prettier": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.2.1.tgz",
- "integrity": "sha512-DxZZbyMAM9GWEzXL+BMZROWz9oo6A9EilwwOMET2UVu2uZTqMWS5S69KVtuVKaRjCUpcrOXRalet86/OpG4kqw==",
- "dev": true
- },
- "@types/qs": {
- "version": "6.9.5",
- "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz",
- "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ=="
- },
- "@types/range-parser": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz",
- "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA=="
- },
- "@types/request": {
- "version": "2.48.5",
- "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.5.tgz",
- "integrity": "sha512-/LO7xRVnL3DxJ1WkPGDQrp4VTV1reX9RkC85mJ+Qzykj2Bdw+mG15aAfDahc76HtknjzE16SX/Yddn6MxVbmGQ==",
- "requires": {
- "@types/caseless": "*",
- "@types/node": "*",
- "@types/tough-cookie": "*",
- "form-data": "^2.5.0"
- }
- },
- "@types/require-from-string": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@types/require-from-string/-/require-from-string-1.2.0.tgz",
- "integrity": "sha512-5vE9WoOOC9/DoD3Zj53UISpM+5tSvh8k0mL4fe2zFI6vO715/W4IQ3EdVUrWVMrFi1/NZhyMvm2iKsDFkEGddQ=="
- },
- "@types/serve-favicon": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/@types/serve-favicon/-/serve-favicon-2.5.2.tgz",
- "integrity": "sha512-tGpJ3ZdAxnmuHX/BCRnZcPNQe2J8PbmwWFB2Fi6BvepDYuakFKraMG7orLkv387HS2C4MJm2UCINaxv4p7kP9A==",
- "requires": {
- "@types/express": "*"
- }
- },
- "@types/serve-static": {
- "version": "1.13.9",
- "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz",
- "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==",
- "requires": {
- "@types/mime": "^1",
- "@types/node": "*"
- }
- },
- "@types/ssh2": {
- "version": "0.5.46",
- "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-0.5.46.tgz",
- "integrity": "sha512-1pC8FHrMPYdkLoUOwTYYifnSEPzAFZRsp3JFC/vokQ+dRrVI+hDBwz0SNmQ3pL6h39OSZlPs0uCG7wKJkftnaA==",
- "requires": {
- "@types/node": "*",
- "@types/ssh2-streams": "*"
- }
- },
- "@types/ssh2-streams": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/@types/ssh2-streams/-/ssh2-streams-0.1.8.tgz",
- "integrity": "sha512-I7gixRPUvVIyJuCEvnmhr3KvA2dC0639kKswqD4H5b4/FOcnPtNU+qWLiXdKIqqX9twUvi5j0U1mwKE5CUsrfA==",
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/stack-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz",
- "integrity": "sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw==",
- "dev": true
- },
- "@types/tar": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/@types/tar/-/tar-4.0.4.tgz",
- "integrity": "sha512-0Xv+xcmkTsOZdIF4yCnd7RkOOyfyqPaqJ7RZFKnwdxfDbkN3eAAE9sHl8zJFqBz4VhxolW9EErbjR1oyH7jK2A==",
- "requires": {
- "@types/minipass": "*",
- "@types/node": "*"
- }
- },
- "@types/tough-cookie": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.0.tgz",
- "integrity": "sha512-I99sngh224D0M7XgW1s120zxCt3VYQ3IQsuw3P3jbq5GG4yc79+ZjyKznyOGIQrflfylLgcfekeZW/vk0yng6A=="
- },
- "@types/uuid": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz",
- "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ=="
- },
- "@types/validator": {
- "version": "13.1.3",
- "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.1.3.tgz",
- "integrity": "sha512-DaOWN1zf7j+8nHhqXhIgNmS+ltAC53NXqGxYuBhWqWgqolRhddKzfZU814lkHQSTG0IUfQxU7Cg0gb8fFWo2mA=="
- },
- "@types/yargs": {
- "version": "15.0.13",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.13.tgz",
- "integrity": "sha512-kQ5JNTrbDv3Rp5X2n/iUu37IJBDU2gsZ5R/g1/KHOOEc5IKfUFjXT6DENPGduh08I/pamwtEq4oul7gUqKTQDQ==",
- "requires": {
- "@types/yargs-parser": "*"
- }
- },
- "@types/yargs-parser": {
- "version": "20.2.0",
- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz",
- "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA=="
- },
- "@typescript-eslint/types": {
- "version": "4.15.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.15.1.tgz",
- "integrity": "sha512-iGsaUyWFyLz0mHfXhX4zO6P7O3sExQpBJ2dgXB0G5g/8PRVfBBsmQIc3r83ranEQTALLR3Vko/fnCIVqmH+mPw=="
- },
- "@typescript-eslint/typescript-estree": {
- "version": "4.15.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.15.1.tgz",
- "integrity": "sha512-z8MN3CicTEumrWAEB2e2CcoZa3KP9+SMYLIA2aM49XW3cWIaiVSOAGq30ffR5XHxRirqE90fgLw3e6WmNx5uNw==",
- "requires": {
- "@typescript-eslint/types": "4.15.1",
- "@typescript-eslint/visitor-keys": "4.15.1",
- "debug": "^4.1.1",
- "globby": "^11.0.1",
- "is-glob": "^4.0.1",
- "semver": "^7.3.2",
- "tsutils": "^3.17.1"
- },
- "dependencies": {
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
- },
- "is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "semver": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
- "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
- }
- },
- "@typescript-eslint/visitor-keys": {
- "version": "4.15.1",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.15.1.tgz",
- "integrity": "sha512-tYzaTP9plooRJY8eNlpAewTOqtWW/4ff/5wBjNVaJ0S0wC4Gpq/zDVRTJa5bq2v1pCNQ08xxMCndcvR+h7lMww==",
- "requires": {
- "@typescript-eslint/types": "4.15.1",
- "eslint-visitor-keys": "^2.0.0"
- }
- },
- "abab": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz",
- "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==",
- "dev": true
- },
- "accepts": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
- "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
- "requires": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
- }
- },
- "acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true
- },
- "acorn-globals": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
- "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
- "dev": true,
- "requires": {
- "acorn": "^7.1.1",
- "acorn-walk": "^7.1.1"
- }
- },
- "acorn-walk": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
- "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==",
- "dev": true
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-escapes": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
- "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
- "dev": true,
- "requires": {
- "type-fest": "^0.11.0"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
- "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
- "dev": true
- }
- }
- },
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg=="
- },
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "anymatch": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
- "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "app-module-path": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/app-module-path/-/app-module-path-2.2.0.tgz",
- "integrity": "sha1-ZBqlXft9am8KgUHEucCqULbCTdU="
- },
- "append-field": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
- "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY="
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- },
- "arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true
- },
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
- "dev": true
- },
- "array-flatten": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
- "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
- },
- "array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
- },
- "asn1": {
- "version": "0.2.4",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
- "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
- "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
- },
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
- "dev": true
- },
- "ast-module-types": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/ast-module-types/-/ast-module-types-2.7.1.tgz",
- "integrity": "sha512-Rnnx/4Dus6fn7fTqdeLEAn5vUll5w7/vts0RN608yFa6si/rDOUonlIIiwugHBFWjylHjxm9owoSZn71KwG4gw=="
- },
- "async": {
- "version": "0.9.2",
- "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
- "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0="
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
- },
- "at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="
- },
- "atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true
- },
- "aws-sign2": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
- "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
- },
- "aws4": {
- "version": "1.11.0",
- "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
- "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
- },
- "axios": {
- "version": "0.21.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
- "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
- "requires": {
- "follow-redirects": "^1.10.0"
- }
- },
- "babel-jest": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-26.6.3.tgz",
- "integrity": "sha512-pl4Q+GAVOHwvjrck6jKjvmGhnO3jHX/xuB9d27f+EJZ/6k+6nMuPjorrYp7s++bKKdANwzElBWnLWaObvTnaZA==",
- "dev": true,
- "requires": {
- "@jest/transform": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/babel__core": "^7.1.7",
- "babel-plugin-istanbul": "^6.0.0",
- "babel-preset-jest": "^26.6.2",
- "chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "slash": "^3.0.0"
- }
- },
- "babel-plugin-istanbul": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz",
- "integrity": "sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@istanbuljs/load-nyc-config": "^1.0.0",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-instrument": "^4.0.0",
- "test-exclude": "^6.0.0"
- }
- },
- "babel-plugin-jest-hoist": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-26.6.2.tgz",
- "integrity": "sha512-PO9t0697lNTmcEHH69mdtYiOIkkOlj9fySqfO3K1eCcdISevLAE0xY59VLLUj0SoiPiTX/JU2CYFpILydUa5Lw==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.3.3",
- "@babel/types": "^7.3.3",
- "@types/babel__core": "^7.0.0",
- "@types/babel__traverse": "^7.0.6"
- }
- },
- "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",
- "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==",
- "dev": true,
- "requires": {
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-bigint": "^7.8.3",
- "@babel/plugin-syntax-class-properties": "^7.8.3",
- "@babel/plugin-syntax-import-meta": "^7.8.3",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.8.3",
- "@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-top-level-await": "^7.8.3"
- }
- },
- "babel-preset-jest": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-26.6.2.tgz",
- "integrity": "sha512-YvdtlVm9t3k777c5NPQIv6cxFFFapys25HiUmuSgHwIZhfifweR5c5Sf5nwE3MAbfu327CYSvps8Yx6ANLyleQ==",
- "dev": true,
- "requires": {
- "babel-plugin-jest-hoist": "^26.6.2",
- "babel-preset-current-node-syntax": "^1.0.0"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
- },
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
- "requires": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
- },
- "basic-auth": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
- "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
- "requires": {
- "safe-buffer": "5.1.2"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- }
- }
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
- "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
- "requires": {
- "tweetnacl": "^0.14.3"
- }
- },
- "bcryptjs": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz",
- "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms="
- },
- "bl": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
- "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
- "requires": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- }
- }
- },
- "body-parser": {
- "version": "1.19.0",
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
- "requires": {
- "bytes": "3.1.0",
- "content-type": "~1.0.4",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
- "on-finished": "~2.3.0",
- "qs": "6.7.0",
- "raw-body": "2.4.0",
- "type-is": "~1.6.17"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- }
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "browser-process-hrtime": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
- "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==",
- "dev": true
- },
- "bs-logger": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz",
- "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==",
- "dev": true,
- "requires": {
- "fast-json-stable-stringify": "2.x"
- }
- },
- "bser": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
- "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
- "dev": true,
- "requires": {
- "node-int64": "^0.4.0"
- }
- },
- "buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
- "buffer-equal-constant-time": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
- "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk="
- },
- "buffer-from": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
- "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A=="
- },
- "builtin-modules": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
- "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8="
- },
- "busboy": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz",
- "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=",
- "requires": {
- "dicer": "0.2.5",
- "readable-stream": "1.1.x"
- },
- "dependencies": {
- "readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
- }
- }
- },
- "bytes": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
- },
- "cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
- "requires": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- }
- },
- "cacheable-request": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
- "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
- "requires": {
- "clone-response": "^1.0.2",
- "get-stream": "^5.1.0",
- "http-cache-semantics": "^4.0.0",
- "keyv": "^3.0.0",
- "lowercase-keys": "^2.0.0",
- "normalize-url": "^4.1.0",
- "responselike": "^1.0.2"
- },
- "dependencies": {
- "get-stream": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
- "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "lowercase-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
- "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
- }
- }
- },
- "callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true
- },
- "camelcase": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
- "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
- "dev": true
- },
- "capture-exit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
- "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
- "dev": true,
- "requires": {
- "rsvp": "^4.8.4"
- }
- },
- "caseless": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
- "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
- },
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "char-regex": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
- "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
- "dev": true
- },
- "chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
- },
- "ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
- "dev": true
- },
- "cjs-module-lexer": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-0.6.0.tgz",
- "integrity": "sha512-uc2Vix1frTfnuzxxu1Hp4ktSvM3QaI4oXl4ZUqL1wjTu/BGki9TrCWoqLTg/drR1KwAEarXuRFCG2Svr1GxPFw==",
- "dev": true
- },
- "class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
- }
- },
- "cli-cursor": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
- "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
- "requires": {
- "restore-cursor": "^3.1.0"
- }
- },
- "cli-spinners": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.5.0.tgz",
- "integrity": "sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ=="
- },
- "cliui": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
- "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
- "dev": true,
- "requires": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^6.2.0"
- }
- },
- "clone": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
- },
- "clone-response": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
- "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "co": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
- "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
- "dev": true
- },
- "collect-v8-coverage": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz",
- "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==",
- "dev": true
- },
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "dev": true,
- "requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
- },
- "colorette": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
- "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw=="
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "commander": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
- "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA=="
- },
- "commondir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
- "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
- },
- "component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
- },
- "concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "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==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "configstore": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz",
- "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==",
- "requires": {
- "dot-prop": "^5.2.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^3.0.0",
- "unique-string": "^2.0.0",
- "write-file-atomic": "^3.0.0",
- "xdg-basedir": "^4.0.0"
- }
- },
- "content-disposition": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
- "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
- "requires": {
- "safe-buffer": "5.1.2"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- }
- }
- },
- "content-type": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
- "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
- },
- "convert-source-map": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
- "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- }
- }
- },
- "cookie": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
- "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
- },
- "cookie-parser": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.5.tgz",
- "integrity": "sha512-f13bPUj/gG/5mDr+xLmSxxDsB9DQiTIfhJS/sqjrmfAWiAN+x2O4i/XguTL9yDZ+/IFDanJ+5x7hC4CXT9Tdzw==",
- "requires": {
- "cookie": "0.4.0",
- "cookie-signature": "1.0.6"
- }
- },
- "cookie-signature": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
- "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
- },
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
- "dev": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "crypto-random-string": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
- "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA=="
- },
- "cssom": {
- "version": "0.4.4",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
- "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==",
- "dev": true
- },
- "cssstyle": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
- "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
- "dev": true,
- "requires": {
- "cssom": "~0.3.6"
- },
- "dependencies": {
- "cssom": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
- "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==",
- "dev": true
- }
- }
- },
- "dashdash": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
- "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "data-urls": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
- "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
- "dev": true,
- "requires": {
- "abab": "^2.0.3",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0"
- }
- },
- "debug": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
- "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
- "requires": {
- "ms": "2.1.2"
- },
- "dependencies": {
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- }
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- },
- "decimal.js": {
- "version": "10.2.1",
- "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.1.tgz",
- "integrity": "sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw==",
- "dev": true
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true
- },
- "decomment": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/decomment/-/decomment-0.9.3.tgz",
- "integrity": "sha512-5skH5BfUL3n09RDmMVaHS1QGCiZRnl2nArUwmsE9JRY93Ueh3tihYl5wIrDdAuXnoFhxVis/DmRWREO2c6DG3w==",
- "requires": {
- "esprima": "4.0.1"
- }
- },
- "decompress-response": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
- "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
- "requires": {
- "mimic-response": "^1.0.0"
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
- },
- "deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="
- },
- "deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
- "dev": true
- },
- "defaults": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
- "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
- "requires": {
- "clone": "^1.0.2"
- }
- },
- "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=="
- },
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- },
- "dependencies": {
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
- },
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
- },
- "dependency-tree": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/dependency-tree/-/dependency-tree-8.0.0.tgz",
- "integrity": "sha512-zagnV3jgizudEWY3FIFkGCrRr3+GukSMLlw1snIWAOL2beceC22hBXdeNjCnnfPZvbHIPB9DvacSCfD+IoOG3w==",
- "requires": {
- "commander": "^2.20.3",
- "debug": "^4.3.1",
- "filing-cabinet": "^3.0.0",
- "precinct": "^7.0.0",
- "typescript": "^3.9.7"
- },
- "dependencies": {
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "typescript": {
- "version": "3.9.9",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz",
- "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w=="
- }
- }
- },
- "destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
- },
- "detect-newline": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
- "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
- "dev": true
- },
- "detective-amd": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/detective-amd/-/detective-amd-3.0.1.tgz",
- "integrity": "sha512-vJgluSKkPyo+/McW9hzwmZwY1VPA3BS0VS1agdpPAWAhr65HwC1ox4Ig82rVfGYDYCa4GcKQON5JWBk++2Kf1Q==",
- "requires": {
- "ast-module-types": "^2.7.0",
- "escodegen": "^1.8.0",
- "get-amd-module-type": "^3.0.0",
- "node-source-walk": "^4.0.0"
- }
- },
- "detective-cjs": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/detective-cjs/-/detective-cjs-3.1.1.tgz",
- "integrity": "sha512-JQtNTBgFY6h8uT6pgph5QpV3IyxDv+z3qPk/FZRDT9TlFfm5dnRtpH39WtQEr1khqsUxVqXzKjZHpdoQvQbllg==",
- "requires": {
- "ast-module-types": "^2.4.0",
- "node-source-walk": "^4.0.0"
- }
- },
- "detective-es6": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/detective-es6/-/detective-es6-2.2.0.tgz",
- "integrity": "sha512-fSpNY0SLER7/sVgQZ1NxJPwmc9uCTzNgdkQDhAaj8NPYwr7Qji9QBcmbNvtMCnuuOGMuKn3O7jv0An+/WRWJZQ==",
- "requires": {
- "node-source-walk": "^4.0.0"
- }
- },
- "detective-less": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/detective-less/-/detective-less-1.0.2.tgz",
- "integrity": "sha512-Rps1xDkEEBSq3kLdsdnHZL1x2S4NGDcbrjmd4q+PykK5aJwDdP5MBgrJw1Xo+kyUHuv3JEzPqxr+Dj9ryeDRTA==",
- "requires": {
- "debug": "^4.0.0",
- "gonzales-pe": "^4.2.3",
- "node-source-walk": "^4.0.0"
- }
- },
- "detective-postcss": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/detective-postcss/-/detective-postcss-4.0.0.tgz",
- "integrity": "sha512-Fwc/g9VcrowODIAeKRWZfVA/EufxYL7XfuqJQFroBKGikKX83d2G7NFw6kDlSYGG3LNQIyVa+eWv1mqre+v4+A==",
- "requires": {
- "debug": "^4.1.1",
- "is-url": "^1.2.4",
- "postcss": "^8.1.7",
- "postcss-values-parser": "^2.0.1"
- }
- },
- "detective-sass": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/detective-sass/-/detective-sass-3.0.1.tgz",
- "integrity": "sha512-oSbrBozRjJ+QFF4WJFbjPQKeakoaY1GiR380NPqwdbWYd5wfl5cLWv0l6LsJVqrgWfFN1bjFqSeo32Nxza8Lbw==",
- "requires": {
- "debug": "^4.1.1",
- "gonzales-pe": "^4.2.3",
- "node-source-walk": "^4.0.0"
- }
- },
- "detective-scss": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/detective-scss/-/detective-scss-2.0.1.tgz",
- "integrity": "sha512-VveyXW4WQE04s05KlJ8K0bG34jtHQVgTc9InspqoQxvnelj/rdgSAy7i2DXAazyQNFKlWSWbS+Ro2DWKFOKTPQ==",
- "requires": {
- "debug": "^4.1.1",
- "gonzales-pe": "^4.2.3",
- "node-source-walk": "^4.0.0"
- }
- },
- "detective-stylus": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/detective-stylus/-/detective-stylus-1.0.0.tgz",
- "integrity": "sha1-UK7n24uruZA4HwEMY/q7pbWOVM0="
- },
- "detective-typescript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-6.0.0.tgz",
- "integrity": "sha512-vTidcSDK3QostdbrH2Rwf9FhvrgJ4oIaVw5jbolgruTejexk6nNa9DShGpuS8CFVDb1IP86jct5BaZt1wSxpkA==",
- "requires": {
- "@typescript-eslint/typescript-estree": "^4.8.2",
- "ast-module-types": "^2.7.1",
- "node-source-walk": "^4.2.0",
- "typescript": "^3.9.7"
- },
- "dependencies": {
- "typescript": {
- "version": "3.9.9",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz",
- "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w=="
- }
- }
- },
- "dicer": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz",
- "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=",
- "requires": {
- "readable-stream": "1.1.x",
- "streamsearch": "0.1.2"
- },
- "dependencies": {
- "readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
- }
- }
- },
- "diff": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
- "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A=="
- },
- "diff-sequences": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz",
- "integrity": "sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q=="
- },
- "dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "requires": {
- "path-type": "^4.0.0"
- }
- },
- "dns-packet": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.2.1.tgz",
- "integrity": "sha512-JHj2yJeKOqlxzeuYpN1d56GfhzivAxavNwHj9co3qptECel27B1rLY5PifJAvubsInX5pGLDjAHuCfCUc2Zv/w==",
- "requires": {
- "ip": "^1.1.5"
- }
- },
- "dns-socket": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/dns-socket/-/dns-socket-4.2.1.tgz",
- "integrity": "sha512-fNvDq86lS522+zMbh31X8cQzYQd6xumCNlxsuZF5TKxQThF/e+rJbVM6K8mmlsdcSm6yNjKJQq3Sf38viAJj8g==",
- "requires": {
- "dns-packet": "^5.1.2"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
- "docker-modem": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/docker-modem/-/docker-modem-2.1.4.tgz",
- "integrity": "sha512-vDTzZjjO1sXMY7m0xKjGdFMMZL7vIUerkC3G4l6rnrpOET2M6AOufM8ajmQoOB+6RfSn6I/dlikCUq/Y91Q1sQ==",
- "requires": {
- "debug": "^4.1.1",
- "readable-stream": "^3.5.0",
- "split-ca": "^1.0.1",
- "ssh2": "^0.8.7"
+ "node_modules/eslint-visitor-keys": {
+ "version": "3.4.3",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
- "dockerode": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/dockerode/-/dockerode-3.2.1.tgz",
- "integrity": "sha512-XsSVB5Wu5HWMg1aelV5hFSqFJaKS5x1aiV/+sT7YOzOq1IRl49I/UwV8Pe4x6t0iF9kiGkWu5jwfvbkcFVupBw==",
- "requires": {
- "docker-modem": "^2.1.0",
- "tar-fs": "~2.0.1"
+ "node_modules/eslint/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
- "domexception": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
- "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
+ "node_modules/eslint/node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
"dev": true,
- "requires": {
- "webidl-conversions": "^5.0.0"
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
- "dependencies": {
- "webidl-conversions": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
- "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==",
- "dev": true
- }
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
- "dot-prop": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz",
- "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==",
- "requires": {
- "is-obj": "^2.0.0"
+ "node_modules/eslint/node_modules/ignore": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
+ "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
}
},
- "duplexer3": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
- "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
- "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
+ "node_modules/eslint/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
}
},
- "ecdsa-sig-formatter": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
- "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
- "requires": {
- "safe-buffer": "^5.0.1"
+ "node_modules/espree": {
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
+ "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "acorn": "^8.14.0",
+ "acorn-jsx": "^5.3.2",
+ "eslint-visitor-keys": "^4.2.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
- "ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
- },
- "ejs": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz",
- "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==",
- "requires": {
- "jake": "^10.6.1"
+ "node_modules/espree/node_modules/eslint-visitor-keys": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
+ "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
- "emittery": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.7.2.tgz",
- "integrity": "sha512-A8OG5SR/ij3SsJdWDJdkkSYUjQdCUx6APQXem0SaEePBSRg4eymGYwBkKo1Y6DU+af/Jn2dBQqDBvjnr9Vi8nQ==",
- "dev": true
- },
- "emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
- },
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "requires": {
- "once": "^1.4.0"
+ "node_modules/esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "bin": {
+ "esparse": "bin/esparse.js",
+ "esvalidate": "bin/esvalidate.js"
+ },
+ "engines": {
+ "node": ">=4"
}
},
- "enhanced-resolve": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz",
- "integrity": "sha512-6njwt/NsZFUKhM6j9U8hzVyD4E4r0x7NQzhTCbcWOJ0IQjNSAoalWmb0AE51Wn+fwan5qVESWi7t2ToBxs9vrw==",
- "requires": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.2.0"
+ "node_modules/esquery": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz",
+ "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "estraverse": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=0.10"
}
},
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
}
},
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
- },
- "escodegen": {
- "version": "1.14.3",
- "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz",
- "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==",
- "requires": {
- "esprima": "^4.0.1",
- "estraverse": "^4.2.0",
- "esutils": "^2.0.2",
- "optionator": "^0.8.1",
- "source-map": "~0.6.1"
+ "node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=4.0"
}
},
- "eslint-visitor-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
- "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ=="
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true,
+ "license": "MIT"
},
- "esutils": {
+ "node_modules/esutils": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "etag": {
+ "node_modules/etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "eventemitter3": {
+ "node_modules/eventemitter3": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
- "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="
+ "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==",
+ "license": "MIT"
},
- "exec-sh": {
- "version": "0.3.4",
- "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz",
- "integrity": "sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A==",
- "dev": true
- },
- "execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "node_modules/execa": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
+ "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
"dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "cross-spawn": "^7.0.3",
+ "get-stream": "^6.0.0",
+ "human-signals": "^2.1.0",
+ "is-stream": "^2.0.0",
+ "merge-stream": "^2.0.0",
+ "npm-run-path": "^4.0.1",
+ "onetime": "^5.1.2",
+ "signal-exit": "^3.0.3",
+ "strip-final-newline": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
- "exit": {
+ "node_modules/exit": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz",
- "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
- "dev": true
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==",
"dev": true,
- "requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "expect": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/expect/-/expect-26.6.2.tgz",
- "integrity": "sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==",
+ "node_modules/expect": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz",
+ "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==",
"dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "ansi-styles": "^4.0.0",
- "jest-get-type": "^26.3.0",
- "jest-matcher-utils": "^26.6.2",
- "jest-message-util": "^26.6.2",
- "jest-regex-util": "^26.0.0"
- }
- },
- "express": {
- "version": "4.17.1",
- "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
- "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
- "requires": {
- "accepts": "~1.3.7",
- "array-flatten": "1.1.1",
- "body-parser": "1.19.0",
- "content-disposition": "0.5.3",
- "content-type": "~1.0.4",
- "cookie": "0.4.0",
- "cookie-signature": "1.0.6",
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "finalhandler": "~1.1.2",
- "fresh": "0.5.2",
- "merge-descriptors": "1.0.1",
- "methods": "~1.1.2",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "path-to-regexp": "0.1.7",
- "proxy-addr": "~2.0.5",
- "qs": "6.7.0",
- "range-parser": "~1.2.1",
- "safe-buffer": "5.1.2",
- "send": "0.17.1",
- "serve-static": "1.14.1",
- "setprototypeof": "1.1.1",
- "statuses": "~1.5.0",
- "type-is": "~1.6.18",
- "utils-merge": "1.0.1",
- "vary": "~1.1.2"
- },
+ "license": "MIT",
"dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- }
+ "@jest/expect-utils": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
+ "node_modules/express": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz",
+ "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==",
+ "license": "MIT",
+ "dependencies": {
+ "accepts": "^2.0.0",
+ "body-parser": "^2.2.0",
+ "content-disposition": "^1.0.0",
+ "content-type": "^1.0.5",
+ "cookie": "^0.7.1",
+ "cookie-signature": "^1.2.1",
+ "debug": "^4.4.0",
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "etag": "^1.8.1",
+ "finalhandler": "^2.1.0",
+ "fresh": "^2.0.0",
+ "http-errors": "^2.0.0",
+ "merge-descriptors": "^2.0.0",
+ "mime-types": "^3.0.0",
+ "on-finished": "^2.4.1",
+ "once": "^1.4.0",
+ "parseurl": "^1.3.3",
+ "proxy-addr": "^2.0.7",
+ "qs": "^6.14.0",
+ "range-parser": "^1.2.1",
+ "router": "^2.2.0",
+ "send": "^1.1.0",
+ "serve-static": "^2.2.0",
+ "statuses": "^2.0.1",
+ "type-is": "^2.0.1",
+ "vary": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 18"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
+ "node_modules/express/node_modules/cookie-signature": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",
+ "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.6.0"
}
},
- "extsprintf": {
+ "node_modules/extend": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
+ "license": "MIT"
+ },
+ "node_modules/extsprintf": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
- "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
+ "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==",
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "license": "MIT"
},
- "fast-deep-equal": {
+ "node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "license": "MIT"
},
- "fast-glob": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz",
- "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==",
- "requires": {
+ "node_modules/fast-glob": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.0",
+ "glob-parent": "^5.1.2",
"merge2": "^1.3.0",
- "micromatch": "^4.0.2",
- "picomatch": "^2.2.1"
+ "micromatch": "^4.0.8"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-glob/node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
}
},
- "fast-json-stable-stringify": {
+ "node_modules/fast-json-stable-stringify": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "license": "MIT"
},
- "fast-levenshtein": {
+ "node_modules/fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
+ "dev": true,
+ "license": "MIT"
},
- "fastq": {
- "version": "1.10.1",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.1.tgz",
- "integrity": "sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA==",
- "requires": {
+ "node_modules/fastq": {
+ "version": "1.19.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz",
+ "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
"reusify": "^1.0.4"
}
},
- "fb-watchman": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz",
- "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==",
+ "node_modules/fb-watchman": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
+ "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
"dev": true,
- "requires": {
+ "license": "Apache-2.0",
+ "dependencies": {
"bser": "2.1.1"
}
},
- "filelist": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz",
- "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==",
- "requires": {
- "minimatch": "^3.0.4"
+ "node_modules/file-entry-cache": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
+ "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flat-cache": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=16.0.0"
}
},
- "filing-cabinet": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-3.0.0.tgz",
- "integrity": "sha512-o8Qac5qxZ1uVidR4Sd7ZQbbqObFZlqXU4xu1suAYg9PQPcQFNTzOmxQa/MehIDMgIvXHTb42mWPNV9l3eHBPSw==",
- "requires": {
+ "node_modules/filelist": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz",
+ "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "minimatch": "^5.0.1"
+ }
+ },
+ "node_modules/filelist/node_modules/minimatch": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
+ "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/filing-cabinet": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/filing-cabinet/-/filing-cabinet-5.0.3.tgz",
+ "integrity": "sha512-PlPcMwVWg60NQkhvfoxZs4wEHjhlOO/y7OAm4sKM60o1Z9nttRY4mcdQxp/iZ+kg/Vv6Hw1OAaTbYVM9DA9pYg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
"app-module-path": "^2.2.0",
- "commander": "^2.20.3",
- "debug": "^4.3.1",
- "decomment": "^0.9.3",
- "enhanced-resolve": "^5.3.2",
- "is-relative-path": "^1.0.2",
- "module-definition": "^3.3.1",
- "module-lookup-amd": "^7.0.0",
- "resolve": "^1.19.0",
- "resolve-dependency-path": "^2.0.0",
- "sass-lookup": "^3.0.0",
- "stylus-lookup": "^3.0.1",
- "typescript": "^3.9.7"
- },
- "dependencies": {
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- },
- "typescript": {
- "version": "3.9.9",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz",
- "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w=="
- }
+ "commander": "^12.1.0",
+ "enhanced-resolve": "^5.18.0",
+ "module-definition": "^6.0.1",
+ "module-lookup-amd": "^9.0.3",
+ "resolve": "^1.22.10",
+ "resolve-dependency-path": "^4.0.1",
+ "sass-lookup": "^6.1.0",
+ "stylus-lookup": "^6.1.0",
+ "tsconfig-paths": "^4.2.0",
+ "typescript": "^5.7.3"
+ },
+ "bin": {
+ "filing-cabinet": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=18"
}
},
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "requires": {
+ "node_modules/filing-cabinet/node_modules/commander": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
"to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "finalhandler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "statuses": "~1.5.0",
- "unpipe": "~1.0.0"
- },
+ "node_modules/finalhandler": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz",
+ "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==",
+ "license": "MIT",
"dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- }
+ "debug": "^4.4.0",
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "on-finished": "^2.4.1",
+ "parseurl": "^1.3.3",
+ "statuses": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
}
},
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "node_modules/find-up": {
+ "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,
- "requires": {
- "locate-path": "^5.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^6.0.0",
"path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "flatten": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz",
- "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg=="
+ "node_modules/flat-cache": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
+ "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "flatted": "^3.2.9",
+ "keyv": "^4.5.4"
+ },
+ "engines": {
+ "node": ">=16"
+ }
},
- "follow-redirects": {
- "version": "1.13.2",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.2.tgz",
- "integrity": "sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA=="
+ "node_modules/flatted": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz",
+ "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==",
+ "dev": true,
+ "license": "ISC"
},
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true
+ "node_modules/follow-redirects": {
+ "version": "1.15.9",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
+ "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "license": "MIT",
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ }
},
- "forever-agent": {
+ "node_modules/forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
- "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
},
- "form-data": {
- "version": "2.5.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
- "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
- "requires": {
+ "node_modules/form-data": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.3.tgz",
+ "integrity": "sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
"asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
+ "combined-stream": "^1.0.8",
+ "es-set-tostringtag": "^2.1.0",
+ "mime-types": "^2.1.35",
+ "safe-buffer": "^5.2.1"
+ },
+ "engines": {
+ "node": ">= 0.12"
}
},
- "forwarded": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
- "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
+ "node_modules/form-data-encoder": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz",
+ "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 14.17"
+ }
},
- "fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "node_modules/form-data/node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
"dev": true,
- "requires": {
- "map-cache": "^0.2.2"
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
}
},
- "fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
+ "node_modules/form-data/node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/forwarded": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "fs-constants": {
+ "node_modules/fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",
+ "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/fs-constants": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
- },
- "fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
- "requires": {
- "at-least-node": "^1.0.0",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+ "license": "MIT"
+ },
+ "node_modules/fs-extra": {
+ "version": "11.3.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz",
+ "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==",
+ "license": "MIT",
+ "dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=14.14"
}
},
- "fs-minipass": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
- "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
- "requires": {
- "minipass": "^3.0.0"
- }
- },
- "fs.realpath": {
+ "node_modules/fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true,
+ "license": "ISC"
},
- "fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "node_modules/fsevents": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
- "optional": true
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
},
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ "node_modules/function-bind": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "gensync": {
+ "node_modules/function-timeout": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-0.1.1.tgz",
+ "integrity": "sha512-0NVVC0TaP7dSTvn1yMiy6d6Q8gifzbvQafO46RtLG/kHJUBNd+pVRGOBoK44wNBvtSPUJRfdVvkFdD3p0xvyZg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.9.0"
+ }
},
- "get-amd-module-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-3.0.0.tgz",
- "integrity": "sha512-99Q7COuACPfVt18zH9N4VAMyb81S6TUgJm2NgV6ERtkh9VIkAaByZkW530wl3lLN5KTtSrK9jVLxYsoP5hQKsw==",
- "requires": {
- "ast-module-types": "^2.3.2",
- "node-source-walk": "^4.0.0"
+ "node_modules/get-amd-module-type": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-amd-module-type/-/get-amd-module-type-6.0.1.tgz",
+ "integrity": "sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ast-module-types": "^6.0.1",
+ "node-source-walk": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=18"
}
},
- "get-caller-file": {
+ "node_modules/get-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
+ "license": "ISC",
+ "engines": {
+ "node": "6.* || 8.* || >= 10.*"
+ }
+ },
+ "node_modules/get-intrinsic": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
+ "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bind-apply-helpers": "^1.0.2",
+ "es-define-property": "^1.0.1",
+ "es-errors": "^1.3.0",
+ "es-object-atoms": "^1.1.1",
+ "function-bind": "^1.1.2",
+ "get-proto": "^1.0.1",
+ "gopd": "^1.2.0",
+ "has-symbols": "^1.1.0",
+ "hasown": "^2.0.2",
+ "math-intrinsics": "^1.1.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "get-own-enumerable-property-symbols": {
+ "node_modules/get-own-enumerable-property-symbols": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz",
- "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g=="
+ "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==",
+ "dev": true,
+ "license": "ISC"
},
- "get-package-type": {
+ "node_modules/get-package-type": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
"integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
- "dev": true
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.0.0"
+ }
},
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "requires": {
- "pump": "^3.0.0"
+ "node_modules/get-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
+ "license": "MIT",
+ "dependencies": {
+ "dunder-proto": "^1.0.1",
+ "es-object-atoms": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
- "dev": true
+ "node_modules/get-stream": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
+ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "getpass": {
+ "node_modules/getpass": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
- "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
- "requires": {
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "license": "MIT",
+ "dependencies": {
"assert-plus": "^1.0.0"
}
},
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "requires": {
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
- "minimatch": "^3.0.4",
+ "minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "glob-parent": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
- "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
- "requires": {
- "is-glob": "^4.0.1"
+ "node_modules/glob-parent": {
+ "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,
+ "license": "ISC",
+ "dependencies": {
+ "is-glob": "^4.0.3"
},
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/glob/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
- },
- "is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
- "requires": {
- "is-extglob": "^2.1.1"
- }
- }
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
- "globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true
- },
- "globby": {
- "version": "11.0.2",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz",
- "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==",
- "requires": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.1.1",
- "ignore": "^5.1.4",
- "merge2": "^1.3.0",
- "slash": "^3.0.0"
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
}
},
- "gonzales-pe": {
+ "node_modules/globals": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-16.2.0.tgz",
+ "integrity": "sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/gonzales-pe": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz",
"integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==",
- "requires": {
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
"minimist": "^1.2.5"
+ },
+ "bin": {
+ "gonzales": "bin/gonzales.js"
+ },
+ "engines": {
+ "node": ">=0.6.0"
}
},
- "got": {
- "version": "9.6.0",
- "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
- "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
- "requires": {
- "@sindresorhus/is": "^0.14.0",
- "@szmarczak/http-timer": "^1.1.2",
- "cacheable-request": "^6.0.0",
- "decompress-response": "^3.3.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^4.1.0",
- "lowercase-keys": "^1.0.1",
- "mimic-response": "^1.0.1",
- "p-cancelable": "^1.0.0",
- "to-readable-stream": "^1.0.0",
- "url-parse-lax": "^3.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.2.6",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz",
- "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ=="
- },
- "graphviz": {
- "version": "0.0.9",
- "resolved": "https://registry.npmjs.org/graphviz/-/graphviz-0.0.9.tgz",
- "integrity": "sha512-SmoY2pOtcikmMCqCSy2NO1YsRfu9OO0wpTlOYW++giGjfX1a6gax/m1Fo8IdUd0/3H15cTOfR1SMKwohj4LKsg==",
- "requires": {
- "temp": "~0.4.0"
- }
- },
- "growly": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
- "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
+ "node_modules/gopd": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/got": {
+ "version": "13.0.0",
+ "resolved": "https://registry.npmjs.org/got/-/got-13.0.0.tgz",
+ "integrity": "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==",
+ "license": "MIT",
+ "dependencies": {
+ "@sindresorhus/is": "^5.2.0",
+ "@szmarczak/http-timer": "^5.0.1",
+ "cacheable-lookup": "^7.0.0",
+ "cacheable-request": "^10.2.8",
+ "decompress-response": "^6.0.0",
+ "form-data-encoder": "^2.1.2",
+ "get-stream": "^6.0.1",
+ "http2-wrapper": "^2.1.10",
+ "lowercase-keys": "^3.0.0",
+ "p-cancelable": "^3.0.0",
+ "responselike": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/got?sponsor=1"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "license": "ISC"
+ },
+ "node_modules/graphemer": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
+ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
"dev": true,
- "optional": true
+ "license": "MIT"
},
- "har-schema": {
+ "node_modules/har-schema": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
- "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=4"
+ }
},
- "har-validator": {
+ "node_modules/har-validator": {
"version": "5.1.5",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
"integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
- "requires": {
+ "deprecated": "this library is no longer supported",
+ "license": "MIT",
+ "dependencies": {
"ajv": "^6.12.3",
"har-schema": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-flag": {
+ "node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
- },
- "has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
}
},
- "has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "dependencies": {
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "node_modules/has-symbols": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "hosted-git-info": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz",
- "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==",
- "dev": true
+ "node_modules/has-tostringtag": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
+ "license": "MIT",
+ "dependencies": {
+ "has-symbols": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "html-encoding-sniffer": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
- "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
- "dev": true,
- "requires": {
- "whatwg-encoding": "^1.0.5"
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
}
},
- "html-escaper": {
+ "node_modules/html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
- "http-cache-semantics": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
- "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
- },
- "http-errors": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
- "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.1",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.0"
- }
- },
- "http-proxy": {
+ "node_modules/http-cache-semantics": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz",
+ "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==",
+ "license": "BSD-2-Clause"
+ },
+ "node_modules/http-errors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
+ "license": "MIT",
+ "dependencies": {
+ "depd": "2.0.0",
+ "inherits": "2.0.4",
+ "setprototypeof": "1.2.0",
+ "statuses": "2.0.1",
+ "toidentifier": "1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/http-proxy": {
"version": "1.18.1",
"resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
"integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
- "requires": {
+ "license": "MIT",
+ "dependencies": {
"eventemitter3": "^4.0.0",
"follow-redirects": "^1.0.0",
"requires-port": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=8.0.0"
}
},
- "http-signature": {
+ "node_modules/http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
- "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
- "requires": {
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
+ "license": "MIT",
+ "dependencies": {
"assert-plus": "^1.0.0",
"jsprim": "^1.2.2",
"sshpk": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.8",
+ "npm": ">=1.3.7"
}
},
- "human-signals": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
- "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
- "dev": true
+ "node_modules/http2-wrapper": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz",
+ "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==",
+ "license": "MIT",
+ "dependencies": {
+ "quick-lru": "^5.1.1",
+ "resolve-alpn": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=10.19.0"
+ }
+ },
+ "node_modules/human-signals": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
+ "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "engines": {
+ "node": ">=10.17.0"
+ }
},
- "iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
+ "node_modules/iconv-lite": {
+ "version": "0.6.3",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+ "license": "MIT",
+ "dependencies": {
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "ieee754": {
+ "node_modules/ieee754": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/ignore": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz",
+ "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 4"
+ }
},
- "ignore": {
- "version": "5.1.8",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz",
- "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw=="
+ "node_modules/import-fresh": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
+ "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "import-local": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz",
- "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==",
+ "node_modules/import-local": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
+ "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
"dev": true,
- "requires": {
+ "license": "MIT",
+ "dependencies": {
"pkg-dir": "^4.2.0",
"resolve-cwd": "^3.0.0"
+ },
+ "bin": {
+ "import-local-fixture": "fixtures/cli.js"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "imurmurhash": {
+ "node_modules/imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
- },
- "indexes-of": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
- "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc="
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.8.19"
+ }
},
- "inflight": {
+ "node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "requires": {
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
"once": "^1.3.0",
"wrappy": "1"
}
},
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "license": "ISC"
},
- "ini": {
+ "node_modules/ini": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
- },
- "ip": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
- "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true,
+ "license": "ISC"
},
- "ip-regex": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.3.0.tgz",
- "integrity": "sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q=="
+ "node_modules/ip-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz",
+ "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "ipaddr.js": {
+ "node_modules/ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
- "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
}
},
- "is-arrayish": {
+ "node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-ci": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
- "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
"dev": true,
- "requires": {
- "ci-info": "^2.0.0"
- }
- },
- "is-core-module": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz",
- "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==",
- "requires": {
- "has": "^1.0.3"
- }
+ "license": "MIT"
},
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "node_modules/is-core-module": {
+ "version": "2.16.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
"dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
+ "license": "MIT",
"dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
+ "hasown": "^2.0.2"
},
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "is-docker": {
+ "node_modules/is-extglob": {
"version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz",
- "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
- "optional": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-extglob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
- "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA="
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "is-fullwidth-code-point": {
+ "node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
},
- "is-generator-fn": {
+ "node_modules/is-generator-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
"integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
},
- "is-glob": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
- "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
- "requires": {
- "is-extglob": "^1.0.0"
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "is-interactive": {
+ "node_modules/is-interactive": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
- "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="
+ "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
},
- "is-invalid-path": {
+ "node_modules/is-invalid-path": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/is-invalid-path/-/is-invalid-path-0.1.0.tgz",
- "integrity": "sha1-MHqFWzzxqTi0TqcNLGEQYFNxTzQ=",
- "requires": {
+ "integrity": "sha512-aZMG0T3F34mTg4eTdszcGXx54oiZ4NtHSft3hWNJMGJXUUqdIj3cOZuHcU0nCWWcY3jd7yRe/3AEm3vSNTpBGQ==",
+ "license": "MIT",
+ "dependencies": {
"is-glob": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "is-ip": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz",
- "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==",
- "requires": {
- "ip-regex": "^4.0.0"
+ "node_modules/is-invalid-path/node_modules/is-extglob": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz",
+ "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-invalid-path/node_modules/is-glob": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz",
+ "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==",
+ "license": "MIT",
+ "dependencies": {
+ "is-extglob": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-ip": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-5.0.1.tgz",
+ "integrity": "sha512-FCsGHdlrOnZQcp0+XT5a+pYowf33itBalCl+7ovNXC/7o5BhIpG14M3OrpPPdBSIQJCm+0M5+9mO7S9VVTTCFw==",
+ "license": "MIT",
+ "dependencies": {
+ "ip-regex": "^5.0.0",
+ "super-regex": "^0.2.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "is-number": {
+ "node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.12.0"
+ }
},
- "is-obj": {
+ "node_modules/is-obj": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
- "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="
- },
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
+ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
}
},
- "is-potential-custom-element-name": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz",
- "integrity": "sha1-DFLlS8yjkbssSUsh6GJtczbG45c=",
- "dev": true
+ "node_modules/is-promise": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
+ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
+ "license": "MIT"
},
- "is-regexp": {
+ "node_modules/is-regexp": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
- "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk="
- },
- "is-relative-path": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-relative-path/-/is-relative-path-1.0.2.tgz",
- "integrity": "sha1-CRtGoNZ8HtD+hfH4z93gBrslHUY="
+ "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
- "dev": true
+ "node_modules/is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "is-typedarray": {
+ "node_modules/is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
- "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==",
+ "license": "MIT"
+ },
+ "node_modules/is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "is-url": {
+ "node_modules/is-url": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz",
- "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww=="
+ "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/is-url-superb": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-url-superb/-/is-url-superb-4.0.0.tgz",
+ "integrity": "sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "is-valid-path": {
+ "node_modules/is-valid-path": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/is-valid-path/-/is-valid-path-0.1.1.tgz",
- "integrity": "sha1-EQ+f90w39mPh7HkV60UfLbk6yd8=",
- "requires": {
+ "integrity": "sha512-+kwPrVDu9Ms03L90Qaml+79+6DZHqHyRoANI6IsZJ/g8frhnfchDOBCa0RbQ6/kdHt5CS5OeIEyrYznNuVN+8A==",
+ "license": "MIT",
+ "dependencies": {
"is-invalid-path": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true
- },
- "is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "dev": true,
- "optional": true,
- "requires": {
- "is-docker": "^2.0.0"
- }
- },
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ "node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "license": "MIT"
},
- "isexe": {
+ "node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
+ "dev": true,
+ "license": "ISC"
},
- "isstream": {
+ "node_modules/isstream": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
- "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==",
+ "license": "MIT"
},
- "istanbul-lib-coverage": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
- "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
- "dev": true
+ "node_modules/istanbul-lib-coverage": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+ "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
+ "dev": true,
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=8"
+ }
},
- "istanbul-lib-instrument": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
- "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
+ "node_modules/istanbul-lib-instrument": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
+ "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
"dev": true,
- "requires": {
- "@babel/core": "^7.7.5",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.0.0",
- "semver": "^6.3.0"
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@babel/core": "^7.23.9",
+ "@babel/parser": "^7.23.9",
+ "@istanbuljs/schema": "^0.1.3",
+ "istanbul-lib-coverage": "^3.2.0",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "node_modules/istanbul-lib-report": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
+ "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
"dev": true,
- "requires": {
+ "license": "BSD-3-Clause",
+ "dependencies": {
"istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^3.0.0",
+ "make-dir": "^4.0.0",
"supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "istanbul-lib-source-maps": {
+ "node_modules/istanbul-lib-report/node_modules/make-dir": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
- "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/istanbul-lib-source-maps": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
"dev": true,
- "requires": {
+ "license": "BSD-3-Clause",
+ "dependencies": {
"debug": "^4.1.1",
"istanbul-lib-coverage": "^3.0.0",
"source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "istanbul-reports": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
- "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
+ "node_modules/istanbul-reports": {
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
+ "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
"dev": true,
- "requires": {
+ "license": "BSD-3-Clause",
+ "dependencies": {
"html-escaper": "^2.0.0",
"istanbul-lib-report": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "jake": {
- "version": "10.8.2",
- "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz",
- "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==",
- "requires": {
- "async": "0.9.x",
- "chalk": "^2.4.2",
- "filelist": "^1.0.1",
- "minimatch": "^3.0.4"
+ "node_modules/jake": {
+ "version": "10.9.2",
+ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz",
+ "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "async": "^3.2.3",
+ "chalk": "^4.0.2",
+ "filelist": "^1.0.4",
+ "minimatch": "^3.1.2"
+ },
+ "bin": {
+ "jake": "bin/cli.js"
},
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/jake/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "license": "MIT",
"dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
- }
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
- "jest": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest/-/jest-26.6.3.tgz",
- "integrity": "sha512-lGS5PXGAzR4RF7V5+XObhqz2KZIDUA1yD0DG6pBVmy10eh0ZIXQImRuzocsI/N2XZ1GrLFwTS27In2i2jlpq1Q==",
+ "node_modules/jake/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/jest": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz",
+ "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==",
"dev": true,
- "requires": {
- "@jest/core": "^26.6.3",
+ "license": "MIT",
+ "dependencies": {
+ "@jest/core": "^29.7.0",
+ "@jest/types": "^29.6.3",
"import-local": "^3.0.2",
- "jest-cli": "^26.6.3"
- },
- "dependencies": {
- "jest-cli": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-26.6.3.tgz",
- "integrity": "sha512-GF9noBSa9t08pSyl3CY4frMrqp+aQXFGFkf5hEPbh/pIUFYWMK6ZLTfbmadxJVcJrdRoChlWQsA2VkJcDFK8hg==",
- "dev": true,
- "requires": {
- "@jest/core": "^26.6.3",
- "@jest/test-result": "^26.6.2",
- "@jest/types": "^26.6.2",
- "chalk": "^4.0.0",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "import-local": "^3.0.2",
- "is-ci": "^2.0.0",
- "jest-config": "^26.6.3",
- "jest-util": "^26.6.2",
- "jest-validate": "^26.6.2",
- "prompts": "^2.0.1",
- "yargs": "^15.4.1"
- }
+ "jest-cli": "^29.7.0"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
}
}
},
- "jest-changed-files": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-26.6.2.tgz",
- "integrity": "sha512-fDS7szLcY9sCtIip8Fjry9oGf3I2ht/QT21bAHm5Dmf0mD4X3ReNUf17y+bO6fR8WgbIZTlbyG1ak/53cbRzKQ==",
+ "node_modules/jest-changed-files": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz",
+ "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==",
"dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "execa": "^4.0.0",
- "throat": "^5.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "execa": "^5.0.0",
+ "jest-util": "^29.7.0",
+ "p-limit": "^3.1.0"
},
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-circus": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz",
+ "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "execa": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz",
- "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==",
- "dev": true,
- "requires": {
- "cross-spawn": "^7.0.0",
- "get-stream": "^5.0.0",
- "human-signals": "^1.1.1",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.0",
- "onetime": "^5.1.0",
- "signal-exit": "^3.0.2",
- "strip-final-newline": "^2.0.0"
- }
- },
- "get-stream": {
- "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,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "is-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
- "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
- "dev": true
- },
- "npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "dev": true,
- "requires": {
- "path-key": "^3.0.0"
- }
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
+ "@jest/environment": "^29.7.0",
+ "@jest/expect": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "chalk": "^4.0.0",
+ "co": "^4.6.0",
+ "dedent": "^1.0.0",
+ "is-generator-fn": "^2.0.0",
+ "jest-each": "^29.7.0",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "p-limit": "^3.1.0",
+ "pretty-format": "^29.7.0",
+ "pure-rand": "^6.0.0",
+ "slash": "^3.0.0",
+ "stack-utils": "^2.0.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-cli": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz",
+ "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/core": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "chalk": "^4.0.0",
+ "create-jest": "^29.7.0",
+ "exit": "^0.1.2",
+ "import-local": "^3.0.2",
+ "jest-config": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "yargs": "^17.3.1"
+ },
+ "bin": {
+ "jest": "bin/jest.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
+ },
+ "peerDependenciesMeta": {
+ "node-notifier": {
+ "optional": true
}
}
},
- "jest-config": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-26.6.3.tgz",
- "integrity": "sha512-t5qdIj/bCj2j7NFVHb2nFB4aUdfucDn3JRKgrZnplb8nieAirAzRSHP8uDEd+qV6ygzg9Pz4YG7UTJf94LPSyg==",
+ "node_modules/jest-config": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz",
+ "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==",
"dev": true,
- "requires": {
- "@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^26.6.3",
- "@jest/types": "^26.6.2",
- "babel-jest": "^26.6.3",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@jest/test-sequencer": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "babel-jest": "^29.7.0",
"chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
"deepmerge": "^4.2.2",
- "glob": "^7.1.1",
- "graceful-fs": "^4.2.4",
- "jest-environment-jsdom": "^26.6.2",
- "jest-environment-node": "^26.6.2",
- "jest-get-type": "^26.3.0",
- "jest-jasmine2": "^26.6.3",
- "jest-regex-util": "^26.0.0",
- "jest-resolve": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-validate": "^26.6.2",
- "micromatch": "^4.0.2",
- "pretty-format": "^26.6.2"
- }
- },
- "jest-diff": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-26.6.2.tgz",
- "integrity": "sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==",
- "requires": {
+ "glob": "^7.1.3",
+ "graceful-fs": "^4.2.9",
+ "jest-circus": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-runner": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "parse-json": "^5.2.0",
+ "pretty-format": "^29.7.0",
+ "slash": "^3.0.0",
+ "strip-json-comments": "^3.1.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "peerDependencies": {
+ "@types/node": "*",
+ "ts-node": ">=9.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "ts-node": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-diff": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz",
+ "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
"chalk": "^4.0.0",
- "diff-sequences": "^26.6.2",
- "jest-get-type": "^26.3.0",
- "pretty-format": "^26.6.2"
+ "diff-sequences": "^29.6.3",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "jest-docblock": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-26.0.0.tgz",
- "integrity": "sha512-RDZ4Iz3QbtRWycd8bUEPxQsTlYazfYn/h5R65Fc6gOfwozFhoImx+affzky/FFBuqISPTqjXomoIGJVKBWoo0w==",
+ "node_modules/jest-docblock": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz",
+ "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==",
"dev": true,
- "requires": {
+ "license": "MIT",
+ "dependencies": {
"detect-newline": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "jest-each": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-26.6.2.tgz",
- "integrity": "sha512-Mer/f0KaATbjl8MCJ+0GEpNdqmnVmDYqCTJYTvoo7rqmRiDllmp2AYN+06F93nXcY3ur9ShIjS+CO/uD+BbH4A==",
+ "node_modules/jest-each": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz",
+ "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==",
"dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
"chalk": "^4.0.0",
- "jest-get-type": "^26.3.0",
- "jest-util": "^26.6.2",
- "pretty-format": "^26.6.2"
+ "jest-get-type": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "jest-environment-jsdom": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-26.6.2.tgz",
- "integrity": "sha512-jgPqCruTlt3Kwqg5/WVFyHIOJHsiAvhcp2qiR2QQstuG9yWox5+iHpU3ZrcBxW14T4fe5Z68jAfLRh7joCSP2Q==",
+ "node_modules/jest-environment-node": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz",
+ "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==",
"dev": true,
- "requires": {
- "@jest/environment": "^26.6.2",
- "@jest/fake-timers": "^26.6.2",
- "@jest/types": "^26.6.2",
+ "license": "MIT",
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
- "jest-mock": "^26.6.2",
- "jest-util": "^26.6.2",
- "jsdom": "^16.4.0"
+ "jest-mock": "^29.7.0",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "jest-environment-node": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-26.6.2.tgz",
- "integrity": "sha512-zhtMio3Exty18dy8ee8eJ9kjnRyZC1N4C1Nt/VShN1apyXc8rWGtJ9lI7vqiWcyyXS4BVSEn9lxAM2D+07/Tag==",
+ "node_modules/jest-get-type": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz",
+ "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==",
"dev": true,
- "requires": {
- "@jest/environment": "^26.6.2",
- "@jest/fake-timers": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "jest-mock": "^26.6.2",
- "jest-util": "^26.6.2"
+ "license": "MIT",
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "jest-get-type": {
- "version": "26.3.0",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-26.3.0.tgz",
- "integrity": "sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig=="
- },
- "jest-haste-map": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz",
- "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==",
+ "node_modules/jest-haste-map": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
+ "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
"dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "@types/graceful-fs": "^4.1.2",
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/graceful-fs": "^4.1.3",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
- "fsevents": "^2.1.2",
- "graceful-fs": "^4.2.4",
- "jest-regex-util": "^26.0.0",
- "jest-serializer": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-worker": "^26.6.2",
- "micromatch": "^4.0.2",
- "sane": "^4.0.3",
- "walker": "^1.0.7"
- }
- },
- "jest-jasmine2": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-26.6.3.tgz",
- "integrity": "sha512-kPKUrQtc8aYwBV7CqBg5pu+tmYXlvFlSFYn18ev4gPFtrRzB15N2gW/Roew3187q2w2eHuu0MU9TJz6w0/nPEg==",
- "dev": true,
- "requires": {
- "@babel/traverse": "^7.1.0",
- "@jest/environment": "^26.6.2",
- "@jest/source-map": "^26.6.2",
- "@jest/test-result": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/node": "*",
- "chalk": "^4.0.0",
- "co": "^4.6.0",
- "expect": "^26.6.2",
- "is-generator-fn": "^2.0.0",
- "jest-each": "^26.6.2",
- "jest-matcher-utils": "^26.6.2",
- "jest-message-util": "^26.6.2",
- "jest-runtime": "^26.6.3",
- "jest-snapshot": "^26.6.2",
- "jest-util": "^26.6.2",
- "pretty-format": "^26.6.2",
- "throat": "^5.0.0"
+ "graceful-fs": "^4.2.9",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "walker": "^1.0.8"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "^2.3.2"
}
},
- "jest-leak-detector": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-26.6.2.tgz",
- "integrity": "sha512-i4xlXpsVSMeKvg2cEKdfhh0H39qlJlP5Ex1yQxwF9ubahboQYMgTtz5oML35AVA3B4Eu+YsmwaiKVev9KCvLxg==",
+ "node_modules/jest-leak-detector": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz",
+ "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==",
"dev": true,
- "requires": {
- "jest-get-type": "^26.3.0",
- "pretty-format": "^26.6.2"
+ "license": "MIT",
+ "dependencies": {
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "jest-matcher-utils": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz",
- "integrity": "sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==",
+ "node_modules/jest-matcher-utils": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz",
+ "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==",
"dev": true,
- "requires": {
+ "license": "MIT",
+ "dependencies": {
"chalk": "^4.0.0",
- "jest-diff": "^26.6.2",
- "jest-get-type": "^26.3.0",
- "pretty-format": "^26.6.2"
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "pretty-format": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "jest-message-util": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-26.6.2.tgz",
- "integrity": "sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==",
+ "node_modules/jest-message-util": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz",
+ "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==",
"dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "@jest/types": "^26.6.2",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/code-frame": "^7.12.13",
+ "@jest/types": "^29.6.3",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "micromatch": "^4.0.2",
- "pretty-format": "^26.6.2",
+ "graceful-fs": "^4.2.9",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^29.7.0",
"slash": "^3.0.0",
- "stack-utils": "^2.0.2"
+ "stack-utils": "^2.0.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "jest-mock": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-26.6.2.tgz",
- "integrity": "sha512-YyFjePHHp1LzpzYcmgqkJ0nm0gg/lJx2aZFzFy1S6eUqNjXsOqTK10zNRff2dNfssgokjkG65OlWNcIlgd3zew==",
+ "node_modules/jest-mock": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz",
+ "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==",
"dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "@types/node": "*"
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
+ "jest-util": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "jest-pnp-resolver": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
- "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
- "dev": true
- },
- "jest-regex-util": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz",
- "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==",
- "dev": true
- },
- "jest-resolve": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-26.6.2.tgz",
- "integrity": "sha512-sOxsZOq25mT1wRsfHcbtkInS+Ek7Q8jCHUB0ZUTP0tc/c41QHriU/NunqMfCUWsL4H3MHpvQD4QR9kSYhS7UvQ==",
- "dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
+ "node_modules/jest-pnp-resolver": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
+ "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ },
+ "peerDependencies": {
+ "jest-resolve": "*"
+ },
+ "peerDependenciesMeta": {
+ "jest-resolve": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jest-regex-util": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-resolve": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz",
+ "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
"chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^26.6.2",
- "read-pkg-up": "^7.0.1",
- "resolve": "^1.18.1",
+ "jest-util": "^29.7.0",
+ "jest-validate": "^29.7.0",
+ "resolve": "^1.20.0",
+ "resolve.exports": "^2.0.0",
"slash": "^3.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "jest-resolve-dependencies": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-26.6.3.tgz",
- "integrity": "sha512-pVwUjJkxbhe4RY8QEWzN3vns2kqyuldKpxlxJlzEYfKSvY6/bMvxoFrYYzUO1Gx28yKWN37qyV7rIoIp2h8fTg==",
+ "node_modules/jest-resolve-dependencies": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz",
+ "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==",
"dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "jest-regex-util": "^26.0.0",
- "jest-snapshot": "^26.6.2"
+ "license": "MIT",
+ "dependencies": {
+ "jest-regex-util": "^29.6.3",
+ "jest-snapshot": "^29.7.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "jest-runner": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-26.6.3.tgz",
- "integrity": "sha512-atgKpRHnaA2OvByG/HpGA4g6CSPS/1LK0jK3gATJAoptC1ojltpmVlYC3TYgdmGp+GLuhzpH30Gvs36szSL2JQ==",
+ "node_modules/jest-runner": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz",
+ "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==",
"dev": true,
- "requires": {
- "@jest/console": "^26.6.2",
- "@jest/environment": "^26.6.2",
- "@jest/test-result": "^26.6.2",
- "@jest/types": "^26.6.2",
+ "license": "MIT",
+ "dependencies": {
+ "@jest/console": "^29.7.0",
+ "@jest/environment": "^29.7.0",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
- "emittery": "^0.7.1",
- "exit": "^0.1.2",
- "graceful-fs": "^4.2.4",
- "jest-config": "^26.6.3",
- "jest-docblock": "^26.0.0",
- "jest-haste-map": "^26.6.2",
- "jest-leak-detector": "^26.6.2",
- "jest-message-util": "^26.6.2",
- "jest-resolve": "^26.6.2",
- "jest-runtime": "^26.6.3",
- "jest-util": "^26.6.2",
- "jest-worker": "^26.6.2",
- "source-map-support": "^0.5.6",
- "throat": "^5.0.0"
- }
- },
- "jest-runtime": {
- "version": "26.6.3",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-26.6.3.tgz",
- "integrity": "sha512-lrzyR3N8sacTAMeonbqpnSka1dHNux2uk0qqDXVkMv2c/A3wYnvQ4EXuI013Y6+gSKSCxdaczvf4HF0mVXHRdw==",
- "dev": true,
- "requires": {
- "@jest/console": "^26.6.2",
- "@jest/environment": "^26.6.2",
- "@jest/fake-timers": "^26.6.2",
- "@jest/globals": "^26.6.2",
- "@jest/source-map": "^26.6.2",
- "@jest/test-result": "^26.6.2",
- "@jest/transform": "^26.6.2",
- "@jest/types": "^26.6.2",
- "@types/yargs": "^15.0.0",
+ "emittery": "^0.13.1",
+ "graceful-fs": "^4.2.9",
+ "jest-docblock": "^29.7.0",
+ "jest-environment-node": "^29.7.0",
+ "jest-haste-map": "^29.7.0",
+ "jest-leak-detector": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-resolve": "^29.7.0",
+ "jest-runtime": "^29.7.0",
+ "jest-util": "^29.7.0",
+ "jest-watcher": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "p-limit": "^3.1.0",
+ "source-map-support": "0.5.13"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-runtime": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz",
+ "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/environment": "^29.7.0",
+ "@jest/fake-timers": "^29.7.0",
+ "@jest/globals": "^29.7.0",
+ "@jest/source-map": "^29.6.3",
+ "@jest/test-result": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "@types/node": "*",
"chalk": "^4.0.0",
- "cjs-module-lexer": "^0.6.0",
+ "cjs-module-lexer": "^1.0.0",
"collect-v8-coverage": "^1.0.0",
- "exit": "^0.1.2",
"glob": "^7.1.3",
- "graceful-fs": "^4.2.4",
- "jest-config": "^26.6.3",
- "jest-haste-map": "^26.6.2",
- "jest-message-util": "^26.6.2",
- "jest-mock": "^26.6.2",
- "jest-regex-util": "^26.0.0",
- "jest-resolve": "^26.6.2",
- "jest-snapshot": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-validate": "^26.6.2",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-mock": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-resolve": "^29.7.0",
+ "jest-snapshot": "^29.7.0",
+ "jest-util": "^29.7.0",
"slash": "^3.0.0",
- "strip-bom": "^4.0.0",
- "yargs": "^15.4.1"
- }
- },
- "jest-serializer": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz",
- "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "graceful-fs": "^4.2.4"
+ "strip-bom": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "jest-snapshot": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-26.6.2.tgz",
- "integrity": "sha512-OLhxz05EzUtsAmOMzuupt1lHYXCNib0ECyuZ/PZOx9TrZcC8vL0x+DUG3TL+GLX3yHG45e6YGjIm0XwDc3q3og==",
+ "node_modules/jest-snapshot": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz",
+ "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==",
"dev": true,
- "requires": {
- "@babel/types": "^7.0.0",
- "@jest/types": "^26.6.2",
- "@types/babel__traverse": "^7.0.4",
- "@types/prettier": "^2.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/core": "^7.11.6",
+ "@babel/generator": "^7.7.2",
+ "@babel/plugin-syntax-jsx": "^7.7.2",
+ "@babel/plugin-syntax-typescript": "^7.7.2",
+ "@babel/types": "^7.3.3",
+ "@jest/expect-utils": "^29.7.0",
+ "@jest/transform": "^29.7.0",
+ "@jest/types": "^29.6.3",
+ "babel-preset-current-node-syntax": "^1.0.0",
"chalk": "^4.0.0",
- "expect": "^26.6.2",
- "graceful-fs": "^4.2.4",
- "jest-diff": "^26.6.2",
- "jest-get-type": "^26.3.0",
- "jest-haste-map": "^26.6.2",
- "jest-matcher-utils": "^26.6.2",
- "jest-message-util": "^26.6.2",
- "jest-resolve": "^26.6.2",
+ "expect": "^29.7.0",
+ "graceful-fs": "^4.2.9",
+ "jest-diff": "^29.7.0",
+ "jest-get-type": "^29.6.3",
+ "jest-matcher-utils": "^29.7.0",
+ "jest-message-util": "^29.7.0",
+ "jest-util": "^29.7.0",
"natural-compare": "^1.4.0",
- "pretty-format": "^26.6.2",
- "semver": "^7.3.2"
- },
- "dependencies": {
- "semver": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
- "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- }
+ "pretty-format": "^29.7.0",
+ "semver": "^7.5.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "jest-util": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz",
- "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==",
+ "node_modules/jest-util": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "is-ci": "^2.0.0",
- "micromatch": "^4.0.2"
+ "ci-info": "^3.2.0",
+ "graceful-fs": "^4.2.9",
+ "picomatch": "^2.2.3"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "jest-validate": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-26.6.2.tgz",
- "integrity": "sha512-NEYZ9Aeyj0i5rQqbq+tpIOom0YS1u2MVu6+euBsvpgIme+FOfRmoC4R5p0JiAUpaFvFy24xgrpMknarR/93XjQ==",
+ "node_modules/jest-validate": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz",
+ "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==",
"dev": true,
- "requires": {
- "@jest/types": "^26.6.2",
- "camelcase": "^6.0.0",
+ "license": "MIT",
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "camelcase": "^6.2.0",
"chalk": "^4.0.0",
- "jest-get-type": "^26.3.0",
+ "jest-get-type": "^29.6.3",
"leven": "^3.1.0",
- "pretty-format": "^26.6.2"
+ "pretty-format": "^29.7.0"
},
- "dependencies": {
- "camelcase": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz",
- "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==",
- "dev": true
- }
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-validate/node_modules/camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "jest-watcher": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-26.6.2.tgz",
- "integrity": "sha512-WKJob0P/Em2csiVthsI68p6aGKTIcsfjH9Gsx1f0A3Italz43e3ho0geSAVsmj09RWOELP1AZ/DXyJgOgDKxXQ==",
+ "node_modules/jest-watcher": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz",
+ "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==",
"dev": true,
- "requires": {
- "@jest/test-result": "^26.6.2",
- "@jest/types": "^26.6.2",
+ "license": "MIT",
+ "dependencies": {
+ "@jest/test-result": "^29.7.0",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
- "jest-util": "^26.6.2",
+ "emittery": "^0.13.1",
+ "jest-util": "^29.7.0",
"string-length": "^4.0.1"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
- "jest-worker": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
- "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
+ "node_modules/jest-worker": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
"dev": true,
- "requires": {
+ "license": "MIT",
+ "dependencies": {
"@types/node": "*",
+ "jest-util": "^29.7.0",
"merge-stream": "^2.0.0",
- "supports-color": "^7.0.0"
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
- "js-base64": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.6.0.tgz",
- "integrity": "sha512-wVdUBYQeY2gY73RIlPrysvpYx+2vheGo8Y1SNQv/BzHToWpAZzJU7Z6uheKMAe+GLSBig5/Ps2nxg/8tRB73xg=="
+ "node_modules/js-base64": {
+ "version": "3.7.7",
+ "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz",
+ "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==",
+ "license": "BSD-3-Clause"
},
- "js-tokens": {
+ "node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true,
+ "license": "MIT"
},
- "js-yaml": {
- "version": "3.14.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
- "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
+ "node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
}
},
- "jsbn": {
+ "node_modules/jsbn": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
- "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
- },
- "jsdom": {
- "version": "16.4.0",
- "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.4.0.tgz",
- "integrity": "sha512-lYMm3wYdgPhrl7pDcRmvzPhhrGVBeVhPIqeHjzeiHN3DFmD1RBpbExbi8vU7BJdH8VAZYovR8DMt0PNNDM7k8w==",
- "dev": true,
- "requires": {
- "abab": "^2.0.3",
- "acorn": "^7.1.1",
- "acorn-globals": "^6.0.0",
- "cssom": "^0.4.4",
- "cssstyle": "^2.2.0",
- "data-urls": "^2.0.0",
- "decimal.js": "^10.2.0",
- "domexception": "^2.0.1",
- "escodegen": "^1.14.1",
- "html-encoding-sniffer": "^2.0.1",
- "is-potential-custom-element-name": "^1.0.0",
- "nwsapi": "^2.2.0",
- "parse5": "5.1.1",
- "request": "^2.88.2",
- "request-promise-native": "^1.0.8",
- "saxes": "^5.0.0",
- "symbol-tree": "^3.2.4",
- "tough-cookie": "^3.0.1",
- "w3c-hr-time": "^1.0.2",
- "w3c-xmlserializer": "^2.0.0",
- "webidl-conversions": "^6.1.0",
- "whatwg-encoding": "^1.0.5",
- "whatwg-mimetype": "^2.3.0",
- "whatwg-url": "^8.0.0",
- "ws": "^7.2.3",
- "xml-name-validator": "^3.0.0"
- },
- "dependencies": {
- "ip-regex": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",
- "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
- "dev": true
- },
- "tough-cookie": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",
- "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==",
- "dev": true,
- "requires": {
- "ip-regex": "^2.1.0",
- "psl": "^1.1.28",
- "punycode": "^2.1.1"
- }
- }
- }
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==",
+ "license": "MIT"
},
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true
+ "node_modules/jsesc": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "jsesc": "bin/jsesc"
+ },
+ "engines": {
+ "node": ">=6"
+ }
},
- "json-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
- "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
+ "node_modules/json-buffer": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
+ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
+ "license": "MIT"
},
- "json-parse-even-better-errors": {
+ "node_modules/json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
- "json-schema": {
- "version": "0.2.3",
- "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
- "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
+ "node_modules/json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==",
+ "license": "(AFL-2.1 OR BSD-3-Clause)"
},
- "json-schema-traverse": {
+ "node_modules/json-schema-traverse": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "license": "MIT"
},
- "json-stringify-safe": {
+ "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,
+ "license": "MIT"
+ },
+ "node_modules/json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
- "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
+ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
+ "license": "ISC"
},
- "json5": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
- "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
+ "node_modules/json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
"dev": true,
- "requires": {
- "minimist": "^1.2.5"
+ "license": "MIT",
+ "bin": {
+ "json5": "lib/cli.js"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "jsonfile": {
+ "node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "requires": {
- "graceful-fs": "^4.1.6",
+ "license": "MIT",
+ "dependencies": {
"universalify": "^2.0.0"
+ },
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
}
},
- "jsonwebtoken": {
- "version": "8.5.1",
- "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
- "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
- "requires": {
+ "node_modules/jsonwebtoken": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz",
+ "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==",
+ "license": "MIT",
+ "dependencies": {
"jws": "^3.2.2",
"lodash.includes": "^4.3.0",
"lodash.isboolean": "^3.0.3",
@@ -13163,1125 +6573,1600 @@
"lodash.isstring": "^4.0.1",
"lodash.once": "^4.0.0",
"ms": "^2.1.1",
- "semver": "^5.6.0"
+ "semver": "^7.5.4"
},
- "dependencies": {
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
- }
+ "engines": {
+ "node": ">=12",
+ "npm": ">=6"
}
},
- "jsprim": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
- "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
- "requires": {
+ "node_modules/jsprim": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+ "license": "MIT",
+ "dependencies": {
"assert-plus": "1.0.0",
"extsprintf": "1.3.0",
- "json-schema": "0.2.3",
+ "json-schema": "0.4.0",
"verror": "1.10.0"
+ },
+ "engines": {
+ "node": ">=0.6.0"
}
},
- "jwa": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
- "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
- "requires": {
- "buffer-equal-constant-time": "1.0.1",
+ "node_modules/jwa": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz",
+ "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==",
+ "license": "MIT",
+ "dependencies": {
+ "buffer-equal-constant-time": "^1.0.1",
"ecdsa-sig-formatter": "1.0.11",
"safe-buffer": "^5.0.1"
}
},
- "jws": {
+ "node_modules/jws": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
"integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
- "requires": {
+ "license": "MIT",
+ "dependencies": {
"jwa": "^1.4.1",
"safe-buffer": "^5.0.1"
}
},
- "keyv": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
- "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
- "requires": {
- "json-buffer": "3.0.0"
+ "node_modules/keyv": {
+ "version": "4.5.4",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
+ "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
+ "license": "MIT",
+ "dependencies": {
+ "json-buffer": "3.0.1"
}
},
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
- "kleur": {
+ "node_modules/kleur": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "dev": true
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
},
- "leven": {
+ "node_modules/leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
- "dev": true
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
},
- "levn": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
- "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
- "requires": {
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2"
+ "node_modules/levn": {
+ "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,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "lines-and-columns": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz",
- "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
- "dev": true
+ "node_modules/lines-and-columns": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
+ "dev": true,
+ "license": "MIT"
},
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "node_modules/locate-path": {
+ "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,
- "requires": {
- "p-locate": "^4.1.0"
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
- "dev": true
+ "node_modules/lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
+ "license": "MIT"
},
- "lodash.includes": {
+ "node_modules/lodash.includes": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
- "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8="
+ "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==",
+ "license": "MIT"
},
- "lodash.isboolean": {
+ "node_modules/lodash.isboolean": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
- "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY="
+ "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==",
+ "license": "MIT"
},
- "lodash.isinteger": {
+ "node_modules/lodash.isinteger": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
- "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M="
+ "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==",
+ "license": "MIT"
},
- "lodash.isnumber": {
+ "node_modules/lodash.isnumber": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
- "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w="
+ "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==",
+ "license": "MIT"
},
- "lodash.isplainobject": {
+ "node_modules/lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
- "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
+ "license": "MIT"
},
- "lodash.isstring": {
+ "node_modules/lodash.isstring": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
- "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE="
+ "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==",
+ "license": "MIT"
+ },
+ "node_modules/lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "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,
+ "license": "MIT"
},
- "lodash.once": {
+ "node_modules/lodash.once": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
- "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
+ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
+ "license": "MIT"
},
- "lodash.sortby": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
- "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
- "dev": true
+ "node_modules/log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "log-symbols": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz",
- "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==",
- "requires": {
- "chalk": "^4.0.0"
+ "node_modules/long": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz",
+ "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==",
+ "license": "Apache-2.0"
+ },
+ "node_modules/lowercase-keys": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz",
+ "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "lowercase-keys": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
- "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
+ "node_modules/lru-cache": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "yallist": "^3.0.2"
+ }
},
- "lru-cache": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
- "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
- "requires": {
- "yallist": "^4.0.0"
+ "node_modules/luxon": {
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz",
+ "integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12"
}
},
- "madge": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/madge/-/madge-4.0.2.tgz",
- "integrity": "sha512-l5bnA2dvyk0azLKDbOTCI+wDZ6nB007PhvPdmiYlPmqwVi49JPbhQrH/t4u8E6Akp3gwji1GZuA+v/F5q6yoWQ==",
- "requires": {
- "chalk": "^4.1.0",
- "commander": "^6.2.1",
+ "node_modules/madge": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/madge/-/madge-8.0.0.tgz",
+ "integrity": "sha512-9sSsi3TBPhmkTCIpVQF0SPiChj1L7Rq9kU2KDG1o6v2XH9cCw086MopjVCD+vuoL5v8S77DTbVopTO8OUiQpIw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "chalk": "^4.1.2",
+ "commander": "^7.2.0",
"commondir": "^1.0.1",
- "debug": "^4.0.1",
- "dependency-tree": "^8.0.0",
- "detective-amd": "^3.0.1",
- "detective-cjs": "^3.1.1",
- "detective-es6": "^2.1.0",
- "detective-less": "^1.0.2",
- "detective-postcss": "^4.0.0",
- "detective-sass": "^3.0.1",
- "detective-scss": "^2.0.1",
- "detective-stylus": "^1.0.0",
- "detective-typescript": "^7.0.0",
- "graphviz": "0.0.9",
- "ora": "^5.1.0",
+ "debug": "^4.3.4",
+ "dependency-tree": "^11.0.0",
+ "ora": "^5.4.1",
"pluralize": "^8.0.0",
- "precinct": "^7.0.0",
- "pretty-ms": "^7.0.0",
- "rc": "^1.2.7",
- "typescript": "^3.9.5",
+ "pretty-ms": "^7.0.1",
+ "rc": "^1.2.8",
+ "stream-to-array": "^2.3.0",
+ "ts-graphviz": "^2.1.2",
"walkdir": "^0.4.1"
},
- "dependencies": {
- "detective-typescript": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/detective-typescript/-/detective-typescript-7.0.0.tgz",
- "integrity": "sha512-y/Ev98AleGvl43YKTNcA2Q+lyFmsmCfTTNWy4cjEJxoLkbobcXtRS0Kvx06daCgr2GdtlwLfNzL553BkktfJoA==",
- "requires": {
- "@typescript-eslint/typescript-estree": "^4.8.2",
- "ast-module-types": "^2.7.1",
- "node-source-walk": "^4.2.0",
- "typescript": "^3.9.7"
- }
- },
+ "bin": {
+ "madge": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "type": "individual",
+ "url": "https://www.paypal.me/pahen"
+ },
+ "peerDependencies": {
+ "typescript": "^5.4.4"
+ },
+ "peerDependenciesMeta": {
"typescript": {
- "version": "3.9.9",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.9.tgz",
- "integrity": "sha512-kdMjTiekY+z/ubJCATUPlRDl39vXYiMV9iyeMuEuXZh2we6zz80uovNN2WlAxmmdE/Z/YQe+EbOEXB5RHEED3w=="
+ "optional": true
}
}
},
- "make-dir": {
+ "node_modules/magic-string": {
+ "version": "0.30.17",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
+ "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.5.0"
+ }
+ },
+ "node_modules/make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "requires": {
+ "license": "MIT",
+ "dependencies": {
"semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/make-dir/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
}
},
- "make-error": {
+ "node_modules/make-error": {
"version": "1.3.6",
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
- "makeerror": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
- "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+ "node_modules/makeerror": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
+ "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
"dev": true,
- "requires": {
- "tmpl": "1.0.x"
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "tmpl": "1.0.5"
}
},
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
- "dev": true
- },
- "map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
- "dev": true,
- "requires": {
- "object-visit": "^1.0.0"
+ "node_modules/math-intrinsics": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
}
},
- "media-typer": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
- "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
+ "node_modules/media-typer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz",
+ "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
+ "node_modules/merge-descriptors": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz",
+ "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "merge-stream": {
+ "node_modules/merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
- },
- "merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
- },
- "methods": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
- "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
+ "dev": true,
+ "license": "MIT"
},
- "micromatch": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
- "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==",
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.0.5"
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 8"
}
},
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ "node_modules/micromatch": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "braces": "^3.0.3",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
},
- "mime-db": {
- "version": "1.45.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz",
- "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w=="
+ "node_modules/mime-db": {
+ "version": "1.54.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",
+ "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "mime-types": {
- "version": "2.1.28",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz",
- "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==",
- "requires": {
- "mime-db": "1.45.0"
+ "node_modules/mime-types": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz",
+ "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "^1.54.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
}
},
- "mimic-fn": {
+ "node_modules/mimic-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
+ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
},
- "mimic-response": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
- "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
+ "node_modules/mimic-response": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz",
+ "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==",
+ "license": "MIT",
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "requires": {
- "brace-expansion": "^1.1.7"
+ "node_modules/minimatch": {
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
+ "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "minipass": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz",
- "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==",
- "requires": {
- "yallist": "^4.0.0"
+ "node_modules/minipass": {
+ "version": "4.2.8",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz",
+ "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==",
+ "dev": true,
+ "license": "ISC",
+ "engines": {
+ "node": ">=8"
}
},
- "minizlib": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
- "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
- "requires": {
- "minipass": "^3.0.0",
- "yallist": "^4.0.0"
+ "node_modules/minizlib": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz",
+ "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==",
+ "license": "MIT",
+ "dependencies": {
+ "minipass": "^7.1.2"
+ },
+ "engines": {
+ "node": ">= 18"
}
},
- "mixin-deep": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "dev": true,
- "requires": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- }
+ "node_modules/minizlib/node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
}
},
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "requires": {
- "minimist": "^1.2.5"
+ "node_modules/mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "license": "MIT",
+ "dependencies": {
+ "minimist": "^1.2.6"
+ },
+ "bin": {
+ "mkdirp": "bin/cmd.js"
}
},
- "mkdirp-classic": {
+ "node_modules/mkdirp-classic": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
- "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+ "license": "MIT"
},
- "module-definition": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-3.3.1.tgz",
- "integrity": "sha512-kLidGPwQ2yq484nSD+D3JoJp4Etc0Ox9P0L34Pu/cU4X4HcG7k7p62XI5BBuvURWMRX3RPyuhOcBHbKus+UH4A==",
- "requires": {
- "ast-module-types": "^2.7.1",
- "node-source-walk": "^4.0.0"
+ "node_modules/module-definition": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/module-definition/-/module-definition-6.0.1.tgz",
+ "integrity": "sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ast-module-types": "^6.0.1",
+ "node-source-walk": "^7.0.1"
+ },
+ "bin": {
+ "module-definition": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=18"
}
},
- "module-lookup-amd": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-7.0.1.tgz",
- "integrity": "sha512-w9mCNlj0S8qviuHzpakaLVc+/7q50jl9a/kmJ/n8bmXQZgDPkQHnPBb8MUOYh3WpAYkXuNc2c+khsozhIp/amQ==",
- "requires": {
- "commander": "^2.8.1",
- "debug": "^4.1.0",
- "glob": "^7.1.6",
- "requirejs": "^2.3.5",
+ "node_modules/module-lookup-amd": {
+ "version": "9.0.4",
+ "resolved": "https://registry.npmjs.org/module-lookup-amd/-/module-lookup-amd-9.0.4.tgz",
+ "integrity": "sha512-DWJEuLVvjxh5b8wrvJC5wr2a7qo7pOWXIgdCBNazU416kcIyzO4drxvlqKhsHzYwxcC4cWuhoK+MiWCKCGnv7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^12.1.0",
+ "glob": "^7.2.3",
+ "requirejs": "^2.3.7",
"requirejs-config-file": "^4.0.0"
},
- "dependencies": {
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- }
+ "bin": {
+ "lookup-amd": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/module-lookup-amd/node_modules/commander": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
}
},
- "moment": {
- "version": "2.29.1",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
- "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
+ "node_modules/moment": {
+ "version": "2.30.1",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
+ "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
+ "license": "MIT",
+ "engines": {
+ "node": "*"
+ }
},
- "morgan": {
+ "node_modules/morgan": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz",
"integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==",
- "requires": {
+ "license": "MIT",
+ "dependencies": {
"basic-auth": "~2.0.1",
"debug": "2.6.9",
"depd": "~2.0.0",
"on-finished": "~2.3.0",
"on-headers": "~1.0.2"
},
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/morgan/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "license": "MIT",
"dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- }
- },
- "depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
- }
+ "ms": "2.0.0"
}
},
- "ms": {
+ "node_modules/morgan/node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "license": "MIT"
},
- "multer": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz",
- "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==",
- "requires": {
+ "node_modules/morgan/node_modules/on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==",
+ "license": "MIT",
+ "dependencies": {
+ "ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
+ "node_modules/ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
+ "license": "MIT"
+ },
+ "node_modules/multer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/multer/-/multer-2.0.0.tgz",
+ "integrity": "sha512-bS8rPZurbAuHGAnApbM9d4h1wSoYqrOqkE+6a64KLMK9yWU7gJXBDDVklKQ3TPi9DRb85cRs6yXaC0+cjxRtRg==",
+ "license": "MIT",
+ "dependencies": {
"append-field": "^1.0.0",
- "busboy": "^0.2.11",
+ "busboy": "^1.0.0",
"concat-stream": "^1.5.2",
- "mkdirp": "^0.5.1",
+ "mkdirp": "^0.5.4",
"object-assign": "^4.1.1",
- "on-finished": "^2.3.0",
"type-is": "^1.6.4",
"xtend": "^4.0.0"
+ },
+ "engines": {
+ "node": ">= 10.16.0"
}
},
- "nanoid": {
- "version": "3.1.20",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz",
- "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw=="
+ "node_modules/multer/node_modules/media-typer": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
+ "node_modules/multer/node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
}
},
- "natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
- "dev": true
+ "node_modules/multer/node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/multer/node_modules/type-is": {
+ "version": "1.6.18",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
+ "license": "MIT",
+ "dependencies": {
+ "media-typer": "0.3.0",
+ "mime-types": "~2.1.24"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "negotiator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
+ "node_modules/nan": {
+ "version": "2.22.2",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz",
+ "integrity": "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==",
+ "license": "MIT",
+ "optional": true
},
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true
+ "node_modules/nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
},
- "node-int64": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
- "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
- "dev": true
+ "node_modules/natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
+ "dev": true,
+ "license": "MIT"
},
- "node-modules-regexp": {
+ "node_modules/negotiator": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz",
- "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
- "dev": true
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
+ "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
},
- "node-notifier": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz",
- "integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==",
+ "node_modules/node-int64": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
+ "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
"dev": true,
- "optional": true,
- "requires": {
- "growly": "^1.3.0",
- "is-wsl": "^2.2.0",
- "semver": "^7.3.2",
- "shellwords": "^0.1.1",
- "uuid": "^8.3.0",
- "which": "^2.0.2"
- },
- "dependencies": {
- "semver": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
- "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
- "dev": true,
- "optional": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "optional": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
+ "license": "MIT"
},
- "node-source-walk": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.2.0.tgz",
- "integrity": "sha512-hPs/QMe6zS94f5+jG3kk9E7TNm4P2SulrKiLWMzKszBfNZvL/V6wseHlTd7IvfW0NZWqPtK3+9yYNr+3USGteA==",
- "requires": {
- "@babel/parser": "^7.0.0"
- }
+ "node_modules/node-releases": {
+ "version": "2.0.19",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
+ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
+ "dev": true,
+ "license": "MIT"
},
- "normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "node_modules/node-source-walk": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-7.0.1.tgz",
+ "integrity": "sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==",
"dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- },
+ "license": "MIT",
"dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
+ "@babel/parser": "^7.26.7"
+ },
+ "engines": {
+ "node": ">=18"
}
},
- "normalize-path": {
+ "node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "normalize-url": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
- "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ=="
+ "node_modules/normalize-url": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz",
+ "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "node_modules/npm-run-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
+ "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"dev": true,
- "requires": {
- "path-key": "^2.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "path-key": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "nwsapi": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
- "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==",
- "dev": true
- },
- "oauth-sign": {
+ "node_modules/oauth-sign": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
+ "license": "Apache-2.0",
+ "engines": {
+ "node": "*"
+ }
},
- "object-assign": {
+ "node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
- },
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "dev": true,
- "requires": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.0"
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
+ "node_modules/object-inspect": {
+ "version": "1.13.4",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
+ "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "requires": {
+ "node_modules/on-finished": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
+ "license": "MIT",
+ "dependencies": {
"ee-first": "1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.8"
}
},
- "on-headers": {
+ "node_modules/on-headers": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
- "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
+ "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "once": {
+ "node_modules/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "requires": {
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "license": "ISC",
+ "dependencies": {
"wrappy": "1"
}
},
- "onetime": {
+ "node_modules/onetime": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "requires": {
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
"mimic-fn": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "optionator": {
- "version": "0.8.3",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
- "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
- "requires": {
- "deep-is": "~0.1.3",
- "fast-levenshtein": "~2.0.6",
- "levn": "~0.3.0",
- "prelude-ls": "~1.1.2",
- "type-check": "~0.3.2",
- "word-wrap": "~1.2.3"
+ "node_modules/optionator": {
+ "version": "0.9.4",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "deep-is": "^0.1.3",
+ "fast-levenshtein": "^2.0.6",
+ "levn": "^0.4.1",
+ "prelude-ls": "^1.2.1",
+ "type-check": "^0.4.0",
+ "word-wrap": "^1.2.5"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "ora": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz",
- "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==",
- "requires": {
- "bl": "^4.0.3",
+ "node_modules/ora": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
+ "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bl": "^4.1.0",
"chalk": "^4.1.0",
"cli-cursor": "^3.1.0",
"cli-spinners": "^2.5.0",
"is-interactive": "^1.0.0",
- "log-symbols": "^4.0.0",
+ "is-unicode-supported": "^0.1.0",
+ "log-symbols": "^4.1.0",
"strip-ansi": "^6.0.0",
"wcwidth": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "p-cancelable": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
- "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw=="
- },
- "p-each-series": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz",
- "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==",
- "dev": true
- },
- "p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
- "dev": true
+ "node_modules/p-cancelable": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz",
+ "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=12.20"
+ }
},
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "node_modules/p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
"dev": true,
- "requires": {
- "p-try": "^2.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "yocto-queue": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "node_modules/p-locate": {
+ "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,
- "requires": {
- "p-limit": "^2.2.0"
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "p-try": {
+ "node_modules/p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/parent-module": {
+ "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,
+ "license": "MIT",
+ "dependencies": {
+ "callsites": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
},
- "parse-json": {
+ "node_modules/parse-json": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
"dev": true,
- "requires": {
+ "license": "MIT",
+ "dependencies": {
"@babel/code-frame": "^7.0.0",
"error-ex": "^1.3.1",
"json-parse-even-better-errors": "^2.3.0",
"lines-and-columns": "^1.1.6"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "parse-ms": {
+ "node_modules/parse-ms": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz",
- "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA=="
- },
- "parse5": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz",
- "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==",
- "dev": true
+ "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
},
- "parseurl": {
+ "node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
- },
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "dev": true
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "path-exists": {
+ "node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
},
- "path-is-absolute": {
+ "node_modules/path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "dev": true
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "path-parse": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
- "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
+ "node_modules/path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
},
- "path-to-regexp": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
- "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true,
+ "license": "MIT"
},
- "path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="
+ "node_modules/path-to-regexp": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz",
+ "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=16"
+ }
},
- "performance-now": {
+ "node_modules/performance-now": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==",
+ "license": "MIT"
},
- "picomatch": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
- "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg=="
+ "node_modules/picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "dev": true,
+ "license": "ISC"
},
- "pirates": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz",
- "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==",
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/pirates": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
"dev": true,
- "requires": {
- "node-modules-regexp": "^1.0.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">= 6"
}
},
- "pkg-dir": {
+ "node_modules/pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
- "requires": {
+ "license": "MIT",
+ "dependencies": {
"find-up": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-locate": "^4.1.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-try": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "p-limit": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "pluralize": {
+ "node_modules/pluralize": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
- "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA=="
+ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
},
- "posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
- "dev": true
- },
- "postcss": {
- "version": "8.2.6",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.6.tgz",
- "integrity": "sha512-xpB8qYxgPuly166AGlpRjUdEYtmOWx2iCwGmrv4vqZL9YPVviDVPZPRXxnXr6xPZOdxQ9lp3ZBFCRgWJ7LE3Sg==",
- "requires": {
- "colorette": "^1.2.1",
- "nanoid": "^3.1.20",
- "source-map": "^0.6.1"
+ "node_modules/postcss": {
+ "version": "8.5.3",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz",
+ "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "nanoid": "^3.3.8",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
}
},
- "postcss-values-parser": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz",
- "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==",
- "requires": {
- "flatten": "^1.0.2",
- "indexes-of": "^1.0.1",
- "uniq": "^1.0.1"
+ "node_modules/postcss-values-parser": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz",
+ "integrity": "sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==",
+ "dev": true,
+ "license": "MPL-2.0",
+ "dependencies": {
+ "color-name": "^1.1.4",
+ "is-url-superb": "^4.0.0",
+ "quote-unquote": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.9"
}
},
- "precinct": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/precinct/-/precinct-7.0.0.tgz",
- "integrity": "sha512-ayTxq+fdaoowk4HvdfBs7bChg4ToqdRxjZqy3611dppelGF8UHQZrLta3GolRLoHSJQtKfBGA35IvW8K3tRR7A==",
- "requires": {
- "commander": "^2.20.3",
- "debug": "^4.3.1",
- "detective-amd": "^3.0.1",
- "detective-cjs": "^3.1.1",
- "detective-es6": "^2.2.0",
- "detective-less": "^1.0.2",
- "detective-postcss": "^4.0.0",
- "detective-sass": "^3.0.1",
- "detective-scss": "^2.0.1",
- "detective-stylus": "^1.0.0",
- "detective-typescript": "^6.0.0",
- "module-definition": "^3.3.1",
- "node-source-walk": "^4.2.0"
- },
- "dependencies": {
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- }
+ "node_modules/precinct": {
+ "version": "12.2.0",
+ "resolved": "https://registry.npmjs.org/precinct/-/precinct-12.2.0.tgz",
+ "integrity": "sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@dependents/detective-less": "^5.0.1",
+ "commander": "^12.1.0",
+ "detective-amd": "^6.0.1",
+ "detective-cjs": "^6.0.1",
+ "detective-es6": "^5.0.1",
+ "detective-postcss": "^7.0.1",
+ "detective-sass": "^6.0.1",
+ "detective-scss": "^5.0.1",
+ "detective-stylus": "^5.0.1",
+ "detective-typescript": "^14.0.0",
+ "detective-vue2": "^2.2.0",
+ "module-definition": "^6.0.1",
+ "node-source-walk": "^7.0.1",
+ "postcss": "^8.5.1",
+ "typescript": "^5.7.3"
+ },
+ "bin": {
+ "precinct": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=18"
}
},
- "prelude-ls": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
- "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
+ "node_modules/precinct/node_modules/commander": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
},
- "prepend-http": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
- "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
+ "node_modules/prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8.0"
+ }
},
- "prettier": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz",
- "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q=="
- },
- "pretty-format": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-26.6.2.tgz",
- "integrity": "sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==",
- "requires": {
- "@jest/types": "^26.6.2",
- "ansi-regex": "^5.0.0",
- "ansi-styles": "^4.0.0",
- "react-is": "^17.0.1"
+ "node_modules/prettier": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz",
+ "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==",
+ "license": "MIT",
+ "bin": {
+ "prettier": "bin/prettier.cjs"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
+ }
+ },
+ "node_modules/pretty-format": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
+ "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@jest/schemas": "^29.6.3",
+ "ansi-styles": "^5.0.0",
+ "react-is": "^18.0.0"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
+ "node_modules/pretty-format/node_modules/ansi-styles": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
+ "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "pretty-ms": {
+ "node_modules/pretty-ms": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz",
"integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==",
- "requires": {
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
"parse-ms": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "process-nextick-args": {
+ "node_modules/process-nextick-args": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
+ "license": "MIT"
},
- "prompts": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.0.tgz",
- "integrity": "sha512-awZAKrk3vN6CroQukBL+R9051a4R3zCZBlJm/HBfrSZ8iTpYix3VX1vU4mveiLpiwmOJT4wokTF9m6HUk4KqWQ==",
+ "node_modules/prompts": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
+ "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
"dev": true,
- "requires": {
+ "license": "MIT",
+ "dependencies": {
"kleur": "^3.0.3",
"sisteransi": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 6"
}
},
- "proxy-addr": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
- "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
- "requires": {
- "forwarded": "~0.1.2",
+ "node_modules/protobufjs": {
+ "version": "7.4.0",
+ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz",
+ "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==",
+ "hasInstallScript": true,
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "@protobufjs/aspromise": "^1.1.2",
+ "@protobufjs/base64": "^1.1.2",
+ "@protobufjs/codegen": "^2.0.4",
+ "@protobufjs/eventemitter": "^1.1.0",
+ "@protobufjs/fetch": "^1.1.0",
+ "@protobufjs/float": "^1.0.2",
+ "@protobufjs/inquire": "^1.1.0",
+ "@protobufjs/path": "^1.1.2",
+ "@protobufjs/pool": "^1.1.0",
+ "@protobufjs/utf8": "^1.1.0",
+ "@types/node": ">=13.7.0",
+ "long": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
+ "node_modules/proxy-addr": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
+ "license": "MIT",
+ "dependencies": {
+ "forwarded": "0.2.0",
"ipaddr.js": "1.9.1"
+ },
+ "engines": {
+ "node": ">= 0.10"
}
},
- "psl": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
- "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
+ "license": "MIT"
},
- "public-ip": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/public-ip/-/public-ip-4.0.3.tgz",
- "integrity": "sha512-IofiJJWoZ8hZHBk25l4ozLvcET0pjZSxocbUfh4sGkjidMOm4iZNzzWxezGqGsVY7HuxiK7SkyJKHNeT0YQ7uw==",
- "requires": {
- "dns-socket": "^4.2.1",
- "got": "^9.6.0",
- "is-ip": "^3.1.0"
+ "node_modules/psl": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz",
+ "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==",
+ "license": "MIT",
+ "dependencies": {
+ "punycode": "^2.3.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/lupomontero"
}
},
- "pump": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
- "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
- "requires": {
+ "node_modules/public-ip": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/public-ip/-/public-ip-7.0.1.tgz",
+ "integrity": "sha512-DdNcqcIbI0wEeCBcqX+bmZpUCvrDMJHXE553zgyG1MZ8S1a/iCCxmK9iTjjql+SpHSv4cZkmRv5/zGYW93AlCw==",
+ "license": "MIT",
+ "dependencies": {
+ "dns-socket": "^4.2.2",
+ "got": "^13.0.0",
+ "is-ip": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pump": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz",
+ "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==",
+ "license": "MIT",
+ "dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
},
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ "node_modules/punycode": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/pure-rand": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz",
+ "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/dubzzz"
+ },
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/fast-check"
+ }
+ ],
+ "license": "MIT"
},
- "qs": {
- "version": "6.7.0",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
+ "node_modules/qs": {
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
+ "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==",
+ "license": "BSD-3-Clause",
+ "dependencies": {
+ "side-channel": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "queue-microtask": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz",
- "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg=="
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/quick-lru": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
+ "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "range-parser": {
+ "node_modules/quote-unquote": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/quote-unquote/-/quote-unquote-1.0.0.tgz",
+ "integrity": "sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==",
+ "dev": true,
+ "license": "MIT"
+ },
+ "node_modules/range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
- },
- "raw-body": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
- "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
- "requires": {
- "bytes": "3.1.0",
- "http-errors": "1.7.2",
- "iconv-lite": "0.4.24",
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/raw-body": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz",
+ "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==",
+ "license": "MIT",
+ "dependencies": {
+ "bytes": "3.1.2",
+ "http-errors": "2.0.0",
+ "iconv-lite": "0.6.3",
"unpipe": "1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.8"
}
},
- "rc": {
+ "node_modules/rc": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
- "requires": {
+ "dev": true,
+ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
+ "dependencies": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
}
},
- "react-is": {
- "version": "17.0.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.1.tgz",
- "integrity": "sha512-NAnt2iGDXohE5LI7uBnLnqvLQMtzhkiAOLXTmv+qnF9Ky7xAPcX8Up/xWIhxvLVGJvuLiNc4xQLtuqDRzb4fSA=="
- },
- "read-pkg": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
- "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==",
+ "node_modules/rc/node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
"dev": true,
- "requires": {
- "@types/normalize-package-data": "^2.4.0",
- "normalize-package-data": "^2.5.0",
- "parse-json": "^5.0.0",
- "type-fest": "^0.6.0"
- },
- "dependencies": {
- "type-fest": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz",
- "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==",
- "dev": true
- }
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "read-pkg-up": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz",
- "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==",
+ "node_modules/react-is": {
+ "version": "18.3.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
+ "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
"dev": true,
- "requires": {
- "find-up": "^4.1.0",
- "read-pkg": "^5.2.0",
- "type-fest": "^0.8.1"
- }
+ "license": "MIT"
},
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "requires": {
+ "node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "license": "MIT",
+ "dependencies": {
"inherits": "^2.0.3",
"string_decoder": "^1.1.1",
"util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
}
},
- "recursive-readdir": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz",
- "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==",
- "requires": {
- "minimatch": "3.0.4"
+ "node_modules/recursive-readdir": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz",
+ "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==",
+ "license": "MIT",
+ "dependencies": {
+ "minimatch": "^3.0.5"
+ },
+ "engines": {
+ "node": ">=6.0.0"
}
},
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
+ "node_modules/recursive-readdir/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
}
},
- "remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
- "dev": true
- },
- "repeat-element": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
- "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
- "dev": true
- },
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
- "dev": true
+ "node_modules/recursive-readdir/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "license": "ISC",
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
},
- "request": {
+ "node_modules/request": {
"version": "2.88.2",
"resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
"integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
- "requires": {
+ "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142",
+ "license": "Apache-2.0",
+ "dependencies": {
"aws-sign2": "~0.7.0",
"aws4": "^1.8.0",
"caseless": "~0.12.0",
@@ -14303,749 +8188,633 @@
"tunnel-agent": "^0.6.0",
"uuid": "^3.3.2"
},
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/request/node_modules/form-data": {
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
+ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+ "license": "MIT",
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ },
+ "engines": {
+ "node": ">= 0.12"
+ }
+ },
+ "node_modules/request/node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/request/node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "license": "MIT",
"dependencies": {
- "form-data": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
- "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "qs": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
- "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
- },
- "uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
- }
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
}
},
- "request-promise-core": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz",
- "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.19"
+ "node_modules/request/node_modules/qs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.6"
}
},
- "request-promise-native": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz",
- "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==",
- "dev": true,
- "requires": {
- "request-promise-core": "1.1.4",
- "stealthy-require": "^1.1.1",
- "tough-cookie": "^2.3.3"
+ "node_modules/request/node_modules/uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "license": "MIT",
+ "bin": {
+ "uuid": "bin/uuid"
}
},
- "require-directory": {
+ "node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "require-from-string": {
+ "node_modules/require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
- },
- "require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
- "dev": true
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
},
- "requirejs": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz",
- "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg=="
+ "node_modules/requirejs": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.7.tgz",
+ "integrity": "sha512-DouTG8T1WanGok6Qjg2SXuCMzszOo0eHeH9hDZ5Y4x8Je+9JB38HdTLT4/VA8OaUhBa0JPVHJ0pyBkM1z+pDsw==",
+ "dev": true,
+ "license": "MIT",
+ "bin": {
+ "r_js": "bin/r.js",
+ "r.js": "bin/r.js"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
},
- "requirejs-config-file": {
+ "node_modules/requirejs-config-file": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz",
"integrity": "sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==",
- "requires": {
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
"esprima": "^4.0.0",
"stringify-object": "^3.2.1"
+ },
+ "engines": {
+ "node": ">=10.13.0"
}
},
- "requires-port": {
+ "node_modules/requires-port": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
- "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
+ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
+ "license": "MIT"
},
- "resolve": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
- "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
- "requires": {
- "is-core-module": "^2.2.0",
- "path-parse": "^1.0.6"
+ "node_modules/resolve": {
+ "version": "1.22.10",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz",
+ "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "is-core-module": "^2.16.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "resolve-cwd": {
+ "node_modules/resolve-alpn": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz",
+ "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==",
+ "license": "MIT"
+ },
+ "node_modules/resolve-cwd": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
"dev": true,
- "requires": {
+ "license": "MIT",
+ "dependencies": {
"resolve-from": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-cwd/node_modules/resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/resolve-dependency-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dependency-path/-/resolve-dependency-path-4.0.1.tgz",
+ "integrity": "sha512-YQftIIC4vzO9UMhO/sCgXukNyiwVRCVaxiWskCBy7Zpqkplm8kTAISZ8O1MoKW1ca6xzgLUBjZTcDgypXvXxiQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/resolve-from": {
+ "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,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
}
},
- "resolve-dependency-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/resolve-dependency-path/-/resolve-dependency-path-2.0.0.tgz",
- "integrity": "sha512-DIgu+0Dv+6v2XwRaNWnumKu7GPufBBOr5I1gRPJHkvghrfCGOooJODFvgFimX/KRxk9j0whD2MnKHzM1jYvk9w=="
- },
- "resolve-from": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
- "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
- "dev": true
- },
- "resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
- "dev": true
+ "node_modules/resolve.exports": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz",
+ "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ }
},
- "responselike": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
- "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
- "requires": {
- "lowercase-keys": "^1.0.0"
+ "node_modules/responselike": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz",
+ "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==",
+ "license": "MIT",
+ "dependencies": {
+ "lowercase-keys": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "restore-cursor": {
+ "node_modules/restore-cursor": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
"integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
- "requires": {
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
"onetime": "^5.1.0",
"signal-exit": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true
- },
- "reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
- },
- "rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "node_modules/reusify": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
"dev": true,
- "requires": {
- "glob": "^7.1.3"
+ "license": "MIT",
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
}
},
- "rsvp": {
- "version": "4.8.5",
- "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
- "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
- "dev": true
+ "node_modules/router": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
+ "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==",
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^4.4.0",
+ "depd": "^2.0.0",
+ "is-promise": "^4.0.0",
+ "parseurl": "^1.3.3",
+ "path-to-regexp": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
},
- "run-parallel": {
+ "node_modules/run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "requires": {
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "dependencies": {
"queue-microtask": "^1.2.2"
}
},
- "safe-buffer": {
+ "node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- },
- "safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "dev": true,
- "requires": {
- "ret": "~0.1.10"
- }
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
- },
- "sane": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
- "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
- "dev": true,
- "requires": {
- "@cnakazawa/watch": "^1.0.3",
- "anymatch": "^2.0.0",
- "capture-exit": "^2.0.0",
- "exec-sh": "^0.3.2",
- "execa": "^1.0.0",
- "fb-watchman": "^2.0.0",
- "micromatch": "^3.1.4",
- "minimist": "^1.1.1",
- "walker": "~1.0.5"
- },
- "dependencies": {
- "anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "dev": true,
- "requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
- }
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
},
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
},
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "dev": true,
- "requires": {
- "remove-trailing-separator": "^1.0.1"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
}
- }
+ ],
+ "license": "MIT"
},
- "sass-lookup": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/sass-lookup/-/sass-lookup-3.0.0.tgz",
- "integrity": "sha512-TTsus8CfFRn1N44bvdEai1no6PqdmDiQUiqW5DlpmtT+tYnIt1tXtDIph5KA1efC+LmioJXSnCtUVpcK9gaKIg==",
- "requires": {
- "commander": "^2.16.0"
- },
+ "node_modules/safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "license": "MIT"
+ },
+ "node_modules/sass-lookup": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sass-lookup/-/sass-lookup-6.1.0.tgz",
+ "integrity": "sha512-Zx+lVyoWqXZxHuYWlTA17Z5sczJ6braNT2C7rmClw+c4E7r/n911Zwss3h1uHI9reR5AgHZyNHF7c2+VIp5AUA==",
+ "dev": true,
+ "license": "MIT",
"dependencies": {
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- }
+ "commander": "^12.1.0",
+ "enhanced-resolve": "^5.18.0"
+ },
+ "bin": {
+ "sass-lookup": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=18"
}
},
- "saxes": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
- "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
+ "node_modules/sass-lookup/node_modules/commander": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
"dev": true,
- "requires": {
- "xmlchars": "^2.2.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
}
},
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
- },
- "send": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
- "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
- "requires": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.7.2",
- "mime": "1.6.0",
- "ms": "2.1.1",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.1",
- "statuses": "~1.5.0"
+ "node_modules/semver": {
+ "version": "7.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
+ "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
+ "license": "ISC",
+ "bin": {
+ "semver": "bin/semver.js"
},
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/send": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz",
+ "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==",
+ "license": "MIT",
"dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "requires": {
- "ms": "2.0.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
- }
- }
- },
- "ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
- }
+ "debug": "^4.3.5",
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "etag": "^1.8.1",
+ "fresh": "^2.0.0",
+ "http-errors": "^2.0.0",
+ "mime-types": "^3.0.1",
+ "ms": "^2.1.3",
+ "on-finished": "^2.4.1",
+ "range-parser": "^1.2.1",
+ "statuses": "^2.0.1"
+ },
+ "engines": {
+ "node": ">= 18"
}
},
- "serve-favicon": {
+ "node_modules/serve-favicon": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz",
- "integrity": "sha1-k10kDN/g9YBTB/3+ln2IlCosvPA=",
- "requires": {
+ "integrity": "sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==",
+ "license": "MIT",
+ "dependencies": {
"etag": "~1.8.1",
"fresh": "0.5.2",
"ms": "2.1.1",
"parseurl": "~1.3.2",
"safe-buffer": "5.1.1"
},
- "dependencies": {
- "ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
- },
- "safe-buffer": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg=="
- }
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "serve-static": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
- "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
- "requires": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.17.1"
+ "node_modules/serve-favicon/node_modules/fresh": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.6"
}
},
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
+ "node_modules/serve-favicon/node_modules/ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "license": "MIT"
},
- "set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
+ "node_modules/serve-favicon/node_modules/safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
+ "license": "MIT"
},
- "setprototypeof": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
+ "node_modules/serve-static": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz",
+ "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==",
+ "license": "MIT",
+ "dependencies": {
+ "encodeurl": "^2.0.0",
+ "escape-html": "^1.0.3",
+ "parseurl": "^1.3.3",
+ "send": "^1.2.0"
+ },
+ "engines": {
+ "node": ">= 18"
+ }
},
- "shebang-command": {
+ "node_modules/setprototypeof": {
"version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
+ "license": "ISC"
+ },
+ "node_modules/shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
- "requires": {
- "shebang-regex": "^1.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "shebang-regex": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "dev": true
- },
- "shellwords": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
- "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
+ "node_modules/shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true,
- "optional": true
- },
- "signal-exit": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
- "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
- },
- "simple-git": {
- "version": "2.34.2",
- "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.34.2.tgz",
- "integrity": "sha512-/EX4FtcpAj5L/Bs5zgaBGYDrnkrKflFVNppNLH9VXpIjZBLHx5cZ6/mOYJCoKXKlLRuk3iTvzrIsHo7v42zWHg==",
- "requires": {
- "@kwsites/file-exists": "^1.1.1",
- "@kwsites/promise-deferred": "^1.1.1",
- "debug": "^4.3.1"
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
}
},
- "sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true
- },
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q=="
+ "node_modules/shell-quote": {
+ "version": "1.8.2",
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz",
+ "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
- "snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
- "requires": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
+ "node_modules/side-channel": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
+ "license": "MIT",
+ "dependencies": {
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3",
+ "side-channel-list": "^1.0.0",
+ "side-channel-map": "^1.0.1",
+ "side-channel-weakmap": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/side-channel-list": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
+ "license": "MIT",
"dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- }
+ "es-errors": "^1.3.0",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "requires": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- }
+ "node_modules/side-channel-map": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "dev": true,
- "requires": {
- "kind-of": "^3.2.0"
+ "node_modules/side-channel-weakmap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
+ "license": "MIT",
+ "dependencies": {
+ "call-bound": "^1.0.2",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.5",
+ "object-inspect": "^1.13.3",
+ "side-channel-map": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
+ "license": "ISC"
+ },
+ "node_modules/simple-git": {
+ "version": "3.27.0",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.27.0.tgz",
+ "integrity": "sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==",
+ "license": "MIT",
"dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "@kwsites/file-exists": "^1.1.1",
+ "@kwsites/promise-deferred": "^1.1.1",
+ "debug": "^4.3.5"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/steveukx/git-js?sponsor=1"
}
},
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "dev": true,
+ "license": "MIT"
},
- "source-map-resolve": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
- "requires": {
- "atob": "^2.1.2",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
}
},
- "source-map-support": {
- "version": "0.5.19",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
- "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "source-map-url": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
- "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
- "dev": true
- },
- "spdx-correct": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
- "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "node_modules/source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"dev": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
+ "license": "BSD-3-Clause",
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
- "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "node_modules/source-map-support": {
+ "version": "0.5.13",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
+ "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
"dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
+ "license": "MIT",
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
}
},
- "spdx-license-ids": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz",
- "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==",
- "dev": true
- },
- "split-ca": {
+ "node_modules/split-ca": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz",
- "integrity": "sha1-bIOv82kvphJW4M0ZfgXp3hV2kaY="
+ "integrity": "sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==",
+ "license": "ISC"
},
- "split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "node_modules/sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
"dev": true,
- "requires": {
- "extend-shallow": "^3.0.0"
+ "license": "BSD-3-Clause"
+ },
+ "node_modules/ssh2": {
+ "version": "1.16.0",
+ "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.16.0.tgz",
+ "integrity": "sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "asn1": "^0.2.6",
+ "bcrypt-pbkdf": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=10.16.0"
+ },
+ "optionalDependencies": {
+ "cpu-features": "~0.0.10",
+ "nan": "^2.20.0"
}
},
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
- },
- "ssh2": {
- "version": "0.8.9",
- "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-0.8.9.tgz",
- "integrity": "sha512-GmoNPxWDMkVpMFa9LVVzQZHF6EW3WKmBwL+4/GeILf2hFmix5Isxm7Amamo8o7bHiU0tC+wXsGcUXOxp8ChPaw==",
- "requires": {
- "ssh2-streams": "~0.4.10"
- }
- },
- "ssh2-streams": {
- "version": "0.4.10",
- "resolved": "https://registry.npmjs.org/ssh2-streams/-/ssh2-streams-0.4.10.tgz",
- "integrity": "sha512-8pnlMjvnIZJvmTzUIIA5nT4jr2ZWNNVHwyXfMGdRJbug9TpI3kd99ffglgfSWqujVv/0gxwMsDn9j9RVst8yhQ==",
- "requires": {
- "asn1": "~0.2.0",
- "bcrypt-pbkdf": "^1.0.2",
- "streamsearch": "~0.1.2"
- }
- },
- "sshpk": {
- "version": "1.16.1",
- "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
- "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
- "requires": {
+ "node_modules/sshpk": {
+ "version": "1.18.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz",
+ "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
+ "license": "MIT",
+ "dependencies": {
"asn1": "~0.2.3",
"assert-plus": "^1.0.0",
"bcrypt-pbkdf": "^1.0.0",
@@ -15055,906 +8824,994 @@
"jsbn": "~0.1.0",
"safer-buffer": "^2.0.2",
"tweetnacl": "~0.14.0"
+ },
+ "bin": {
+ "sshpk-conv": "bin/sshpk-conv",
+ "sshpk-sign": "bin/sshpk-sign",
+ "sshpk-verify": "bin/sshpk-verify"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "stack-utils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.3.tgz",
- "integrity": "sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==",
+ "node_modules/stack-utils": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
+ "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
"dev": true,
- "requires": {
+ "license": "MIT",
+ "dependencies": {
"escape-string-regexp": "^2.0.0"
},
- "dependencies": {
- "escape-string-regexp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
- "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
- "dev": true
- }
+ "engines": {
+ "node": ">=10"
}
},
- "static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "dev": true,
- "requires": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- }
+ "node_modules/stack-utils/node_modules/escape-string-regexp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
+ "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
}
},
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
+ "node_modules/statuses": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "stealthy-require": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",
- "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
- "dev": true
+ "node_modules/stream-to-array": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-2.3.0.tgz",
+ "integrity": "sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "any-promise": "^1.1.0"
+ }
},
- "streamsearch": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
- "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo="
+ "node_modules/streamsearch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
+ "engines": {
+ "node": ">=10.0.0"
+ }
},
- "string_decoder": {
+ "node_modules/string_decoder": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "requires": {
+ "license": "MIT",
+ "dependencies": {
"safe-buffer": "~5.2.0"
}
},
- "string-length": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.1.tgz",
- "integrity": "sha512-PKyXUd0LK0ePjSOnWn34V2uD6acUWev9uy0Ft05k0E8xRW+SKcA0F7eMr7h5xlzfn+4O3N+55rduYyet3Jk+jw==",
+ "node_modules/string-length": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
+ "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
"dev": true,
- "requires": {
+ "license": "MIT",
+ "dependencies": {
"char-regex": "^1.0.2",
"strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
}
},
- "string-width": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
- "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
- "dev": true,
- "requires": {
+ "node_modules/string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "license": "MIT",
+ "dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
+ "strip-ansi": "^6.0.1"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "stringify-object": {
+ "node_modules/stringify-object": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
"integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
- "requires": {
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
"get-own-enumerable-property-symbols": "^3.0.0",
"is-obj": "^1.0.1",
"is-regexp": "^1.0.0"
},
- "dependencies": {
- "is-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
- "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
- }
+ "engines": {
+ "node": ">=4"
}
},
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "requires": {
- "ansi-regex": "^5.0.0"
+ "node_modules/stringify-object/node_modules/is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "license": "MIT",
+ "dependencies": {
+ "ansi-regex": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "strip-bom": {
+ "node_modules/strip-bom": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
"integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
- "dev": true
- },
- "strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
- "dev": true
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
},
- "strip-final-newline": {
+ "node_modules/strip-final-newline": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "dev": true
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
},
- "strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
+ "node_modules/strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "stylus-lookup": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-3.0.2.tgz",
- "integrity": "sha512-oEQGHSjg/AMaWlKe7gqsnYzan8DLcGIHe0dUaFkucZZ14z4zjENRlQMCHT4FNsiWnJf17YN9OvrCfCoi7VvOyg==",
- "requires": {
- "commander": "^2.8.1",
- "debug": "^4.1.0"
+ "node_modules/stylus-lookup": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/stylus-lookup/-/stylus-lookup-6.1.0.tgz",
+ "integrity": "sha512-5QSwgxAzXPMN+yugy61C60PhoANdItfdjSEZR8siFwz7yL9jTmV0UBKDCfn3K8GkGB4g0Y9py7vTCX8rFu4/pQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "commander": "^12.1.0"
+ },
+ "bin": {
+ "stylus-lookup": "bin/cli.js"
},
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/stylus-lookup/node_modules/commander": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
+ "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ }
+ },
+ "node_modules/super-regex": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-0.2.0.tgz",
+ "integrity": "sha512-WZzIx3rC1CvbMDloLsVw0lkZVKJWbrkJ0k1ghKFmcnPrW1+jWbgTkTEWVtD9lMdmI4jZEz40+naBxl1dCUhXXw==",
+ "license": "MIT",
"dependencies": {
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
- }
+ "clone-regexp": "^3.0.0",
+ "function-timeout": "^0.1.0",
+ "time-span": "^5.1.0"
+ },
+ "engines": {
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "supports-color": {
+ "node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "requires": {
+ "license": "MIT",
+ "dependencies": {
"has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "supports-hyperlinks": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz",
- "integrity": "sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA==",
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true,
- "requires": {
- "has-flag": "^4.0.0",
- "supports-color": "^7.0.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "symbol-tree": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
- "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
- "dev": true
- },
- "tapable": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz",
- "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw=="
+ "node_modules/tapable": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz",
+ "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6"
+ }
},
- "tar": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz",
- "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==",
- "requires": {
- "chownr": "^2.0.0",
- "fs-minipass": "^2.0.0",
- "minipass": "^3.0.0",
- "minizlib": "^2.1.1",
- "mkdirp": "^1.0.3",
- "yallist": "^4.0.0"
- },
- "dependencies": {
- "chownr": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
- "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
- },
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw=="
- }
+ "node_modules/tar": {
+ "version": "7.4.3",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz",
+ "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==",
+ "license": "ISC",
+ "dependencies": {
+ "@isaacs/fs-minipass": "^4.0.0",
+ "chownr": "^3.0.0",
+ "minipass": "^7.1.2",
+ "minizlib": "^3.0.1",
+ "mkdirp": "^3.0.1",
+ "yallist": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=18"
}
},
- "tar-fs": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz",
- "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==",
- "requires": {
+ "node_modules/tar-fs": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz",
+ "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==",
+ "license": "MIT",
+ "dependencies": {
"chownr": "^1.1.1",
"mkdirp-classic": "^0.5.2",
"pump": "^3.0.0",
- "tar-stream": "^2.0.0"
+ "tar-stream": "^2.1.4"
}
},
- "tar-stream": {
+ "node_modules/tar-fs/node_modules/chownr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+ "license": "ISC"
+ },
+ "node_modules/tar-stream": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
"integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
- "requires": {
+ "license": "MIT",
+ "dependencies": {
"bl": "^4.0.3",
"end-of-stream": "^1.4.1",
"fs-constants": "^1.0.0",
"inherits": "^2.0.3",
"readable-stream": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=6"
}
},
- "temp": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/temp/-/temp-0.4.0.tgz",
- "integrity": "sha1-ZxrWPVe+D+nXKUZks/xABjZnimA="
+ "node_modules/tar/node_modules/minipass": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ }
},
- "terminal-link": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
- "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
- "dev": true,
- "requires": {
- "ansi-escapes": "^4.2.1",
- "supports-hyperlinks": "^2.0.0"
+ "node_modules/tar/node_modules/mkdirp": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
+ "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
+ "license": "MIT",
+ "bin": {
+ "mkdirp": "dist/cjs/src/bin.js"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/tar/node_modules/yallist": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
+ "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
}
},
- "test-exclude": {
+ "node_modules/test-exclude": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
"integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
"dev": true,
- "requires": {
+ "license": "ISC",
+ "dependencies": {
"@istanbuljs/schema": "^0.1.2",
"glob": "^7.1.4",
"minimatch": "^3.0.4"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "throat": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz",
- "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==",
- "dev": true
- },
- "tmpl": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
- "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
- "dev": true
- },
- "to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
- "dev": true
+ "node_modules/test-exclude/node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
},
- "to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "node_modules/test-exclude/node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
+ "license": "ISC",
"dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
}
},
- "to-readable-stream": {
- "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=="
+ "node_modules/time-span": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz",
+ "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==",
+ "license": "MIT",
+ "dependencies": {
+ "convert-hrtime": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "node_modules/tmpl": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
+ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
"dev": true,
- "requires": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- }
+ "license": "BSD-3-Clause"
},
- "to-regex-range": {
+ "node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "requires": {
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
"is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
}
},
- "toidentifier": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
+ "node_modules/toidentifier": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.6"
+ }
},
- "tough-cookie": {
+ "node_modules/tough-cookie": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
"integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
- "requires": {
+ "license": "BSD-3-Clause",
+ "dependencies": {
"psl": "^1.1.28",
"punycode": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.8"
}
},
- "tr46": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz",
- "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==",
+ "node_modules/ts-api-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz",
+ "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==",
"dev": true,
- "requires": {
- "punycode": "^2.1.1"
+ "license": "MIT",
+ "engines": {
+ "node": ">=18.12"
+ },
+ "peerDependencies": {
+ "typescript": ">=4.8.4"
}
},
- "ts-jest": {
- "version": "26.5.1",
- "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-26.5.1.tgz",
- "integrity": "sha512-G7Rmo3OJMvlqE79amJX8VJKDiRcd7/r61wh9fnvvG8cAjhA9edklGw/dCxRSQmfZ/z8NDums5srSVgwZos1qfg==",
- "dev": true,
- "requires": {
- "@types/jest": "26.x",
- "bs-logger": "0.x",
- "buffer-from": "1.x",
- "fast-json-stable-stringify": "2.x",
- "jest-util": "^26.1.0",
- "json5": "2.x",
- "lodash": "4.x",
- "make-error": "1.x",
- "mkdirp": "1.x",
- "semver": "7.x",
- "yargs-parser": "20.x"
- },
- "dependencies": {
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
- "dev": true
- },
- "semver": {
- "version": "7.3.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
- "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
- "dev": true,
- "requires": {
- "lru-cache": "^6.0.0"
- }
+ "node_modules/ts-graphviz": {
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/ts-graphviz/-/ts-graphviz-2.1.6.tgz",
+ "integrity": "sha512-XyLVuhBVvdJTJr2FJJV2L1pc4MwSjMhcunRVgDE9k4wbb2ee7ORYnPewxMWUav12vxyfUM686MSGsqnVRIInuw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ts-graphviz"
},
- "yargs-parser": {
- "version": "20.2.5",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.5.tgz",
- "integrity": "sha512-jYRGS3zWy20NtDtK2kBgo/TlAoy5YUuhD9/LZ7z7W4j1Fdw2cqD0xEEclf8fxc8xjD6X5Qr+qQQwCEsP8iRiYg==",
- "dev": true
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/ts-graphviz"
}
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "@ts-graphviz/adapter": "^2.0.6",
+ "@ts-graphviz/ast": "^2.0.7",
+ "@ts-graphviz/common": "^2.1.5",
+ "@ts-graphviz/core": "^2.0.7"
+ },
+ "engines": {
+ "node": ">=18"
}
},
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
- },
- "tslint": {
- "version": "6.1.3",
- "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz",
- "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==",
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "builtin-modules": "^1.1.1",
- "chalk": "^2.3.0",
- "commander": "^2.12.1",
- "diff": "^4.0.1",
- "glob": "^7.1.1",
- "js-yaml": "^3.13.1",
- "minimatch": "^3.0.4",
- "mkdirp": "^0.5.3",
- "resolve": "^1.3.2",
- "semver": "^5.3.0",
- "tslib": "^1.13.0",
- "tsutils": "^2.29.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "commander": {
- "version": "2.20.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
- "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
+ "node_modules/ts-jest": {
+ "version": "29.3.4",
+ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.4.tgz",
+ "integrity": "sha512-Iqbrm8IXOmV+ggWHOTEbjwyCf2xZlUMv5npExksXohL+tk8va4Fjhb+X2+Rt9NBmgO7bJ8WpnMLOwih/DnMlFA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "bs-logger": "^0.2.6",
+ "ejs": "^3.1.10",
+ "fast-json-stable-stringify": "^2.1.0",
+ "jest-util": "^29.0.0",
+ "json5": "^2.2.3",
+ "lodash.memoize": "^4.1.2",
+ "make-error": "^1.3.6",
+ "semver": "^7.7.2",
+ "type-fest": "^4.41.0",
+ "yargs-parser": "^21.1.1"
+ },
+ "bin": {
+ "ts-jest": "cli.js"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=7.0.0-beta.0 <8",
+ "@jest/transform": "^29.0.0",
+ "@jest/types": "^29.0.0",
+ "babel-jest": "^29.0.0",
+ "jest": "^29.0.0",
+ "typescript": ">=4.3 <6"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
},
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ "@jest/transform": {
+ "optional": true
},
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ "@jest/types": {
+ "optional": true
},
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "requires": {
- "has-flag": "^3.0.0"
- }
+ "babel-jest": {
+ "optional": true
},
- "tsutils": {
- "version": "2.29.0",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz",
- "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==",
- "requires": {
- "tslib": "^1.8.1"
- }
+ "esbuild": {
+ "optional": true
}
}
},
- "tsutils": {
- "version": "3.20.0",
- "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.20.0.tgz",
- "integrity": "sha512-RYbuQuvkhuqVeXweWT3tJLKOEJ/UUw9GjNEZGWdrLLlM+611o1gwLHBpxoFJKKl25fLprp2eVthtKs5JOrNeXg==",
- "requires": {
- "tslib": "^1.8.1"
+ "node_modules/ts-jest/node_modules/type-fest": {
+ "version": "4.41.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
+ "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/tsconfig-paths": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz",
+ "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "json5": "^2.2.2",
+ "minimist": "^1.2.6",
+ "strip-bom": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/tsconfig-paths/node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
}
},
- "tunnel-agent": {
+ "node_modules/tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
- "requires": {
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "license": "Apache-2.0",
+ "dependencies": {
"safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
}
},
- "tweetnacl": {
+ "node_modules/tweetnacl": {
"version": "0.14.5",
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
- "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==",
+ "license": "Unlicense"
},
- "type-check": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
- "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
- "requires": {
- "prelude-ls": "~1.1.2"
+ "node_modules/type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "prelude-ls": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
}
},
- "type-detect": {
+ "node_modules/type-detect": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=4"
+ }
},
- "type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true
+ "node_modules/type-fest": {
+ "version": "0.21.3",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
+ "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
+ "dev": true,
+ "license": "(MIT OR CC0-1.0)",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
- "type-is": {
- "version": "1.6.18",
- "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
- "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
- "requires": {
- "media-typer": "0.3.0",
- "mime-types": "~2.1.24"
+ "node_modules/type-is": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz",
+ "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==",
+ "license": "MIT",
+ "dependencies": {
+ "content-type": "^1.0.5",
+ "media-typer": "^1.1.0",
+ "mime-types": "^3.0.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
}
},
- "typedarray": {
+ "node_modules/typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c="
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
+ "license": "MIT"
},
- "typedarray-to-buffer": {
+ "node_modules/typedarray-to-buffer": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
"integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "requires": {
+ "license": "MIT",
+ "dependencies": {
"is-typedarray": "^1.0.0"
}
},
- "typescript": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.5.tgz",
- "integrity": "sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA=="
+ "node_modules/typescript": {
+ "version": "5.8.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
+ "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
+ "license": "Apache-2.0",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
},
- "union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "node_modules/typescript-eslint": {
+ "version": "8.32.1",
+ "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.32.1.tgz",
+ "integrity": "sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==",
"dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/eslint-plugin": "8.32.1",
+ "@typescript-eslint/parser": "8.32.1",
+ "@typescript-eslint/utils": "8.32.1"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0",
+ "typescript": ">=4.8.4 <5.9.0"
}
},
- "uniq": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
- "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8="
+ "node_modules/undici-types": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
+ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
+ "license": "MIT"
},
- "unique-string": {
+ "node_modules/unique-string": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
"integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
- "requires": {
+ "license": "MIT",
+ "dependencies": {
"crypto-random-string": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
+ "node_modules/universalify": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 10.0.0"
+ }
},
- "unpipe": {
+ "node_modules/unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "dev": true,
- "requires": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
+ "node_modules/update-browserslist-db": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
+ "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
},
- "has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
- "dev": true
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
},
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
}
+ ],
+ "license": "MIT",
+ "dependencies": {
+ "escalade": "^3.2.0",
+ "picocolors": "^1.1.1"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
}
},
- "uri-js": {
+ "node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
"integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
- "requires": {
+ "license": "BSD-2-Clause",
+ "dependencies": {
"punycode": "^2.1.0"
}
},
- "urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
- "dev": true
- },
- "url-parse-lax": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
- "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
- "requires": {
- "prepend-http": "^2.0.0"
- }
- },
- "use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
- "dev": true
- },
- "util-deprecate": {
+ "node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
+ "license": "MIT"
},
- "uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+ "node_modules/uuid": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
+ "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/esm/bin/uuid"
+ }
},
- "v8-to-istanbul": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.0.tgz",
- "integrity": "sha512-uXUVqNUCLa0AH1vuVxzi+MI4RfxEOKt9pBgKwHbgH7st8Kv2P1m+jvWNnektzBh5QShF3ODgKmUFCf38LnVz1g==",
+ "node_modules/v8-to-istanbul": {
+ "version": "9.3.0",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
+ "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
"dev": true,
- "requires": {
+ "license": "ISC",
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.12",
"@types/istanbul-lib-coverage": "^2.0.1",
- "convert-source-map": "^1.6.0",
- "source-map": "^0.7.3"
+ "convert-source-map": "^2.0.0"
},
- "dependencies": {
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
- }
+ "engines": {
+ "node": ">=10.12.0"
}
},
- "validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dev": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
+ "node_modules/validator": {
+ "version": "13.15.0",
+ "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.0.tgz",
+ "integrity": "sha512-36B2ryl4+oL5QxZ3AzD0t5SsMNGvTtQHpjgFO5tbNxfXbMFkY822ktCDe1MnlqV3301QQI9SLHDNJokDI+Z9pA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.10"
}
},
- "validator": {
- "version": "13.5.2",
- "resolved": "https://registry.npmjs.org/validator/-/validator-13.5.2.tgz",
- "integrity": "sha512-mD45p0rvHVBlY2Zuy3F3ESIe1h5X58GPfAtslBjY7EtTqGquZTj+VX/J4RnHWN8FKq0C9WRVt1oWAcytWRuYLQ=="
- },
- "vary": {
+ "node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
- "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.8"
+ }
},
- "verror": {
+ "node_modules/verror": {
"version": "1.10.0",
"resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
- "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
- "requires": {
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+ "engines": [
+ "node >=0.6.0"
+ ],
+ "license": "MIT",
+ "dependencies": {
"assert-plus": "^1.0.0",
"core-util-is": "1.0.2",
"extsprintf": "^1.2.0"
}
},
- "w3c-hr-time": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
- "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
- "dev": true,
- "requires": {
- "browser-process-hrtime": "^1.0.0"
- }
- },
- "w3c-xmlserializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
- "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
- "dev": true,
- "requires": {
- "xml-name-validator": "^3.0.0"
- }
- },
- "walkdir": {
+ "node_modules/walkdir": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.4.1.tgz",
- "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ=="
+ "integrity": "sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=6.0.0"
+ }
},
- "walker": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
- "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
+ "node_modules/walker": {
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
+ "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
"dev": true,
- "requires": {
- "makeerror": "1.0.x"
+ "license": "Apache-2.0",
+ "dependencies": {
+ "makeerror": "1.0.12"
}
},
- "wcwidth": {
+ "node_modules/wcwidth": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
- "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
- "requires": {
- "defaults": "^1.0.3"
- }
- },
- "webidl-conversions": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
- "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==",
- "dev": true
- },
- "whatwg-encoding": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
- "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
+ "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
"dev": true,
- "requires": {
- "iconv-lite": "0.4.24"
+ "license": "MIT",
+ "dependencies": {
+ "defaults": "^1.0.3"
}
},
- "whatwg-mimetype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
- "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==",
- "dev": true
- },
- "whatwg-url": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz",
- "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==",
+ "node_modules/which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
- "requires": {
- "lodash.sortby": "^4.7.0",
- "tr46": "^2.0.2",
- "webidl-conversions": "^6.1.0"
+ "license": "ISC",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "node-which": "bin/node-which"
+ },
+ "engines": {
+ "node": ">= 8"
}
},
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "node_modules/word-wrap": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
"dev": true,
- "requires": {
- "isexe": "^2.0.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
- },
- "word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
- },
- "wrap-ansi": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
- "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
- "dev": true,
- "requires": {
+ "node_modules/wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "license": "MIT",
+ "dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
"strip-ansi": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "wrappy": {
+ "node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "license": "ISC"
},
- "write-file-atomic": {
+ "node_modules/write-file-atomic": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
"integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
- "requires": {
+ "license": "ISC",
+ "dependencies": {
"imurmurhash": "^0.1.4",
"is-typedarray": "^1.0.0",
"signal-exit": "^3.0.2",
"typedarray-to-buffer": "^3.1.5"
}
},
- "ws": {
- "version": "7.4.3",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz",
- "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==",
- "dev": true
- },
- "xdg-basedir": {
+ "node_modules/xdg-basedir": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz",
- "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q=="
- },
- "xml-name-validator": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
- "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
- "dev": true
- },
- "xmlchars": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
- "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
- "dev": true
+ "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=8"
+ }
},
- "xtend": {
+ "node_modules/xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
+ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=0.4"
+ }
},
- "y18n": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
- "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==",
- "dev": true
+ "node_modules/y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=10"
+ }
},
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ "node_modules/yallist": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
+ "dev": true,
+ "license": "ISC"
},
- "yaml": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz",
- "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg=="
+ "node_modules/yaml": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz",
+ "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==",
+ "license": "ISC",
+ "bin": {
+ "yaml": "bin.mjs"
+ },
+ "engines": {
+ "node": ">= 14.6"
+ }
},
- "yargs": {
- "version": "15.4.1",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
- "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
- "dev": true,
- "requires": {
- "cliui": "^6.0.0",
- "decamelize": "^1.2.0",
- "find-up": "^4.1.0",
- "get-caller-file": "^2.0.1",
+ "node_modules/yargs": {
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
+ "license": "MIT",
+ "dependencies": {
+ "cliui": "^8.0.1",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^4.2.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^18.1.2"
+ "string-width": "^4.2.3",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^21.1.1"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/yargs-parser": {
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
+ "license": "ISC",
+ "engines": {
+ "node": ">=12"
}
},
- "yargs-parser": {
- "version": "18.1.3",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
- "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "node_modules/yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
"dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
+ "license": "MIT",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
}
}
diff --git a/package.json b/package.json
index ba527d781..2edc0f1ba 100644
--- a/package.json
+++ b/package.json
@@ -3,73 +3,85 @@
"version": "0.0.0",
"private": true,
"scripts": {
- "start": "node ./built/server.js",
- "dev": "npm run build && sudo ./dev-scripts/dev-reset-service.sh",
+ "disable-otp": "node ./built/scripts/disable-otp.js",
+ "dev": "sudo 'echo' && npm run build && sudo ./dev-scripts/dev-reset-service.sh",
"clean": "npm run build && sudo ./dev-scripts/dev-clean-run-as-dev.sh",
- "tslint": "tslint -c tslint.json -p tsconfig.json",
+ "lint": "eslint 'src/**/*.ts'",
+ "lint-fix": "eslint --fix 'src/**/*.ts'",
"formatter": "prettier --check './src/**/*.ts'",
"formatter-write": "prettier --write './src/**/*.ts'",
"build": "echo 'RECOMPILING' && npx madge --circular --extensions ts ./ && rm -rf ./built && npx tsc && echo 'Build successful'",
- "test": "npm run build && jest"
+ "test": "jest"
},
"dependencies": {
- "@types/bcryptjs": "^2.4.2",
- "@types/configstore": "^4.0.0",
- "@types/cookie-parser": "^1.4.2",
- "@types/dockerode": "^3.2.2",
- "@types/ejs": "^3.0.5",
- "@types/express": "^4.17.11",
- "@types/fs-extra": "^9.0.7",
- "@types/http-proxy": "^1.17.5",
- "@types/jest": "^26.0.20",
- "@types/js-base64": "^3.0.0",
- "@types/jsonwebtoken": "^8.5.0",
- "@types/morgan": "^1.9.2",
- "@types/multer": "^1.4.5",
- "@types/on-finished": "^2.3.1",
- "@types/request": "^2.48.5",
- "@types/require-from-string": "^1.2.0",
- "@types/serve-favicon": "^2.5.2",
- "@types/ssh2": "^0.5.46",
- "@types/tar": "^4.0.4",
- "@types/uuid": "^8.3.0",
- "@types/validator": "^13.1.3",
- "axios": "^0.21.1",
- "bcryptjs": "^2.4.3",
- "body-parser": "^1.19.0",
+ "axios": "^1.9.0",
+ "bcryptjs": "^3.0.2",
+ "body-parser": "^2.2.0",
"configstore": "^5.0.1",
- "cookie-parser": "~1.4.5",
- "debug": "~4.3.1",
- "dockerode": "^3.2.1",
- "ejs": "^3.1.6",
- "express": "^4.17.1",
- "fs-extra": "^9.1.0",
+ "cookie-parser": "~1.4.7",
+ "cron": "^4.3.0",
+ "debug": "~4.4.1",
+ "dockerode": "^4.0.6",
+ "ejs": "^3.1.10",
+ "express": "^5.1.0",
+ "fs-extra": "^11.3.0",
"http-proxy": "^1.18.1",
"is-valid-path": "^0.1.1",
- "js-base64": "^3.6.0",
- "jsonwebtoken": "^8.5.1",
- "madge": "^4.0.0",
- "moment": "^2.29.1",
+ "js-base64": "^3.7.7",
+ "jsonwebtoken": "^9.0.2",
+ "moment": "^2.30.1",
"morgan": "^1.10.0",
- "multer": "^1.4.2",
- "on-finished": "^2.3.0",
- "prettier": "^2.2.1",
- "public-ip": "^4.0.3",
- "recursive-readdir": "^2.2.2",
+ "multer": "^2.0.0",
+ "on-finished": "^2.4.1",
+ "prettier": "3.5.3",
+ "public-ip": "^7.0.1",
+ "recursive-readdir": "^2.2.3",
"request": "^2.88.2",
"require-from-string": "^2.0.2",
"serve-favicon": "~2.5.0",
- "simple-git": "^2.34.2",
- "ssh2": "^0.8.9",
- "tar": "^6.1.0",
- "tslint": "^6.1.3",
- "typescript": "^4.1.5",
- "uuid": "^8.3.2",
- "validator": "^13.5.2",
- "yaml": "^1.10.0"
+ "shell-quote": "^1.8.2",
+ "simple-git": "^3.27.0",
+ "ssh2": "^1.16.0",
+ "tar": "^7.4.3",
+ "typescript": "^5.8.3",
+ "uuid": "^11.1.0",
+ "validator": "^13.15.0",
+ "yaml": "^2.8.0"
},
"devDependencies": {
- "jest": "^26.6.3",
- "ts-jest": "^26.5.1"
+ "@eslint/js": "^9.27.0",
+ "@types/bcryptjs": "^3.0.0",
+ "@types/configstore": "^5.0.1",
+ "@types/cookie-parser": "^1.4.8",
+ "@types/debug": "^4.1.12",
+ "@types/dockerode": "^3.3.39",
+ "@types/ejs": "^3.1.5",
+ "@types/express": "^5.0.2",
+ "@types/fs-extra": "^11.0.4",
+ "@types/http-proxy": "^1.17.16",
+ "@types/is-valid-path": "^0.1.2",
+ "@types/jest": "^29.5.14",
+ "@types/js-base64": "^3.3.1",
+ "@types/jsonwebtoken": "^9.0.9",
+ "@types/moment": "^2.13.0",
+ "@types/morgan": "^1.9.9",
+ "@types/multer": "^1.4.12",
+ "@types/on-finished": "^2.3.4",
+ "@types/request": "^2.48.12",
+ "@types/require-from-string": "^1.2.3",
+ "@types/serve-favicon": "^2.5.7",
+ "@types/shell-quote": "^1.7.5",
+ "@types/ssh2": "^1.15.5",
+ "@types/tar": "^6.1.13",
+ "@types/uuid": "^10.0.0",
+ "@types/validator": "^13.15.1",
+ "@typescript-eslint/eslint-plugin": "^8.32.1",
+ "@typescript-eslint/parser": "^8.32.1",
+ "eslint": "^9.27.0",
+ "globals": "^16.2.0",
+ "jest": "^29.7.0",
+ "madge": "^8.0.0",
+ "ts-jest": "^29.3.4",
+ "typescript-eslint": "^8.32.1"
}
}
diff --git a/src/api/ApiStatusCodes.ts b/src/api/ApiStatusCodes.ts
index 5983182d7..fab801219 100644
--- a/src/api/ApiStatusCodes.ts
+++ b/src/api/ApiStatusCodes.ts
@@ -46,6 +46,9 @@ class ApiStatusCodes {
static readonly NOT_FOUND = 1111
static readonly AUTHENTICATION_FAILED = 1112
static readonly STATUS_PASSWORD_BACK_OFF = 1113
+ static readonly STATUS_ERROR_OTP_REQUIRED = 1114
+ static readonly STATUS_ERROR_PRO_API_KEY_INVALIDATED = 1115
+ static readonly STATUS_ERROR_NGINX_VALIDATION_FAILED = 1116
}
export default ApiStatusCodes
diff --git a/src/api/BaseApi.ts b/src/api/BaseApi.ts
index ad2bd103e..e8b06fe58 100644
--- a/src/api/BaseApi.ts
+++ b/src/api/BaseApi.ts
@@ -1,7 +1,10 @@
class BaseApi {
public data: any
- constructor(public status: number, public description: string) {
+ constructor(
+ public status: number,
+ public description: string
+ ) {
this.data = {}
}
}
diff --git a/src/app.ts b/src/app.ts
index 46fce468b..850749117 100644
--- a/src/app.ts
+++ b/src/app.ts
@@ -6,12 +6,15 @@ import cookieParser = require('cookie-parser')
import bodyParser = require('body-parser')
import httpProxyImport = require('http-proxy')
+import * as http from 'http'
import ApiStatusCodes from './api/ApiStatusCodes'
import BaseApi from './api/BaseApi'
+import DockerApi from './docker/DockerApi'
import InjectionExtractor from './injection/InjectionExtractor'
import * as Injector from './injection/Injector'
import DownloadRouter from './routes/download/DownloadRouter'
import LoginRouter from './routes/login/LoginRouter'
+import ThemePublicRouter from './routes/public/ThemePublicRouter'
import UserRouter from './routes/user/UserRouter'
import CaptainManager from './user/system/CaptainManager'
import CaptainConstants from './utils/CaptainConstants'
@@ -22,7 +25,7 @@ import Utils from './utils/Utils'
const httpProxy = httpProxyImport.createProxyServer({})
-let app = express()
+const app = express()
app.set('views', path.join(__dirname, '../views'))
app.set('view engine', 'ejs')
@@ -77,11 +80,11 @@ app.use(Injector.injectGlobal())
app.use(function (req, res, next) {
if (InjectionExtractor.extractGlobalsFromInjected(res).forceSsl) {
- let isRequestSsl =
+ const isRequestSsl =
req.secure || req.get('X-Forwarded-Proto') === 'https'
if (!isRequestSsl) {
- let newUrl = `https://${req.get('host')}${req.originalUrl}`
+ const newUrl = `https://${req.hostname}:${CaptainConstants.configs.nginxPortNumber443}${req.originalUrl}`
res.redirect(302, newUrl)
return
}
@@ -105,12 +108,16 @@ app.use(CaptainConstants.netDataRelativePath, function (req, res, next) {
req.originalUrl.indexOf(CaptainConstants.netDataRelativePath + '/') !==
0
) {
- let isRequestSsl =
+ const isRequestSsl =
req.secure || req.get('X-Forwarded-Proto') === 'https'
- let newUrl =
+ const newUrl =
(isRequestSsl ? 'https://' : 'http://') +
- req.get('host') +
+ req.hostname +
+ ':' +
+ (isRequestSsl
+ ? CaptainConstants.configs.nginxPortNumber443
+ : CaptainConstants.configs.nginxPortNumber80) +
CaptainConstants.netDataRelativePath +
'/'
res.redirect(302, newUrl)
@@ -134,7 +141,7 @@ app.use(CaptainConstants.netDataRelativePath, function (req, res, next) {
}
})
-httpProxy.on('error', function (err, req, resOriginal) {
+httpProxy.on('error', function (err, req, resOriginal: http.ServerResponse) {
if (err) {
Logger.e(err)
}
@@ -173,7 +180,7 @@ app.use(CaptainConstants.netDataRelativePath, function (req, res, next) {
// ********************* Beginning of API End Points *******************************************
-let API_PREFIX = '/api/'
+const API_PREFIX = '/api/'
app.use(API_PREFIX + ':apiVersionFromRequest/', function (req, res, next) {
if (req.params.apiVersionFromRequest !== CaptainConstants.apiVersion) {
@@ -187,7 +194,7 @@ app.use(API_PREFIX + ':apiVersionFromRequest/', function (req, res, next) {
}
if (!InjectionExtractor.extractGlobalsFromInjected(res).initialized) {
- let response = new BaseApi(
+ const response = new BaseApi(
ApiStatusCodes.STATUS_ERROR_CAPTAIN_NOT_INITIALIZED,
'Captain is not ready yet...'
)
@@ -195,6 +202,15 @@ app.use(API_PREFIX + ':apiVersionFromRequest/', function (req, res, next) {
return
}
+ if (DockerApi.get().dockerNeedsUpdate) {
+ const response = new BaseApi(
+ ApiStatusCodes.STATUS_ERROR_GENERIC,
+ 'Docker version is too old. Please update Docker to use CapRover.'
+ )
+ res.send(response)
+ return
+ }
+
next()
})
@@ -204,6 +220,7 @@ app.use(
API_PREFIX + CaptainConstants.apiVersion + '/downloads/',
DownloadRouter
)
+app.use(API_PREFIX + CaptainConstants.apiVersion + '/theme/', ThemePublicRouter)
// secured end points
app.use(API_PREFIX + CaptainConstants.apiVersion + '/user/', UserRouter)
diff --git a/src/datastore/AppsDataStore.ts b/src/datastore/AppsDataStore.ts
index 48349c127..dd4bf3731 100644
--- a/src/datastore/AppsDataStore.ts
+++ b/src/datastore/AppsDataStore.ts
@@ -1,5 +1,18 @@
import { v4 as uuid } from 'uuid'
import ApiStatusCodes from '../api/ApiStatusCodes'
+import {
+ AppDeployTokenConfig,
+ IAllAppDefinitions,
+ IAppDef,
+ IAppDefSaved,
+ IAppEnvVar,
+ IAppPort,
+ IAppTag,
+ IAppVersion,
+ IAppVolume,
+ IHttpAuth,
+ RepoInfo,
+} from '../models/AppDefinition'
import { IBuiltImage } from '../models/IBuiltImage'
import Authenticator from '../user/Authenticator'
import ApacheMd5 from '../utils/ApacheMd5'
@@ -9,7 +22,7 @@ import Logger from '../utils/Logger'
import Utils from '../utils/Utils'
import configstore = require('configstore')
-const isValidPath = require('is-valid-path')
+import isValidPath = require('is-valid-path')
const APP_DEFINITIONS = 'appDefinitions'
@@ -31,13 +44,16 @@ function isPortValid(portNumber: number) {
class AppsDataStore {
private encryptor: CaptainEncryptor
- constructor(private data: configstore, private namepace: string) {}
+ constructor(
+ private data: configstore,
+ private namepace: string
+ ) {}
setEncryptor(encryptor: CaptainEncryptor) {
this.encryptor = encryptor
}
- private saveApp(appName: String, app: IAppDef) {
+ private saveApp(appName: string, app: IAppDef) {
const self = this
return Promise.resolve()
@@ -181,15 +197,13 @@ class AppsDataStore {
const appToSave: IAppDefSaved = app
if (passwordToBeEncrypted) {
- appToSave.appPushWebhook!.repoInfo!.passwordEncrypted = self.encryptor.encrypt(
- passwordToBeEncrypted
- )
+ appToSave.appPushWebhook!.repoInfo!.passwordEncrypted =
+ self.encryptor.encrypt(passwordToBeEncrypted)
}
if (sshKeyToBeEncrypted) {
- appToSave.appPushWebhook!.repoInfo!.sshKeyEncrypted = self.encryptor.encrypt(
- sshKeyToBeEncrypted
- )
+ appToSave.appPushWebhook!.repoInfo!.sshKeyEncrypted =
+ self.encryptor.encrypt(sshKeyToBeEncrypted)
}
return appToSave
@@ -207,7 +221,7 @@ class AppsDataStore {
)
}
- if (!!this.data.get(`${APP_DEFINITIONS}.${appName}`)) {
+ if (this.data.get(`${APP_DEFINITIONS}.${appName}`)) {
throw ApiStatusCodes.createError(
ApiStatusCodes.STATUS_ERROR_ALREADY_EXIST,
'App Name already exists. Please use a different name'
@@ -266,8 +280,8 @@ class AppsDataStore {
getAppDefinitions() {
const self = this
return new Promise(function (resolve, reject) {
- let allApps = self.data.get(APP_DEFINITIONS) || {}
- let allAppsUnencrypted: IAllAppDefinitions = {}
+ const allApps = self.data.get(APP_DEFINITIONS) || {}
+ const allAppsUnencrypted: IAllAppDefinitions = {}
Object.keys(allApps).forEach(function (appName) {
allAppsUnencrypted[appName] = allApps[appName]
@@ -389,7 +403,7 @@ class AppsDataStore {
})
}
- removeCustomDomainForApp(appName: string, customDomain: string) {
+ removeCustomDomainForApp(appName: string, customDomainToRemove: string) {
const self = this
return this.getAppDefinition(appName).then(function (app) {
@@ -398,7 +412,9 @@ class AppsDataStore {
const newDomains = []
let removed = false
for (let idx = 0; idx < app.customDomain.length; idx++) {
- if (app.customDomain[idx].publicDomain === customDomain) {
+ if (
+ app.customDomain[idx].publicDomain === customDomainToRemove
+ ) {
removed = true
} else {
newDomains.push(app.customDomain[idx])
@@ -408,10 +424,19 @@ class AppsDataStore {
if (!removed) {
throw ApiStatusCodes.createError(
ApiStatusCodes.STATUS_ERROR_GENERIC,
- `Custom domain ${customDomain} does not exist in ${appName}`
+ `Custom domain ${customDomainToRemove} does not exist in ${appName}`
)
}
+ if (app.redirectDomain) {
+ if (`${app.redirectDomain}` === customDomainToRemove) {
+ app.redirectDomain = undefined
+ }
+ if (newDomains.length === 0) {
+ app.redirectDomain = undefined
+ }
+ }
+
app.customDomain = newDomains
return self.saveApp(appName, app)
})
@@ -602,11 +627,13 @@ class AppsDataStore {
updateAppDefinitionInDb(
appName: string,
+ projectId: string | undefined,
description: string,
instanceCount: number,
captainDefinitionRelativeFilePath: string,
envVars: IAppEnvVar[],
volumes: IAppVolume[],
+ tags: IAppTag[],
nodeId: string,
notExposeAsWebApp: boolean,
containerHttpPort: number,
@@ -616,6 +643,7 @@ class AppsDataStore {
repoInfo: RepoInfo,
authenticator: Authenticator,
customNginxConfig: string,
+ redirectDomain: string,
preDeployFunction: string,
serviceUpdateOverride: string,
websocketSupport: boolean,
@@ -690,9 +718,12 @@ class AppsDataStore {
appObj.websocketSupport = !!websocketSupport
appObj.nodeId = nodeId
appObj.customNginxConfig = customNginxConfig
+ appObj.redirectDomain = redirectDomain
appObj.preDeployFunction = preDeployFunction
appObj.serviceUpdateOverride = serviceUpdateOverride
appObj.description = description
+ appObj.projectId = projectId
+ appObj.tags = tags
appObj.appDeployTokenConfig = {
enabled: !!appDeployTokenConfig.enabled,
@@ -716,9 +747,8 @@ class AppsDataStore {
appObj.appDeployTokenConfig.appDeployToken = undefined
} else if (!appObj.appDeployTokenConfig.appDeployToken) {
// App is supposed to have a token, but it doesn't have one yet. The first time use case.
- appObj.appDeployTokenConfig.appDeployToken = Utils.generateRandomString(
- 32
- )
+ appObj.appDeployTokenConfig.appDeployToken =
+ Utils.generateRandomString(32)
}
if (httpAuth && httpAuth.user) {
@@ -848,7 +878,11 @@ class AppsDataStore {
* @param hasPersistentData whether the app has persistent data, you can only run one instance of the app.
* @returns {Promise}
*/
- registerAppDefinition(appName: string, hasPersistentData: boolean) {
+ registerAppDefinition(
+ appName: string,
+ projectId: string | undefined,
+ hasPersistentData: boolean
+ ) {
const self = this
return new Promise(function (resolve, reject) {
@@ -862,7 +896,7 @@ class AppsDataStore {
return
}
- if (!!self.data.get(`${APP_DEFINITIONS}.${appName}`)) {
+ if (self.data.get(`${APP_DEFINITIONS}.${appName}`)) {
reject(
ApiStatusCodes.createError(
ApiStatusCodes.STATUS_ERROR_ALREADY_EXIST,
@@ -874,6 +908,7 @@ class AppsDataStore {
const defaultAppDefinition: IAppDef = {
hasPersistentData: !!hasPersistentData,
+ projectId: projectId,
description: '',
instanceCount: 1,
captainDefinitionRelativeFilePath:
@@ -882,11 +917,13 @@ class AppsDataStore {
envVars: [],
volumes: [],
ports: [],
+ tags: [],
versions: [],
deployedVersion: 0,
notExposeAsWebApp: false,
customDomain: [],
hasDefaultSubDomainSsl: false,
+ redirectDomain: '',
forceSsl: false,
websocketSupport: false,
}
diff --git a/src/datastore/DataStore.ts b/src/datastore/DataStore.ts
index af6e16ce6..96efef814 100644
--- a/src/datastore/DataStore.ts
+++ b/src/datastore/DataStore.ts
@@ -3,9 +3,19 @@
*/
import Configstore = require('configstore')
import fs = require('fs-extra')
+import {
+ AutomatedCleanupConfigsCleaner,
+ IAutomatedCleanupConfigs,
+} from '../models/AutomatedCleanupConfigs'
+import CapRoverTheme from '../models/CapRoverTheme'
+import { GoAccessInfo } from '../models/GoAccessInfo'
+import { NetDataInfo } from '../models/NetDataInfo'
import CaptainConstants from '../utils/CaptainConstants'
import CaptainEncryptor from '../utils/Encryptor'
+import Utils from '../utils/Utils'
import AppsDataStore from './AppsDataStore'
+import ProDataStore from './ProDataStore'
+import ProjectsDataStore from './ProjectsDataStore'
import RegistriesDataStore from './RegistriesDataStore'
// keys:
@@ -17,9 +27,14 @@ const FORCE_ROOT_SSL = 'forceRootSsl'
const HAS_REGISTRY_SSL = 'hasRegistrySsl'
const EMAIL_ADDRESS = 'emailAddress'
const NET_DATA_INFO = 'netDataInfo'
+const GOACCESS_INFO = 'goAccessInfo'
const NGINX_BASE_CONFIG = 'nginxBaseConfig'
const NGINX_CAPTAIN_CONFIG = 'nginxCaptainConfig'
const CUSTOM_ONE_CLICK_APP_URLS = 'oneClickAppUrls'
+const FEATURE_FLAGS = 'featureFlags'
+const AUTOMATED_CLEANUP = 'automatedCleanup'
+const THEMES = 'themes'
+const CURRENT_THEME = 'currentTheme'
const DEFAULT_CAPTAIN_ROOT_DOMAIN = 'captain.localhost'
@@ -29,8 +44,19 @@ const DEFAULT_NGINX_BASE_CONFIG = fs
const DEFAULT_NGINX_CAPTAIN_CONFIG = fs
.readFileSync(__dirname + '/../../template/root-nginx-conf.ejs')
.toString()
+
+let DEFAULT_NGINX_CONFIG_FOR_APP_PATH =
+ __dirname + '/../../template/server-block-conf.ejs'
+
+const SERVER_BLOCK_CONF_OVERRIDE_PATH =
+ CaptainConstants.captainDataDirectory + '/server-block-conf-override.ejs'
+
+if (fs.pathExistsSync(SERVER_BLOCK_CONF_OVERRIDE_PATH)) {
+ DEFAULT_NGINX_CONFIG_FOR_APP_PATH = SERVER_BLOCK_CONF_OVERRIDE_PATH
+}
+
const DEFAULT_NGINX_CONFIG_FOR_APP = fs
- .readFileSync(__dirname + '/../../template/server-block-conf.ejs')
+ .readFileSync(DEFAULT_NGINX_CONFIG_FOR_APP_PATH)
.toString()
class DataStore {
@@ -39,6 +65,8 @@ class DataStore {
private data: Configstore
private appsDataStore: AppsDataStore
private registriesDataStore: RegistriesDataStore
+ proDataStore: ProDataStore
+ private projectsDataStore: ProjectsDataStore
constructor(namespace: string) {
const data = new Configstore(
@@ -53,6 +81,11 @@ class DataStore {
this.namespace = namespace
this.data.set(NAMESPACE, namespace)
this.appsDataStore = new AppsDataStore(this.data, namespace)
+ this.projectsDataStore = new ProjectsDataStore(
+ this.data,
+ this.appsDataStore
+ )
+ this.proDataStore = new ProDataStore(this.data)
this.registriesDataStore = new RegistriesDataStore(this.data, namespace)
}
@@ -66,6 +99,66 @@ class DataStore {
return this.data.get(NAMESPACE)
}
+ getFeatureFlags(): any {
+ const self = this
+ return self.data.get(FEATURE_FLAGS)
+ }
+
+ setFeatureFlags(featureFlags: any) {
+ const self = this
+ return Promise.resolve().then(function () {
+ return self.data.set(FEATURE_FLAGS, featureFlags)
+ })
+ }
+
+ getThemes(): Promise {
+ const self = this
+ return Promise.resolve().then(function () {
+ return self.data.get(THEMES) || []
+ })
+ }
+
+ deleteTheme(themeName: string) {
+ const self = this
+ return Promise.resolve()
+ .then(function () {
+ return self.getThemes()
+ })
+ .then(function (themesFetched) {
+ self.data.set(
+ THEMES,
+ Utils.copyObject(themesFetched).filter(
+ (it) => it.name !== themeName
+ )
+ )
+ })
+ }
+
+ saveThemes(themes: CapRoverTheme[]) {
+ const self = this
+ return Promise.resolve().then(function () {
+ self.data.set(
+ THEMES,
+ (themes || []).filter((it) => !it.builtIn)
+ )
+ })
+ }
+
+ setCurrentTheme(themeName: string | undefined) {
+ const self = this
+ return Promise.resolve() //
+ .then(function () {
+ return self.data.set(CURRENT_THEME, themeName || '')
+ })
+ }
+
+ getCurrentThemeName(): Promise {
+ const self = this
+ return Promise.resolve().then(function () {
+ return self.data.get(CURRENT_THEME)
+ })
+ }
+
setHashedPassword(newHashedPassword: string) {
const self = this
return Promise.resolve().then(function () {
@@ -80,28 +173,52 @@ class DataStore {
})
}
+ setDiskCleanupConfigs(configs: IAutomatedCleanupConfigs) {
+ const self = this
+ return Promise.resolve().then(function () {
+ return self.data.set(
+ AUTOMATED_CLEANUP,
+ AutomatedCleanupConfigsCleaner.sanitizeInput(configs)
+ )
+ })
+ }
+
+ getDiskCleanupConfigs(): Promise {
+ const self = this
+ return Promise.resolve().then(function () {
+ return (
+ self.data.get(AUTOMATED_CLEANUP) ||
+ AutomatedCleanupConfigsCleaner.sanitizeInput({
+ mostRecentLimit: 0,
+ cronSchedule: '',
+ timezone: '',
+ })
+ )
+ })
+ }
+
/*
- "smtp": {
- "to": "",
- "hostname": "",
- "server": "",
- "port": "",
- "allowNonTls": false,
- "password": "",
- "username": ""
- },
- "slack": {
- "hook": "",
- "channel": ""
- },
- "telegram": {
- "botToken": "",
- "chatId": ""
- },
- "pushBullet": {
- "fallbackEmail": "",
- "apiToken": ""
- }
+ "smtp": {
+ "to": "",
+ "hostname": "",
+ "server": "",
+ "port": "",
+ "allowNonTls": false,
+ "password": "",
+ "username": ""
+ },
+ "slack": {
+ "hook": "",
+ "channel": ""
+ },
+ "telegram": {
+ "botToken": "",
+ "chatId": ""
+ },
+ "pushBullet": {
+ "fallbackEmail": "",
+ "apiToken": ""
+ }
*/
getNetDataInfo() {
const self = this
@@ -127,6 +244,27 @@ class DataStore {
})
}
+ getGoAccessInfo() {
+ const self = this
+ const goAccessInfo = (self.data.get(GOACCESS_INFO) ||
+ {}) as GoAccessInfo
+ goAccessInfo.isEnabled = goAccessInfo.isEnabled || false
+ if (!goAccessInfo.data || !goAccessInfo.isEnabled) {
+ goAccessInfo.data = {
+ rotationFrequencyCron: '0 0 1 * *', // monthly
+ logRetentionDays: 180,
+ }
+ }
+ return Promise.resolve(goAccessInfo)
+ }
+
+ setGoAccessInfo(goAccessInfo: GoAccessInfo) {
+ const self = this
+ return Promise.resolve().then(function () {
+ return self.data.set(GOACCESS_INFO, goAccessInfo)
+ })
+ }
+
getRootDomain() {
return this.data.get(CUSTOM_DOMAIN) || DEFAULT_CAPTAIN_ROOT_DOMAIN
}
@@ -139,6 +277,14 @@ class DataStore {
return this.appsDataStore
}
+ getProjectsDataStore() {
+ return this.projectsDataStore
+ }
+
+ getProDataStore() {
+ return this.proDataStore
+ }
+
getRegistriesDataStore() {
return this.registriesDataStore
}
diff --git a/src/datastore/DataStoreProvider.ts b/src/datastore/DataStoreProvider.ts
index 38004bf36..e21aec976 100644
--- a/src/datastore/DataStoreProvider.ts
+++ b/src/datastore/DataStoreProvider.ts
@@ -3,6 +3,7 @@
*/
import ApiStatusCodes from '../api/ApiStatusCodes'
+import { IHashMapGeneric } from '../models/ICacheGeneric'
import CaptainConstants from '../utils/CaptainConstants'
import DataStore from './DataStore'
@@ -11,7 +12,10 @@ const dataStoreCache: IHashMapGeneric = {}
export default {
getDataStore: function (namespace: string) {
if (!namespace) {
- throw new Error('NameSpace is empty')
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.STATUS_ERROR_NOT_AUTHORIZED,
+ 'Empty namespace'
+ )
}
if (namespace !== CaptainConstants.rootNameSpace) {
diff --git a/src/datastore/ProDataStore.ts b/src/datastore/ProDataStore.ts
new file mode 100644
index 000000000..154b1332b
--- /dev/null
+++ b/src/datastore/ProDataStore.ts
@@ -0,0 +1,89 @@
+import configstore = require('configstore')
+import { v4 as uuid } from 'uuid'
+import { IProConfig } from '../models/IProFeatures'
+import ProManagerUtils from '../user/pro/ProManagerUtils'
+
+const IS_OTP_ENABLED = 'isOtpEnabled'
+const PRO_API_KEY = 'proApiKey'
+const PRO_CONFIGS = 'proConfigs'
+const INSTALLATION_ID = 'installationId'
+
+const PRO_PREFIX = 'pro'
+
+function getDataKey(key: string) {
+ return PRO_PREFIX + '.' + key
+}
+
+class ProDataStore {
+ constructor(private data: configstore) {}
+
+ isOtpEnabled(): Promise {
+ const self = this
+ return Promise.resolve().then(function () {
+ return !!self.data.get(getDataKey(IS_OTP_ENABLED))
+ })
+ }
+
+ setOtpEnabled(isEnabled: boolean) {
+ const self = this
+ return Promise.resolve().then(function () {
+ return self.data.set(getDataKey(IS_OTP_ENABLED), !!isEnabled)
+ })
+ }
+
+ getApiKey() {
+ const self = this
+ return Promise.resolve().then(function () {
+ return `${self.data.get(getDataKey(PRO_API_KEY)) || ''}`
+ })
+ }
+
+ getInstallationId() {
+ const self = this
+ return Promise.resolve()
+ .then(function () {
+ return `${self.data.get(getDataKey(INSTALLATION_ID)) || ''}`
+ })
+ .then(function (installationId) {
+ if (installationId) return installationId
+
+ const newId = uuid()
+ self.data.set(getDataKey(INSTALLATION_ID), newId)
+ return newId
+ })
+ }
+
+ clearAllProConfigs() {
+ const self = this
+ return Promise.resolve().then(function () {
+ return self.data.delete(PRO_PREFIX)
+ })
+ }
+
+ setApiKey(apiKey: string) {
+ const self = this
+ return Promise.resolve().then(function () {
+ return self.data.set(getDataKey(PRO_API_KEY), `${apiKey}`)
+ })
+ }
+
+ getConfig(): Promise {
+ const self = this
+ return Promise.resolve()
+ .then(function () {
+ return self.data.get(getDataKey(PRO_CONFIGS))
+ })
+ .then(function (pc) {
+ return ProManagerUtils.ensureProConfigType(pc)
+ })
+ }
+
+ updateConfig(proConfig: IProConfig): Promise {
+ const self = this
+ return Promise.resolve().then(function () {
+ return self.data.set(getDataKey(PRO_CONFIGS), proConfig)
+ })
+ }
+}
+
+export default ProDataStore
diff --git a/src/datastore/ProjectsDataStore.ts b/src/datastore/ProjectsDataStore.ts
new file mode 100644
index 000000000..f784be07d
--- /dev/null
+++ b/src/datastore/ProjectsDataStore.ts
@@ -0,0 +1,247 @@
+import configstore = require('configstore')
+import ApiStatusCodes from '../api/ApiStatusCodes'
+import { ProjectDefinition } from '../models/ProjectDefinition'
+import Utils from '../utils/Utils'
+import AppsDataStore from './AppsDataStore'
+
+const PROJECTS_DEFINITIONS = 'projectsDefinitions'
+
+function isNameAllowed(name: string) {
+ const isNameFormattingOk =
+ !!name &&
+ name.length < 50 &&
+ /^[a-z]/.test(name) &&
+ /[a-z0-9]$/.test(name) &&
+ /^[a-z0-9\-]+$/.test(name) &&
+ name.indexOf('--') < 0
+ return isNameFormattingOk && ['captain', 'root'].indexOf(name) < 0
+}
+
+function isValidUUID(uuid: string | undefined): boolean {
+ const uuidRegex =
+ /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i
+ return !!uuid && uuidRegex.test(uuid)
+}
+
+class ProjectsDataStore {
+ constructor(
+ private data: configstore,
+ private appsDataStore: AppsDataStore
+ ) {}
+
+ saveProject(projectId: string, project: ProjectDefinition) {
+ const self = this
+ projectId = `${projectId || ''}`.trim()
+
+ return Promise.resolve()
+
+ .then(function () {
+ return self.getAllProjects()
+ })
+ .then(function (allProjects) {
+ project.name = `${project.name || ''}`.trim()
+ project.id = `${project.id || ''}`.trim()
+ project.description = `${project.description || ''}`.trim()
+ project.parentProjectId = `${
+ project.parentProjectId || ''
+ }`.trim()
+
+ if (!isNameAllowed(project.name)) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_OPERATION,
+ 'Project name is not allowed'
+ )
+ }
+
+ if (project.id !== projectId) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_OPERATION,
+ 'Project ID does not match'
+ )
+ }
+
+ if (!isValidUUID(project.id)) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_OPERATION,
+ 'Project ID is not a valid UUID'
+ )
+ }
+
+ if (project.parentProjectId) {
+ if (project.parentProjectId === project.id) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_OPERATION,
+ 'Parent Project ID cannot be the same as the project ID'
+ )
+ }
+
+ if (!isValidUUID(project.parentProjectId)) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_OPERATION,
+ 'Parent Project ID is not a valid UUID'
+ )
+ }
+
+ if (
+ !allProjects.some(
+ (p) => p.id === project.parentProjectId
+ )
+ ) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_OPERATION,
+ 'Parent Project ID does not exist'
+ )
+ }
+ }
+
+ const projectToSave: ProjectDefinition = {
+ id: project.id,
+ name: project.name,
+ parentProjectId: project.parentProjectId,
+ description: project.description,
+ }
+
+ self.data.set(
+ `${PROJECTS_DEFINITIONS}.${projectId}`,
+ projectToSave
+ )
+
+ return projectToSave
+ })
+ }
+
+ getAllProjects(): Promise {
+ const self = this
+ return Promise.resolve()
+ .then(function () {
+ return self.data.get(PROJECTS_DEFINITIONS)
+ })
+ .then(function (projects) {
+ projects = projects || {}
+ return Object.keys(projects).map((key) => projects[key]) || []
+ })
+ }
+
+ getProject(projectId: string): Promise {
+ const self = this
+ projectId = `${projectId || ''}`.trim()
+ return Promise.resolve()
+ .then(function () {
+ return self.data.get(`${PROJECTS_DEFINITIONS}.${projectId}`) as
+ | ProjectDefinition
+ | undefined
+ })
+ .then(function (project) {
+ if (!project) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_OPERATION,
+ 'Project not found'
+ )
+ }
+ return project
+ })
+ }
+
+ organizeFromTheLeafsToRoot(input: ProjectDefinition[]) {
+ const projectMap = new Map()
+ input.forEach((project) => projectMap.set(project.id, project))
+
+ // Function to recursively organize projects
+ const organizeProjects = (projectId: string): ProjectDefinition[] => {
+ const project = projectMap.get(projectId)
+ if (!project) return []
+
+ const children = Array.from(projectMap.values())
+ .filter((p) => p.parentProjectId === projectId)
+ // just to make this deterministic for testing!
+ .sort((a, b) => b.id.localeCompare(a.id))
+
+ const organizedChildren = children
+ .map((child) => organizeProjects(child.id))
+ .flat()
+
+ return [project, ...organizedChildren]
+ }
+
+ const rootProjects = input
+ .filter((project) => !project.parentProjectId)
+ // just to make this deterministic for testing!
+ .sort((a, b) => b.id.localeCompare(a.id))
+
+ return rootProjects
+ .flatMap((root) => organizeProjects(root.id))
+ .reverse()
+ }
+
+ deleteProjects(projectIds: string[]) {
+ const self = this
+
+ projectIds = projectIds || []
+ projectIds = projectIds.map((it) => it.trim()).filter((it) => !!it)
+
+ return Promise.resolve()
+ .then(function () {
+ return self.getAllProjects()
+ })
+ .then(function (allProjects) {
+ allProjects = self.organizeFromTheLeafsToRoot(allProjects)
+ allProjects = allProjects.filter((project) =>
+ projectIds.includes(project.id)
+ )
+
+ const promises: Promise[] = allProjects.map((p) =>
+ self.deleteProject(p.id)
+ )
+
+ return promises.reduce((accumulatedPromise, currentPromise) => {
+ return accumulatedPromise.then(() => currentPromise)
+ }, Promise.resolve())
+ })
+ }
+
+ deleteProject(projectId: string) {
+ const self = this
+
+ projectId = `${projectId || ''}`.trim()
+
+ return Promise.resolve()
+ .then(function () {
+ // dumb configstore needs some time to store the file!!!
+ // otherwise (in case multiple deletes), the child deletion is not committed yet
+ return Utils.getDelayedPromise(500)
+ })
+ .then(function () {
+ return self.getProject(projectId)
+ })
+ .then(function (project) {
+ // project exists
+
+ return self.appsDataStore.getAppDefinitions()
+ })
+ .then(function (appsAll) {
+ const apps = Object.keys(appsAll).map((key) => appsAll[key])
+
+ if (apps.some((app) => app.projectId === projectId)) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_OPERATION,
+ 'Project is not empty (has apps)'
+ )
+ }
+ })
+ .then(function () {
+ return self.getAllProjects()
+ })
+ .then(function (allProjects) {
+ if (allProjects.some((p) => p.parentProjectId === projectId)) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_OPERATION,
+ 'Project is not empty (has sub projects)'
+ )
+ }
+
+ return self.data.delete(`${PROJECTS_DEFINITIONS}.${projectId}`)
+ })
+ }
+}
+
+export default ProjectsDataStore
diff --git a/src/datastore/RegistriesDataStore.ts b/src/datastore/RegistriesDataStore.ts
index b06a77d5b..64974957d 100644
--- a/src/datastore/RegistriesDataStore.ts
+++ b/src/datastore/RegistriesDataStore.ts
@@ -15,7 +15,10 @@ const DEFAULT_DOCKER_REGISTRY_ID = 'defaultDockerRegId'
class RegistriesDataStore {
private encryptor: CaptainEncryptor
- constructor(private data: configstore, public namepace: string) {}
+ constructor(
+ private data: configstore,
+ public namepace: string
+ ) {}
setEncryptor(encryptor: CaptainEncryptor) {
this.encryptor = encryptor
diff --git a/src/docker/DockerApi.ts b/src/docker/DockerApi.ts
index 9e5c44046..c3ec5d4a5 100644
--- a/src/docker/DockerApi.ts
+++ b/src/docker/DockerApi.ts
@@ -1,24 +1,35 @@
import Base64Provider = require('js-base64')
import Docker = require('dockerode')
import { v4 as uuid } from 'uuid'
+import {
+ IAppDef,
+ IAppEnvVar,
+ IAppPort,
+ IAppVolume,
+ VolumesTypes,
+} from '../models/AppDefinition'
+import { DockerAuthObj, DockerRegistryConfig } from '../models/DockerAuthObj'
+import { DockerSecret } from '../models/DockerSecret'
import DockerService from '../models/DockerService'
+import { IHashMapGeneric } from '../models/ICacheGeneric'
import {
IDockerApiPort,
IDockerContainerResource,
- VolumesTypes,
+ PreDeployFunction,
} from '../models/OtherTypes'
+import { ServerDockerInfo } from '../models/ServerDockerInfo'
import BuildLog from '../user/BuildLog'
import CaptainConstants from '../utils/CaptainConstants'
import EnvVars from '../utils/EnvVars'
import Logger from '../utils/Logger'
import Utils from '../utils/Utils'
-const dockerodeUtils = require('dockerode/lib/util')
+import Dockerode = require('dockerode')
+// @ts-expect-error "TODO"
+import dockerodeUtils = require('dockerode/lib/util')
const Base64 = Base64Provider.Base64
-function safeParseChunk(
- chunk: string
-): {
+function safeParseChunk(chunk: string): {
stream?: string
error?: any
errorDetail?: any
@@ -54,9 +65,42 @@ export abstract class IDockerUpdateOrders {
}
export type IDockerUpdateOrder = 'auto' | 'stopFirst' | 'startFirst'
+export interface CreateContainerParams {
+ containerName?: string
+ imageName: string
+
+ /** Override command to run the container with */
+ command?: string[]
+
+ /** an array, hostPath & containerPath, mode */
+ volumes: IAppVolume[]
+ network: string
+
+ /**
+ *
+ * [
+ * {
+ * key: 'somekey'
+ * value: 'some value'
+ * }
+ * ]
+ */
+ arrayOfEnvKeyAndValue: IAppEnvVar[]
+ addedCapabilities?: string[]
+ addedSecOptions?: string[]
+ authObj?: DockerAuthObj
+ /** If true, have the container always restart,
+ * If false act as a one off job runner that cleans up after itself */
+ sticky: boolean
+ /** If set true, waits for the container to exit before returning */
+ wait?: boolean
+}
+
class DockerApi {
private dockerode: Docker
+ public dockerNeedsUpdate = false
+
constructor(connectionParams: Docker.DockerOptions) {
this.dockerode = new Docker(connectionParams)
}
@@ -65,6 +109,16 @@ class DockerApi {
return dockerApiInstance
}
+ ensureSwarmExists() {
+ const self = this
+
+ return self.dockerode
+ .swarmInspect() //
+ .then(function (data) {
+ return data.ID
+ })
+ }
+
initSwarm(ip: string, portNumber?: number) {
const self = this
@@ -159,7 +213,7 @@ class DockerApi {
return self.dockerode.listServices()
})
.then(function (services) {
- return ((services || []) as unknown) as DockerService[]
+ return (services || []) as unknown as DockerService[]
})
}
@@ -264,10 +318,10 @@ class DockerApi {
)
}
- const optionsForBuild = {
+ const optionsForBuild: Dockerode.ImageBuildOptions = {
t: imageName,
buildargs: buildargs,
- } as any
+ }
if (Object.keys(registryConfig).length > 0) {
// https://github.com/apocas/dockerode/blob/ed6ef39e0fc81963fedf208c7e0854d8a44cb9a8/lib/docker.js#L271-L274
@@ -278,7 +332,7 @@ class DockerApi {
return self.dockerode.buildImage(
tarballFilePath,
- optionsForBuild as {}
+ optionsForBuild
)
})
.then(function (stream) {
@@ -480,7 +534,7 @@ class DockerApi {
}
/**
- * Creates a volume thar restarts unless stopped
+ * Creates a container that restarts unless stopped
* @param containerName
* @param imageName
* @param volumes an array, hostPath & containerPath, mode
@@ -505,9 +559,40 @@ class DockerApi {
addedSecOptions: string[],
authObj: DockerAuthObj | undefined
) {
+ return this.createContainer({
+ containerName,
+ imageName,
+ volumes,
+ network,
+ arrayOfEnvKeyAndValue,
+ addedCapabilities,
+ addedSecOptions,
+ authObj,
+ sticky: true,
+ })
+ }
+
+ /**
+ * Creates a docker container
+ */
+ createContainer({
+ containerName,
+ imageName,
+ command,
+ volumes,
+ network,
+ arrayOfEnvKeyAndValue,
+ addedCapabilities,
+ addedSecOptions,
+ authObj,
+ sticky,
+ wait = false,
+ }: CreateContainerParams) {
const self = this
- Logger.d(`Creating Sticky Container: ${imageName}`)
+ Logger.d(
+ `Creating ${sticky ? 'Sticky' : 'Ephemeral'} Container: ${imageName}`
+ )
const volumesMapped: string[] = []
volumes = volumes || []
@@ -525,6 +610,8 @@ class DockerApi {
envs.push(`${e.key}=${e.value}`)
}
+ let container: Docker.Container | undefined = undefined
+
return Promise.resolve()
.then(function () {
return self.pullImage(imageName, authObj)
@@ -534,6 +621,7 @@ class DockerApi {
name: containerName,
Image: imageName,
Env: envs,
+ Cmd: command,
HostConfig: {
Binds: volumesMapped,
CapAdd: addedCapabilities,
@@ -546,15 +634,27 @@ class DockerApi {
CaptainConstants.configs.defaultMaxLogSize,
},
},
- RestartPolicy: {
- Name: 'always',
- },
+ ...(sticky
+ ? {
+ RestartPolicy: {
+ Name: 'always',
+ },
+ }
+ : {}),
+ AutoRemove: !CaptainConstants.isDebug && !sticky,
},
})
})
.then(function (data) {
+ container = data
return data.start()
})
+ .then(function (startInfo) {
+ if (wait && container) {
+ return container.wait()
+ }
+ return startInfo
+ })
}
retag(currentName: string, targetName: string) {
@@ -1158,7 +1258,7 @@ class DockerApi {
})
}
- ensureOverlayNetwork(networkName: string) {
+ ensureOverlayNetwork(networkName: string, networkOverride: any) {
const self = this
return self.dockerode
@@ -1170,12 +1270,17 @@ class DockerApi {
})
.catch(function (error) {
if (error && error.statusCode === 404) {
- return self.dockerode.createNetwork({
- Name: networkName,
- CheckDuplicate: true,
- Driver: 'overlay',
- Attachable: true,
- })
+ return self.dockerode.createNetwork(
+ Utils.mergeObjects(
+ {
+ Name: networkName,
+ CheckDuplicate: true,
+ Driver: 'overlay',
+ Attachable: true,
+ },
+ networkOverride
+ )
+ )
}
return new Promise(function (resolve, reject) {
@@ -1239,7 +1344,7 @@ class DockerApi {
appObject: IAppDef | undefined,
updateOrder: IDockerUpdateOrder | undefined,
serviceUpdateOverride: any | undefined,
- preDeployFunction: Function | undefined
+ preDeployFunction: PreDeployFunction | undefined
) {
const self = this
return self.dockerode
@@ -1275,7 +1380,8 @@ class DockerApi {
}
}
newConstraints.push(`node.id == ${nodeId}`)
- updatedData.TaskTemplate.Placement.Constraints = newConstraints
+ updatedData.TaskTemplate.Placement.Constraints =
+ newConstraints
}
if (arrayOfEnvKeyAndValue) {
@@ -1319,7 +1425,7 @@ class DockerApi {
for (let idx = 0; idx < volumes.length; idx++) {
const v = volumes[idx]
- if (!!v.hostPath) {
+ if (v.hostPath) {
mts.push({
Source: v.hostPath,
Target: v.containerPath,
@@ -1327,7 +1433,7 @@ class DockerApi {
ReadOnly: false,
Consistency: 'default',
})
- } else if (!!v.volumeName) {
+ } else if (v.volumeName) {
// named volumes are created here:
// /var/lib/docker/volumes/YOUR_VOLUME_NAME/_data
mts.push({
@@ -1406,11 +1512,11 @@ class DockerApi {
switch (updateOrder) {
case IDockerUpdateOrders.AUTO:
- const existingVols =
- updatedData.TaskTemplate.ContainerSpec.Mounts ||
- []
updatedData.UpdateConfig.Order =
- existingVols.length > 0
+ (
+ updatedData.TaskTemplate.ContainerSpec
+ .Mounts || []
+ ).length > 0
? 'stop-first'
: 'start-first'
break
@@ -1421,7 +1527,8 @@ class DockerApi {
updatedData.UpdateConfig.Order = 'stop-first'
break
default:
- let neverHappens: never = updateOrder
+ // eslint-disable-next-line
+ const neverHappens: never = updateOrder
throw new Error(
`Unknown update order! ${updateOrder}${neverHappens}`
)
@@ -1437,7 +1544,8 @@ class DockerApi {
// to restart once. Once rebooted, all changes start showing up.
updatedData.TaskTemplate.ContainerSpec.Labels =
updatedData.TaskTemplate.ContainerSpec.Labels || {}
- updatedData.TaskTemplate.ContainerSpec.Labels.randomLabelForceUpdate = uuid()
+ updatedData.TaskTemplate.ContainerSpec.Labels.randomLabelForceUpdate =
+ uuid()
updatedData.authconfig = authObject
@@ -1476,12 +1584,10 @@ class DockerApi {
(instanceCount && instanceCount > 0) ||
instanceCount === 0
) {
- if (!updatedData.Mode.Replicated) {
- throw new Error(
- 'Non replicated services cannot be associated with instance count'
- )
+ // assign instance count as replicas for replicated mode services, not for global mode services
+ if (updatedData.Mode.Replicated) {
+ updatedData.Mode.Replicated.Replicas = instanceCount
}
- updatedData.Mode.Replicated.Replicas = instanceCount
}
return Utils.mergeObjects(updatedData, serviceUpdateOverride)
@@ -1546,8 +1652,9 @@ class DockerApi {
.logs({
tail: tailCount,
follow: false,
- timestamps: !!CaptainConstants.configs
- .enableDockerLogsTimestamp,
+ timestamps:
+ !!CaptainConstants.configs
+ .enableDockerLogsTimestamp,
stdout: true,
stderr: true,
})
@@ -1668,17 +1775,48 @@ const connectionParams: Docker.DockerOptions =
socketPath: CaptainConstants.dockerSocketPath,
}
: dockerApiAddressSplited.length === 2
- ? {
- host: dockerApiAddressSplited[0],
- port: Number(dockerApiAddressSplited[1]),
- }
- : {
- host: `${dockerApiAddressSplited[0]}:${dockerApiAddressSplited[1]}`,
- port: Number(dockerApiAddressSplited[2]),
- }
+ ? {
+ host: dockerApiAddressSplited[0],
+ port: Number(dockerApiAddressSplited[1]),
+ }
+ : {
+ host: `${dockerApiAddressSplited[0]}:${dockerApiAddressSplited[1]}`,
+ port: Number(dockerApiAddressSplited[2]),
+ }
connectionParams.version = CaptainConstants.configs.dockerApiVersion
-
const dockerApiInstance = new DockerApi(connectionParams)
+const lowVersionDocker = JSON.parse(JSON.stringify(connectionParams))
+lowVersionDocker.version = 'v1.38'
+
+new Docker(lowVersionDocker)
+ .version()
+ .then((data) => {
+ Logger.d('Docker API Version on host: ' + data.ApiVersion)
+
+ const majorSupported = Number(data.ApiVersion.split('.')[0])
+ const minorSupported = Number(data.ApiVersion.split('.')[1])
+ const majorNeeded = Number(
+ CaptainConstants.configs.dockerApiVersion
+ .replace('v', '')
+ .split('.')[0]
+ )
+ const minorNeeded = Number(
+ CaptainConstants.configs.dockerApiVersion
+ .replace('v', '')
+ .split('.')[1]
+ )
+
+ if (
+ majorSupported < majorNeeded ||
+ (majorSupported === majorNeeded && minorSupported < minorNeeded)
+ ) {
+ dockerApiInstance.dockerNeedsUpdate = true
+ }
+ })
+ .catch((error) => {
+ Logger.e('Docker API Version Error: ' + error)
+ })
+
export default DockerApi
diff --git a/src/injection/InjectionExtractor.ts b/src/injection/InjectionExtractor.ts
index c571ff01b..570bf8543 100644
--- a/src/injection/InjectionExtractor.ts
+++ b/src/injection/InjectionExtractor.ts
@@ -1,5 +1,7 @@
import { Response } from 'express'
import { UserInjected } from '../models/InjectionInterfaces'
+import { UserManager } from '../user/UserManager'
+import { IAppDef } from '../models/AppDefinition'
class InjectionExtractor {
static extractUserFromInjected(res: Response) {
@@ -13,6 +15,8 @@ class InjectionExtractor {
initialized: res.locals.initialized as boolean,
namespace: res.locals.namespace as string,
forceSsl: res.locals.forceSsl as boolean,
+ userManagerForLoginOnly: res.locals
+ .userManagerForLoginOnly as UserManager,
}
}
static extractAppAndUserForWebhook(res: Response) {
diff --git a/src/injection/Injector.ts b/src/injection/Injector.ts
index 4abaa2538..35e53e24e 100644
--- a/src/injection/Injector.ts
+++ b/src/injection/Injector.ts
@@ -6,11 +6,14 @@ import DockerApiProvider from '../docker/DockerApi'
import * as UserModel from '../models/InjectionInterfaces'
import { CaptainError } from '../models/OtherTypes'
import Authenticator from '../user/Authenticator'
+import OtpAuthenticator from '../user/pro/OtpAuthenticator'
import ServiceManager from '../user/ServiceManager'
import CaptainManager from '../user/system/CaptainManager'
+import { UserManagerProvider } from '../user/UserManagerProvider'
import CaptainConstants from '../utils/CaptainConstants'
import Logger from '../utils/Logger'
import InjectionExtractor from './InjectionExtractor'
+import { IAppDef } from '../models/AppDefinition'
const dockerApi = DockerApiProvider.get()
@@ -21,20 +24,23 @@ export function injectGlobal() {
return function (req: Request, res: Response, next: NextFunction) {
const locals = res.locals
- locals.initialized = CaptainManager.get().isInitialized()
- locals.namespace = req.header(CaptainConstants.headerNamespace)
- locals.forceSsl = CaptainManager.get().getForceSslValue()
+ locals.namespace =
+ req.header(CaptainConstants.headerNamespace) ||
+ CaptainConstants.rootNameSpace
- if (
- locals.namespace &&
- locals.namespace !== CaptainConstants.rootNameSpace
- ) {
+ if (locals.namespace !== CaptainConstants.rootNameSpace) {
throw ApiStatusCodes.createError(
ApiStatusCodes.STATUS_ERROR_GENERIC,
'Namespace unknown'
)
}
+ locals.initialized = CaptainManager.get().isInitialized()
+ locals.forceSsl = CaptainManager.get().getForceSslValue()
+ locals.userManagerForLoginOnly = UserManagerProvider.get(
+ locals.namespace
+ )
+
next()
}
}
@@ -56,6 +62,7 @@ export function injectUser() {
.then(function (userDecoded) {
if (userDecoded) {
const datastore = DataStoreProvider.getDataStore(namespace)
+ const userManager = UserManagerProvider.get(namespace)
const serviceManager = ServiceManager.get(
namespace,
@@ -63,13 +70,20 @@ export function injectUser() {
datastore,
dockerApi,
CaptainManager.get().getLoadBalanceManager(),
+ userManager.eventLogger,
CaptainManager.get().getDomainResolveChecker()
)
+
const user: UserModel.UserInjected = {
namespace: namespace,
dataStore: datastore,
serviceManager: serviceManager,
+ otpAuthenticator: new OtpAuthenticator(
+ datastore,
+ userManager.proManager
+ ),
initialized: serviceManager.isInited(),
+ userManager: userManager,
}
res.locals.user = user
}
@@ -101,6 +115,12 @@ export function injectUserForBuildTrigger() {
const namespace = locals.namespace
const appName = req.params.appName as string
+ if (req.header(CaptainConstants.headerAuth)) {
+ // Auth header is present, skip user injection for app token
+ next()
+ return
+ }
+
if (!token || !namespace || !appName) {
Logger.e(
'Trigger app build is called with no token/namespace/appName'
@@ -130,6 +150,7 @@ export function injectUserForBuildTrigger() {
}
const datastore = DataStoreProvider.getDataStore(namespace)
+ const userManager = UserManagerProvider.get(namespace)
const serviceManager = ServiceManager.get(
namespace,
@@ -137,6 +158,7 @@ export function injectUserForBuildTrigger() {
datastore,
dockerApi,
CaptainManager.get().getLoadBalanceManager(),
+ userManager.eventLogger,
CaptainManager.get().getDomainResolveChecker()
)
@@ -144,7 +166,12 @@ export function injectUserForBuildTrigger() {
namespace: namespace,
dataStore: datastore,
serviceManager: serviceManager,
+ otpAuthenticator: new OtpAuthenticator(
+ datastore,
+ userManager.proManager
+ ),
initialized: serviceManager.isInited(),
+ userManager: userManager,
}
res.locals.user = user
@@ -200,6 +227,7 @@ export function injectUserForWebhook() {
}
const datastore = DataStoreProvider.getDataStore(namespace)
+ const userManager = UserManagerProvider.get(namespace)
const serviceManager = ServiceManager.get(
namespace,
@@ -207,14 +235,20 @@ export function injectUserForWebhook() {
datastore,
dockerApi,
CaptainManager.get().getLoadBalanceManager(),
+ userManager.eventLogger,
CaptainManager.get().getDomainResolveChecker()
)
const user: UserModel.UserInjected = {
namespace: namespace,
dataStore: datastore,
+ otpAuthenticator: new OtpAuthenticator(
+ datastore,
+ userManager.proManager
+ ),
serviceManager: serviceManager,
initialized: serviceManager.isInited(),
+ userManager: userManager,
}
res.locals.user = user
diff --git a/src/models/AppDefinition.ts b/src/models/AppDefinition.ts
index cb849848f..332059ceb 100644
--- a/src/models/AppDefinition.ts
+++ b/src/models/AppDefinition.ts
@@ -1,18 +1,25 @@
-type IAllAppDefinitions = IHashMapGeneric
+import { IHashMapGeneric } from './ICacheGeneric'
-interface IAppEnvVar {
+export type IAllAppDefinitions = IHashMapGeneric
+
+export interface IAppEnvVar {
key: string
value: string
}
-interface IAppVolume {
+export const enum VolumesTypes {
+ BIND = 'bind',
+ VOLUME = 'volume',
+}
+
+export interface IAppVolume {
containerPath: string
volumeName?: string
hostPath?: string
mode?: string
}
-interface IAppPort {
+export interface IAppPort {
containerPort: number
hostPort: number
protocol?: 'udp' | 'tcp'
@@ -20,7 +27,7 @@ interface IAppPort {
publishMode?: 'ingress' | 'host'
}
-interface RepoInfo {
+export interface RepoInfo {
repo: string
branch: string
user: string
@@ -28,7 +35,7 @@ interface RepoInfo {
password: string
}
-interface RepoInfoEncrypted {
+export interface RepoInfoEncrypted {
repo: string
branch: string
user: string
@@ -36,19 +43,24 @@ interface RepoInfoEncrypted {
passwordEncrypted: string
}
-interface IAppVersion {
+export interface IAppVersion {
version: number
deployedImageName?: string // empty if the deploy is not completed
timeStamp: string
gitHash: string | undefined
}
-interface IAppCustomDomain {
+export interface IAppCustomDomain {
publicDomain: string
hasSsl: boolean
}
-interface IAppDefinitionBase {
+export interface IAppTag {
+ tagName: string
+}
+
+export interface IAppDefinitionBase {
+ projectId?: string | undefined
description: string
deployedVersion: number
notExposeAsWebApp: boolean
@@ -63,8 +75,10 @@ interface IAppDefinitionBase {
preDeployFunction?: string
serviceUpdateOverride?: string
customNginxConfig?: string
+ redirectDomain?: string
networks: string[]
customDomain: IAppCustomDomain[]
+ tags?: IAppTag[]
ports: IAppPort[]
volumes: IAppVolume[]
envVars: IAppEnvVar[]
@@ -72,18 +86,18 @@ interface IAppDefinitionBase {
appDeployTokenConfig?: AppDeployTokenConfig
}
-interface IHttpAuth {
+export interface IHttpAuth {
user: string
password?: string
passwordHashed?: string
}
-interface AppDeployTokenConfig {
+export interface AppDeployTokenConfig {
enabled: boolean
appDeployToken?: string
}
-interface IAppDef extends IAppDefinitionBase {
+export interface IAppDef extends IAppDefinitionBase {
appPushWebhook?: {
tokenVersion: string
repoInfo: RepoInfo
@@ -94,7 +108,7 @@ interface IAppDef extends IAppDefinitionBase {
isAppBuilding?: boolean
}
-interface IAppDefSaved extends IAppDefinitionBase {
+export interface IAppDefSaved extends IAppDefinitionBase {
appPushWebhook:
| {
tokenVersion: string
diff --git a/src/models/AutomatedCleanupConfigs.ts b/src/models/AutomatedCleanupConfigs.ts
new file mode 100644
index 000000000..5b5d7619b
--- /dev/null
+++ b/src/models/AutomatedCleanupConfigs.ts
@@ -0,0 +1,18 @@
+export interface IAutomatedCleanupConfigs {
+ mostRecentLimit: number
+ cronSchedule: string
+ timezone: string
+}
+
+export class AutomatedCleanupConfigsCleaner {
+ static sanitizeInput(instance: IAutomatedCleanupConfigs) {
+ return {
+ mostRecentLimit:
+ Number(instance.mostRecentLimit) > 0
+ ? Number(instance.mostRecentLimit)
+ : 1,
+ cronSchedule: `${instance.cronSchedule || ''}`.trim(),
+ timezone: `${instance.timezone || ''}`.trim() || 'UTC',
+ }
+ }
+}
diff --git a/src/models/BackupMeta.ts b/src/models/BackupMeta.ts
index a34c78c73..c21b5407a 100644
--- a/src/models/BackupMeta.ts
+++ b/src/models/BackupMeta.ts
@@ -1,3 +1,5 @@
+import { ServerDockerInfo } from './ServerDockerInfo'
+
export interface RestoringNode {
oldIp: string
newIp: string
diff --git a/src/models/CapRoverTheme.ts b/src/models/CapRoverTheme.ts
new file mode 100644
index 000000000..b8e24faf7
--- /dev/null
+++ b/src/models/CapRoverTheme.ts
@@ -0,0 +1,11 @@
+export interface CapRoverExtraTheme {
+ siderTheme?: string
+}
+
+export default interface CapRoverTheme {
+ content: string
+ name: string
+ extra?: string
+ headEmbed?: string
+ builtIn?: boolean
+}
diff --git a/src/models/DockerAuthObj.ts b/src/models/DockerAuthObj.ts
index c66c8f517..8cc96c792 100644
--- a/src/models/DockerAuthObj.ts
+++ b/src/models/DockerAuthObj.ts
@@ -1,4 +1,4 @@
-interface DockerAuthObj {
+export interface DockerAuthObj {
serveraddress: string
username: string
password: string
@@ -17,7 +17,7 @@ interface DockerAuthObj {
}
}
*/
-interface DockerRegistryConfig {
+export interface DockerRegistryConfig {
[serveraddress: string]: {
username: string
password: string
diff --git a/src/models/DockerSecret.ts b/src/models/DockerSecret.ts
index 179203615..fc953d897 100644
--- a/src/models/DockerSecret.ts
+++ b/src/models/DockerSecret.ts
@@ -1,4 +1,4 @@
-interface DockerSecret {
+export interface DockerSecret {
secretName: string
secretId: string
}
diff --git a/src/models/DockerService.ts b/src/models/DockerService.ts
index 882b8af39..01ce37f5f 100644
--- a/src/models/DockerService.ts
+++ b/src/models/DockerService.ts
@@ -2,7 +2,9 @@ export interface Version {
Index: number
}
-export interface Labels {}
+export interface Labels {
+ [id: string]: string
+}
export interface Mount {
Type: string
@@ -17,7 +19,16 @@ export interface ContainerSpecType {
Isolation: string
}
-export interface Resources {}
+export interface Resources {
+ Limits: {
+ MemoryBytes: number
+ NanoCPUs: number
+ }
+ Reservations: {
+ MemoryBytes: number
+ NanoCPUs: number
+ }
+}
export interface Placement {
Constraints: string[]
diff --git a/src/models/GoAccessInfo.ts b/src/models/GoAccessInfo.ts
new file mode 100644
index 000000000..95f7a9375
--- /dev/null
+++ b/src/models/GoAccessInfo.ts
@@ -0,0 +1,7 @@
+export class GoAccessInfo {
+ public isEnabled: boolean
+ public data: {
+ rotationFrequencyCron: string
+ logRetentionDays: number
+ }
+}
diff --git a/src/models/ICacheGeneric.ts b/src/models/ICacheGeneric.ts
index 2dacfa84f..a52ccacdd 100644
--- a/src/models/ICacheGeneric.ts
+++ b/src/models/ICacheGeneric.ts
@@ -1,3 +1,3 @@
-interface IHashMapGeneric {
+export interface IHashMapGeneric {
[id: string]: T
}
diff --git a/src/models/ICaptainDefinition.ts b/src/models/ICaptainDefinition.ts
index e7f267521..02359f1e3 100644
--- a/src/models/ICaptainDefinition.ts
+++ b/src/models/ICaptainDefinition.ts
@@ -1,4 +1,4 @@
-interface ICaptainDefinition {
+export interface ICaptainDefinition {
schemaVersion: number
dockerfileLines?: string[]
dockerfilePath?: string
diff --git a/src/models/IImageSource.ts b/src/models/IImageSource.ts
index 3ab8c4b05..b7c41703d 100644
--- a/src/models/IImageSource.ts
+++ b/src/models/IImageSource.ts
@@ -1,4 +1,6 @@
-interface IImageSource {
+import { RepoInfo } from './AppDefinition'
+
+export interface IImageSource {
uploadedTarPathSource?: { uploadedTarPath: string; gitHash: string }
captainDefinitionContentSource?: {
captainDefinitionContent: string
diff --git a/src/models/IProFeatures.ts b/src/models/IProFeatures.ts
new file mode 100644
index 000000000..fb50f9586
--- /dev/null
+++ b/src/models/IProFeatures.ts
@@ -0,0 +1,34 @@
+export interface IProFeatures {
+ isFeatureFlagEnabled: boolean
+ isSubscribed: boolean
+}
+
+export interface TwoFactorAuthResponse {
+ isEnabled: boolean
+ otpPath?: string
+}
+
+export enum ProAlertActionType {
+ email = 'email',
+ webhook = 'webhook',
+}
+
+export interface ProAlertAction {
+ actionType: ProAlertActionType
+ metadata?: any
+}
+
+export enum ProAlertEvent {
+ UserLoggedIn = 'UserLoggedIn',
+ AppBuildSuccessful = 'AppBuildSuccessful',
+ AppBuildFailed = 'AppBuildFailed',
+}
+
+export interface ProAlertConfig {
+ event: ProAlertEvent
+ action: ProAlertAction
+}
+
+export interface IProConfig {
+ alerts: ProAlertConfig[]
+}
diff --git a/src/models/IServerBlockDetails.ts b/src/models/IServerBlockDetails.ts
index 9892a6da7..5efa22a99 100644
--- a/src/models/IServerBlockDetails.ts
+++ b/src/models/IServerBlockDetails.ts
@@ -1,4 +1,4 @@
-interface IServerBlockDetails {
+export interface IServerBlockDetails {
hasSsl: boolean
forceSsl: boolean
websocketSupport: boolean
@@ -13,4 +13,6 @@ interface IServerBlockDetails {
keyPath?: string
customErrorPagesDirectory: string
staticWebRoot: string
+ redirectToPath?: string
+ logAccessPath?: string
}
diff --git a/src/models/InjectionInterfaces.ts b/src/models/InjectionInterfaces.ts
index 97c2ff0b0..bcd7716a2 100644
--- a/src/models/InjectionInterfaces.ts
+++ b/src/models/InjectionInterfaces.ts
@@ -1,10 +1,22 @@
import DataStore from '../datastore/DataStore'
+import OtpAuthenticator from '../user/pro/OtpAuthenticator'
import ServiceManager from '../user/ServiceManager'
+import { UserManager } from '../user/UserManager'
export interface UserInjected {
namespace: string
+ userManager: UserManager
+
+ // @deprecated - use UserManager
dataStore: DataStore
+
+ // @deprecated - use UserManager
+ otpAuthenticator: OtpAuthenticator
+
+ // @deprecated - use UserManager
serviceManager: ServiceManager
+
+ // @deprecated - use UserManager
initialized: boolean
}
diff --git a/src/models/NetDataInfo.ts b/src/models/NetDataInfo.ts
index ce5a53ba0..624ee04d4 100644
--- a/src/models/NetDataInfo.ts
+++ b/src/models/NetDataInfo.ts
@@ -1,4 +1,4 @@
-class NetDataInfo {
+export class NetDataInfo {
public isEnabled: boolean
public data: {
smtp: {
diff --git a/src/models/OtherTypes.ts b/src/models/OtherTypes.ts
index 2ef281ce1..70256126e 100644
--- a/src/models/OtherTypes.ts
+++ b/src/models/OtherTypes.ts
@@ -1,15 +1,17 @@
+import { IAppDef } from './AppDefinition'
+
export type CaptainError = {
captainErrorType: number
apiMessage: string
}
-export abstract class VolumesTypes {
- public static readonly BIND = 'bind'
- public static readonly VOLUME = 'volume'
-}
-
export type AnyError = any
+export type PreDeployFunction = (
+ appDef: IAppDef | undefined,
+ updatedData: any
+) => Promise
+
export interface IDockerApiPort {
Protocol: string
TargetPort: number
diff --git a/src/models/ProjectDefinition.ts b/src/models/ProjectDefinition.ts
new file mode 100644
index 000000000..c51cb16ed
--- /dev/null
+++ b/src/models/ProjectDefinition.ts
@@ -0,0 +1,6 @@
+export interface ProjectDefinition {
+ id: string
+ name: string
+ description: string
+ parentProjectId?: string
+}
diff --git a/src/models/ServerDockerInfo.ts b/src/models/ServerDockerInfo.ts
index 6c383362c..dc1963278 100644
--- a/src/models/ServerDockerInfo.ts
+++ b/src/models/ServerDockerInfo.ts
@@ -1,4 +1,4 @@
-interface ServerDockerInfo {
+export interface ServerDockerInfo {
nodeId: string
type: 'manager' | 'worker'
isLeader: boolean
diff --git a/src/routes/download/DownloadRouter.ts b/src/routes/download/DownloadRouter.ts
index 656a87a8f..9dc55859f 100644
--- a/src/routes/download/DownloadRouter.ts
+++ b/src/routes/download/DownloadRouter.ts
@@ -7,8 +7,8 @@ import Utils from '../../utils/Utils'
const router = express.Router()
router.get('/', function (req, res, next) {
- let downloadToken = req.query.downloadToken as string
- let namespace = req.query.namespace as string
+ const downloadToken = req.query.downloadToken as string
+ const namespace = req.query.namespace as string
Promise.resolve() //
.then(function () {
diff --git a/src/routes/login/LoginRouter.ts b/src/routes/login/LoginRouter.ts
index d7c2009d1..88137708f 100644
--- a/src/routes/login/LoginRouter.ts
+++ b/src/routes/login/LoginRouter.ts
@@ -4,6 +4,10 @@ import BaseApi from '../../api/BaseApi'
import DataStoreProvider from '../../datastore/DataStoreProvider'
import InjectionExtractor from '../../injection/InjectionExtractor'
import Authenticator from '../../user/Authenticator'
+import {
+ CapRoverEventFactory,
+ CapRoverEventType,
+} from '../../user/events/ICapRoverEvent'
import CaptainConstants from '../../utils/CaptainConstants'
import CircularQueue from '../../utils/CircularQueue'
@@ -12,10 +16,11 @@ const router = express.Router()
const failedLoginCircularTimestamps = new CircularQueue(5)
router.post('/', function (req, res, next) {
- let password = req.body.password || ''
+ const password = `${req.body.password || ''}`
+ const otpToken = `${req.body.otpToken || ''}`
if (!password) {
- let response = new BaseApi(
+ const response = new BaseApi(
ApiStatusCodes.STATUS_ERROR_GENERIC,
'password is empty.'
)
@@ -23,14 +28,42 @@ router.post('/', function (req, res, next) {
return
}
+ // if password is more than 29 characters, return error
+ if (password.length > 29) {
+ const response = new BaseApi(
+ ApiStatusCodes.STATUS_ERROR_GENERIC,
+ 'password is too long - maximum 29 characters. If you had previously set a password longer than 29 characters, please use the first 29 characters.'
+ )
+ res.send(response)
+ return
+ }
+
let authToken: string
- const namespace = InjectionExtractor.extractGlobalsFromInjected(res)
- .namespace
+ const namespace =
+ InjectionExtractor.extractGlobalsFromInjected(res).namespace
+ const userManagerForLoginOnly =
+ InjectionExtractor.extractGlobalsFromInjected(
+ res
+ ).userManagerForLoginOnly
+ const otpAuthenticatorForLoginOnly =
+ userManagerForLoginOnly.otpAuthenticator
+ const eventLoggerForLoginOnly = userManagerForLoginOnly.eventLogger
let loadedHashedPassword = ''
Promise.resolve() //
+ .then(function () {
+ return otpAuthenticatorForLoginOnly.is2FactorEnabled()
+ })
+ .then(function (isEnabled) {
+ if (isEnabled && !otpToken) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.STATUS_ERROR_OTP_REQUIRED,
+ 'Enter OTP token as well'
+ )
+ }
+ })
.then(function () {
const oldestKnownFailedLogin = failedLoginCircularTimestamps.peek()
if (
@@ -47,6 +80,7 @@ router.post('/', function (req, res, next) {
.then(function (savedHashedPassword) {
loadedHashedPassword = savedHashedPassword
return Authenticator.getAuthenticator(namespace).getAuthToken(
+ { otpToken, otpAuthenticator: otpAuthenticatorForLoginOnly },
password,
loadedHashedPassword
)
@@ -55,15 +89,24 @@ router.post('/', function (req, res, next) {
authToken = token
return Authenticator.getAuthenticator(
namespace
- ).getAuthTokenForCookies(password, loadedHashedPassword)
+ ).getAuthTokenForCookies(
+ { otpToken, otpAuthenticator: otpAuthenticatorForLoginOnly },
+ password,
+ loadedHashedPassword
+ )
})
.then(function (cookieAuth) {
res.cookie(CaptainConstants.headerCookieAuth, cookieAuth)
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'Login succeeded'
)
baseApi.data = { token: authToken }
+ eventLoggerForLoginOnly.trackEvent(
+ CapRoverEventFactory.create(CapRoverEventType.UserLoggedIn, {
+ ip: req.headers['x-real-ip'] || 'unknown',
+ })
+ )
res.send(baseApi)
})
.catch(function (err) {
diff --git a/src/routes/public/ThemePublicRouter.ts b/src/routes/public/ThemePublicRouter.ts
new file mode 100644
index 000000000..36b302afc
--- /dev/null
+++ b/src/routes/public/ThemePublicRouter.ts
@@ -0,0 +1,27 @@
+import express = require('express')
+import ApiStatusCodes from '../../api/ApiStatusCodes'
+import BaseApi from '../../api/BaseApi'
+import { ThemeManagerPublic } from '../../user/ThemeManager'
+
+const router = express.Router()
+
+router.get('/current', function (req, res, next) {
+ return Promise.resolve()
+ .then(function () {
+ return new ThemeManagerPublic().getCurrentTheme()
+ })
+ .then(function (t) {
+ const baseApi = new BaseApi(
+ ApiStatusCodes.STATUS_OK,
+ 'Current theme is retrieved.'
+ )
+ baseApi.data = {
+ theme: t,
+ }
+
+ res.send(baseApi)
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
+export default router
diff --git a/src/routes/user/ProjectsRouter.ts b/src/routes/user/ProjectsRouter.ts
new file mode 100644
index 000000000..b9fd0e480
--- /dev/null
+++ b/src/routes/user/ProjectsRouter.ts
@@ -0,0 +1,133 @@
+import express = require('express')
+import { v4 as uuid } from 'uuid'
+import ApiStatusCodes from '../../api/ApiStatusCodes'
+import BaseApi from '../../api/BaseApi'
+import InjectionExtractor from '../../injection/InjectionExtractor'
+import { ProjectDefinition } from '../../models/ProjectDefinition'
+import Logger from '../../utils/Logger'
+
+const router = express.Router()
+
+router.post('/register/', function (req, res, next) {
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
+
+ const projectName = `${req.body.name || ''}`.trim()
+ const parentProjectId = `${req.body.parentProjectId || ''}`.trim()
+ const description = `${req.body.description || ''}`.trim()
+
+ Promise.resolve()
+ .then(function () {
+ const projectId = uuid()
+ return dataStore.getProjectsDataStore().saveProject(projectId, {
+ id: projectId,
+ name: projectName,
+ parentProjectId: parentProjectId,
+ description: description,
+ })
+ })
+ .then(function (project) {
+ Logger.d(`Project created: ${projectName}`)
+ const resp = new BaseApi(
+ ApiStatusCodes.STATUS_OK,
+ `Project created: ${projectName}`
+ )
+ resp.data = project
+ res.send(resp)
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
+router.post('/delete/', function (req, res, next) {
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
+
+ const projectIds = (req.body.projectIds || []).map((id: string) =>
+ `${id}`.trim()
+ )
+
+ Promise.resolve()
+ .then(function () {
+ return dataStore //
+ .getProjectsDataStore()
+ .deleteProjects(projectIds)
+ })
+ .then(function () {
+ Logger.d(`Projects are deleted: ${projectIds}`)
+ res.send(new BaseApi(ApiStatusCodes.STATUS_OK, 'Project deleted'))
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
+router.post('/update/', function (req, res, next) {
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
+
+ const projectDefinition = req.body.projectDefinition as
+ | ProjectDefinition
+ | undefined
+
+ Promise.resolve()
+ .then(function () {
+ if (!projectDefinition) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_OPERATION,
+ 'Project Definition is not provided'
+ )
+ }
+
+ projectDefinition.id = `${projectDefinition.id || ''}`
+ projectDefinition.name = `${projectDefinition.name || ''}`
+ projectDefinition.parentProjectId = `${
+ projectDefinition.parentProjectId || ''
+ }`
+ projectDefinition.description = `${
+ projectDefinition.description || ''
+ }`
+
+ if (!projectDefinition.id) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_OPERATION,
+ 'Project ID is not provided'
+ )
+ }
+
+ return dataStore
+ .getProjectsDataStore()
+ .saveProject(projectDefinition.id, {
+ id: projectDefinition.id,
+ name: projectDefinition.name,
+ parentProjectId: projectDefinition.parentProjectId,
+ description: projectDefinition.description,
+ })
+ })
+ .then(function () {
+ Logger.d(`Project is saved: ${projectDefinition?.name}`)
+ res.send(new BaseApi(ApiStatusCodes.STATUS_OK, 'Project Saved'))
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
+// Get All Projects
+router.get('/', function (req, res, next) {
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
+
+ return dataStore
+ .getProjectsDataStore()
+ .getAllProjects()
+ .then(function (projects) {
+ const baseApi = new BaseApi(
+ ApiStatusCodes.STATUS_OK,
+ 'Projects are retrieved.'
+ )
+ baseApi.data = {
+ projects: projects,
+ }
+
+ res.send(baseApi)
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
+export default router
diff --git a/src/routes/user/UserRouter.ts b/src/routes/user/UserRouter.ts
index 8cedbaea7..35901c41d 100644
--- a/src/routes/user/UserRouter.ts
+++ b/src/routes/user/UserRouter.ts
@@ -8,9 +8,12 @@ import EnvVars from '../../utils/EnvVars'
import Utils from '../../utils/Utils'
import AppsRouter from './apps/AppsRouter'
import OneClickAppRouter from './oneclick/OneClickAppRouter'
+import ProRouter from './pro/ProRouter'
+import ProjectsRouter from './ProjectsRouter'
import RegistriesRouter from './registeries/RegistriesRouter'
import SystemRouter from './system/SystemRouter'
import onFinished = require('on-finished')
+import { IHashMapGeneric } from '../../models/ICacheGeneric'
const router = express.Router()
@@ -28,7 +31,7 @@ router.use(function (req, res, next) {
const user = InjectionExtractor.extractUserFromInjected(res).user
if (!user) {
- let response = new BaseApi(
+ const response = new BaseApi(
ApiStatusCodes.STATUS_ERROR_NOT_AUTHORIZED,
'The request is not authorized.'
)
@@ -37,7 +40,7 @@ router.use(function (req, res, next) {
}
if (!user.initialized) {
- let response = new BaseApi(
+ const response = new BaseApi(
ApiStatusCodes.STATUS_ERROR_USER_NOT_INITIALIZED,
'User data is being loaded... Please wait...'
)
@@ -48,7 +51,7 @@ router.use(function (req, res, next) {
const namespace = user.namespace
if (!namespace) {
- let response = new BaseApi(
+ const response = new BaseApi(
ApiStatusCodes.STATUS_ERROR_NOT_AUTHORIZED,
'Cannot find the namespace attached to this user'
)
@@ -59,7 +62,7 @@ router.use(function (req, res, next) {
// All requests except GET might be making changes to some stuff that are not designed for an asynchronous process
// I'm being extra cautious. But removal of this lock mechanism requires testing and consideration of edge cases.
if (Utils.isNotGetRequest(req)) {
- if (!!EnvVars.DEMO_MODE_ADMIN_IP) {
+ if (EnvVars.DEMO_MODE_ADMIN_IP) {
const realIp = `${req.headers['x-real-ip']}`
const forwardedIp = `${req.headers['x-forwarded-for']}`
if (
@@ -68,7 +71,7 @@ router.use(function (req, res, next) {
realIp !== forwardedIp ||
EnvVars.DEMO_MODE_ADMIN_IP !== realIp
) {
- let response = new BaseApi(
+ const response = new BaseApi(
ApiStatusCodes.STATUS_ERROR_GENERIC,
'Demo mode is only for viewing purposes.'
)
@@ -96,10 +99,10 @@ router.use(function (req, res, next) {
})
router.post('/changepassword/', function (req, res, next) {
- const namespace = InjectionExtractor.extractUserFromInjected(res).user
- .namespace
- const dataStore = InjectionExtractor.extractUserFromInjected(res).user
- .dataStore
+ const namespace =
+ InjectionExtractor.extractUserFromInjected(res).user.namespace
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
Promise.resolve() //
.then(function (data) {
@@ -123,10 +126,14 @@ router.post('/changepassword/', function (req, res, next) {
router.use('/apps/', AppsRouter)
+router.use('/projects/', ProjectsRouter)
+
router.use('/oneclick/', OneClickAppRouter)
router.use('/registries/', RegistriesRouter)
router.use('/system/', SystemRouter)
+router.use('/pro/', ProRouter)
+
export default router
diff --git a/src/routes/user/apps/appdata/AppDataRouter.ts b/src/routes/user/apps/appdata/AppDataRouter.ts
index bfa9d56a9..ac2bd3130 100644
--- a/src/routes/user/apps/appdata/AppDataRouter.ts
+++ b/src/routes/user/apps/appdata/AppDataRouter.ts
@@ -12,9 +12,9 @@ const upload = multer({
})
router.get('/:appName/logs', function (req, res, next) {
- let appName = req.params.appName
- const serviceManager = InjectionExtractor.extractUserFromInjected(res).user
- .serviceManager
+ const appName = req.params.appName
+ const serviceManager =
+ InjectionExtractor.extractUserFromInjected(res).user.serviceManager
return Promise.resolve()
.then(function () {
@@ -25,7 +25,7 @@ router.get('/:appName/logs', function (req, res, next) {
)
})
.then(function (logs) {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'App runtime logs are retrieved'
)
@@ -36,16 +36,16 @@ router.get('/:appName/logs', function (req, res, next) {
})
router.get('/:appName/', function (req, res, next) {
- let appName = req.params.appName
- const serviceManager = InjectionExtractor.extractUserFromInjected(res).user
- .serviceManager
+ const appName = req.params.appName
+ const serviceManager =
+ InjectionExtractor.extractUserFromInjected(res).user.serviceManager
return Promise.resolve()
.then(function () {
return serviceManager.getBuildStatus(appName)
})
.then(function (data) {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'App build status retrieved'
)
@@ -56,11 +56,11 @@ router.get('/:appName/', function (req, res, next) {
})
router.post('/:appName/', function (req, res, next) {
- const dataStore = InjectionExtractor.extractUserFromInjected(res).user
- .dataStore
- let appName = req.params.appName
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
+ const appName = req.params.appName
- dataStore
+ return dataStore
.getAppsDataStore()
.getAppDefinition(appName)
.then(function (app) {
@@ -74,15 +74,15 @@ router.post(
'/:appName/',
upload.single('sourceFile'),
function (req, res, next) {
- const serviceManager = InjectionExtractor.extractUserFromInjected(res)
- .user.serviceManager
+ const serviceManager =
+ InjectionExtractor.extractUserFromInjected(res).user.serviceManager
const appName = req.params.appName
const isDetachedBuild = !!req.query.detached
const captainDefinitionContent =
(req.body.captainDefinitionContent || '') + ''
const gitHash = (req.body.gitHash || '') + ''
- let tarballSourceFilePath: string = !!req.file ? req.file.path : ''
+ const tarballSourceFilePath: string = req.file ? req.file.path : ''
if (!!tarballSourceFilePath === !!captainDefinitionContent) {
res.send(
@@ -94,24 +94,22 @@ router.post(
return
}
- Promise.resolve().then(function () {
- const promiseToDeployNewVer = serviceManager.scheduleDeployNewVersion(
- appName,
- {
- uploadedTarPathSource: !!tarballSourceFilePath
+ return Promise.resolve().then(function () {
+ const promiseToDeployNewVer =
+ serviceManager.scheduleDeployNewVersion(appName, {
+ uploadedTarPathSource: tarballSourceFilePath
? {
uploadedTarPath: tarballSourceFilePath,
gitHash,
}
: undefined,
- captainDefinitionContentSource: !!captainDefinitionContent
+ captainDefinitionContentSource: captainDefinitionContent
? {
captainDefinitionContent,
gitHash,
}
: undefined,
- }
- )
+ })
if (isDetachedBuild) {
res.send(
diff --git a/src/routes/user/apps/appdefinition/AppDefinitionRouter.ts b/src/routes/user/apps/appdefinition/AppDefinitionRouter.ts
index 980698f64..6cd06505a 100644
--- a/src/routes/user/apps/appdefinition/AppDefinitionRouter.ts
+++ b/src/routes/user/apps/appdefinition/AppDefinitionRouter.ts
@@ -2,32 +2,27 @@ import express = require('express')
import ApiStatusCodes from '../../../../api/ApiStatusCodes'
import BaseApi from '../../../../api/BaseApi'
import InjectionExtractor from '../../../../injection/InjectionExtractor'
+import { AppDeployTokenConfig, IAppDef } from '../../../../models/AppDefinition'
+import { ICaptainDefinition } from '../../../../models/ICaptainDefinition'
import { CaptainError } from '../../../../models/OtherTypes'
+import CaptainManager from '../../../../user/system/CaptainManager'
import CaptainConstants from '../../../../utils/CaptainConstants'
import Logger from '../../../../utils/Logger'
import Utils from '../../../../utils/Utils'
const router = express.Router()
-const DEFAULT_APP_CAPTAIN_DEFINITION = JSON.stringify({
- schemaVersion: 2,
- dockerfileLines: [
- `FROM ${CaptainConstants.configs.appPlaceholderImageName}`,
- ],
-})
-
// unused images
router.get('/unusedImages', function (req, res, next) {
- const serviceManager = InjectionExtractor.extractUserFromInjected(res).user
- .serviceManager
-
- Promise.resolve()
+ return Promise.resolve()
.then(function () {
- let mostRecentLimit = Number(req.query.mostRecentLimit || '0')
- return serviceManager.getUnusedImages(mostRecentLimit)
+ const mostRecentLimit = Number(req.query.mostRecentLimit || '0')
+ return CaptainManager.get()
+ .getDiskCleanupManager()
+ .getUnusedImages(mostRecentLimit)
})
.then(function (unusedImages) {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'Unused images retrieved.'
)
@@ -41,16 +36,16 @@ router.get('/unusedImages', function (req, res, next) {
// delete images
router.post('/deleteImages', function (req, res, next) {
- const serviceManager = InjectionExtractor.extractUserFromInjected(res).user
- .serviceManager
- let imageIds = req.body.imageIds || []
+ const imageIds = req.body.imageIds || []
- Promise.resolve()
+ return Promise.resolve()
.then(function () {
- return serviceManager.deleteImages(imageIds)
+ return CaptainManager.get()
+ .getDiskCleanupManager()
+ .deleteImages(imageIds)
})
.then(function () {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'Images Deleted.'
)
@@ -61,20 +56,20 @@ router.post('/deleteImages', function (req, res, next) {
// Get All App Definitions
router.get('/', function (req, res, next) {
- const dataStore = InjectionExtractor.extractUserFromInjected(res).user
- .dataStore
- const serviceManager = InjectionExtractor.extractUserFromInjected(res).user
- .serviceManager
- let appsArray: IAppDef[] = []
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
+ const serviceManager =
+ InjectionExtractor.extractUserFromInjected(res).user.serviceManager
+ const appsArray: IAppDef[] = []
- dataStore
+ return dataStore
.getAppsDataStore()
.getAppDefinitions()
.then(function (apps) {
- let promises: Promise[] = []
+ const promises: Promise[] = []
Object.keys(apps).forEach(function (key, index) {
- let app = apps[key]
+ const app = apps[key]
app.appName = key
app.isAppBuilding = serviceManager.isAppBuilding(key)
app.appPushWebhook = app.appPushWebhook || undefined
@@ -87,13 +82,14 @@ router.get('/', function (req, res, next) {
return dataStore.getDefaultAppNginxConfig()
})
.then(function (defaultNginxConfig) {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'App definitions are retrieved.'
)
baseApi.data = {
appDefinitions: appsArray,
rootDomain: dataStore.getRootDomain(),
+ captainSubDomain: CaptainConstants.configs.captainSubDomain,
defaultNginxConfig: defaultNginxConfig,
}
@@ -103,8 +99,8 @@ router.get('/', function (req, res, next) {
})
router.post('/enablebasedomainssl/', function (req, res, next) {
- const serviceManager = InjectionExtractor.extractUserFromInjected(res).user
- .serviceManager
+ const serviceManager =
+ InjectionExtractor.extractUserFromInjected(res).user.serviceManager
const appName = req.body.appName
@@ -113,7 +109,7 @@ router.post('/enablebasedomainssl/', function (req, res, next) {
return serviceManager.enableSslForApp(appName)
})
.then(function () {
- let msg = `General SSL is enabled for: ${appName}`
+ const msg = `General SSL is enabled for: ${appName}`
Logger.d(msg)
res.send(new BaseApi(ApiStatusCodes.STATUS_OK, msg))
})
@@ -121,11 +117,11 @@ router.post('/enablebasedomainssl/', function (req, res, next) {
})
router.post('/customdomain/', function (req, res, next) {
- const serviceManager = InjectionExtractor.extractUserFromInjected(res).user
- .serviceManager
+ const serviceManager =
+ InjectionExtractor.extractUserFromInjected(res).user.serviceManager
- let appName = req.body.appName
- let customDomain = (req.body.customDomain || '').toLowerCase()
+ const appName = req.body.appName
+ const customDomain = (req.body.customDomain || '').toLowerCase().trim()
// verify customdomain.com going through the default NGINX
// Add customdomain.com to app in Data Store
@@ -135,7 +131,7 @@ router.post('/customdomain/', function (req, res, next) {
return serviceManager.addCustomDomain(appName, customDomain)
})
.then(function () {
- let msg = `Custom domain is enabled for: ${appName} at ${customDomain}`
+ const msg = `Custom domain is enabled for: ${appName} at ${customDomain}`
Logger.d(msg)
res.send(new BaseApi(ApiStatusCodes.STATUS_OK, msg))
})
@@ -143,18 +139,18 @@ router.post('/customdomain/', function (req, res, next) {
})
router.post('/removecustomdomain/', function (req, res, next) {
- const serviceManager = InjectionExtractor.extractUserFromInjected(res).user
- .serviceManager
+ const serviceManager =
+ InjectionExtractor.extractUserFromInjected(res).user.serviceManager
- let appName = req.body.appName
- let customDomain = (req.body.customDomain || '').toLowerCase()
+ const appName = req.body.appName
+ const customDomain = (req.body.customDomain || '').toLowerCase()
return Promise.resolve()
.then(function () {
return serviceManager.removeCustomDomain(appName, customDomain)
})
.then(function () {
- let msg = `Custom domain is removed for: ${appName} at ${customDomain}`
+ const msg = `Custom domain is removed for: ${appName} at ${customDomain}`
Logger.d(msg)
res.send(new BaseApi(ApiStatusCodes.STATUS_OK, msg))
})
@@ -162,11 +158,11 @@ router.post('/removecustomdomain/', function (req, res, next) {
})
router.post('/enablecustomdomainssl/', function (req, res, next) {
- const serviceManager = InjectionExtractor.extractUserFromInjected(res).user
- .serviceManager
+ const serviceManager =
+ InjectionExtractor.extractUserFromInjected(res).user.serviceManager
- let appName = req.body.appName
- let customDomain = (req.body.customDomain || '').toLowerCase()
+ const appName = req.body.appName
+ const customDomain = (req.body.customDomain || '').toLowerCase()
// Check if customdomain is already associated with app. If not, error out.
// Verify customdomain.com is served from /customdomain.com/
@@ -176,7 +172,7 @@ router.post('/enablecustomdomainssl/', function (req, res, next) {
return serviceManager.enableCustomDomainSsl(appName, customDomain)
})
.then(function () {
- let msg = `Custom domain SSL is enabled for: ${appName} at ${customDomain} `
+ const msg = `Custom domain SSL is enabled for: ${appName} at ${customDomain} `
Logger.d(msg)
res.send(new BaseApi(ApiStatusCodes.STATUS_OK, msg))
})
@@ -184,12 +180,13 @@ router.post('/enablecustomdomainssl/', function (req, res, next) {
})
router.post('/register/', function (req, res, next) {
- const dataStore = InjectionExtractor.extractUserFromInjected(res).user
- .dataStore
- const serviceManager = InjectionExtractor.extractUserFromInjected(res).user
- .serviceManager
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
+ const serviceManager =
+ InjectionExtractor.extractUserFromInjected(res).user.serviceManager
const appName = req.body.appName as string
+ const projectId = `${req.body.projectId || ''}`
const hasPersistentData = !!req.body.hasPersistentData
const isDetachedBuild = !!req.query.detached
@@ -197,22 +194,39 @@ router.post('/register/', function (req, res, next) {
Logger.d(`Registering app started: ${appName}`)
- dataStore
- .getAppsDataStore()
- .registerAppDefinition(appName, hasPersistentData)
+ return Promise.resolve()
+ .then(function () {
+ if (projectId) {
+ return dataStore.getProjectsDataStore().getProject(projectId)
+ // if project is not found, it will throw an error
+ }
+ })
+ .then(function () {
+ return dataStore
+ .getAppsDataStore()
+ .registerAppDefinition(appName, projectId, hasPersistentData)
+ })
.then(function () {
appCreated = true
})
.then(function () {
- const promiseToIgnore = serviceManager.scheduleDeployNewVersion(
- appName,
- {
+ const captainDefinitionContent: ICaptainDefinition = {
+ schemaVersion: 2,
+ imageName: CaptainConstants.configs.appPlaceholderImageName,
+ }
+
+ const promiseToIgnore = serviceManager
+ .scheduleDeployNewVersion(appName, {
captainDefinitionContentSource: {
- captainDefinitionContent: DEFAULT_APP_CAPTAIN_DEFINITION,
+ captainDefinitionContent: JSON.stringify(
+ captainDefinitionContent
+ ),
gitHash: '',
},
- }
- )
+ })
+ .catch(function (error) {
+ Logger.e(error)
+ })
if (!isDetachedBuild) return promiseToIgnore
})
@@ -244,17 +258,27 @@ router.post('/register/', function (req, res, next) {
})
router.post('/delete/', function (req, res, next) {
- const serviceManager = InjectionExtractor.extractUserFromInjected(res).user
- .serviceManager
+ const serviceManager =
+ InjectionExtractor.extractUserFromInjected(res).user.serviceManager
- let appName = req.body.appName
- let volumes = req.body.volumes || []
+ const appName: string = req.body.appName
+ const volumes: string[] = req.body.volumes || []
+ const appNames: string[] = req.body.appNames || []
+ const appsToDelete: string[] = appNames.length ? appNames : [appName]
Logger.d(`Deleting app started: ${appName}`)
- Promise.resolve()
+ return Promise.resolve()
+ .then(function () {
+ if (appNames.length > 0 && appName) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_OPERATION,
+ 'Either appName or appNames should be provided'
+ )
+ }
+ })
.then(function () {
- return serviceManager.removeApp(appName)
+ return serviceManager.removeApps(appsToDelete)
})
.then(function () {
return Utils.getDelayedPromise(volumes.length ? 12000 : 0)
@@ -263,7 +287,7 @@ router.post('/delete/', function (req, res, next) {
return serviceManager.removeVolsSafe(volumes)
})
.then(function (failedVolsToRemoved) {
- Logger.d(`AppName is deleted: ${appName}`)
+ Logger.d(`Successfully deleted: ${appsToDelete.join(', ')}`)
if (failedVolsToRemoved.length) {
const returnVal = new BaseApi(
@@ -284,15 +308,15 @@ router.post('/delete/', function (req, res, next) {
})
router.post('/rename/', function (req, res, next) {
- const serviceManager = InjectionExtractor.extractUserFromInjected(res).user
- .serviceManager
+ const serviceManager =
+ InjectionExtractor.extractUserFromInjected(res).user.serviceManager
- let oldAppName = req.body.oldAppName + ''
- let newAppName = req.body.newAppName + ''
+ const oldAppName = req.body.oldAppName + ''
+ const newAppName = req.body.newAppName + ''
Logger.d(`Renaming app started: From ${oldAppName} To ${newAppName} `)
- Promise.resolve()
+ return Promise.resolve()
.then(function () {
return serviceManager.renameApp(oldAppName, newAppName)
})
@@ -306,32 +330,35 @@ router.post('/rename/', function (req, res, next) {
})
router.post('/update/', function (req, res, next) {
- const serviceManager = InjectionExtractor.extractUserFromInjected(res).user
- .serviceManager
+ const serviceManager =
+ InjectionExtractor.extractUserFromInjected(res).user.serviceManager
- let appName = req.body.appName
- let nodeId = req.body.nodeId
- let captainDefinitionRelativeFilePath =
+ const appName = req.body.appName
+ const projectId = req.body.projectId
+ const nodeId = req.body.nodeId
+ const captainDefinitionRelativeFilePath =
req.body.captainDefinitionRelativeFilePath
- let notExposeAsWebApp = req.body.notExposeAsWebApp
- let customNginxConfig = req.body.customNginxConfig
- let forceSsl = !!req.body.forceSsl
- let websocketSupport = !!req.body.websocketSupport
- let repoInfo = !!req.body.appPushWebhook
+ const notExposeAsWebApp = req.body.notExposeAsWebApp
+ const tags = req.body.tags || []
+ const customNginxConfig = req.body.customNginxConfig
+ const forceSsl = !!req.body.forceSsl
+ const websocketSupport = !!req.body.websocketSupport
+ const repoInfo = req.body.appPushWebhook
? req.body.appPushWebhook.repoInfo || {}
: {}
- let envVars = req.body.envVars || []
- let volumes = req.body.volumes || []
- let ports = req.body.ports || []
- let instanceCount = req.body.instanceCount || '0'
- let preDeployFunction = req.body.preDeployFunction || ''
- let serviceUpdateOverride = req.body.serviceUpdateOverride || ''
- let containerHttpPort = Number(req.body.containerHttpPort) || 80
- let httpAuth = req.body.httpAuth
+ const envVars = req.body.envVars || []
+ const volumes = req.body.volumes || []
+ const ports = req.body.ports || []
+ const instanceCount = req.body.instanceCount || '0'
+ const redirectDomain = req.body.redirectDomain || ''
+ const preDeployFunction = req.body.preDeployFunction || ''
+ const serviceUpdateOverride = req.body.serviceUpdateOverride || ''
+ const containerHttpPort = Number(req.body.containerHttpPort) || 80
+ const httpAuth = req.body.httpAuth
let appDeployTokenConfig = req.body.appDeployTokenConfig as
| AppDeployTokenConfig
| undefined
- let description = req.body.description || ''
+ const description = req.body.description || ''
if (!appDeployTokenConfig) {
appDeployTokenConfig = { enabled: false }
@@ -370,23 +397,49 @@ router.post('/update/', function (req, res, next) {
) {
res.send(
new BaseApi(
- ApiStatusCodes.STATUS_ERROR_GENERIC,
+ ApiStatusCodes.ILLEGAL_PARAMETER,
'Missing required Github/BitBucket/Gitlab field'
)
)
return
}
+ if (
+ repoInfo &&
+ repoInfo.sshKey &&
+ repoInfo.sshKey.indexOf('ENCRYPTED') > 0 &&
+ !CaptainConstants.configs.disableEncryptedCheck
+ ) {
+ res.send(
+ new BaseApi(
+ ApiStatusCodes.ILLEGAL_PARAMETER,
+ 'You cannot use encrypted SSH keys'
+ )
+ )
+ return
+ }
+
+ if (
+ repoInfo &&
+ repoInfo.sshKey &&
+ repoInfo.sshKey.indexOf('END OPENSSH PRIVATE KEY-----') > 0
+ ) {
+ repoInfo.sshKey = repoInfo.sshKey.trim()
+ repoInfo.sshKey = repoInfo.sshKey + '\n'
+ }
+
Logger.d(`Updating app started: ${appName}`)
- serviceManager
+ return serviceManager
.updateAppDefinition(
appName,
+ projectId,
description,
Number(instanceCount),
captainDefinitionRelativeFilePath,
envVars,
volumes,
+ tags,
nodeId,
notExposeAsWebApp,
containerHttpPort,
@@ -395,6 +448,7 @@ router.post('/update/', function (req, res, next) {
ports,
repoInfo,
customNginxConfig,
+ redirectDomain,
preDeployFunction,
serviceUpdateOverride,
websocketSupport,
diff --git a/src/routes/user/apps/webhooks/WebhooksRouter.ts b/src/routes/user/apps/webhooks/WebhooksRouter.ts
index 7112239a1..4149f9c63 100644
--- a/src/routes/user/apps/webhooks/WebhooksRouter.ts
+++ b/src/routes/user/apps/webhooks/WebhooksRouter.ts
@@ -16,27 +16,27 @@ function getPushedBranches(req: express.Request) {
// find which branch is pushed
// Add it in pushedBranches
- let isGithub = req.header('X-GitHub-Event') === 'push'
- let isBitbucket =
+ const isGithub = req.header('X-GitHub-Event') === 'push'
+ const isBitbucket =
req.header('X-Event-Key') === 'repo:push' &&
req.header('X-Request-UUID') &&
req.header('X-Hook-UUID')
- let isGitlab = req.header('X-Gitlab-Event') === 'Push Hook'
+ const isGitlab = req.header('X-Gitlab-Event') === 'Push Hook'
if (isGithub) {
- let refPayloadByFormEncoded = req.body.payload
+ const refPayloadByFormEncoded = req.body.payload
let bodyJson = req.body
if (refPayloadByFormEncoded) {
bodyJson = JSON.parse(refPayloadByFormEncoded)
}
- let ref = bodyJson.ref // "refs/heads/somebranch"
+ const ref = bodyJson.ref // "refs/heads/somebranch"
pushedBranches.push(ref.substring(11, ref.length))
} else if (isBitbucket) {
for (let i = 0; i < req.body.push.changes.length; i++) {
pushedBranches.push(req.body.push.changes[i].new.name)
}
} else if (isGitlab) {
- let ref = req.body.ref // "refs/heads/somebranch"
+ const ref = req.body.ref // "refs/heads/somebranch"
pushedBranches.push(ref.substring(11, ref.length))
}
return pushedBranches
@@ -45,9 +45,8 @@ function getPushedBranches(req: express.Request) {
router.post('/triggerbuild', urlencodedParser, function (req, res, next) {
return Promise.resolve()
.then(function () {
- const extracted = InjectionExtractor.extractAppAndUserForWebhook(
- res
- )
+ const extracted =
+ InjectionExtractor.extractAppAndUserForWebhook(res)
const { serviceManager, namespace } = extracted.user
const { appName, app } = extracted
diff --git a/src/routes/user/oneclick/OneClickAppRouter.ts b/src/routes/user/oneclick/OneClickAppRouter.ts
index 3b3df16a1..3825fb0a2 100644
--- a/src/routes/user/oneclick/OneClickAppRouter.ts
+++ b/src/routes/user/oneclick/OneClickAppRouter.ts
@@ -3,6 +3,11 @@ import axios from 'axios'
import ApiStatusCodes from '../../../api/ApiStatusCodes'
import BaseApi from '../../../api/BaseApi'
import InjectionExtractor from '../../../injection/InjectionExtractor'
+import {
+ CapRoverEventFactory,
+ CapRoverEventType,
+} from '../../../user/events/ICapRoverEvent'
+import CaptainConstants from '../../../utils/CaptainConstants'
import Logger from '../../../utils/Logger'
const router = express.Router()
@@ -10,6 +15,10 @@ const DEFAULT_ONE_CLICK_BASE_URL = 'https://oneclickapps.caprover.com'
const VERSION = `v4`
+const HEADERS = {} as any
+HEADERS[CaptainConstants.headerCapRoverVersion] =
+ CaptainConstants.configs.version
+
interface IOneClickAppIdentifier {
baseUrl: string
isOfficial: boolean
@@ -20,8 +29,8 @@ interface IOneClickAppIdentifier {
}
router.post('/repositories/insert', function (req, res, next) {
- const dataStore = InjectionExtractor.extractUserFromInjected(res).user
- .dataStore
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
let apiBaseUrl = `${req.body.repositoryUrl || ''}`
if (apiBaseUrl.endsWith('/')) {
apiBaseUrl = apiBaseUrl.substring(0, apiBaseUrl.length - 1)
@@ -61,7 +70,7 @@ router.post('/repositories/insert', function (req, res, next) {
return dataStore.insertOneClickBaseUrl(apiBaseUrl)
})
.then(function () {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
`One Click apps repository URL is saved: ${apiBaseUrl}`
)
@@ -71,8 +80,8 @@ router.post('/repositories/insert', function (req, res, next) {
})
router.post('/repositories/delete', function (req, res, next) {
- const dataStore = InjectionExtractor.extractUserFromInjected(res).user
- .dataStore
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
let apiBaseUrl = `${req.body.repositoryUrl || ''}`
if (apiBaseUrl.endsWith('/')) {
apiBaseUrl = apiBaseUrl.substring(0, apiBaseUrl.length - 1)
@@ -93,7 +102,7 @@ router.post('/repositories/delete', function (req, res, next) {
return dataStore.deleteOneClickBaseUrl(apiBaseUrl)
})
.then(function () {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
`One Click apps repository URL is deleted ${apiBaseUrl}`
)
@@ -103,15 +112,15 @@ router.post('/repositories/delete', function (req, res, next) {
})
router.get('/repositories/', function (req, res, next) {
- const dataStore = InjectionExtractor.extractUserFromInjected(res).user
- .dataStore
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
return Promise.resolve() //
.then(function () {
return dataStore.getAllOneClickBaseUrls()
})
.then(function (urls) {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'One click repositories are retrieved '
)
@@ -123,8 +132,11 @@ router.get('/repositories/', function (req, res, next) {
})
router.get('/template/list', function (req, res, next) {
- const dataStore = InjectionExtractor.extractUserFromInjected(res).user
- .dataStore
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
+ const eventLogger =
+ InjectionExtractor.extractUserFromInjected(res).user.userManager
+ .eventLogger
return Promise.resolve() //
.then(function () {
@@ -134,9 +146,21 @@ router.get('/template/list', function (req, res, next) {
urls.push(DEFAULT_ONE_CLICK_BASE_URL)
const promises = [] as Promise[]
+ eventLogger.trackEvent(
+ CapRoverEventFactory.create(
+ CapRoverEventType.OneClickAppListFetched,
+ {
+ numberOfRepos: urls.length,
+ }
+ )
+ )
+
urls.forEach((apiBaseUrl) => {
- const p = axios
- .get(apiBaseUrl + `/${VERSION}/list`) //
+ const p = axios({
+ method: 'get',
+ url: apiBaseUrl + `/${VERSION}/list`,
+ headers: HEADERS,
+ })
.then(function (axiosResponse) {
return axiosResponse.data.oneClickApps as any[]
})
@@ -178,7 +202,7 @@ router.get('/template/list', function (req, res, next) {
return allApps
})
.then(function (allApps) {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'All one click apps are retrieved'
)
@@ -192,8 +216,11 @@ router.get('/template/list', function (req, res, next) {
router.get('/template/app', function (req, res, next) {
const baseDomain = req.query.baseDomain as string
const appName = req.query.appName as string
- const dataStore = InjectionExtractor.extractUserFromInjected(res).user
- .dataStore
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
+ const eventLogger =
+ InjectionExtractor.extractUserFromInjected(res).user.userManager
+ .eventLogger
return Promise.resolve() //
.then(function () {
@@ -210,12 +237,28 @@ router.get('/template/app', function (req, res, next) {
const appUrl = `${baseDomain}/${VERSION}/apps/${appName}`
Logger.d(`retrieving app at: ${appUrl}`)
- return axios.get(appUrl).then(function (responseObject) {
+ // Only log the official repo events
+ if (baseDomain === DEFAULT_ONE_CLICK_BASE_URL) {
+ eventLogger.trackEvent(
+ CapRoverEventFactory.create(
+ CapRoverEventType.OneClickAppDetailsFetched,
+ {
+ appName,
+ }
+ )
+ )
+ }
+
+ return axios({
+ method: 'get',
+ url: appUrl,
+ headers: HEADERS,
+ }).then(function (responseObject) {
return responseObject.data
})
})
.then(function (appTemplate) {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'App template is retrieved'
)
diff --git a/src/routes/user/pro/ProRouter.ts b/src/routes/user/pro/ProRouter.ts
new file mode 100644
index 000000000..51b160a49
--- /dev/null
+++ b/src/routes/user/pro/ProRouter.ts
@@ -0,0 +1,160 @@
+import express = require('express')
+import ApiStatusCodes from '../../../api/ApiStatusCodes'
+import BaseApi from '../../../api/BaseApi'
+import InjectionExtractor from '../../../injection/InjectionExtractor'
+import {
+ IProFeatures,
+ TwoFactorAuthResponse,
+} from '../../../models/IProFeatures'
+import ProManagerUtils from '../../../user/pro/ProManagerUtils'
+import CaptainConstants from '../../../utils/CaptainConstants'
+
+const OTP_TOKEN_LENGTH = 6
+
+const router = express.Router()
+
+router.post('/apikey/', function (req, res, next) {
+ const apiKey = `${req.body.apiKey || ''}`
+
+ const userManager =
+ InjectionExtractor.extractUserFromInjected(res).user.userManager
+
+ Promise.resolve()
+ .then(function () {
+ return userManager.datastore.getRootDomain() as string
+ })
+ .then(function (rootDomain) {
+ return userManager.proManager.validateApiKey(
+ apiKey,
+ `${CaptainConstants.configs.captainSubDomain}.${rootDomain}`
+ )
+ })
+ .then(function (isValid) {
+ if (!isValid) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.STATUS_ERROR_GENERIC,
+ 'Invalid API Key'
+ )
+ }
+ return userManager.datastore.getProDataStore().setApiKey(apiKey)
+ })
+ .then(function () {
+ const baseApi = new BaseApi(
+ ApiStatusCodes.STATUS_OK,
+ 'API Key is set'
+ )
+ baseApi.data = {}
+ res.send(baseApi)
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
+router.get('/otp/', function (req, res, next) {
+ const otpAuthenticator =
+ InjectionExtractor.extractUserFromInjected(res).user.otpAuthenticator
+
+ Promise.resolve()
+ .then(function () {
+ return otpAuthenticator.is2FactorEnabled()
+ })
+ .then(function (enabled) {
+ const baseApi = new BaseApi(
+ ApiStatusCodes.STATUS_OK,
+ enabled
+ ? 'Two factor auth is enabled'
+ : 'Two factor auth is disabled'
+ )
+ const twoFactorResponse: TwoFactorAuthResponse = {
+ isEnabled: !!enabled,
+ }
+ baseApi.data = twoFactorResponse
+ res.send(baseApi)
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
+router.post('/otp/', function (req, res, next) {
+ const enabled = !!req.body.enabled
+ const token = `${req.body.token || ''}`.substring(0, OTP_TOKEN_LENGTH)
+
+ const otpAuthenticator =
+ InjectionExtractor.extractUserFromInjected(res).user.otpAuthenticator
+
+ Promise.resolve()
+ .then(function () {
+ return otpAuthenticator.set2fa(enabled, token)
+ })
+ .then(function (twoFactorResponse) {
+ const baseApi = new BaseApi(
+ ApiStatusCodes.STATUS_OK,
+ enabled
+ ? 'Two factor auth is enabled'
+ : 'Two factor auth is disabled'
+ )
+ baseApi.data = twoFactorResponse
+ res.send(baseApi)
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
+router.post('/configs/', function (req, res, next) {
+ const userManager =
+ InjectionExtractor.extractUserFromInjected(res).user.userManager
+
+ Promise.resolve()
+ .then(function () {
+ return userManager.proManager.updateConfig(
+ ProManagerUtils.ensureProConfigType(req.body.proConfigs)
+ )
+ })
+ .then(function () {
+ const baseApi = new BaseApi(
+ ApiStatusCodes.STATUS_OK,
+ 'Config updated'
+ )
+ baseApi.data = {}
+ res.send(baseApi)
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
+router.get('/configs/', function (req, res, next) {
+ const userManager =
+ InjectionExtractor.extractUserFromInjected(res).user.userManager
+
+ Promise.resolve()
+ .then(function () {
+ return userManager.proManager.getConfig()
+ })
+ .then(function (proConfigs) {
+ const baseApi = new BaseApi(
+ ApiStatusCodes.STATUS_OK,
+ 'Config retrieved'
+ )
+ baseApi.data = { proConfigs: proConfigs }
+ res.send(baseApi)
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
+router.get('/state/', function (req, res, next) {
+ const userManager =
+ InjectionExtractor.extractUserFromInjected(res).user.userManager
+
+ Promise.resolve()
+ .then(function () {
+ return userManager.proManager.getState()
+ })
+ .then(function (proFeaturesState) {
+ const testType: IProFeatures = proFeaturesState
+ const baseApi = new BaseApi(
+ ApiStatusCodes.STATUS_OK,
+ 'Config retrieved'
+ )
+ baseApi.data = { proFeaturesState: testType }
+ res.send(baseApi)
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
+export default router
diff --git a/src/routes/user/registeries/RegistriesRouter.ts b/src/routes/user/registeries/RegistriesRouter.ts
index ed0c86d37..98edb23f3 100644
--- a/src/routes/user/registeries/RegistriesRouter.ts
+++ b/src/routes/user/registeries/RegistriesRouter.ts
@@ -8,9 +8,10 @@ import Logger from '../../../utils/Logger'
const router = express.Router()
router.get('/', function (req, res, next) {
- const registryHelper = InjectionExtractor.extractUserFromInjected(
- res
- ).user.serviceManager.getRegistryHelper()
+ const registryHelper =
+ InjectionExtractor.extractUserFromInjected(
+ res
+ ).user.serviceManager.getRegistryHelper()
let registries: IRegistryInfo[] = []
return Promise.resolve()
@@ -22,7 +23,7 @@ router.get('/', function (req, res, next) {
return registryHelper.getDefaultPushRegistryId()
})
.then(function (defaultPush) {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'All registries retrieved'
)
@@ -35,14 +36,15 @@ router.get('/', function (req, res, next) {
})
router.post('/insert/', function (req, res, next) {
- let registryUser = req.body.registryUser + ''
- let registryPassword = req.body.registryPassword + ''
- let registryDomain = req.body.registryDomain + ''
- let registryImagePrefix = req.body.registryImagePrefix + ''
+ const registryUser = req.body.registryUser + ''
+ const registryPassword = req.body.registryPassword + ''
+ const registryDomain = req.body.registryDomain + ''
+ const registryImagePrefix = req.body.registryImagePrefix + ''
- const registryHelper = InjectionExtractor.extractUserFromInjected(
- res
- ).user.serviceManager.getRegistryHelper()
+ const registryHelper =
+ InjectionExtractor.extractUserFromInjected(
+ res
+ ).user.serviceManager.getRegistryHelper()
return Promise.resolve()
.then(function () {
@@ -55,7 +57,7 @@ router.post('/insert/', function (req, res, next) {
)
})
.then(function () {
- let msg = 'Registry is added.'
+ const msg = 'Registry is added.'
Logger.d(msg)
res.send(new BaseApi(ApiStatusCodes.STATUS_OK, msg))
})
@@ -64,15 +66,16 @@ router.post('/insert/', function (req, res, next) {
// ERRORS if it's local
router.post('/update/', function (req, res, next) {
- let registryId = req.body.id + ''
- let registryUser = req.body.registryUser + ''
- let registryPassword = req.body.registryPassword + ''
- let registryDomain = req.body.registryDomain + ''
- let registryImagePrefix = req.body.registryImagePrefix + ''
+ const registryId = req.body.id + ''
+ const registryUser = req.body.registryUser + ''
+ const registryPassword = req.body.registryPassword + ''
+ const registryDomain = req.body.registryDomain + ''
+ const registryImagePrefix = req.body.registryImagePrefix + ''
- const registryHelper = InjectionExtractor.extractUserFromInjected(
- res
- ).user.serviceManager.getRegistryHelper()
+ const registryHelper =
+ InjectionExtractor.extractUserFromInjected(
+ res
+ ).user.serviceManager.getRegistryHelper()
return Promise.resolve()
.then(function () {
@@ -85,7 +88,7 @@ router.post('/update/', function (req, res, next) {
)
})
.then(function () {
- let msg = 'Registry is updated.'
+ const msg = 'Registry is updated.'
Logger.d(msg)
res.send(new BaseApi(ApiStatusCodes.STATUS_OK, msg))
})
@@ -94,17 +97,18 @@ router.post('/update/', function (req, res, next) {
// ERRORS if default push is this OR if it's local
router.post('/delete/', function (req, res, next) {
- let registryId = req.body.registryId + ''
- const registryHelper = InjectionExtractor.extractUserFromInjected(
- res
- ).user.serviceManager.getRegistryHelper()
+ const registryId = req.body.registryId + ''
+ const registryHelper =
+ InjectionExtractor.extractUserFromInjected(
+ res
+ ).user.serviceManager.getRegistryHelper()
return Promise.resolve()
.then(function () {
return registryHelper.deleteRegistry(registryId, false)
})
.then(function () {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'Registry deleted'
)
@@ -114,17 +118,18 @@ router.post('/delete/', function (req, res, next) {
})
router.post('/setpush/', function (req, res, next) {
- let registryId = req.body.registryId + ''
- const registryHelper = InjectionExtractor.extractUserFromInjected(
- res
- ).user.serviceManager.getRegistryHelper()
+ const registryId = req.body.registryId + ''
+ const registryHelper =
+ InjectionExtractor.extractUserFromInjected(
+ res
+ ).user.serviceManager.getRegistryHelper()
return Promise.resolve()
.then(function () {
return registryHelper.setDefaultPushRegistry(registryId)
})
.then(function () {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'Push Registry changed'
)
diff --git a/src/routes/user/system/SystemRouter.ts b/src/routes/user/system/SystemRouter.ts
index 688ce33be..3f1a1179a 100644
--- a/src/routes/user/system/SystemRouter.ts
+++ b/src/routes/user/system/SystemRouter.ts
@@ -1,20 +1,26 @@
import express = require('express')
+import fs from 'fs/promises'
+import path from 'path'
import validator from 'validator'
import ApiStatusCodes from '../../../api/ApiStatusCodes'
import BaseApi from '../../../api/BaseApi'
import DockerApi from '../../../docker/DockerApi'
import DockerUtils from '../../../docker/DockerUtils'
import InjectionExtractor from '../../../injection/InjectionExtractor'
+import { IAppDef } from '../../../models/AppDefinition'
+import { AutomatedCleanupConfigsCleaner } from '../../../models/AutomatedCleanupConfigs'
import CaptainManager from '../../../user/system/CaptainManager'
import VersionManager from '../../../user/system/VersionManager'
import CaptainConstants from '../../../utils/CaptainConstants'
import Logger from '../../../utils/Logger'
import Utils from '../../../utils/Utils'
+import ThemesRouter from './ThemesRouter'
import SystemRouteSelfHostRegistry from './selfhostregistry/SystemRouteSelfHostRegistry'
const router = express.Router()
router.use('/selfhostregistry/', SystemRouteSelfHostRegistry)
+router.use('/themes/', ThemesRouter)
router.post('/createbackup/', function (req, res, next) {
const backupManager = CaptainManager.get().getBackupManager()
@@ -35,7 +41,7 @@ router.post('/createbackup/', function (req, res, next) {
})
router.post('/changerootdomain/', function (req, res, next) {
- let requestedCustomDomain = Utils.removeHttpHttps(
+ const requestedCustomDomain = Utils.removeHttpHttps(
(req.body.rootDomain || '').toLowerCase()
)
@@ -101,7 +107,7 @@ router.post('/enablessl/', function (req, res, next) {
})
router.post('/forcessl/', function (req, res, next) {
- let isEnabled = !!req.body.isEnabled
+ const isEnabled = !!req.body.isEnabled
CaptainManager.get()
.forceSsl(isEnabled)
@@ -119,8 +125,8 @@ router.post('/forcessl/', function (req, res, next) {
})
router.get('/info/', function (req, res, next) {
- const dataStore = InjectionExtractor.extractUserFromInjected(res).user
- .dataStore
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
return Promise.resolve()
.then(function () {
@@ -133,10 +139,11 @@ router.get('/info/', function (req, res, next) {
rootDomain: dataStore.hasCustomDomain()
? dataStore.getRootDomain()
: '',
+ captainSubDomain: CaptainConstants.configs.captainSubDomain,
}
})
.then(function (data) {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'Captain info retrieved'
)
@@ -152,7 +159,7 @@ router.get('/loadbalancerinfo/', function (req, res, next) {
return CaptainManager.get().getLoadBalanceManager().getInfo()
})
.then(function (data) {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'Load Balancer info retrieved'
)
@@ -168,7 +175,7 @@ router.get('/versionInfo/', function (req, res, next) {
return VersionManager.get().getCaptainImageTags()
})
.then(function (data) {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'Version Info Retrieved'
)
@@ -179,14 +186,21 @@ router.get('/versionInfo/', function (req, res, next) {
})
router.post('/versionInfo/', function (req, res, next) {
- let latestVersion = req.body.latestVersion
+ const latestVersion = req.body.latestVersion
+ const registryHelper =
+ InjectionExtractor.extractUserFromInjected(
+ res
+ ).user.serviceManager.getRegistryHelper()
return Promise.resolve()
.then(function () {
- return VersionManager.get().updateCaptain(latestVersion)
+ return VersionManager.get().updateCaptain(
+ latestVersion,
+ registryHelper
+ )
})
.then(function () {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'Captain update process has started...'
)
@@ -195,9 +209,47 @@ router.post('/versionInfo/', function (req, res, next) {
.catch(ApiStatusCodes.createCatcher(res))
})
+router.get('/diskcleanup/', function (req, res, next) {
+ return Promise.resolve()
+ .then(function () {
+ return CaptainManager.get().getDiskCleanupManager().getConfigs()
+ })
+ .then(function (data) {
+ const baseApi = new BaseApi(
+ ApiStatusCodes.STATUS_OK,
+ 'Disk cleanup configs retrieved'
+ )
+ baseApi.data = data
+ res.send(baseApi)
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
+router.post('/diskcleanup/', function (req, res, next) {
+ return Promise.resolve()
+ .then(function () {
+ const configs = AutomatedCleanupConfigsCleaner.sanitizeInput({
+ mostRecentLimit: req.body.mostRecentLimit,
+ cronSchedule: req.body.cronSchedule,
+ timezone: req.body.timezone,
+ })
+ return CaptainManager.get()
+ .getDiskCleanupManager()
+ .setConfig(configs)
+ })
+ .then(function () {
+ const baseApi = new BaseApi(
+ ApiStatusCodes.STATUS_OK,
+ 'Disk cleanup configs updated'
+ )
+ res.send(baseApi)
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
router.get('/netdata/', function (req, res, next) {
- const dataStore = InjectionExtractor.extractUserFromInjected(res).user
- .dataStore
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
return Promise.resolve()
.then(function () {
@@ -209,7 +261,7 @@ router.get('/netdata/', function (req, res, next) {
}.${dataStore.getRootDomain()}${
CaptainConstants.netDataRelativePath
}`
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'Netdata info retrieved'
)
@@ -220,7 +272,7 @@ router.get('/netdata/', function (req, res, next) {
})
router.post('/netdata/', function (req, res, next) {
- let netDataInfo = req.body.netDataInfo
+ const netDataInfo = req.body.netDataInfo
netDataInfo.netDataUrl = undefined // Frontend app returns this value, but we really don't wanna save this.
// root address is subject to change.
@@ -229,7 +281,7 @@ router.post('/netdata/', function (req, res, next) {
return CaptainManager.get().updateNetDataInfo(netDataInfo)
})
.then(function () {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'Netdata info is updated'
)
@@ -238,13 +290,210 @@ router.post('/netdata/', function (req, res, next) {
.catch(ApiStatusCodes.createCatcher(res))
})
+router.get('/goaccess/', function (req, res, next) {
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
+
+ return Promise.resolve()
+ .then(function () {
+ return dataStore.getGoAccessInfo()
+ })
+ .then(function (goAccessInfo) {
+ const baseApi = new BaseApi(
+ ApiStatusCodes.STATUS_OK,
+ 'GoAccess info retrieved'
+ )
+ baseApi.data = goAccessInfo
+ res.send(baseApi)
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
+router.post('/goaccess/', function (req, res, next) {
+ const goAccessInfo = req.body.goAccessInfo
+
+ return Promise.resolve()
+ .then(function () {
+ return CaptainManager.get().updateGoAccessInfo(goAccessInfo)
+ })
+ .then(function () {
+ const baseApi = new BaseApi(
+ ApiStatusCodes.STATUS_OK,
+ 'GoAccess info is updated'
+ )
+ res.send(baseApi)
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
+router.get('/goaccess/:appName/files', async function (req, res, next) {
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
+
+ const goAccessInfo = await dataStore.getGoAccessInfo()
+ const loadBalanceManager = CaptainManager.get().getLoadBalanceManager()
+
+ const appName = req.params.appName
+
+ if (!appName) {
+ const baseApi = new BaseApi(
+ ApiStatusCodes.STATUS_ERROR_GENERIC,
+ 'Invalid appName'
+ )
+ baseApi.data = []
+ res.send(baseApi)
+ return
+ }
+
+ if (!goAccessInfo.isEnabled) {
+ const baseApi = new BaseApi(
+ ApiStatusCodes.STATUS_ERROR_GENERIC,
+ 'GoAccess not enabled'
+ )
+ baseApi.data = []
+ res.send(baseApi)
+ return
+ }
+
+ const directoryPath = path.join(
+ CaptainConstants.nginxSharedLogsPathOnHost,
+ appName
+ )
+
+ let appDefinition: IAppDef | undefined = undefined
+
+ return Promise.resolve()
+ .then(function () {
+ // Ensure a valid appName parameter
+ return dataStore.getAppsDataStore().getAppDefinition(appName)
+ })
+ .then(function (data) {
+ appDefinition = data
+ return fs.readdir(directoryPath).catch((e) => {
+ Logger.d('No goaccess logs found')
+ return []
+ })
+ })
+ .then(function (files) {
+ return Promise.all(
+ files
+ // Make sure to only return the generated reports and not folders or the live report
+ // That will be added back later
+ .filter(
+ (f) => f.endsWith('.html') && !f.endsWith('Live.html')
+ )
+ .map((file) => {
+ return fs
+ .stat(path.join(directoryPath, file))
+ .then(function (fileStats) {
+ return {
+ name: file,
+ time: fileStats.mtime,
+ }
+ })
+ })
+ )
+ })
+ .then(function (linkData) {
+ const baseUrl = `/user/system/goaccess/`
+
+ const baseApi = new BaseApi(
+ ApiStatusCodes.STATUS_OK,
+ 'GoAccess info retrieved'
+ )
+ const linkList = linkData.map((d) => {
+ const { domainName, fileName } =
+ loadBalanceManager.parseLogPath(d.name)
+ return {
+ domainName,
+ name: fileName,
+ lastModifiedTime: d.time,
+ url: baseUrl + `${appName}/files/${d.name}`,
+ }
+ })
+
+ // Add in the live report for all sites even if it might not exist yet since they're dynamic
+ const allDomains = [
+ `${appName}.${dataStore.getRootDomain()}`,
+ ...appDefinition!.customDomain.map((d) => d.publicDomain),
+ ]
+ for (const domain of allDomains) {
+ const name =
+ loadBalanceManager.getLogName(appName, domain) +
+ '--Live.html'
+ linkList.push({
+ domainName: domain,
+ name,
+ lastModifiedTime: new Date(),
+ url: baseUrl + `${appName}/files/${name}`,
+ })
+ }
+
+ linkList.sort(
+ (a, b) =>
+ b.lastModifiedTime.getTime() - a.lastModifiedTime.getTime()
+ )
+
+ baseApi.data = linkList
+
+ res.send(baseApi)
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
+router.get('/goaccess/:appName/files/:file', async function (req, res, next) {
+ const { appName, file } = req.params
+ const { domainName, fileName } = CaptainManager.get()
+ .getLoadBalanceManager()
+ .parseLogPath(file)
+ if (fileName.includes('Live')) {
+ // Dynamically update the live reports by running the catchup script for the particular domain
+ await DockerApi.get().createContainer({
+ imageName: CaptainConstants.configs.goAccessImageName,
+ command: ['./catchupLog.sh'],
+ volumes: [
+ {
+ hostPath: CaptainConstants.nginxSharedLogsPathOnHost,
+ containerPath: CaptainConstants.nginxSharedLogsPath,
+ mode: 'rw',
+ },
+ ],
+ network: CaptainConstants.captainNetworkName,
+ arrayOfEnvKeyAndValue: [
+ {
+ key: 'FILE_PREFIX',
+ value: `${appName}--${domainName}`,
+ },
+ ],
+ sticky: false,
+ wait: true,
+ })
+ }
+
+ const path = `${appName}/${file}`
+ res.sendFile(
+ path,
+ { root: CaptainConstants.nginxSharedLogsPathOnHost },
+ function (error) {
+ if (error !== undefined) {
+ Logger.e(error, 'Error getting GoAccess report ' + path)
+ const baseApi = new BaseApi(
+ ApiStatusCodes.NOT_FOUND,
+ 'Report not found'
+ )
+ res.send(baseApi)
+ }
+ }
+ )
+})
+
router.get('/nginxconfig/', function (req, res, next) {
return Promise.resolve()
.then(function () {
return CaptainManager.get().getNginxConfig()
})
.then(function (data) {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'Nginx config retrieved'
)
@@ -255,8 +504,8 @@ router.get('/nginxconfig/', function (req, res, next) {
})
router.post('/nginxconfig/', function (req, res, next) {
- let baseConfigCustomValue = req.body.baseConfig.customValue
- let captainConfigCustomValue = req.body.captainConfig.customValue
+ const baseConfigCustomValue = req.body.baseConfig.customValue
+ const captainConfigCustomValue = req.body.captainConfig.customValue
return Promise.resolve()
.then(function () {
@@ -266,7 +515,7 @@ router.post('/nginxconfig/', function (req, res, next) {
)
})
.then(function () {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'Nginx config is updated'
)
@@ -281,7 +530,7 @@ router.get('/nodes/', function (req, res, next) {
return CaptainManager.get().getNodesInfo()
})
.then(function (data) {
- let baseApi = new BaseApi(
+ const baseApi = new BaseApi(
ApiStatusCodes.STATUS_OK,
'Node info retrieved'
)
@@ -294,9 +543,10 @@ router.get('/nodes/', function (req, res, next) {
router.post('/nodes/', function (req, res, next) {
const MANAGER = 'manager'
const WORKER = 'worker'
- const registryHelper = InjectionExtractor.extractUserFromInjected(
- res
- ).user.serviceManager.getRegistryHelper()
+ const registryHelper =
+ InjectionExtractor.extractUserFromInjected(
+ res
+ ).user.serviceManager.getRegistryHelper()
let isManager: boolean
@@ -314,11 +564,11 @@ router.post('/nodes/', function (req, res, next) {
return
}
- let privateKey = req.body.privateKey
- let remoteNodeIpAddress = req.body.remoteNodeIpAddress
- let captainIpAddress = req.body.captainIpAddress
- let sshPort = parseInt(req.body.sshPort) || 22
- let sshUser = (req.body.sshUser || 'root').trim()
+ const privateKey = req.body.privateKey
+ const remoteNodeIpAddress = req.body.remoteNodeIpAddress
+ const captainIpAddress = req.body.captainIpAddress
+ const sshPort = parseInt(req.body.sshPort) || 22
+ const sshUser = (req.body.sshUser || 'root').trim()
if (!captainIpAddress || !remoteNodeIpAddress || !privateKey) {
res.send(
@@ -354,7 +604,7 @@ router.post('/nodes/', function (req, res, next) {
)
})
.then(function () {
- let msg = 'Docker node is successfully joined.'
+ const msg = 'Docker node is successfully joined.'
Logger.d(msg)
res.send(new BaseApi(ApiStatusCodes.STATUS_OK, msg))
})
diff --git a/src/routes/user/system/ThemesRouter.ts b/src/routes/user/system/ThemesRouter.ts
new file mode 100644
index 000000000..ed4779f2a
--- /dev/null
+++ b/src/routes/user/system/ThemesRouter.ts
@@ -0,0 +1,91 @@
+import express = require('express')
+import ApiStatusCodes from '../../../api/ApiStatusCodes'
+import BaseApi from '../../../api/BaseApi'
+import InjectionExtractor from '../../../injection/InjectionExtractor'
+import CapRoverTheme from '../../../models/CapRoverTheme'
+import { ThemeManager } from '../../../user/ThemeManager'
+import Logger from '../../../utils/Logger'
+
+const router = express.Router()
+
+router.post('/setcurrent/', function (req, res, next) {
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
+
+ const themeName = req.body.themeName || ''
+
+ return Promise.resolve()
+ .then(function () {
+ return new ThemeManager(dataStore).setCurrent(themeName)
+ })
+ .then(function () {
+ const msg = 'Current theme is stored.'
+ Logger.d(msg)
+ res.send(new BaseApi(ApiStatusCodes.STATUS_OK, msg))
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
+router.post('/update/', function (req, res, next) {
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
+ const oldName = req.body.oldName || ''
+ const theme: CapRoverTheme = {
+ name: req.body.name || '',
+ content: req.body.content || '',
+ extra: req.body.extra || '',
+ headEmbed: req.body.headEmbed || '',
+ }
+
+ return Promise.resolve()
+ .then(function () {
+ return new ThemeManager(dataStore).updateTheme(oldName, theme)
+ })
+ .then(function () {
+ const msg = 'Theme is stored.'
+ Logger.d(msg)
+ res.send(new BaseApi(ApiStatusCodes.STATUS_OK, msg))
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
+router.post('/delete/', function (req, res, next) {
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
+ const themeName = req.body.themeName || ''
+
+ return Promise.resolve()
+ .then(function () {
+ return new ThemeManager(dataStore).deleteTheme(themeName)
+ })
+ .then(function () {
+ const msg = 'Theme is deleted.'
+ Logger.d(msg)
+ res.send(new BaseApi(ApiStatusCodes.STATUS_OK, msg))
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
+router.get('/all/', function (req, res, next) {
+ const dataStore =
+ InjectionExtractor.extractUserFromInjected(res).user.dataStore
+
+ return Promise.resolve()
+ .then(function () {
+ return new ThemeManager(dataStore).getAllThemes()
+ })
+ .then(function (themes) {
+ const baseApi = new BaseApi(
+ ApiStatusCodes.STATUS_OK,
+ 'Themes are retrieved.'
+ )
+ baseApi.data = {
+ themes: themes,
+ }
+
+ res.send(baseApi)
+ })
+ .catch(ApiStatusCodes.createCatcher(res))
+})
+
+export default router
diff --git a/src/routes/user/system/selfhostregistry/SystemRouteSelfHostRegistry.ts b/src/routes/user/system/selfhostregistry/SystemRouteSelfHostRegistry.ts
index cec1ed594..590ad8512 100644
--- a/src/routes/user/system/selfhostregistry/SystemRouteSelfHostRegistry.ts
+++ b/src/routes/user/system/selfhostregistry/SystemRouteSelfHostRegistry.ts
@@ -14,9 +14,10 @@ const router = express.Router()
router.post('/enableregistry/', function (req, res, next) {
const captainManager = CaptainManager.get()
const password = uuid()
- const registryHelper = InjectionExtractor.extractUserFromInjected(
- res
- ).user.serviceManager.getRegistryHelper()
+ const registryHelper =
+ InjectionExtractor.extractUserFromInjected(
+ res
+ ).user.serviceManager.getRegistryHelper()
return Promise.resolve()
.then(function () {
@@ -40,8 +41,8 @@ router.post('/enableregistry/', function (req, res, next) {
)
}
}
- let user = CaptainConstants.captainRegistryUsername
- let domain = captainManager
+ const user = CaptainConstants.captainRegistryUsername
+ const domain = captainManager
.getDockerRegistry()
.getLocalRegistryDomainAndPort()
@@ -54,7 +55,7 @@ router.post('/enableregistry/', function (req, res, next) {
)
})
.then(function () {
- let msg = 'Local registry is created.'
+ const msg = 'Local registry is created.'
Logger.d(msg)
res.send(new BaseApi(ApiStatusCodes.STATUS_OK, msg))
})
@@ -64,9 +65,10 @@ router.post('/enableregistry/', function (req, res, next) {
// ERRORS if default push is this
router.post('/disableregistry/', function (req, res, next) {
const captainManager = CaptainManager.get()
- const registryHelper = InjectionExtractor.extractUserFromInjected(
- res
- ).user.serviceManager.getRegistryHelper()
+ const registryHelper =
+ InjectionExtractor.extractUserFromInjected(
+ res
+ ).user.serviceManager.getRegistryHelper()
return Promise.resolve()
.then(function () {
@@ -87,7 +89,7 @@ router.post('/disableregistry/', function (req, res, next) {
return captainManager.getDockerRegistry().ensureServiceRemoved()
})
.then(function () {
- let msg = 'Local registry is removed.'
+ const msg = 'Local registry is removed.'
Logger.d(msg)
res.send(new BaseApi(ApiStatusCodes.STATUS_OK, msg))
})
diff --git a/src/scripts/disable-otp.ts b/src/scripts/disable-otp.ts
new file mode 100644
index 000000000..1c94f90a1
--- /dev/null
+++ b/src/scripts/disable-otp.ts
@@ -0,0 +1,6 @@
+import DataStoreProvider from '../datastore/DataStoreProvider'
+
+DataStoreProvider.getDataStore('captain')
+ .getProDataStore()
+ .setOtpEnabled(false)
+ .catch((err) => console.log(err))
diff --git a/src/server.ts b/src/server.ts
index cc5e76287..96e025413 100644
--- a/src/server.ts
+++ b/src/server.ts
@@ -9,7 +9,9 @@ import { AnyError } from './models/OtherTypes'
import CaptainConstants from './utils/CaptainConstants'
import * as CaptainInstaller from './utils/CaptainInstaller'
import EnvVars from './utils/EnvVars'
-const debug = require('debug')('caprover:server')
+import debugModule = require('debug')
+
+const debug = debugModule('caprover:server')
function startServer() {
if (CaptainConstants.isDebug) {
@@ -28,7 +30,7 @@ function startServer() {
* Get port from environment and store in Express.
*/
- const port = normalizePort(process.env.PORT || '3000')
+ const port = 3000
app.set('port', port)
/**
@@ -45,26 +47,6 @@ function startServer() {
server.on('error', onError)
server.on('listening', onListening)
- /**
- * Normalize a port into a number, string, or false.
- */
-
- function normalizePort(val: string) {
- const port = parseInt(val, 10)
-
- if (isNaN(port)) {
- // named pipe
- return val
- }
-
- if (port >= 0) {
- // port number
- return port
- }
-
- return false
- }
-
/**
* Event listener for HTTP server "error" event.
*/
diff --git a/src/user/Authenticator.ts b/src/user/Authenticator.ts
index 302edfb47..26a814ca2 100644
--- a/src/user/Authenticator.ts
+++ b/src/user/Authenticator.ts
@@ -1,18 +1,49 @@
import jwt = require('jsonwebtoken')
-import { v4 as uuid } from 'uuid'
+import { randomBytes } from 'crypto'
import ApiStatusCodes from '../api/ApiStatusCodes'
+import { IHashMapGeneric } from '../models/ICacheGeneric'
import { UserJwt } from '../models/UserJwt'
import CaptainConstants from '../utils/CaptainConstants'
import EnvVar from '../utils/EnvVars'
import Logger from '../utils/Logger'
import bcrypt = require('bcryptjs')
-const captainDefaultPassword = EnvVar.DEFAULT_PASSWORD || 'captain42'
+const captainDefaultPassword = EnvVar.DEFAULT_PASSWORD ?? 'captain42'
const COOKIE_AUTH_SUFFIX = 'cookie-'
const WEBHOOK_APP_PUSH_SUFFIX = '-webhook-app-push'
const DOWNLOAD_TOKEN = '-download-token'
+function generateSecureRandomString(length: number): string {
+ if (length <= 0) {
+ throw new Error('Length must be a positive integer.')
+ }
+
+ const charset =
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
+ const charsetLength = charset.length
+
+ // Generate random bytes
+ const randomValues = randomBytes(length)
+
+ // Map the random bytes to characters in the charset
+ let result = ''
+ for (let i = 0; i < length; i++) {
+ const randomIndex = randomValues[i] % charsetLength
+ result += charset[randomIndex]
+ }
+
+ return result
+}
+
+export interface OtpConfig {
+ otpToken: string
+ otpAuthenticator: {
+ // getting around circular dependency
+ isOtpTokenValid: (providedToken: string) => Promise
+ }
+}
+
class Authenticator {
private encryptionKey: string
private namespace: string
@@ -21,14 +52,16 @@ class Authenticator {
constructor(secret: string, namespace: string) {
this.encryptionKey = secret + namespace // making encryption key unique per namespace!
this.namespace = namespace
- this.tokenVersion = CaptainConstants.isDebug ? 'test' : uuid()
+ this.tokenVersion = CaptainConstants.isDebug
+ ? 'test'
+ : generateSecureRandomString(64)
}
changepass(oldPass: string, newPass: string, savedHashedPassword: string) {
const self = this
- oldPass = oldPass || ''
- newPass = newPass || ''
+ oldPass = oldPass ?? ''
+ newPass = newPass ?? ''
return Promise.resolve()
.then(function () {
@@ -49,7 +82,7 @@ class Authenticator {
)
}
- self.tokenVersion = uuid()
+ self.tokenVersion = generateSecureRandomString(64)
const hashed = bcrypt.hashSync(
self.encryptionKey + newPass,
@@ -64,12 +97,16 @@ class Authenticator {
const self = this
return Promise.resolve().then(function () {
- password = password || ''
+ password = `${password ?? ''}`
if (!savedHashedPassword) {
return captainDefaultPassword === password
}
+ if (!self.encryptionKey) {
+ throw new Error('Encryption key is not set!')
+ }
+
return bcrypt.compareSync(
self.encryptionKey + password,
savedHashedPassword
@@ -77,8 +114,13 @@ class Authenticator {
})
}
- getAuthTokenForCookies(password: string, savedHashedPassword: string) {
+ getAuthTokenForCookies(
+ otpConfig: OtpConfig,
+ password: string,
+ savedHashedPassword: string
+ ) {
return this.getAuthToken(
+ otpConfig,
password,
savedHashedPassword,
COOKIE_AUTH_SUFFIX
@@ -86,21 +128,36 @@ class Authenticator {
}
getAuthToken(
+ otpConfig: OtpConfig,
password: string,
savedHashedPassword: string,
keySuffix?: string
) {
const self = this
+ // intentionally same error to avoid giving bad actors any hints
+ const INVALID_CREDS_ERROR = 'Invalid credentials'
+
return Promise.resolve()
.then(function () {
+ return otpConfig.otpAuthenticator.isOtpTokenValid(
+ otpConfig.otpToken
+ )
+ })
+ .then(function (otpValid) {
+ if (!otpValid) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.STATUS_WRONG_PASSWORD,
+ INVALID_CREDS_ERROR
+ )
+ }
return self.isPasswordCorrect(password, savedHashedPassword)
})
.then(function (isPasswordCorrect) {
if (!isPasswordCorrect) {
throw ApiStatusCodes.createError(
ApiStatusCodes.STATUS_WRONG_PASSWORD,
- 'Password is incorrect.'
+ INVALID_CREDS_ERROR
)
}
@@ -128,7 +185,7 @@ class Authenticator {
return new Promise(function (resolve, reject) {
jwt.verify(
- token,
+ `${token}`,
self.encryptionKey + (keySuffix ? keySuffix : ''),
function (err, rawDecoded: { data: UserJwt }) {
if (err) {
@@ -224,19 +281,16 @@ class Authenticator {
const self = this
obj.namespace = self.namespace
- return Promise.resolve().then(function () {
- return jwt.sign(
- {
- data: obj,
- },
- self.encryptionKey + (keySuffix ? keySuffix : ''),
- expiresIn
- ? {
- expiresIn: expiresIn,
- }
- : undefined
- )
- })
+ return Promise.resolve() //
+ .then(function () {
+ return jwt.sign(
+ {
+ data: obj,
+ },
+ self.encryptionKey + (keySuffix ?? ''),
+ expiresIn ? { expiresIn: expiresIn as any } : undefined
+ )
+ })
}
decodeGenericToken(token: string, keySuffix: string) {
@@ -244,8 +298,8 @@ class Authenticator {
return new Promise(function (resolve, reject) {
jwt.verify(
- token,
- self.encryptionKey + (keySuffix ? keySuffix : ''),
+ `${token}`,
+ self.encryptionKey + (keySuffix ?? ''),
function (err, rawDecoded: { data: any }) {
if (err) {
Logger.e(err)
@@ -282,7 +336,8 @@ class Authenticator {
static setMainSalt(salt: string) {
if (Authenticator.mainSalt) throw new Error('Salt is already set!!')
- Authenticator.mainSalt = salt
+ if (!salt) throw new Error('Empty salt!!')
+ Authenticator.mainSalt = `${salt}`
}
static getAuthenticator(namespace: string): Authenticator {
@@ -294,6 +349,13 @@ class Authenticator {
)
}
+ if (namespace !== CaptainConstants.rootNameSpace) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.STATUS_ERROR_NOT_AUTHORIZED,
+ 'Invalid namespace'
+ )
+ }
+
if (!authenticatorCache[namespace]) {
const captainSalt = Authenticator.mainSalt
if (captainSalt) {
@@ -301,6 +363,8 @@ class Authenticator {
captainSalt,
namespace
)
+ } else {
+ throw new Error('Salt is not set! Cannot create authenticator')
}
}
diff --git a/src/user/DockerRegistryHelper.ts b/src/user/DockerRegistryHelper.ts
index 322850d83..b75ffe3ad 100644
--- a/src/user/DockerRegistryHelper.ts
+++ b/src/user/DockerRegistryHelper.ts
@@ -2,6 +2,7 @@ import ApiStatusCodes from '../api/ApiStatusCodes'
import DataStore from '../datastore/DataStore'
import RegistriesDataStore from '../datastore/RegistriesDataStore'
import DockerApi from '../docker/DockerApi'
+import { DockerAuthObj, DockerRegistryConfig } from '../models/DockerAuthObj'
import {
IRegistryInfo,
IRegistryType,
@@ -14,7 +15,10 @@ import BuildLog from './BuildLog'
class DockerRegistryHelper {
private registriesDataStore: RegistriesDataStore
- constructor(dataStore: DataStore, private dockerApi: DockerApi) {
+ constructor(
+ dataStore: DataStore,
+ private dockerApi: DockerApi
+ ) {
this.registriesDataStore = dataStore.getRegistriesDataStore()
}
@@ -42,7 +46,7 @@ class DockerRegistryHelper {
return self.getDefaultPushRegistryId()
})
.then(function (defaultRegId) {
- let ret: IRegistryInfo | undefined = undefined
+ const ret: IRegistryInfo | undefined = undefined
for (let idx = 0; idx < allRegistries.length; idx++) {
const element = allRegistries[idx]
if (defaultRegId && element.id === defaultRegId) {
@@ -133,18 +137,33 @@ class DockerRegistryHelper {
}
}
- // if none of the registries explicitly relates to the image name, try the official one
- for (let index = 0; index < regs.length; index++) {
- const element = regs[index]
- if (element.registryDomain === 'registry-1.docker.io') {
- return {
- serveraddress: element.registryDomain,
- username: element.registryUser,
- password: element.registryPassword,
- // email: CaptainConstants.defaultEmail, // email is optional
+ function isDomainDocker(domainToTest: string) {
+ return (
+ domainToTest.endsWith('.docker.io') || // *.docker.io/user/image is from Docker Hub
+ domainToTest.endsWith('.docker.com') || // *.docker.com/user/image is from Docker Hub
+ domainToTest === 'docker.com' || // docker.com/user/image is from Docker Hub
+ domainToTest === 'docker.io' // docker.io/user/image is from Docker Hub
+ )
+ }
+
+ // if none of the registries explicitly relates to the image name, and no other explicit domain is defined,
+ // try Docker Hub registry as the default
+ if (
+ imageName.split('/').length == 1 || // image is from Docker Hub
+ imageName.split('/').length == 2 || // user/image is from Docker Hub
+ isDomainDocker(imageName.split('/')[0])
+ )
+ for (let index = 0; index < regs.length; index++) {
+ const element = regs[index]
+ if (isDomainDocker(element.registryDomain)) {
+ return {
+ serveraddress: element.registryDomain,
+ username: element.registryUser,
+ password: element.registryPassword,
+ // email: CaptainConstants.defaultEmail, // email is optional
+ }
}
}
- }
return undefined
})
@@ -158,7 +177,7 @@ class DockerRegistryHelper {
return self.getAllRegistries()
})
.then(function (regs) {
- let registryConfig: DockerRegistryConfig = {}
+ const registryConfig: DockerRegistryConfig = {}
for (let index = 0; index < regs.length; index++) {
const element = regs[index]
@@ -264,13 +283,14 @@ class DockerRegistryHelper {
return self.registriesDataStore.getAllRegistries()
})
.then(function (allRegs) {
- let promiseToAddRegistry = self.registriesDataStore.addRegistryToDb(
- registryUser,
- registryPassword,
- registryDomain,
- registryImagePrefix,
- registryType
- )
+ let promiseToAddRegistry =
+ self.registriesDataStore.addRegistryToDb(
+ registryUser,
+ registryPassword,
+ registryDomain,
+ registryImagePrefix,
+ registryType
+ )
// Product decision. We want to make the first added registry the default one,
// this way, it's easier for new users to grasp the concept of default push registry.
@@ -334,7 +354,7 @@ class DockerRegistryHelper {
Logger.e(err)
throw ApiStatusCodes.createError(
ApiStatusCodes.AUTHENTICATION_FAILED,
- 'Authentication failed. Either username, password or domain is incorrect.'
+ 'Registry authentication failed. Either username, password or domain is incorrect.'
)
})
}
diff --git a/src/user/FeatureFlags.ts b/src/user/FeatureFlags.ts
new file mode 100644
index 000000000..842c1ccf5
--- /dev/null
+++ b/src/user/FeatureFlags.ts
@@ -0,0 +1,68 @@
+import axios from 'axios'
+import DataStore from '../datastore/DataStore'
+import CaptainConstants from '../utils/CaptainConstants'
+import Logger from '../utils/Logger'
+
+export default class FeatureFlags {
+ static instance: FeatureFlags
+
+ private featureFlags: any | undefined
+ static IS_PRO_ENABLED = 'isProEnabled'
+
+ static get(datastore: DataStore) {
+ if (!FeatureFlags.instance) {
+ FeatureFlags.instance = new FeatureFlags(datastore)
+ }
+ return FeatureFlags.instance
+ }
+
+ private constructor(private datastore: DataStore) {
+ this.refreshFeatureFlags()
+ const self = this
+ self.featureFlags = self.datastore.getFeatureFlags()
+ }
+
+ getFeatureFlags(): any | undefined {
+ return this.featureFlags
+ }
+
+ private refreshFeatureFlags() {
+ const self = this
+ Promise.resolve() //
+ .then(function () {
+ return axios.get(
+ 'https://api-v1.caprover.com/v2/featureflags',
+ {
+ params: {
+ currentVersion: CaptainConstants.configs.version,
+ },
+ }
+ )
+ })
+ .then(function (responseObj) {
+ const resp = responseObj.data
+
+ if (resp.status !== 100) {
+ throw new Error(
+ `Bad response from the upstream version info: ${resp.status}`
+ )
+ }
+
+ const data = resp.data
+
+ self.featureFlags = data.featureFlags
+ return self.datastore.setFeatureFlags(self.featureFlags)
+ })
+ .catch(function (error) {
+ Logger.e(error)
+ })
+ .then(function () {
+ setTimeout(
+ () => {
+ self.refreshFeatureFlags()
+ },
+ 1000 * 3600 * 19.3
+ ) // some random hour to avoid constant traffic
+ })
+ }
+}
diff --git a/src/user/ImageMaker.ts b/src/user/ImageMaker.ts
index 1c3049d23..9619318f4 100644
--- a/src/user/ImageMaker.ts
+++ b/src/user/ImageMaker.ts
@@ -40,7 +40,11 @@ import tar = require('tar')
import path = require('path')
import ApiStatusCodes from '../api/ApiStatusCodes'
import DockerApi from '../docker/DockerApi'
+import { IAppEnvVar } from '../models/AppDefinition'
import { IBuiltImage } from '../models/IBuiltImage'
+import { IHashMapGeneric } from '../models/ICacheGeneric'
+import { ICaptainDefinition } from '../models/ICaptainDefinition'
+import { IImageSource } from '../models/IImageSource'
import { AnyError } from '../models/OtherTypes'
import CaptainConstants from '../utils/CaptainConstants'
import GitHelper from '../utils/GitHelper'
@@ -123,6 +127,18 @@ export default class ImageMaker {
})
.then(function (gitHashFromImageSource) {
gitHash = gitHashFromImageSource
+
+ const includesGitCommitEnvVar = envVars.find(
+ (envVar) => envVar.key === CaptainConstants.gitShaEnvVarKey
+ )
+
+ if (gitHash && !includesGitCommitEnvVar) {
+ envVars.push({
+ key: CaptainConstants.gitShaEnvVarKey,
+ value: gitHash,
+ })
+ }
+
// some users convert the directory into TAR instead of converting the content into TAR.
// we go one level deep and try to find the right directory.
// Also, they may have no captain-definition file, in that case, fall back to Dockerfile if exists.
@@ -397,10 +413,10 @@ export default class ImageMaker {
const hasDockerfileLines =
data.dockerfileLines && data.dockerfileLines.length > 0
- let numberOfProperties =
- (!!data.templateId ? 1 : 0) +
- (!!data.imageName ? 1 : 0) +
- (!!data.dockerfilePath ? 1 : 0) +
+ const numberOfProperties =
+ (data.templateId ? 1 : 0) +
+ (data.imageName ? 1 : 0) +
+ (data.dockerfilePath ? 1 : 0) +
(hasDockerfileLines ? 1 : 0)
if (numberOfProperties !== 1) {
@@ -420,7 +436,7 @@ export default class ImageMaker {
) {
return Promise.resolve() //
.then(function () {
- let data = captainDefinition
+ const data = captainDefinition
if (data.templateId) {
return TemplateHelper.get().getDockerfileContentFromTemplateTag(
data.templateId
@@ -501,10 +517,11 @@ export default class ImageMaker {
.then(function (dockerfileExists) {
if (!dockerfileExists) return false
- const captainDefinitionDefault: ICaptainDefinition = {
- schemaVersion: 2,
- dockerfilePath: `./${DOCKER_FILE}`,
- }
+ const captainDefinitionDefault: ICaptainDefinition =
+ {
+ schemaVersion: 2,
+ dockerfilePath: `./${DOCKER_FILE}`,
+ }
return fs
.outputFile(
diff --git a/src/user/ServiceManager.ts b/src/user/ServiceManager.ts
index 3752ad12d..569b1e37b 100644
--- a/src/user/ServiceManager.ts
+++ b/src/user/ServiceManager.ts
@@ -1,13 +1,31 @@
-import { ImageInfo } from 'dockerode'
import ApiStatusCodes from '../api/ApiStatusCodes'
import DataStore from '../datastore/DataStore'
import DockerApi, { IDockerUpdateOrders } from '../docker/DockerApi'
+import {
+ AppDeployTokenConfig,
+ IAppDef,
+ IAppEnvVar,
+ IAppPort,
+ IAppTag,
+ IAppVolume,
+ IHttpAuth,
+ RepoInfo,
+} from '../models/AppDefinition'
+import { DockerAuthObj } from '../models/DockerAuthObj'
+import { IHashMapGeneric } from '../models/ICacheGeneric'
+import { IImageSource } from '../models/IImageSource'
+import { PreDeployFunction } from '../models/OtherTypes'
import CaptainConstants from '../utils/CaptainConstants'
import Logger from '../utils/Logger'
import Utils from '../utils/Utils'
import Authenticator from './Authenticator'
import DockerRegistryHelper from './DockerRegistryHelper'
import ImageMaker, { BuildLogsManager } from './ImageMaker'
+import { EventLogger } from './events/EventLogger'
+import {
+ CapRoverEventFactory,
+ CapRoverEventType,
+} from './events/ICapRoverEvent'
import DomainResolveChecker from './system/DomainResolveChecker'
import LoadBalancerManager from './system/LoadBalancerManager'
import requireFromString = require('require-from-string')
@@ -36,6 +54,7 @@ class ServiceManager {
dataStore: DataStore,
dockerApi: DockerApi,
loadBalancerManager: LoadBalancerManager,
+ eventLogger: EventLogger,
domainResolveChecker: DomainResolveChecker
) {
if (!serviceMangerCache[namespace]) {
@@ -44,6 +63,7 @@ class ServiceManager {
authenticator,
dockerApi,
loadBalancerManager,
+ eventLogger,
domainResolveChecker
)
}
@@ -62,6 +82,7 @@ class ServiceManager {
private authenticator: Authenticator,
private dockerApi: DockerApi,
private loadBalancerManager: LoadBalancerManager,
+ private eventLogger: EventLogger,
private domainResolveChecker: DomainResolveChecker
) {
this.activeOrScheduledBuilds = {}
@@ -91,7 +112,7 @@ class ServiceManager {
scheduleDeployNewVersion(appName: string, source: IImageSource) {
const self = this
- let activeBuildAppName = self.isAnyBuildRunning()
+ const activeBuildAppName = self.isAnyBuildRunning()
this.activeOrScheduledBuilds[appName] = true
self.buildLogsManager.getAppBuildLogs(appName).clear()
@@ -128,13 +149,13 @@ class ServiceManager {
`An active build (${activeBuildAppName}) is in progress. This build is queued...`
)
- let promiseToSave: QueuedPromise = {
+ const promiseToSave: QueuedPromise = {
resolve: undefined,
reject: undefined,
promise: undefined,
}
- let promise = new Promise(function (resolve, reject) {
+ const promise = new Promise(function (resolve, reject) {
promiseToSave.resolve = resolve
promiseToSave.reject = reject
})
@@ -168,20 +189,6 @@ class ServiceManager {
.then(function (app) {
const envVars = app.envVars || []
- const includesGitCommitEnvVar = envVars.find(
- (envVar) =>
- envVar.key === CaptainConstants.gitShaEnvVarKey
- )
- const gitHash =
- source.captainDefinitionContentSource?.gitHash ||
- source.uploadedTarPathSource?.gitHash
- if (gitHash && !includesGitCommitEnvVar) {
- envVars.push({
- key: CaptainConstants.gitShaEnvVarKey,
- value: gitHash,
- })
- }
-
return self.imageMaker.ensureImage(
source,
appName,
@@ -202,6 +209,16 @@ class ServiceManager {
})
.then(function () {
self.onBuildFinished(appName)
+
+ self.eventLogger.trackEvent(
+ CapRoverEventFactory.create(
+ CapRoverEventType.AppBuildSuccessful,
+ {
+ appName,
+ }
+ )
+ )
+
return self.ensureServiceInitedAndUpdated(appName)
})
.catch(function (error) {
@@ -218,7 +235,7 @@ class ServiceManager {
self.activeOrScheduledBuilds[appName] = false
Promise.resolve().then(function () {
- let newBuild = self.queuedBuilds.shift()
+ const newBuild = self.queuedBuilds.shift()
if (newBuild)
self.startDeployingNewVersion(newBuild.appName, newBuild.source)
})
@@ -451,40 +468,51 @@ class ServiceManager {
})
}
- removeApp(appName: string) {
- Logger.d(`Removing service for: ${appName}`)
+ removeApps(appNames: string[]) {
+ Logger.d(`Removing service for: ${appNames.join(', ')}`)
const self = this
- const serviceName = this.dataStore
- .getAppsDataStore()
- .getServiceName(appName)
- const dockerApi = this.dockerApi
- const dataStore = this.dataStore
+ const removeAppPromise = function (appName: string) {
+ const serviceName = self.dataStore
+ .getAppsDataStore()
+ .getServiceName(appName)
+ const dockerApi = self.dockerApi
+ const dataStore = self.dataStore
- return Promise.resolve()
- .then(function () {
- return self.ensureNotBuilding(appName)
- })
- .then(function () {
- Logger.d(`Check if service is running: ${serviceName}`)
- return dockerApi.isServiceRunningByName(serviceName)
- })
- .then(function (isRunning) {
- if (isRunning) {
- return dockerApi.removeServiceByName(serviceName)
- } else {
- Logger.w(
- `Cannot delete service... It is not running: ${serviceName}`
- )
- return true
- }
- })
- .then(function () {
- return dataStore.getAppsDataStore().deleteAppDefinition(appName)
- })
- .then(function () {
- return self.reloadLoadBalancer()
- })
+ return Promise.resolve()
+ .then(function () {
+ return self.ensureNotBuilding(appName)
+ })
+ .then(function () {
+ Logger.d(`Check if service is running: ${serviceName}`)
+ return dockerApi.isServiceRunningByName(serviceName)
+ })
+ .then(function (isRunning) {
+ if (isRunning) {
+ return dockerApi.removeServiceByName(serviceName)
+ } else {
+ Logger.w(
+ `Cannot delete service... It is not running: ${serviceName}`
+ )
+ return true
+ }
+ })
+ .then(function () {
+ return dataStore
+ .getAppsDataStore()
+ .deleteAppDefinition(appName)
+ })
+ .then(function () {
+ return self.reloadLoadBalancer()
+ })
+ }
+
+ const promises = []
+ for (const appName of appNames) {
+ promises.push(removeAppPromise(appName))
+ }
+
+ return Promise.all(promises)
}
removeVolsSafe(volumes: string[]) {
@@ -533,86 +561,9 @@ class ServiceManager {
})
}
- getUnusedImages(mostRecentLimit: number) {
- Logger.d(
- `Getting unused images, excluding most recent ones: ${mostRecentLimit}`
- )
-
- const dockerApi = this.dockerApi
- const dataStore = this.dataStore
- let allImages: ImageInfo[]
-
- return Promise.resolve()
- .then(function () {
- return dockerApi.getImages()
- })
- .then(function (images) {
- allImages = images
-
- return dataStore.getAppsDataStore().getAppDefinitions()
- })
- .then(function (apps) {
- const unusedImages = []
-
- if (mostRecentLimit < 0) {
- throw ApiStatusCodes.createError(
- ApiStatusCodes.ILLEGAL_PARAMETER,
- 'Most Recent Limit cannot be negative'
- )
- }
-
- for (let i = 0; i < allImages.length; i++) {
- const currentImage = allImages[i]
- let imageInUse = false
-
- const repoTags = currentImage.RepoTags || []
-
- Object.keys(apps).forEach(function (appName) {
- const app = apps[appName]
- for (let k = 0; k < mostRecentLimit + 1; k++) {
- const versionToCheck =
- Number(app.deployedVersion) - k
-
- if (versionToCheck < 0) continue
-
- let deployedImage = ''
- app.versions.forEach((v) => {
- if (v.version === versionToCheck) {
- deployedImage = v.deployedImageName || ''
- }
- })
-
- if (!deployedImage) continue
-
- if (repoTags.indexOf(deployedImage) >= 0) {
- imageInUse = true
- }
- }
- })
-
- if (!imageInUse) {
- unusedImages.push({
- id: currentImage.Id,
- tags: repoTags,
- })
- }
- }
-
- return unusedImages
- })
- }
-
- deleteImages(imageIds: string[]) {
- Logger.d('Deleting images...')
-
- const dockerApi = this.dockerApi
-
- return Promise.resolve().then(function () {
- return dockerApi.deleteImages(imageIds)
- })
- }
-
- createPreDeployFunctionIfExist(app: IAppDef): Function | undefined {
+ createPreDeployFunctionIfExist(
+ app: IAppDef
+ ): PreDeployFunction | undefined {
let preDeployFunction = app.preDeployFunction
if (!preDeployFunction) {
@@ -649,11 +600,13 @@ class ServiceManager {
updateAppDefinition(
appName: string,
+ projectId: string,
description: string,
instanceCount: number,
captainDefinitionRelativeFilePath: string,
envVars: IAppEnvVar[],
volumes: IAppVolume[],
+ tags: IAppTag[],
nodeId: string,
notExposeAsWebApp: boolean,
containerHttpPort: number,
@@ -662,6 +615,7 @@ class ServiceManager {
ports: IAppPort[],
repoInfo: RepoInfo,
customNginxConfig: string,
+ redirectDomain: string,
preDeployFunction: string,
serviceUpdateOverride: string,
websocketSupport: boolean,
@@ -673,6 +627,8 @@ class ServiceManager {
let serviceName: string
+ let existingAppDefinition: IAppDef
+
const checkIfNodeIdExists = function (nodeIdToCheck: string) {
return dockerApi.getNodesInfo().then(function (nodeInfo) {
for (let i = 0; i < nodeInfo.length; i++) {
@@ -689,6 +645,16 @@ class ServiceManager {
}
return Promise.resolve()
+ .then(function () {
+ projectId = `${projectId || ''}`.trim()
+ if (projectId) {
+ return dataStore
+ .getProjectsDataStore()
+ .getProject(projectId)
+
+ // if project is not found, it will throw an error
+ }
+ })
.then(function () {
return self.ensureNotBuilding(appName)
})
@@ -748,7 +714,7 @@ class ServiceManager {
}
})
.then(function () {
- serviceUpdateOverride = !!serviceUpdateOverride
+ serviceUpdateOverride = serviceUpdateOverride
? `${serviceUpdateOverride}`.trim()
: ''
if (!serviceUpdateOverride) {
@@ -764,15 +730,22 @@ class ServiceManager {
}
})
.then(function () {
+ return dataStore.getAppsDataStore().getAppDefinition(appName)
+ })
+ .then(function (appDef) {
+ existingAppDefinition = appDef
+
return dataStore
.getAppsDataStore()
.updateAppDefinitionInDb(
appName,
+ projectId,
description,
instanceCount,
captainDefinitionRelativeFilePath,
envVars,
volumes,
+ tags,
nodeId,
notExposeAsWebApp,
containerHttpPort,
@@ -782,6 +755,7 @@ class ServiceManager {
repoInfo,
self.authenticator,
customNginxConfig,
+ redirectDomain,
preDeployFunction,
serviceUpdateOverride,
websocketSupport,
@@ -791,8 +765,62 @@ class ServiceManager {
.then(function () {
return self.ensureServiceInitedAndUpdated(appName)
})
- .then(function () {
- return self.reloadLoadBalancer()
+ .catch(function (error) {
+ if (
+ error &&
+ error.captainErrorType ===
+ ApiStatusCodes.STATUS_ERROR_NGINX_VALIDATION_FAILED
+ ) {
+ // Revert back to the old definition because the nginx config is invalid
+ if (existingAppDefinition) {
+ Logger.d(
+ `nginx validation failed, reverting configs for: ${appName}`
+ )
+ return dataStore
+ .getAppsDataStore()
+ .updateAppDefinitionInDb(
+ appName,
+ existingAppDefinition.projectId,
+ existingAppDefinition.description,
+ existingAppDefinition.instanceCount,
+ existingAppDefinition.captainDefinitionRelativeFilePath,
+ existingAppDefinition.envVars,
+ existingAppDefinition.volumes,
+ existingAppDefinition.tags || [],
+ existingAppDefinition.nodeId || '',
+ existingAppDefinition.notExposeAsWebApp,
+ existingAppDefinition.containerHttpPort || 80,
+ existingAppDefinition.httpAuth,
+ existingAppDefinition.forceSsl,
+ existingAppDefinition.ports,
+ existingAppDefinition.appPushWebhook
+ ?.repoInfo || {
+ repo: '',
+ branch: '',
+ user: '',
+ password: '',
+ },
+ self.authenticator,
+ existingAppDefinition.customNginxConfig || '',
+ existingAppDefinition.redirectDomain || '',
+ existingAppDefinition.preDeployFunction || '',
+ existingAppDefinition.serviceUpdateOverride ||
+ '',
+ existingAppDefinition.websocketSupport,
+ existingAppDefinition.appDeployTokenConfig || {
+ enabled: false,
+ }
+ )
+ .then(function () {
+ self.reloadLoadBalancer()
+ })
+ .then(function () {
+ throw error
+ })
+ }
+ }
+
+ throw error
})
}
@@ -808,7 +836,7 @@ class ServiceManager {
const activeBuilds = this.activeOrScheduledBuilds
for (const appName in activeBuilds) {
- if (!!activeBuilds[appName]) {
+ if (activeBuilds[appName]) {
return appName
}
}
@@ -822,13 +850,21 @@ class ServiceManager {
return {
isAppBuilding: self.isAppBuilding(appName),
logs: self.buildLogsManager.getAppBuildLogs(appName).getLogs(),
- isBuildFailed: self.buildLogsManager.getAppBuildLogs(appName)
- .isBuildFailed,
+ isBuildFailed:
+ self.buildLogsManager.getAppBuildLogs(appName).isBuildFailed,
}
}
logBuildFailed(appName: string, error: string) {
+ const self = this
error = (error || '') + ''
+
+ self.eventLogger.trackEvent(
+ CapRoverEventFactory.create(CapRoverEventType.AppBuildFailed, {
+ appName,
+ error: error.substring(0, 1000),
+ })
+ )
this.buildLogsManager.getAppBuildLogs(appName).onBuildFailed(error)
}
@@ -960,9 +996,7 @@ class ServiceManager {
reloadLoadBalancer() {
Logger.d('Updating Load Balancer - ServiceManager')
const self = this
- return self.loadBalancerManager.rePopulateNginxConfigFile(
- self.dataStore
- )
+ return self.loadBalancerManager.rePopulateNginxConfigFile()
}
}
diff --git a/src/user/TemplateHelper.ts b/src/user/TemplateHelper.ts
index fc1de8ff6..70b4573b4 100644
--- a/src/user/TemplateHelper.ts
+++ b/src/user/TemplateHelper.ts
@@ -1,7 +1,6 @@
import fs = require('fs-extra')
import ApiStatusCodes from '../api/ApiStatusCodes'
import { ITemplate } from '../models/OtherTypes'
-import TemplateHelperVersionPrinter from '../utils/TemplateHelperVersionPrinter'
class TemplateHelper {
private templates: ITemplate[]
@@ -42,11 +41,9 @@ class TemplateHelper {
this.templates = templates
// Change to true if you want tags to be printed on screen upon start up (after 40 sec ish)
- if (false) {
- new TemplateHelperVersionPrinter().printAvailableImageTagsForReadme(
- this.templates
- )
- }
+ // new TemplateHelperVersionPrinter().printAvailableImageTagsForReadme(
+ // this.templates
+ // )
}
getTemplateFromTemplateName(templateName: string) {
diff --git a/src/user/ThemeManager.ts b/src/user/ThemeManager.ts
new file mode 100644
index 000000000..98677821c
--- /dev/null
+++ b/src/user/ThemeManager.ts
@@ -0,0 +1,258 @@
+import ApiStatusCodes from '../api/ApiStatusCodes'
+import DataStore from '../datastore/DataStore'
+import DataStoreProvider from '../datastore/DataStoreProvider'
+import CapRoverTheme from '../models/CapRoverTheme'
+import CaptainConstants from '../utils/CaptainConstants'
+import Logger from '../utils/Logger'
+import Utils from '../utils/Utils'
+import fs = require('fs-extra')
+
+const builtInThemes = [] as CapRoverTheme[]
+
+/**
+ * Parses a string containing themed configuration fields into a JSON object.
+ * Each field must start with "###CapRoverTheme." followed by the field name and its content.
+ * The function dynamically identifies and extracts these fields, preserving their original formatting.
+ * Field names are converted to lowercase to serve as keys in the resulting JSON object,
+ * with the corresponding content as the values, maintaining any internal formatting.
+ *
+ * @param {string} input - Themed configuration string.
+ * @return {Object} JSON object with keys representing field names and values containing the respective content.
+ *
+ * Example:
+ * Input:
+ * "###CapRoverTheme.name:
+ * Green Arrow
+ * ###CapRoverTheme.content:
+ * { colorA: '#fff',
+ * colorB: '#fff'
+ * }"
+ * Output:
+ * { name: "Green Arrow", content: "{ colorA: '#fff' , colorB: '#fff' }" }
+ */
+
+function parseCapRoverTheme(input: string) {
+ const result = {} as { [id: string]: string }
+ const lines = input.split('\n')
+ let currentField = undefined as string | undefined
+
+ lines.forEach((line, index) => {
+ if (line.startsWith('###CapRoverTheme.')) {
+ // Calculate the start position for the field name and remove the prefix '###CapRoverTheme.'
+ const start = line.indexOf('.') + 1
+ currentField = line.substring(start, line.length - 1).trim()
+ result[currentField] = ''
+ } else if (currentField) {
+ // Check if we already have content for the current field to add a newline
+ if (result[currentField].length > 0) {
+ result[currentField] += '\n' + line
+ } else {
+ result[currentField] += line
+ }
+ }
+ })
+
+ for (const key in result) {
+ result[key] = result[key].trim()
+ }
+
+ return result
+}
+
+function populateBuiltInThemes() {
+ const themesDirectory = __dirname + '/../../template/themes'
+ const rawContent = [] as string[]
+
+ const files = fs.readdirSync(themesDirectory).map((it) => {
+ return {
+ fileName: it,
+ number: parseInt(it.split('-')[0]),
+ }
+ })
+
+ files.sort((a, b) => a.number - b.number)
+
+ files
+ .map((it) => it.fileName)
+ .forEach((file) => {
+ const fileContent = fs.readFileSync(
+ `${themesDirectory}/${file}`,
+ 'utf8'
+ )
+ rawContent.push(fileContent)
+ })
+
+ rawContent.forEach((it) => {
+ const parsedTheme = {
+ ...parseCapRoverTheme(it),
+ builtIn: true,
+ } as CapRoverTheme
+ builtInThemes.push(parsedTheme)
+ })
+}
+
+populateBuiltInThemes()
+
+export class ThemeManager {
+ constructor(private dataStore: DataStore) {}
+
+ getAllThemes() {
+ const self = this
+
+ return Promise.resolve() //
+ .then(function () {
+ return self.dataStore.getThemes()
+ })
+ .then(function (themes) {
+ return [...builtInThemes, ...themes]
+ })
+ }
+
+ deleteTheme(themeName: string) {
+ const self = this
+ return Promise.resolve() //
+ .then(function () {
+ return Promise.all([
+ self.getAllThemes(),
+ self.dataStore.getCurrentThemeName(),
+ ])
+ })
+ .then(function ([themesFetched, currentTheme]) {
+ const themes = Utils.copyObject(themesFetched)
+ const newThemes = [] as CapRoverTheme[]
+ themes.forEach((it) => {
+ if (it.name !== themeName) {
+ newThemes.push(it)
+ } else if (it.builtIn) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_PARAMETER,
+ 'Cannot delete a built-in theme'
+ )
+ }
+ })
+
+ if (themes.length === newThemes.length) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_PARAMETER,
+ 'Theme not found'
+ )
+ }
+
+ return Promise.resolve()
+ .then(function () {
+ if (currentTheme && currentTheme === themeName) {
+ return self.dataStore.setCurrentTheme('')
+ }
+ })
+ .then(function () {
+ return self.dataStore.deleteTheme(themeName)
+ })
+ })
+ }
+
+ updateTheme(oldName: string, theme: CapRoverTheme) {
+ const self = this
+ return Promise.resolve()
+ .then(function () {
+ theme.builtIn = false
+ return self.getAllThemes()
+ })
+ .then(function (themesFetched) {
+ const themes = Utils.copyObject(themesFetched)
+ const idx = themes.findIndex((t) => t.name === oldName)
+ if (!oldName) {
+ // new theme
+
+ if (themes.some((t) => t.name === theme.name)) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_PARAMETER,
+ 'Wanted to store a new theme, but it already exists with the same name'
+ )
+ }
+
+ themes.push(theme)
+ } else if (idx >= 0) {
+ // replacing existing theme
+
+ if (themes[idx].builtIn) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_PARAMETER,
+ 'Cannot edit a built-in theme'
+ )
+ }
+
+ themes[idx] = theme
+ } else {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_PARAMETER,
+ 'Theme not found'
+ )
+ }
+
+ return self.dataStore
+ .saveThemes(themes) //
+ .then(() => {
+ return self.dataStore.setCurrentTheme(theme.name)
+ })
+ })
+ }
+
+ setCurrent(themeName: string) {
+ const self = this
+
+ return Promise.resolve()
+ .then(function () {
+ return self.getAllThemes()
+ })
+ .then(function (themes) {
+ if (!themeName || themes.some((it) => it.name === themeName))
+ return self.dataStore.setCurrentTheme(themeName)
+
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_PARAMETER,
+ 'Theme not found'
+ )
+ })
+ }
+
+ getCurrentTheme(): Promise {
+ const self = this
+
+ return Promise.resolve()
+ .then(function () {
+ return Promise.all([
+ self.getAllThemes(),
+ self.dataStore.getCurrentThemeName(),
+ ])
+ })
+ .then(function ([themes, themeName]) {
+ if (!themeName) return undefined
+
+ const theme = themes.find((it) => it.name === themeName)
+
+ if (!theme) {
+ Logger.e(
+ new Error(
+ 'Theme name was provided but could not be found: ' +
+ themeName
+ )
+ )
+ }
+
+ return theme
+ })
+ }
+}
+
+export class ThemeManagerPublic {
+ private static themeManagerPublic = new ThemeManager(
+ DataStoreProvider.getDataStore(CaptainConstants.rootNameSpace)
+ )
+
+ getCurrentTheme() {
+ return Promise.resolve() //
+ .then(function () {
+ return ThemeManagerPublic.themeManagerPublic.getCurrentTheme()
+ })
+ }
+}
diff --git a/src/user/UserManager.ts b/src/user/UserManager.ts
new file mode 100644
index 000000000..3a9037805
--- /dev/null
+++ b/src/user/UserManager.ts
@@ -0,0 +1,39 @@
+import DataStore from '../datastore/DataStore'
+import DataStoreProvider from '../datastore/DataStoreProvider'
+import DockerApi from '../docker/DockerApi'
+import Authenticator from './Authenticator'
+import { EventLogger, EventLoggerFactory } from './events/EventLogger'
+import FeatureFlags from './FeatureFlags'
+import OtpAuthenticator from './pro/OtpAuthenticator'
+import ProManager from './pro/ProManager'
+import ServiceManager from './ServiceManager'
+import CaptainManager from './system/CaptainManager'
+
+export class UserManager {
+ readonly datastore: DataStore
+ readonly proManager: ProManager
+ readonly serviceManager: ServiceManager
+ readonly otpAuthenticator: OtpAuthenticator
+ eventLogger: EventLogger
+ constructor(namespace: string) {
+ this.datastore = DataStoreProvider.getDataStore(namespace)
+ this.proManager = new ProManager(
+ this.datastore.getProDataStore(),
+ FeatureFlags.get(this.datastore)
+ )
+ this.eventLogger = EventLoggerFactory.get(this.proManager).getLogger()
+ this.serviceManager = ServiceManager.get(
+ namespace,
+ Authenticator.getAuthenticator(namespace),
+ this.datastore,
+ DockerApi.get(),
+ CaptainManager.get().getLoadBalanceManager(),
+ this.eventLogger,
+ CaptainManager.get().getDomainResolveChecker()
+ )
+ this.otpAuthenticator = new OtpAuthenticator(
+ this.datastore,
+ this.proManager
+ )
+ }
+}
diff --git a/src/user/UserManagerProvider.ts b/src/user/UserManagerProvider.ts
new file mode 100644
index 000000000..be11cb8b0
--- /dev/null
+++ b/src/user/UserManagerProvider.ts
@@ -0,0 +1,27 @@
+import ApiStatusCodes from '../api/ApiStatusCodes'
+import { IHashMapGeneric } from '../models/ICacheGeneric'
+import CaptainConstants from '../utils/CaptainConstants'
+import { UserManager } from './UserManager'
+
+const cache: IHashMapGeneric = {}
+export class UserManagerProvider {
+ static get(namespace: string) {
+ namespace = `${namespace || ''}`.trim()
+ if (!namespace) {
+ throw new Error('NameSpace is empty')
+ }
+
+ if (namespace !== CaptainConstants.rootNameSpace) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.STATUS_ERROR_GENERIC,
+ 'Namespace unknown'
+ )
+ }
+
+ if (!cache[namespace]) {
+ cache[namespace] = new UserManager(namespace)
+ }
+
+ return cache[namespace]
+ }
+}
diff --git a/src/user/events/EventLogger.ts b/src/user/events/EventLogger.ts
new file mode 100644
index 000000000..550e1f9c8
--- /dev/null
+++ b/src/user/events/EventLogger.ts
@@ -0,0 +1,41 @@
+import ProManager from '../pro/ProManager'
+import { AnalyticsLogger } from './emitter/AnalyticsLogger'
+import { ProEmitter } from './emitter/ProEmitter'
+import { ICapRoverEvent } from './ICapRoverEvent'
+import { IEventsEmitter } from './IEventsEmitter'
+
+export class EventLogger {
+ constructor(private eventEmitters: IEventsEmitter[]) {}
+
+ trackEvent(event: ICapRoverEvent) {
+ this.eventEmitters.forEach((ee) => {
+ if (ee.isEventApplicable(event)) {
+ ee.emitEvent(event)
+ }
+ })
+ }
+}
+
+export class EventLoggerFactory {
+ private static instance: EventLoggerFactory
+
+ private logger: EventLogger
+
+ constructor(proManger: ProManager) {
+ this.logger = new EventLogger([
+ new AnalyticsLogger(proManger),
+ new ProEmitter(proManger),
+ ])
+ }
+
+ static get(proManger: ProManager) {
+ if (!EventLoggerFactory.instance) {
+ EventLoggerFactory.instance = new EventLoggerFactory(proManger)
+ }
+ return EventLoggerFactory.instance
+ }
+
+ getLogger() {
+ return this.logger
+ }
+}
diff --git a/src/user/events/ICapRoverEvent.ts b/src/user/events/ICapRoverEvent.ts
new file mode 100644
index 000000000..05f1286ae
--- /dev/null
+++ b/src/user/events/ICapRoverEvent.ts
@@ -0,0 +1,25 @@
+export enum CapRoverEventType {
+ UserLoggedIn = 'UserLoggedIn',
+ AppBuildSuccessful = 'AppBuildSuccessful',
+ AppBuildFailed = 'AppBuildFailed',
+ InstanceStarted = 'InstanceStarted',
+ OneClickAppDetailsFetched = 'OneClickAppDetailsFetched',
+ OneClickAppListFetched = 'OneClickAppListFetched',
+}
+
+export interface ICapRoverEvent {
+ eventType: CapRoverEventType
+ eventMetadata: any
+}
+
+export class CapRoverEventFactory {
+ static create(
+ eventType: CapRoverEventType,
+ eventMetadata: any
+ ): ICapRoverEvent {
+ return {
+ eventType,
+ eventMetadata,
+ }
+ }
+}
diff --git a/src/user/events/IEventsEmitter.ts b/src/user/events/IEventsEmitter.ts
new file mode 100644
index 000000000..e97a0cd02
--- /dev/null
+++ b/src/user/events/IEventsEmitter.ts
@@ -0,0 +1,6 @@
+import { ICapRoverEvent } from './ICapRoverEvent'
+
+export abstract class IEventsEmitter {
+ abstract isEventApplicable(event: ICapRoverEvent): boolean
+ abstract emitEvent(event: ICapRoverEvent): void
+}
diff --git a/src/user/events/emitter/AnalyticsLogger.ts b/src/user/events/emitter/AnalyticsLogger.ts
new file mode 100644
index 000000000..5c4f1f77d
--- /dev/null
+++ b/src/user/events/emitter/AnalyticsLogger.ts
@@ -0,0 +1,32 @@
+import EnvVars from '../../../utils/EnvVars'
+import ProManager from '../../pro/ProManager'
+import { CapRoverEventType, ICapRoverEvent } from '../ICapRoverEvent'
+import { IEventsEmitter } from '../IEventsEmitter'
+
+export class AnalyticsLogger extends IEventsEmitter {
+ constructor(private proManager: ProManager) {
+ super()
+ }
+ isEventApplicable(event: ICapRoverEvent): boolean {
+ if (EnvVars.CAPROVER_DISABLE_ANALYTICS) {
+ return false
+ }
+
+ // some events aren't appropriate for usage stats
+ switch (event.eventType) {
+ case CapRoverEventType.AppBuildFailed:
+ case CapRoverEventType.AppBuildSuccessful:
+ case CapRoverEventType.UserLoggedIn: // perhaps anonymize the IP address and send it in the future
+ return false
+
+ case CapRoverEventType.InstanceStarted:
+ case CapRoverEventType.OneClickAppDetailsFetched:
+ case CapRoverEventType.OneClickAppListFetched:
+ return true
+ }
+ }
+
+ emitEvent(event: ICapRoverEvent): void {
+ this.proManager.reportUnAuthAnalyticsEvent(event)
+ }
+}
diff --git a/src/user/events/emitter/ProEmitter.ts b/src/user/events/emitter/ProEmitter.ts
new file mode 100644
index 000000000..68cfb7bf0
--- /dev/null
+++ b/src/user/events/emitter/ProEmitter.ts
@@ -0,0 +1,25 @@
+import ProManager from '../../pro/ProManager'
+import { ICapRoverEvent } from '../ICapRoverEvent'
+import { IEventsEmitter } from '../IEventsEmitter'
+
+export class ProEmitter extends IEventsEmitter {
+ constructor(private proManager: ProManager) {
+ super()
+ }
+ isEventApplicable(event: ICapRoverEvent): boolean {
+ return this.proManager.isEventEnabledForProReporting(event)
+ }
+
+ emitEvent(event: ICapRoverEvent): void {
+ const self = this
+ Promise.resolve()
+ .then(function () {
+ return self.proManager.getState()
+ })
+ .then(function (state) {
+ if (state.isSubscribed) {
+ self.proManager.reportEvent(event)
+ }
+ })
+ }
+}
diff --git a/src/user/pro/OtpAuthenticator.ts b/src/user/pro/OtpAuthenticator.ts
new file mode 100644
index 000000000..597f2c329
--- /dev/null
+++ b/src/user/pro/OtpAuthenticator.ts
@@ -0,0 +1,100 @@
+import ApiStatusCodes from '../../api/ApiStatusCodes'
+import DataStore from '../../datastore/DataStore'
+import { TwoFactorAuthResponse } from '../../models/IProFeatures'
+import ProManager from './ProManager'
+
+export default class OtpAuthenticator {
+ constructor(
+ private dataStore: DataStore,
+ private proManager: ProManager
+ ) {}
+
+ set2fa(
+ doEnable: boolean,
+ tokenSuppliedByClient: string
+ ): Promise {
+ tokenSuppliedByClient = (tokenSuppliedByClient || '').trim()
+ const self = this
+
+ return Promise.resolve() //
+ .then(function () {
+ return self.dataStore.getProDataStore().isOtpEnabled()
+ })
+ .then(function (isEnabledNow) {
+ if (isEnabledNow === doEnable) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.STATUS_ERROR_ALREADY_EXIST,
+ doEnable
+ ? 'Two factor was already enabled'
+ : 'Two factor was already disabled'
+ )
+ }
+
+ if (!doEnable) {
+ // disabling is easy, no checks, just disable in DB
+ return self.dataStore
+ .getProDataStore()
+ .setOtpEnabled(false)
+ .then(function () {
+ return { isEnabled: false }
+ })
+ }
+
+ // enabling
+
+ if (!tokenSuppliedByClient) {
+ return self.proManager
+ .regenerateSecret() //
+ .then(function (otpPath) {
+ return { isEnabled: false, otpPath }
+ })
+ } else {
+ // if token is present, compare against the secret
+
+ return self.proManager
+ .verifyToken(tokenSuppliedByClient) //
+ .then(function (isTokenValid) {
+ if (!isTokenValid) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_OPERATION,
+ 'Entered token is invalid!'
+ )
+ }
+
+ return self.dataStore
+ .getProDataStore()
+ .setOtpEnabled(true)
+ .then(function () {
+ return { isEnabled: true }
+ })
+ })
+ }
+ })
+ }
+
+ is2FactorEnabled(): Promise {
+ const self = this
+ return Promise.resolve() //
+ .then(function () {
+ return self.dataStore.getProDataStore().isOtpEnabled()
+ })
+ .then(function (isEnabled) {
+ return !!isEnabled
+ })
+ }
+
+ isOtpTokenValid(providedToken: string) {
+ const self = this
+ return Promise.resolve()
+ .then(function () {
+ return self.dataStore.getProDataStore().isOtpEnabled()
+ })
+ .then(function (isEnabled) {
+ if (!isEnabled) {
+ return true
+ }
+
+ return self.proManager.verifyToken(providedToken)
+ })
+ }
+}
diff --git a/src/user/pro/ProManager.ts b/src/user/pro/ProManager.ts
new file mode 100644
index 000000000..5bfefaf11
--- /dev/null
+++ b/src/user/pro/ProManager.ts
@@ -0,0 +1,283 @@
+import axios from 'axios'
+import ApiStatusCodes from '../../api/ApiStatusCodes'
+import ProDataStore from '../../datastore/ProDataStore'
+import { IProConfig, IProFeatures } from '../../models/IProFeatures'
+import CaptainConstants from '../../utils/CaptainConstants'
+import EnvVars from '../../utils/EnvVars'
+import Logger from '../../utils/Logger'
+import FeatureFlags from '../FeatureFlags'
+import { CapRoverEventType, ICapRoverEvent } from './../events/ICapRoverEvent'
+
+type API_METHOD = 'post' | 'get'
+
+const API_KEY_HEADER = 'x-api-key'
+
+export default class ProManager {
+ private static activeApiIndex = Math.floor(Math.random() * 2)
+
+ constructor(
+ private proDataStore: ProDataStore,
+ private featureFlagsProvider: FeatureFlags
+ ) {
+ //
+ }
+
+ private static incrementApiDomain() {
+ this.activeApiIndex++
+ }
+
+ private static getBaseUrl() {
+ return (
+ CaptainConstants.configs.proApiDomains[
+ ProManager.activeApiIndex %
+ CaptainConstants.configs.proApiDomains.length
+ ] + '/api/v1'
+ )
+ }
+
+ private callApi(
+ method: API_METHOD,
+ path: string,
+ data: any,
+ apiKeyOverride?: string
+ ) {
+ const self = this
+ return Promise.resolve()
+ .then(function () {
+ return self.getHeaders(apiKeyOverride)
+ })
+ .then(function (headers) {
+ return axios({
+ method: method,
+ data: data,
+ url: ProManager.getBaseUrl() + path,
+ headers: headers,
+ })
+ })
+ .then(function (axiosResponse) {
+ return axiosResponse.data // actual HTTP response data
+ })
+ .then(function (data) {
+ if (data.status === 1100) {
+ return self.proDataStore
+ .clearAllProConfigs() //
+ .then(function () {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.STATUS_ERROR_PRO_API_KEY_INVALIDATED,
+ 'Invalid API Key, removing API Key from the config'
+ )
+ })
+ }
+
+ if (data.status && data.status !== 100) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.STATUS_ERROR_GENERIC,
+ data.description
+ )
+ }
+
+ if (!data.data) throw new Error('Unexpected Pro API response')
+ return data.data // pulling out data part of CapRover Pro API response
+ })
+ .catch((err) => {
+ Logger.e(err)
+
+ if (err.captainErrorType) {
+ throw err
+ }
+
+ // only switch to the backup instance if the main instance is throwing unknown error
+ ProManager.incrementApiDomain()
+
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.STATUS_ERROR_GENERIC,
+ `Pro API failed`
+ )
+ })
+ }
+
+ private getHeaders(apiKeyOverride?: string): any {
+ const self = this
+ return Promise.resolve()
+ .then(function () {
+ return apiKeyOverride
+ ? apiKeyOverride
+ : self.proDataStore.getApiKey()
+ })
+ .then(function (apiKey) {
+ return self.proDataStore
+ .getInstallationId()
+ .then(function (installationId) {
+ const allHeaders = {
+ 'x-caprover-version':
+ CaptainConstants.configs.version,
+ 'x-installation-id': installationId,
+ } as any
+
+ allHeaders[API_KEY_HEADER] = apiKey
+
+ return allHeaders
+ })
+ })
+ }
+
+ getState(): Promise {
+ const self = this
+ return Promise.resolve()
+ .then(function () {
+ return self.proDataStore.getApiKey()
+ })
+ .then(function (apiKey) {
+ const flags = self.featureFlagsProvider.getFeatureFlags()
+ return {
+ isSubscribed: !!apiKey,
+ isFeatureFlagEnabled:
+ !!EnvVars.CAPTAIN_IS_DEBUG || //
+ !!apiKey || // if API key is there, assume feature flag is enabled
+ !!EnvVars.FORCE_ENABLE_PRO || //
+ (flags && flags[FeatureFlags.IS_PRO_ENABLED]),
+ }
+ })
+ }
+
+ verifyToken(tokenSuppliedByClient: string) {
+ const self = this
+ return Promise.resolve()
+ .then(function () {
+ return self.callApi('post', `/caprover/otp/validate`, {
+ token: tokenSuppliedByClient,
+ })
+ })
+ .then(function (data) {
+ return !!data.isValid
+ })
+ }
+
+ validateApiKey(apiKey: string, instanceUrl: string) {
+ const self = this
+ return Promise.resolve()
+ .then(function () {
+ return self.callApi(
+ 'post',
+ `/caprover/claim`,
+ {
+ instanceUrl,
+ },
+ apiKey
+ )
+ })
+ .then(function (data) {
+ return !!data.isApiKeyOk
+ })
+ }
+
+ regenerateSecret() {
+ const self = this
+ return Promise.resolve()
+ .then(function () {
+ return self.callApi('post', `/caprover/otp/secret`, {})
+ })
+ .then(function (data) {
+ return data ? `${data.otpPath || ''}` : ''
+ })
+ }
+
+ getConfig(): Promise {
+ const self = this
+ return Promise.resolve().then(function () {
+ return self.proDataStore.getConfig()
+ })
+ }
+ updateConfig(proConfigs: IProConfig): Promise {
+ const self = this
+ return Promise.resolve() //
+ .then(function () {
+ return self.getConfig()
+ })
+ .then(function (oldConfig) {
+ return self.proDataStore
+ .updateConfig(proConfigs)
+ .then(function () {
+ return self.callApi('post', `/caprover/configs`, {
+ proConfigs: proConfigs,
+ })
+ })
+ .catch((err) => {
+ Logger.e(err)
+ if (
+ err.captainErrorType ===
+ ApiStatusCodes.STATUS_ERROR_PRO_API_KEY_INVALIDATED
+ ) {
+ return // do not revert the config if the API key is invalidated
+ }
+ return self.proDataStore
+ .updateConfig(oldConfig)
+ .then(function () {
+ throw err
+ })
+ })
+ })
+ .then(function () {
+ //
+ })
+ }
+
+ reportEvent(event: ICapRoverEvent) {
+ const self = this
+ return Promise.resolve()
+ .then(function () {
+ return self.callApi('post', `/caprover/event`, { event })
+ })
+ .catch((err) => {
+ Logger.e(err)
+ })
+ }
+
+ isEventEnabledForProReporting(event: ICapRoverEvent): boolean {
+ switch (event.eventType) {
+ case CapRoverEventType.AppBuildFailed:
+ case CapRoverEventType.UserLoggedIn:
+ case CapRoverEventType.AppBuildSuccessful:
+ return true
+
+ case CapRoverEventType.InstanceStarted:
+ case CapRoverEventType.OneClickAppDetailsFetched:
+ case CapRoverEventType.OneClickAppListFetched:
+ return false
+ }
+ }
+
+ reportUnAuthAnalyticsEvent(event: ICapRoverEvent) {
+ const self = this
+ return Promise.resolve()
+ .then(function () {
+ return self.getHeaders()
+ })
+ .then(function (headers) {
+ headers[API_KEY_HEADER] = ''
+ return axios({
+ method: 'post',
+ data: { event },
+ url: `${CaptainConstants.configs.analyticsDomain}/api/v1/analytics/event`,
+ headers: headers,
+ })
+ })
+ .then(function (axiosResponse) {
+ return axiosResponse.data // actual HTTP response data
+ })
+ .then(function (data) {
+ if (data.status && data.status !== 100) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.STATUS_ERROR_GENERIC,
+ data.description
+ )
+ }
+
+ if (!data.data) throw new Error('Unexpected Pro API response')
+ return data.data // pulling out data part of CapRover Pro API response
+ })
+ .catch((err) => {
+ Logger.e(err, 'reportUnAuthAnalyticsEvent failed!')
+ })
+ }
+}
diff --git a/src/user/pro/ProManagerUtils.ts b/src/user/pro/ProManagerUtils.ts
new file mode 100644
index 000000000..413025224
--- /dev/null
+++ b/src/user/pro/ProManagerUtils.ts
@@ -0,0 +1,33 @@
+import {
+ IProConfig,
+ ProAlertActionType,
+ ProAlertEvent,
+} from '../../models/IProFeatures'
+
+export default class ProManagerUtils {
+ public static ensureProConfigType(pc: any) {
+ pc = pc || {}
+ const proConfig: IProConfig = {
+ alerts: [],
+ }
+
+ if (pc.alerts && Array.isArray(pc.alerts)) {
+ const alerts = pc.alerts as any[]
+ alerts.forEach((it) => {
+ const event = `${it.event}`.trim()
+ if (event) {
+ proConfig.alerts.push({
+ event: event as ProAlertEvent,
+ action: {
+ actionType:
+ `${it.action.actionType}`.trim() as ProAlertActionType,
+ metadata: it.action.metadata,
+ },
+ })
+ }
+ })
+ }
+
+ return proConfig
+ }
+}
diff --git a/src/user/system/BackupManager.ts b/src/user/system/BackupManager.ts
index d94fe2bdc..0b3b12a70 100644
--- a/src/user/system/BackupManager.ts
+++ b/src/user/system/BackupManager.ts
@@ -1,13 +1,16 @@
import SshClientImport = require('ssh2')
import { exec } from 'child_process'
import * as fs from 'fs-extra'
-import * as moment from 'moment'
+import moment from 'moment'
import * as path from 'path'
import * as tar from 'tar'
import ApiStatusCodes from '../../api/ApiStatusCodes'
import DockerApi from '../../docker/DockerApi'
import DockerUtils from '../../docker/DockerUtils'
+import { IAppDefSaved } from '../../models/AppDefinition'
import { BackupMeta, RestoringInfo } from '../../models/BackupMeta'
+import { IHashMapGeneric } from '../../models/ICacheGeneric'
+import { ServerDockerInfo } from '../../models/ServerDockerInfo'
import CaptainConstants from '../../utils/CaptainConstants'
import Logger from '../../utils/Logger'
import Utils from '../../utils/Utils'
@@ -205,7 +208,8 @@ export default class BackupManager {
.then(function () {
return fs.move(
CaptainConstants.restoreDirectoryPath + '/data',
- CaptainConstants.captainDataDirectory
+ CaptainConstants.captainDataDirectory,
+ { overwrite: true }
)
})
.then(function () {
@@ -334,7 +338,7 @@ export default class BackupManager {
if (n.newIp === CURRENT_NODE_DONT_CHANGE) return
- if (!!n.newIp) {
+ if (n.newIp) {
if (n.newIp === IP_PLACEHOLDER) {
Logger.d(
'*** MULTI-NODE RESTORATION DETECTED ***'
@@ -689,7 +693,7 @@ export default class BackupManager {
['./']
)
.then(function () {
- let fileSizeInMb = Math.ceil(
+ const fileSizeInMb = Math.ceil(
fs.statSync(tarFilePath).size / 1000000
)
@@ -717,13 +721,16 @@ export default class BackupManager {
)}-${now.valueOf()}`}${`-ip-${mainIP}.tar`}`
fs.moveSync(tarFilePath, newName)
- setTimeout(() => {
- try {
- fs.removeSync(newName)
- } catch (err) {
- // nom nom
- }
- }, 1000 * 3600 * 2)
+ setTimeout(
+ () => {
+ try {
+ fs.removeSync(newName)
+ } catch (err) {
+ // nom nom
+ }
+ },
+ 1000 * 3600 * 2
+ )
return Authenticator.getAuthenticator(
namespace
diff --git a/src/user/system/CaptainManager.ts b/src/user/system/CaptainManager.ts
index a61bf24ee..a18e7f225 100644
--- a/src/user/system/CaptainManager.ts
+++ b/src/user/system/CaptainManager.ts
@@ -3,15 +3,24 @@ import ApiStatusCodes from '../../api/ApiStatusCodes'
import DataStore from '../../datastore/DataStore'
import DataStoreProvider from '../../datastore/DataStoreProvider'
import DockerApi from '../../docker/DockerApi'
+import { GoAccessInfo } from '../../models/GoAccessInfo'
import { IRegistryInfo, IRegistryTypes } from '../../models/IRegistryInfo'
+import { NetDataInfo } from '../../models/NetDataInfo'
import CaptainConstants from '../../utils/CaptainConstants'
import Logger from '../../utils/Logger'
-import MigrateCaptainDuckDuck from '../../utils/MigrateCaptainDuckDuck'
import Utils from '../../utils/Utils'
import Authenticator from '../Authenticator'
+import FeatureFlags from '../FeatureFlags'
import ServiceManager from '../ServiceManager'
+import { EventLoggerFactory } from '../events/EventLogger'
+import {
+ CapRoverEventFactory,
+ CapRoverEventType,
+} from '../events/ICapRoverEvent'
+import ProManager from '../pro/ProManager'
import BackupManager from './BackupManager'
import CertbotManager from './CertbotManager'
+import DiskCleanupManager from './DiskCleanupManager'
import DomainResolveChecker from './DomainResolveChecker'
import LoadBalancerManager from './LoadBalancerManager'
import SelfHostedDockerRegistry from './SelfHostedDockerRegistry'
@@ -34,6 +43,7 @@ class CaptainManager {
private certbotManager: CertbotManager
private loadBalancerManager: LoadBalancerManager
private domainResolveChecker: DomainResolveChecker
+ private diskCleanupManager: DiskCleanupManager
private dockerRegistry: SelfHostedDockerRegistry
private backupManager: BackupManager
private myNodeId: string | undefined
@@ -61,6 +71,10 @@ class CaptainManager {
this.loadBalancerManager,
this.certbotManager
)
+ this.diskCleanupManager = new DiskCleanupManager(
+ this.dataStore,
+ dockerApi
+ )
this.myNodeId = undefined
this.inited = false
this.waitUntilRestarted = false
@@ -131,12 +145,16 @@ class CaptainManager {
.then(function () {
return fs.ensureFile(CaptainConstants.baseNginxConfigPath)
})
+ .then(function () {
+ return fs.ensureDir(CaptainConstants.nginxSharedLogsPathOnHost)
+ })
.then(function () {
return fs.ensureDir(CaptainConstants.registryPathOnHost)
})
.then(function () {
return dockerApi.ensureOverlayNetwork(
- CaptainConstants.captainNetworkName
+ CaptainConstants.captainNetworkName,
+ CaptainConstants.configs.overlayNetworkOverride
)
})
.then(function () {
@@ -198,18 +216,6 @@ class CaptainManager {
.then(function () {
return dataStore.setEncryptionSalt(self.getCaptainSalt())
})
- .then(function () {
- return new MigrateCaptainDuckDuck(
- dataStore,
- Authenticator.getAuthenticator(dataStore.getNameSpace())
- )
- .migrateIfNeeded()
- .then(function (migrationPerformed) {
- if (!!migrationPerformed) {
- return self.resetSelf()
- }
- })
- })
.then(function () {
return loadBalancerManager.init(myNodeId, dataStore)
})
@@ -226,7 +232,7 @@ class CaptainManager {
}
}
- if (!!localRegistry) {
+ if (localRegistry) {
Logger.d('Ensuring Docker Registry is running...')
return self.dockerRegistry.ensureDockerRegistryRunningOnThisNode(
localRegistry.registryPassword
@@ -243,11 +249,35 @@ class CaptainManager {
}
)
})
+ .then(function () {
+ return self.diskCleanupManager.init()
+ })
+ .then(function () {
+ return self.dataStore.getGoAccessInfo()
+ })
+ .then(function (goAccessInfo) {
+ // Ensure GoAccess container restart
+ return self.updateGoAccessInfo(goAccessInfo)
+ })
.then(function () {
self.inited = true
self.performHealthCheck()
+ EventLoggerFactory.get(
+ new ProManager(
+ self.dataStore.getProDataStore(),
+ FeatureFlags.get(self.dataStore)
+ )
+ )
+ .getLogger()
+ .trackEvent(
+ CapRoverEventFactory.create(
+ CapRoverEventType.InstanceStarted,
+ {}
+ )
+ )
+
Logger.d(
'**** Captain is initialized and ready to serve you! ****'
)
@@ -434,6 +464,10 @@ class CaptainManager {
return this.certbotManager
}
+ getDiskCleanupManager() {
+ return this.diskCleanupManager
+ }
+
isInitialized() {
return (
this.inited &&
@@ -458,6 +492,12 @@ class CaptainManager {
self.dataStore,
self.dockerApi,
CaptainManager.get().getLoadBalanceManager(),
+ EventLoggerFactory.get(
+ new ProManager(
+ self.dataStore.getProDataStore(),
+ FeatureFlags.get(self.dataStore)
+ )
+ ).getLogger(),
CaptainManager.get().getDomainResolveChecker()
)
Object.keys(apps).forEach((appName) => {
@@ -534,6 +574,10 @@ class CaptainManager {
const envVars = []
if (netDataInfo.data.smtp) {
+ envVars.push({
+ key: 'SMTP_FROM',
+ value: netDataInfo.data.smtp.to,
+ })
envVars.push({
key: 'SSMTP_TO',
value: netDataInfo.data.smtp.to,
@@ -556,8 +600,8 @@ class CaptainManager {
envVars.push({
key: 'SSMTP_TLS',
value: netDataInfo.data.smtp.allowNonTls
- ? 'NO'
- : 'YES',
+ ? 'off'
+ : 'on',
})
envVars.push({
@@ -569,6 +613,24 @@ class CaptainManager {
key: 'SSMTP_PASS',
value: netDataInfo.data.smtp.password,
})
+
+ // See: https://github.com/titpetric/netdata#changelog
+ const otherEnvVars: any[] = []
+ envVars.forEach((e) => {
+ otherEnvVars.push({
+ // change SSMTP to SMTP
+ key: e.key.replace('SSMTP_', 'SMTP_'),
+ value: e.value,
+ })
+ })
+ envVars.push(...otherEnvVars)
+
+ envVars.push({
+ key: 'SMTP_STARTTLS',
+ value: netDataInfo.data.smtp.allowNonTls
+ ? ''
+ : 'on',
+ })
}
if (netDataInfo.data.slack) {
@@ -624,6 +686,83 @@ class CaptainManager {
})
}
+ updateGoAccessInfo(goAccessInfo: GoAccessInfo) {
+ const self = this
+ const dockerApi = this.dockerApi
+ const enabled = goAccessInfo.isEnabled
+
+ // Validate cron schedules
+ if (!Utils.validateCron(goAccessInfo.data.rotationFrequencyCron)) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_PARAMETER,
+ 'Invalid cron schedule'
+ )
+ }
+
+ const crontabFilePath = `${
+ CaptainConstants.goaccessConfigPathBase
+ }/crontab.txt`
+
+ return Promise.resolve()
+ .then(function () {
+ return self.dataStore.setGoAccessInfo(goAccessInfo)
+ })
+ .then(function () {
+ const cronFile = [
+ `${goAccessInfo.data.rotationFrequencyCron} /processLogs.sh`,
+ ].join('\n')
+
+ return fs.outputFile(crontabFilePath, cronFile)
+ })
+ .then(function () {
+ return dockerApi.ensureContainerStoppedAndRemoved(
+ CaptainConstants.goAccessContainerName,
+ CaptainConstants.captainNetworkName
+ )
+ })
+ .then(function () {
+ if (enabled) {
+ return dockerApi.createStickyContainer(
+ CaptainConstants.goAccessContainerName,
+ CaptainConstants.configs.goAccessImageName,
+ [
+ {
+ hostPath:
+ CaptainConstants.nginxSharedLogsPathOnHost,
+ containerPath:
+ CaptainConstants.nginxSharedLogsPath,
+ mode: 'rw',
+ },
+ {
+ hostPath: crontabFilePath,
+ containerPath:
+ CaptainConstants.goAccessCrontabPath,
+ mode: 'ro',
+ },
+ ],
+ CaptainConstants.captainNetworkName,
+ [
+ {
+ key: 'LOG_RETENTION_DAYS',
+ value: (
+ goAccessInfo.data.logRetentionDays ?? 180
+ ).toString(),
+ },
+ ],
+ [],
+ ['apparmor:unconfined'],
+ undefined
+ )
+ }
+ })
+ .then(function () {
+ Logger.d(
+ 'Updating Load Balancer - CaptainManager.updateGoAccess'
+ )
+ return self.loadBalancerManager.rePopulateNginxConfigFile()
+ })
+ }
+
getNodesInfo() {
const dockerApi = this.dockerApi
@@ -672,9 +811,7 @@ class CaptainManager {
})
.then(function () {
Logger.d('Updating Load Balancer - CaptainManager.enableSsl')
- return self.loadBalancerManager.rePopulateNginxConfigFile(
- self.dataStore
- )
+ return self.loadBalancerManager.rePopulateNginxConfigFile()
})
}
@@ -723,12 +860,47 @@ class CaptainManager {
setNginxConfig(baseConfig: string, captainConfig: string) {
const self = this
+ let existingConfigs: {
+ baseConfig: {
+ byDefault: string
+ customValue: any
+ }
+ captainConfig: {
+ byDefault: string
+ customValue: any
+ }
+ }
return Promise.resolve()
.then(function () {
+ return self.dataStore.getNginxConfig()
+ })
+ .then(function (configs) {
+ existingConfigs = configs
return self.dataStore.setNginxConfig(baseConfig, captainConfig)
})
.then(function () {
- self.resetSelf()
+ return self.loadBalancerManager.rePopulateNginxConfigFile()
+ })
+ .catch(function (error) {
+ if (
+ error &&
+ error.captainErrorType ===
+ ApiStatusCodes.STATUS_ERROR_NGINX_VALIDATION_FAILED
+ ) {
+ Logger.d(
+ "Nginx validation failed. Reverting changes in system's nginx configs..."
+ )
+ self.dataStore
+ .setNginxConfig(
+ existingConfigs.baseConfig.customValue,
+ existingConfigs.captainConfig.customValue
+ )
+
+ .then(function () {
+ return self.loadBalancerManager.rePopulateNginxConfigFile()
+ })
+ }
+ throw error
})
}
@@ -738,7 +910,7 @@ class CaptainManager {
// We still allow users to specify the domains in their DNS settings individually
// SubDomains that need to be added are "captain." "registry." "app-name."
const url = `${uuid()}.${requestedCustomDomain}:${
- CaptainConstants.nginxPortNumber
+ CaptainConstants.configs.nginxPortNumber80
}`
return self.domainResolveChecker
@@ -786,7 +958,7 @@ class CaptainManager {
}
}
- if (!!localRegistry) {
+ if (localRegistry) {
throw ApiStatusCodes.createError(
ApiStatusCodes.ILLEGAL_OPERATION,
'Delete your self-hosted Docker registry before changing the domain.'
@@ -802,9 +974,7 @@ class CaptainManager {
Logger.d(
'Updating Load Balancer - CaptainManager.changeCaptainRootDomain'
)
- return self.loadBalancerManager.rePopulateNginxConfigFile(
- self.dataStore
- )
+ return self.loadBalancerManager.rePopulateNginxConfigFile()
})
}
diff --git a/src/user/system/CertbotManager.ts b/src/user/system/CertbotManager.ts
index 239b65dfc..ec2624651 100644
--- a/src/user/system/CertbotManager.ts
+++ b/src/user/system/CertbotManager.ts
@@ -1,9 +1,12 @@
import ApiStatusCodes from '../../api/ApiStatusCodes'
import DockerApi from '../../docker/DockerApi'
-import CaptainConstants from '../../utils/CaptainConstants'
+import CaptainConstants, {
+ CertbotCertCommandRule,
+} from '../../utils/CaptainConstants'
import Logger from '../../utils/Logger'
import Utils from '../../utils/Utils'
import fs = require('fs-extra')
+import ShellQuote = require('shell-quote')
const WEBROOT_PATH_IN_CERTBOT = '/captain-webroot'
const WEBROOT_PATH_IN_CAPTAIN =
@@ -12,8 +15,39 @@ const WEBROOT_PATH_IN_CAPTAIN =
const shouldUseStaging = false // CaptainConstants.isDebug;
+function isCertCommandSuccess(output: string) {
+ // https://github.com/certbot/certbot/blob/099c6c8b240400b928d6b349e023e5e8414611e6/certbot/certbot/_internal/main.py#L516
+ if (
+ output.indexOf(
+ 'Congratulations! Your certificate and chain have been saved'
+ ) >= 0
+ ) {
+ return true
+ }
+
+ // https://github.com/certbot/certbot/blob/f4e031f5055fc6bf8c87eb0b18f927f7f5ba36a8/certbot/certbot/_internal/main.py#L632
+ if (output.indexOf('Successfully received certificate') >= 0) {
+ return true
+ }
+
+ // https://github.com/certbot/certbot/blob/f4e031f5055fc6bf8c87eb0b18f927f7f5ba36a8/certbot/certbot/_internal/main.py#L1596
+ if (
+ output.indexOf(
+ 'Certificate not yet due for renewal; no action taken'
+ ) >= 0
+ ) {
+ return true
+ }
+
+ return false
+}
+
class CertbotManager {
private isOperationInProcess: boolean
+ private certCommandGenerator = new CertCommandGenerator(
+ CaptainConstants.configs.certbotCertCommandRules ?? [],
+ 'certbot certonly --webroot -w ${webroot} -d ${domainName}'
+ )
constructor(private dockerApi: DockerApi) {
this.dockerApi = dockerApi
@@ -46,7 +80,6 @@ class CertbotManager {
return `/live/${domainName}/privkey.pem`
}
-
enableSsl(domainName: string) {
const self = this
@@ -58,15 +91,10 @@ class CertbotManager {
return self.ensureDomainHasDirectory(domainName)
})
.then(function () {
- const cmd = [
- 'certbot',
- 'certonly',
- '--webroot',
- '-w',
- `${WEBROOT_PATH_IN_CERTBOT}/${domainName}`,
- '-d',
+ const cmd = self.certCommandGenerator.getCertbotCertCommand(
domainName,
- ]
+ WEBROOT_PATH_IN_CERTBOT + '/' + domainName
+ )
if (shouldUseStaging) {
cmd.push('--staging')
@@ -75,19 +103,7 @@ class CertbotManager {
return self.runCommand(cmd).then(function (output) {
Logger.d(output)
- if (
- output.indexOf(
- 'Congratulations! Your certificate and chain have been saved'
- ) >= 0
- ) {
- return true
- }
-
- if (
- output.indexOf(
- 'Certificate not yet due for renewal; no action taken'
- ) >= 0
- ) {
+ if (isCertCommandSuccess(output)) {
return true
}
@@ -125,9 +141,10 @@ class CertbotManager {
})
.then(function (registerOutput) {
if (
- registerOutput.indexOf(
+ registerOutput.includes(
'Your account credentials have been saved in your Certbot'
- ) >= 0
+ ) ||
+ registerOutput.includes('Account registered.')
) {
return true
}
@@ -295,7 +312,7 @@ class CertbotManager {
return dockerApi
.createServiceOnNodeId(
- CaptainConstants.certbotImageName,
+ CaptainConstants.configs.certbotImageName,
CaptainConstants.certbotServiceName,
undefined,
nodeId,
@@ -373,7 +390,7 @@ class CertbotManager {
return dockerApi.updateService(
CaptainConstants.certbotServiceName,
- CaptainConstants.certbotImageName,
+ CaptainConstants.configs.certbotImageName,
[
{
hostPath: CaptainConstants.letsEncryptEtcPath,
@@ -410,3 +427,37 @@ class CertbotManager {
}
export default CertbotManager
+
+export class CertCommandGenerator {
+ constructor(
+ private rules: CertbotCertCommandRule[],
+ private defaultCommand: string
+ ) {}
+
+ private getCertbotCertCommandTemplate(domainName: string): string {
+ for (const rule of this.rules) {
+ if (
+ rule.domain === '*' ||
+ domainName === rule.domain ||
+ domainName.endsWith('.' + rule.domain)
+ ) {
+ return rule.command ?? this.defaultCommand
+ }
+ }
+ return this.defaultCommand
+ }
+ getCertbotCertCommand(domainName: string, webroot: string): string[] {
+ const variables: Record = {
+ domainName,
+ webroot,
+ }
+ const command = this.getCertbotCertCommandTemplate(domainName)
+ const parsed = ShellQuote.parse(command, (key: string) => {
+ return variables[key] ?? `\${${key}}`
+ })
+ if (parsed.some((x) => typeof x !== 'string')) {
+ throw new Error(`Invalid command: ${command}`)
+ }
+ return parsed as string[]
+ }
+}
diff --git a/src/user/system/DiskCleanupManager.ts b/src/user/system/DiskCleanupManager.ts
new file mode 100644
index 000000000..e538e7928
--- /dev/null
+++ b/src/user/system/DiskCleanupManager.ts
@@ -0,0 +1,202 @@
+import { CronJob } from 'cron'
+import { ImageInfo } from 'dockerode'
+import ApiStatusCodes from '../../api/ApiStatusCodes'
+import DataStore from '../../datastore/DataStore'
+import DockerApi from '../../docker/DockerApi'
+import { IAutomatedCleanupConfigs } from '../../models/AutomatedCleanupConfigs'
+import Logger from '../../utils/Logger'
+import Utils from '../../utils/Utils'
+
+export default class DiskCleanupManager {
+ private job: CronJob | undefined
+ constructor(
+ private dataStore: DataStore,
+ private dockerApi: DockerApi
+ ) {
+ //
+ }
+
+ init() {
+ return this.resetScheduledTasks() //
+ .catch((e) => {
+ Logger.e('Disk cleanup manager failed to start.')
+ Logger.e(e)
+ })
+ }
+
+ onCleanupCalled(mostRecentLimit: number) {
+ const self = this
+
+ Logger.d('Disk cleanup called...')
+
+ return Promise.resolve()
+ .then(() => {
+ return self.getUnusedImages(mostRecentLimit)
+ })
+ .then((unusedImages) => {
+ if (unusedImages.length > 0) {
+ Logger.d('Unused images found. Deleting...')
+
+ const imageIds = unusedImages.map((x) => x.id)
+
+ return self.deleteImages(imageIds)
+ } else {
+ Logger.d('No unused images found.')
+ }
+ })
+ .catch(function (error) {
+ Logger.d('Disk cleanup failed. Silently ignoring...')
+ Logger.e(error)
+ })
+ }
+
+ deleteImages(imageIds: string[]) {
+ Logger.d('Deleting images...')
+
+ const dockerApi = this.dockerApi
+
+ return Promise.resolve().then(function () {
+ return dockerApi.deleteImages(imageIds)
+ })
+ }
+
+ getUnusedImages(mostRecentLimit: number) {
+ Logger.d(
+ `Getting unused images, excluding most recent ones: ${mostRecentLimit}`
+ )
+
+ const dockerApi = this.dockerApi
+ const dataStore = this.dataStore
+ let allImages: ImageInfo[]
+
+ return Promise.resolve()
+ .then(function () {
+ return dockerApi.getImages()
+ })
+ .then(function (images) {
+ allImages = images
+
+ return dataStore.getAppsDataStore().getAppDefinitions()
+ })
+ .then(function (apps) {
+ const unusedImages = []
+
+ if (mostRecentLimit < 0) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_PARAMETER,
+ 'Most Recent Limit cannot be negative'
+ )
+ }
+
+ for (let i = 0; i < allImages.length; i++) {
+ const currentImage = allImages[i]
+ let imageInUse = false
+
+ const repoTags = currentImage.RepoTags || []
+
+ Object.keys(apps).forEach(function (appName) {
+ const app = apps[appName]
+ for (let k = 0; k < mostRecentLimit + 1; k++) {
+ const versionToCheck =
+ Number(app.deployedVersion) - k
+
+ if (versionToCheck < 0) continue
+
+ let deployedImage = ''
+ app.versions.forEach((v) => {
+ if (v.version === versionToCheck) {
+ deployedImage = v.deployedImageName || ''
+ }
+ })
+
+ if (!deployedImage) continue
+
+ if (repoTags.indexOf(deployedImage) >= 0) {
+ imageInUse = true
+ }
+ }
+ })
+
+ if (!imageInUse) {
+ unusedImages.push({
+ id: currentImage.Id,
+ tags: repoTags,
+ })
+ }
+ }
+
+ return unusedImages
+ })
+ }
+
+ resetScheduledTasks() {
+ const self = this
+ if (this.job) {
+ this.job.stop()
+ this.job = undefined
+ }
+
+ return Promise.resolve()
+ .then(() => {
+ return self.getConfigs()
+ })
+ .then((configs) => {
+ if (configs.cronSchedule) {
+ self.job = new CronJob(
+ configs.cronSchedule, // cronTime
+ function () {
+ self.onCleanupCalled(configs.mostRecentLimit)
+ }, // onTick
+ null, // onComplete
+ true, // start
+ configs.timezone // timezone
+ )
+ }
+ })
+ }
+
+ setConfig(configs: IAutomatedCleanupConfigs) {
+ const self = this
+
+ return Promise.resolve()
+ .then(() => {
+ configs.cronSchedule = (configs.cronSchedule || '').trim()
+ if (configs.mostRecentLimit < 0) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_PARAMETER,
+ 'Most Recent Limit cannot be negative'
+ )
+ }
+
+ if (!configs.cronSchedule) {
+ return // no need to validate cron schedule
+ }
+
+ if (!Utils.validateCron(configs.cronSchedule)) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.ILLEGAL_PARAMETER,
+ 'Invalid cron schedule'
+ )
+ }
+ })
+ .then(() => {
+ if (!configs.cronSchedule) {
+ configs.timezone = ''
+ configs.mostRecentLimit = 1
+ }
+
+ return self.dataStore.setDiskCleanupConfigs(configs)
+ })
+ .then(() => {
+ return self.resetScheduledTasks()
+ })
+ }
+
+ getConfigs() {
+ const self = this
+
+ return Promise.resolve().then(() => {
+ return self.dataStore.getDiskCleanupConfigs()
+ })
+ }
+}
diff --git a/src/user/system/DomainResolveChecker.ts b/src/user/system/DomainResolveChecker.ts
index 70eb66c38..f3a0a3769 100644
--- a/src/user/system/DomainResolveChecker.ts
+++ b/src/user/system/DomainResolveChecker.ts
@@ -62,7 +62,7 @@ export default class DomainResolveChecker {
})
.then(function () {
return new Promise(function (resolve, reject) {
- const url = `http://${domainName}:${CaptainConstants.nginxPortNumber}${captainConfirmationPath}`
+ const url = `http://${domainName}:${CaptainConstants.configs.nginxPortNumber80}${captainConfirmationPath}`
request(
url,
diff --git a/src/user/system/LoadBalancerManager.ts b/src/user/system/LoadBalancerManager.ts
index aabb7e6dd..02324cf33 100644
--- a/src/user/system/LoadBalancerManager.ts
+++ b/src/user/system/LoadBalancerManager.ts
@@ -6,6 +6,8 @@ import { v4 as uuid } from 'uuid'
import ApiStatusCodes from '../../api/ApiStatusCodes'
import DataStore from '../../datastore/DataStore'
import DockerApi from '../../docker/DockerApi'
+import { IAllAppDefinitions } from '../../models/AppDefinition'
+import { IServerBlockDetails } from '../../models/IServerBlockDetails'
import LoadBalancerInfo from '../../models/LoadBalancerInfo'
import { AnyError } from '../../models/OtherTypes'
import CaptainConstants from '../../utils/CaptainConstants'
@@ -45,9 +47,8 @@ const DH_PARAMS_FILE_PATH_ON_NGINX = path.join(
class LoadBalancerManager {
private reloadInProcess: boolean
private requestedReloadPromises: {
- dataStore: DataStore
- resolve: Function
- reject: Function
+ resolveFunc: VoidFunction
+ rejectFunc: (reason: any) => void
}[]
private captainPublicRandomKey: string
@@ -63,40 +64,31 @@ class LoadBalancerManager {
/**
* Reloads the configuation for NGINX.
- * NOTE that this can return synchronously with UNDEFINED if there is already a process in the background.
- * @param dataStoreToQueue
* @returns {Promise.<>}
*/
- rePopulateNginxConfigFile(dataStoreToQueue: DataStore, noReload?: boolean) {
+ rePopulateNginxConfigFile() {
const self = this
return new Promise(function (res, rej) {
self.requestedReloadPromises.push({
- dataStore: dataStoreToQueue,
- resolve: res,
- reject: rej,
+ resolveFunc: res,
+ rejectFunc: rej,
})
self.consumeQueueIfAnyInNginxReloadQueue()
- }).then(function () {
- if (!!noReload) return
- Logger.d('sendReloadSignal...')
- return self.dockerApi.sendSingleContainerKillHUP(
- CaptainConstants.nginxServiceName
- )
})
}
consumeQueueIfAnyInNginxReloadQueue() {
const self = this
- const q = self.requestedReloadPromises.pop()
-
- if (!q) {
+ if (self.reloadInProcess) {
+ Logger.d('NGINX Reload already in process, Bouncing off...')
return
}
- if (self.reloadInProcess) {
- Logger.d('NGINX Reload already in process, Bouncing off...')
+ const q = self.requestedReloadPromises.pop()
+
+ if (!q) {
return
}
@@ -104,12 +96,10 @@ class LoadBalancerManager {
self.reloadInProcess = true
- const dataStore = q.dataStore
-
// This will resolve to something like: /captain/nginx/conf.d/captain
const configFilePathBase = `${
CaptainConstants.perAppNginxConfigPathBase
- }/${dataStore.getNameSpace()}`
+ }/${self.dataStore.getNameSpace()}`
const FUTURE = configFilePathBase + '.fut'
const BACKUP = configFilePathBase + '.bak'
@@ -122,7 +112,7 @@ class LoadBalancerManager {
return fs.remove(FUTURE)
})
.then(function () {
- return self.getServerList(dataStore)
+ return self.getServerList()
})
.then(function (servers) {
const promises: Promise[] = []
@@ -193,26 +183,68 @@ class LoadBalancerManager {
return self.ensureBaseNginxConf()
})
.then(function () {
- return self.createRootConfFile(dataStore)
+ return self.createRootConfFile()
+ })
+ .then(function () {
+ return self.validateNginxConfigAndReload()
})
.then(function () {
Logger.d('SUCCESS: UNLocking NGINX configuration reloading...')
self.reloadInProcess = false
- q.resolve()
+ q.resolveFunc()
self.consumeQueueIfAnyInNginxReloadQueue()
})
.catch(function (error: AnyError) {
Logger.e(error)
Logger.d('Error: UNLocking NGINX configuration reloading...')
self.reloadInProcess = false
- q.reject(error)
+ q.rejectFunc(error)
self.consumeQueueIfAnyInNginxReloadQueue()
})
}
- getServerList(dataStore: DataStore) {
+ validateNginxConfigAndReload() {
+ const self = this
+ return Promise.resolve()
+ .then(function () {
+ return self.dockerApi.executeCommand(
+ CaptainConstants.nginxServiceName,
+ ['nginx', '-t']
+ )
+ })
+ .then(function (result) {
+ // nginx:1.24
+ // Failed example:
+ //
+ // 2024/08/11 22:32:59 [emerg] 28#28: unknown directive "eventsxxx" in /etc/nginx/nginx.conf:8
+ // nginx: [emerg] unknown directive "eventsxxx" in /etc/nginx/nginx.conf:8
+ // nginx: configuration file /etc/nginx/nginx.conf test failed
+
+ // Successful example:
+ //
+ // nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
+ // nginx: configuration file /etc/nginx/nginx.conf test is successful
+
+ if (result.indexOf('test is successful') < 0) {
+ throw ApiStatusCodes.createError(
+ ApiStatusCodes.STATUS_ERROR_NGINX_VALIDATION_FAILED,
+ result
+ )
+ }
+ })
+ .then(function () {
+ Logger.d('sendReloadSignal...')
+ return self.dockerApi.sendSingleContainerKillHUP(
+ CaptainConstants.nginxServiceName
+ )
+ })
+ }
+
+ getServerList() {
const self = this
+ const dataStore = self.dataStore
+
let hasRootSsl: boolean
let rootDomain: string
@@ -248,11 +280,21 @@ class LoadBalancerManager {
rootDomain: string
) {
const servers: IServerBlockDetails[] = []
+ const self = this
+ let apps: IAllAppDefinitions
return dataStore
.getAppsDataStore()
.getAppDefinitions()
- .then(function (apps) {
+ .then(function (loadedApps) {
+ apps = loadedApps
+ })
+ .then(function () {
+ return dataStore.getGoAccessInfo()
+ })
+ .then(function (goAccessInfo) {
+ const logAccess = goAccessInfo.isEnabled
+
Object.keys(apps).forEach(function (appName) {
const webApp = apps[appName]
const httpBasicAuth =
@@ -281,8 +323,23 @@ class LoadBalancerManager {
serverWithSubDomain.websocketSupport = websocketSupport
const httpPort = webApp.containerHttpPort || 80
serverWithSubDomain.containerHttpPort = httpPort
- serverWithSubDomain.nginxConfigTemplate = nginxConfigTemplate
+ serverWithSubDomain.nginxConfigTemplate =
+ nginxConfigTemplate
serverWithSubDomain.httpBasicAuth = httpBasicAuth
+ serverWithSubDomain.logAccessPath = logAccess
+ ? self.getLogPath(
+ appName,
+ serverWithSubDomain.publicDomain
+ )
+ : undefined
+
+ if (
+ webApp.redirectDomain &&
+ serverWithSubDomain.publicDomain !==
+ webApp.redirectDomain
+ ) {
+ serverWithSubDomain.redirectToPath = `http://${webApp.redirectDomain}`
+ }
servers.push(serverWithSubDomain)
@@ -295,7 +352,7 @@ class LoadBalancerManager {
idx++
) {
const d = customDomainArray[idx]
- servers.push({
+ const newServerBlock: IServerBlockDetails = {
containerHttpPort: httpPort,
hasSsl: d.hasSsl,
forceSsl: forceSsl,
@@ -306,7 +363,18 @@ class LoadBalancerManager {
staticWebRoot: '',
customErrorPagesDirectory: '',
httpBasicAuth: httpBasicAuth,
- })
+ logAccessPath: logAccess
+ ? self.getLogPath(appName, d.publicDomain)
+ : undefined,
+ }
+ if (
+ webApp.redirectDomain &&
+ newServerBlock.publicDomain !==
+ webApp.redirectDomain
+ ) {
+ newServerBlock.redirectToPath = `http://${webApp.redirectDomain}`
+ }
+ servers.push(newServerBlock)
}
}
})
@@ -335,6 +403,31 @@ class LoadBalancerManager {
)
}
+ getLogPath(appName: string, domainName: string) {
+ return `${CaptainConstants.nginxSharedLogsPath}/${this.getLogName(appName, domainName)}`
+ }
+
+ getLogName(appName: string, domainName: string) {
+ return `${appName}--${domainName}--access.log`
+ }
+
+ // Parses out the app and domain name from the log path original constructed in getLogPath
+ // then updated when processing the logs into file names that have timestamps that look like
+ // appname--some-alias.localhost--access.log--2024-10-30T01:50.html
+ // or appname--speed4.captain.localhost--access.log--Current.html
+ parseLogPath(logPath: string): { domainName: string; fileName: string } {
+ const splitName = logPath.split('--')
+ const fileName =
+ splitName.length > 3
+ ? `${splitName[3].replace('.html', '')}`
+ : logPath
+
+ return {
+ domainName: splitName[1],
+ fileName,
+ }
+ }
+
getInfo() {
return new Promise(function (resolve, reject) {
const url = `http://${CaptainConstants.nginxServiceName}/nginx_status`
@@ -381,8 +474,9 @@ class LoadBalancerManager {
})
}
- createRootConfFile(dataStore: DataStore) {
+ createRootConfFile() {
const self = this
+ const dataStore = self.dataStore
const captainDomain = `${
CaptainConstants.configs.captainSubDomain
@@ -390,6 +484,7 @@ class LoadBalancerManager {
const registryDomain = `${
CaptainConstants.registrySubDomain
}.${dataStore.getRootDomain()}`
+ let logAccess = false
let hasRootSsl = false
@@ -401,6 +496,10 @@ class LoadBalancerManager {
return Promise.resolve()
.then(function () {
+ return dataStore.getGoAccessInfo()
+ })
+ .then(function (goAccessInfo) {
+ logAccess = goAccessInfo.isEnabled
return dataStore.getNginxConfig()
})
.then(function (nginxConfig) {
@@ -433,7 +532,7 @@ class LoadBalancerManager {
serviceName: CaptainConstants.captainServiceName,
domain: captainDomain,
serviceExposedPort:
- CaptainConstants.captainServiceExposedPort,
+ CaptainConstants.configs.adminPortNumber3000,
defaultHtmlDir:
CaptainConstants.nginxStaticRootDir +
CaptainConstants.nginxDefaultHtmlDir,
@@ -441,6 +540,9 @@ class LoadBalancerManager {
CaptainConstants.nginxStaticRootDir +
CaptainConstants.nginxDomainSpecificHtmlDir
}/${captainDomain}`,
+ logAccessPath: logAccess
+ ? CaptainConstants.nginxSharedLogsPath
+ : undefined,
},
registry: {
crtPath: self.getSslCertPath(registryDomain),
@@ -502,7 +604,7 @@ class LoadBalancerManager {
})
}
- ensureDhParamFileExists(dataStore: DataStore) {
+ ensureDhParamFileExists() {
const self = this
return fs
.pathExists(DH_PARAMS_FILE_PATH_ON_HOST) //
@@ -541,7 +643,7 @@ class LoadBalancerManager {
`openssl dhparam -out ${DH_PARAMS_FILE_PATH_ON_HOST} 2048`
).then(function () {
Logger.d('Updating Load Balancer - ensureDhParamFileExists')
- return self.rePopulateNginxConfigFile(dataStore)
+ return self.rePopulateNginxConfigFile()
})
})
.catch((err) => Logger.e(err))
@@ -565,13 +667,22 @@ class LoadBalancerManager {
protocol: 'tcp',
publishMode: 'host',
containerPort: 80,
- hostPort: CaptainConstants.nginxPortNumber,
+ hostPort:
+ CaptainConstants.configs.nginxPortNumber80,
},
{
protocol: 'tcp',
publishMode: 'host',
containerPort: 443,
- hostPort: 443,
+ hostPort:
+ CaptainConstants.configs.nginxPortNumber443,
+ },
+ {
+ protocol: 'udp',
+ publishMode: 'host',
+ containerPort: 443,
+ hostPort:
+ CaptainConstants.configs.nginxPortNumber443,
},
],
nodeId,
@@ -663,12 +774,6 @@ class LoadBalancerManager {
HOST_PATH_OF_FAKE_CERTS
)
})
- .then(function () {
- Logger.d(
- 'Updating Load Balancer - Setting up NGINX conf file...'
- )
- return self.rePopulateNginxConfigFile(dataStore, true)
- })
.then(function () {
return fs.ensureDir(CaptainConstants.letsEncryptEtcPath)
})
@@ -689,6 +794,7 @@ class LoadBalancerManager {
0
)
} else {
+ Logger.d('Captain Nginx is NOT running.. ')
return createNginxServiceOnNode(myNodeId).then(function () {
return myNodeId
})
@@ -713,6 +819,12 @@ class LoadBalancerManager {
return true
}
})
+ .then(function () {
+ Logger.d(
+ 'Updating Load Balancer - Setting up NGINX conf file...'
+ )
+ return self.rePopulateNginxConfigFile()
+ })
.then(function () {
Logger.d('Updating NGINX service...')
@@ -747,6 +859,11 @@ class LoadBalancerManager {
CaptainConstants.nginxSharedPathOnNginx,
hostPath: CaptainConstants.nginxSharedPathOnHost,
},
+ {
+ hostPath:
+ CaptainConstants.nginxSharedLogsPathOnHost,
+ containerPath: CaptainConstants.nginxSharedLogsPath,
+ },
],
[CaptainConstants.captainNetworkName],
undefined,
@@ -784,9 +901,9 @@ class LoadBalancerManager {
// Ensure DH Params exists
// First attempt to renew certs in
setTimeout(function () {
- self.ensureDhParamFileExists(dataStore) //
+ self.ensureDhParamFileExists() //
.then(function () {
- return self.renewAllCertsAndReload(dataStore)
+ return self.renewAllCertsAndReload()
})
.catch((err) => {
Logger.e(err)
@@ -795,25 +912,28 @@ class LoadBalancerManager {
})
}
- renewAllCertsAndReload(dataStore: DataStore) {
+ renewAllCertsAndReload() {
const self = this
// before doing renewal, let's schedule the next one in 20.3 hours!
// this random schedule helps to avoid retrying at the same time of
// the day in case if that's our super high traffic time
- setTimeout(function () {
- self.renewAllCertsAndReload(dataStore) //
- .catch((err) => {
- Logger.e(err)
- })
- }, 1000 * 3600 * 20.3)
+ setTimeout(
+ function () {
+ self.renewAllCertsAndReload() //
+ .catch((err) => {
+ Logger.e(err)
+ })
+ },
+ 1000 * 3600 * 20.3
+ )
return self.certbotManager
.renewAllCerts() //
.then(function () {
Logger.d('Updating Load Balancer - renewAllCerts')
- return self.rePopulateNginxConfigFile(dataStore)
+ return self.rePopulateNginxConfigFile()
})
}
}
diff --git a/src/user/system/SelfHostedDockerRegistry.ts b/src/user/system/SelfHostedDockerRegistry.ts
index 61b1dec88..eb8dff1df 100644
--- a/src/user/system/SelfHostedDockerRegistry.ts
+++ b/src/user/system/SelfHostedDockerRegistry.ts
@@ -47,9 +47,9 @@ class SelfHostedDockerRegistry {
Logger.d(
'Updating Load Balancer - SelfHostedDockerRegistry.enableRegistrySsl'
)
- return self.loadBalancerManager.rePopulateNginxConfigFile(
- self.dataStore
- )
+
+ // no return - ignore the returned promise
+ self.loadBalancerManager.rePopulateNginxConfigFile()
})
}
diff --git a/src/user/system/VersionManager.ts b/src/user/system/VersionManager.ts
index 3af61ec61..b3af2785e 100644
--- a/src/user/system/VersionManager.ts
+++ b/src/user/system/VersionManager.ts
@@ -3,6 +3,7 @@ import axios from 'axios'
import DockerApi from '../../docker/DockerApi'
import CaptainConstants from '../../utils/CaptainConstants'
import Logger from '../../utils/Logger'
+import DockerRegistryHelper from '../DockerRegistryHelper'
class VersionManager {
private dockerApi: DockerApi
@@ -24,7 +25,7 @@ class VersionManager {
return Promise.resolve() //
.then(function () {
- return axios.get('https://api.v2.caprover.com/v2/versionInfo', {
+ return axios.get('https://api-v1.caprover.com/v2/versionInfo', {
params: {
currentVersion: currentVersion,
},
@@ -105,13 +106,13 @@ class VersionManager {
}
)
}).then(function (tagList) {
- let currentVersion = CaptainConstants.configs.version.split('.')
+ const currentVersion = CaptainConstants.configs.version.split('.')
let latestVersion = CaptainConstants.configs.version.split('.')
let canUpdate = false
for (let i = 0; i < tagList.length; i++) {
- let tag = tagList[i].split('.')
+ const tag = tagList[i].split('.')
if (tag.length !== 3) {
continue
@@ -148,27 +149,40 @@ class VersionManager {
})
}
- updateCaptain(versionTag: string) {
+ updateCaptain(
+ versionTag: string,
+ dockerRegistryHelper: DockerRegistryHelper
+ ) {
const self = this
- return Promise.resolve().then(function () {
- return self.dockerApi.updateService(
- CaptainConstants.captainServiceName,
- `${CaptainConstants.configs.publishedNameOnDockerHub}:${versionTag}`,
- undefined,
- undefined,
- undefined,
- undefined,
- undefined,
- undefined,
- undefined,
- undefined,
- undefined,
- undefined,
- undefined,
- undefined,
- undefined
- )
- })
+ const providedImageName = `${CaptainConstants.configs.publishedNameOnDockerHub}:${versionTag}`
+ return Promise.resolve()
+ .then(function () {
+ return dockerRegistryHelper.getDockerAuthObjectForImageName(
+ providedImageName
+ )
+ })
+ .then(function (authObj) {
+ return self.dockerApi.pullImage(providedImageName, authObj)
+ })
+ .then(function () {
+ return self.dockerApi.updateService(
+ CaptainConstants.captainServiceName,
+ providedImageName,
+ undefined,
+ undefined,
+ undefined,
+ undefined,
+ undefined,
+ undefined,
+ undefined,
+ undefined,
+ undefined,
+ undefined,
+ undefined,
+ undefined,
+ undefined
+ )
+ })
}
private static captainManagerInstance: VersionManager | undefined
diff --git a/src/utils/ApacheMd5.ts b/src/utils/ApacheMd5.ts
index 88a40a24e..4e738bc9c 100644
--- a/src/utils/ApacheMd5.ts
+++ b/src/utils/ApacheMd5.ts
@@ -2,12 +2,13 @@
// Project is licensed under MIT. https://github.com/http-auth/apache-md5/blob/master/LICENSE
// Crypto module import.
-const crypto = require('crypto')
+import * as crypto from 'crypto'
// Hash generation string.
const itoa64 =
'./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
+const DIGEST_ENCODING = 'binary'
export default class ApacheMd5 {
// To 64 bit version.
static to64(index: number, count: number) {
@@ -32,7 +33,7 @@ export default class ApacheMd5 {
} else {
while (salt.length < 8) {
// Random 8 chars.
- let rchIndex = Math.floor(Math.random() * 64)
+ const rchIndex = Math.floor(Math.random() * 64)
salt += itoa64[rchIndex]
}
}
@@ -95,7 +96,7 @@ export default class ApacheMd5 {
let final = crypto
.createHash('md5')
.update(password + salt + password, 'ascii')
- .digest('binary')
+ .digest(DIGEST_ENCODING)
for (let pl = password.length; pl > 0; pl -= 16) {
ctx += final.substr(0, pl > 16 ? 16 : pl)
@@ -109,7 +110,10 @@ export default class ApacheMd5 {
}
}
- final = crypto.createHash('md5').update(ctx, 'ascii').digest('binary')
+ final = crypto
+ .createHash('md5')
+ .update(ctx, 'ascii')
+ .digest(DIGEST_ENCODING)
// 1000 loop.
for (let i = 0; i < 1000; ++i) {
@@ -140,7 +144,7 @@ export default class ApacheMd5 {
final = crypto
.createHash('md5')
.update(ctxl, 'ascii')
- .digest('binary')
+ .digest(DIGEST_ENCODING)
}
return `${magic + salt}$${ApacheMd5.getPassword(final)}`
diff --git a/src/utils/CaptainConstants.ts b/src/utils/CaptainConstants.ts
index 7c9f42ec9..b614d3432 100644
--- a/src/utils/CaptainConstants.ts
+++ b/src/utils/CaptainConstants.ts
@@ -2,7 +2,7 @@ import fs = require('fs-extra')
import path = require('path')
import EnvVars from './EnvVars'
-const CAPTAIN_BASE_DIRECTORY = '/captain'
+const CAPTAIN_BASE_DIRECTORY = EnvVars.CAPTAIN_BASE_DIRECTORY || '/captain'
const CAPTAIN_DATA_DIRECTORY = CAPTAIN_BASE_DIRECTORY + '/data' // data that sits here can be backed up
const CAPTAIN_ROOT_DIRECTORY_TEMP = CAPTAIN_BASE_DIRECTORY + '/temp'
const CAPTAIN_ROOT_DIRECTORY_GENERATED = CAPTAIN_BASE_DIRECTORY + '/generated'
@@ -17,7 +17,7 @@ const CONSTANT_FILE_OVERRIDE_USER =
const configs = {
publishedNameOnDockerHub: 'caprover/caprover',
- version: '1.9.0',
+ version: '1.14.0',
defaultMaxLogSize: '512m',
@@ -33,22 +33,57 @@ const configs = {
registrySubDomainPort: 996,
- dockerApiVersion: 'v1.40',
+ dockerApiVersion: 'v1.43',
- netDataImageName: 'caprover/netdata:v1.8.0',
+ netDataImageName: 'caprover/netdata:v1.34.1',
+
+ goAccessImageName: 'caprover/goaccess:1.9.3',
registryImageName: 'registry:2',
appPlaceholderImageName: 'caprover/caprover-placeholder-app:latest',
- nginxImageName: 'nginx:1',
+ nginxImageName: 'nginx:1.27.2',
defaultEmail: 'runner@caprover.com',
captainSubDomain: 'captain',
+
+ overlayNetworkOverride: {},
+
+ useExistingSwarm: false,
+
+ proApiDomains: ['https://pro.caprover.com'],
+
+ analyticsDomain: 'https://analytics-v1.caprover.com',
+
+ certbotImageName: 'caprover/certbot-sleeping:v2.11.0',
+
+ certbotCertCommandRules: undefined as CertbotCertCommandRule[] | undefined,
+
+ // this is added in 1.13 just as a safety - remove this after 1.14
+ disableEncryptedCheck: false,
+
+ // The port can be overridden via env variable CAPTAIN_HOST_HTTP_PORT
+ nginxPortNumber80: EnvVars.CAPTAIN_HOST_HTTP_PORT,
+ // The port can be overridden via env variable CAPTAIN_HOST_HTTPS_PORT
+ nginxPortNumber443: EnvVars.CAPTAIN_HOST_HTTPS_PORT,
+ // The port can be overridden via env variable CAPTAIN_HOST_ADMIN_PORT
+ adminPortNumber3000: EnvVars.CAPTAIN_HOST_ADMIN_PORT,
+}
+
+export interface CertbotCertCommandRule {
+ /**
+ * Matches both *. and , use '*' to match all domains
+ */
+ domain: string
+ /**
+ * The Certbot command to execute, will be parsed using `shell-quote`, available variables are `${domainName}` and `${subdomain}`
+ */
+ command?: string
}
-let data = {
+const data = {
configs: configs, // values that can be overridden
// ******************** Global Constants *********************
@@ -57,8 +92,6 @@ let data = {
isDebug: EnvVars.CAPTAIN_IS_DEBUG,
- captainServiceExposedPort: 3000,
-
rootNameSpace: 'captain',
// *********************** Disk Paths ************************
@@ -79,6 +112,10 @@ let data = {
nginxDefaultHtmlDir: '/default',
+ nginxSharedLogsPath: '/var/log/nginx-shared',
+
+ goAccessCrontabPath: '/var/spool/cron/crontabs/root',
+
letsEncryptEtcPathOnNginx: '/letencrypt/etc',
nginxDomainSpecificHtmlDir: '/domains',
@@ -111,6 +148,8 @@ let data = {
perAppNginxConfigPathBase:
CAPTAIN_ROOT_DIRECTORY_GENERATED + '/nginx/conf.d',
+ goaccessConfigPathBase: CAPTAIN_ROOT_DIRECTORY_GENERATED + '/goaccess',
+
captainDataDirectory: CAPTAIN_DATA_DIRECTORY,
letsEncryptLibPath: CAPTAIN_DATA_DIRECTORY + '/letencrypt/lib',
@@ -121,12 +160,12 @@ let data = {
nginxSharedPathOnHost: CAPTAIN_DATA_DIRECTORY + '/nginx-shared',
+ nginxSharedLogsPathOnHost: CAPTAIN_DATA_DIRECTORY + '/shared-logs',
+
debugSourceDirectory: '', // Only used in debug mode
// ********************* Local Docker Constants ************************
- certbotImageName: 'caprover/certbot-sleeping:v1.6.0',
-
captainSaltSecretKey: 'captain-salt',
nginxServiceName: 'captain-nginx',
@@ -135,6 +174,8 @@ let data = {
certbotServiceName: 'captain-certbot',
+ goAccessContainerName: 'captain-goaccess-container',
+
netDataContainerName: 'captain-netdata-container',
registryServiceName: 'captain-registry',
@@ -145,8 +186,6 @@ let data = {
// ********************* HTTP Related Constants ************************
- nginxPortNumber: 80,
-
netDataRelativePath: '/net-data-monitor',
healthCheckEndPoint: '/checkhealth',
@@ -161,38 +200,47 @@ let data = {
headerNamespace: 'x-namespace',
+ headerCapRoverVersion: 'x-caprover-version',
+
// ********************* ETC ************************
disableFirewallCommand:
- 'ufw allow 80,443,3000,996,7946,4789,2377/tcp; ufw allow 7946,4789,2377/udp; ',
+ 'ufw allow ' +
+ configs.nginxPortNumber80 +
+ ',' +
+ configs.nginxPortNumber443 +
+ ',' +
+ configs.adminPortNumber3000 +
+ ',996,7946,4789,2377/tcp; ufw allow 7946,4789,2377/udp; ',
gitShaEnvVarKey: 'CAPROVER_GIT_COMMIT_SHA',
}
-function overrideFromFile(fileName: string) {
- let overridingValuesConfigs = fs.readJsonSync(fileName, {
+function overrideConfigFromFile(fileName: string) {
+ const overridingValuesConfigs = fs.readJsonSync(fileName, {
throws: false,
})
- if (!!overridingValuesConfigs) {
- for (let prop in overridingValuesConfigs) {
+ if (overridingValuesConfigs) {
+ for (const prop in overridingValuesConfigs) {
+ // eslint-disable-next-line no-prototype-builtins
if (!overridingValuesConfigs.hasOwnProperty(prop)) {
continue
}
console.log(`Overriding ${prop} from ${fileName}`)
- // @ts-ignore
+ // @ts-expect-error "this actually works"
configs[prop] = overridingValuesConfigs[prop]
}
}
}
-overrideFromFile(CONSTANT_FILE_OVERRIDE_BUILD)
+overrideConfigFromFile(CONSTANT_FILE_OVERRIDE_BUILD)
-overrideFromFile(CONSTANT_FILE_OVERRIDE_USER)
+overrideConfigFromFile(CONSTANT_FILE_OVERRIDE_USER)
if (data.isDebug) {
- let devDirectoryOnLocalMachine = fs
+ const devDirectoryOnLocalMachine = fs
.readFileSync(__dirname + '/../../currentdirectory')
.toString()
.trim()
@@ -205,7 +253,7 @@ if (data.isDebug) {
data.debugSourceDirectory = devDirectoryOnLocalMachine
data.configs.publishedNameOnDockerHub = 'captain-debug'
- data.nginxPortNumber = 80
+ // data.configs.nginxPortNumber80 = 80
}
export default data
diff --git a/src/utils/CaptainInstaller.ts b/src/utils/CaptainInstaller.ts
index b3705886c..9c685d7b7 100644
--- a/src/utils/CaptainInstaller.ts
+++ b/src/utils/CaptainInstaller.ts
@@ -1,5 +1,5 @@
-import externalIp = require('public-ip')
import DockerApi from '../docker/DockerApi'
+import { IAppEnvVar, IAppPort } from '../models/AppDefinition'
import BackupManager from '../user/system/BackupManager'
import CaptainConstants from './CaptainConstants'
import EnvVar from './EnvVars'
@@ -20,9 +20,9 @@ function checkSystemReq() {
console.log(' ')
console.log(' >>> Checking System Compatibility <<<')
- let ver = output.Version.split('.')
- let maj = Number(ver[0])
- let min = Number(ver[1])
+ const ver = output.Version.split('.')
+ const maj = Number(ver[0])
+ const min = Number(ver[1])
let versionOk = false
@@ -51,15 +51,7 @@ function checkSystemReq() {
console.log(' Ubuntu detected.')
}
- if (output.Architecture.toLowerCase().indexOf('x86') < 0) {
- console.log(
- '******* Warning ******* Default CapRover is compiled for X86 CPU. To use CapRover on other CPUs you can build from the source code'
- )
- } else {
- console.log(' X86 CPU detected.')
- }
-
- let totalMemInMb = Math.round(output.MemTotal / 1000.0 / 1000.0)
+ const totalMemInMb = Math.round(output.MemTotal / 1000.0 / 1000.0)
if (totalMemInMb < 1000) {
console.log(
@@ -126,7 +118,7 @@ function checkPortOrThrow(ipAddr: string, portToTest: number) {
console.log(' ')
console.log(' ')
console.log(
- 'Are your trying to run CapRover on a local machine or a machine without public IP?'
+ 'Are you trying to run CapRover on a local machine or a machine without a public IP?'
)
console.log(
'In that case, you need to add this to your installation command:'
@@ -206,10 +198,28 @@ function printTroubleShootingUrl() {
let myIp4: string
+async function initializeExternalIp() {
+ const externalIp = await import('public-ip')
+ return externalIp
+}
+
export function install() {
const backupManger = new BackupManager()
Promise.resolve()
+ .then(function () {
+ if (!EnvVar.ACCEPTED_TERMS) {
+ throw new Error(
+ `
+ Add the following to the installer line:
+ -e ACCEPTED_TERMS=true
+
+ Terms of service must be accepted before installation, view them here:
+ https://github.com/caprover/caprover/blob/master/TERMS_AND_CONDITIONS.md
+ `.trim()
+ )
+ }
+ })
.then(function () {
printTroubleShootingUrl()
})
@@ -217,11 +227,26 @@ export function install() {
return checkSystemReq()
})
.then(function () {
+ return initializeExternalIp()
+ })
+ .then(function (externalIp) {
if (EnvVar.MAIN_NODE_IP_ADDRESS) {
return EnvVar.MAIN_NODE_IP_ADDRESS
}
- return externalIp.v4()
+ try {
+ const externalIpFetched = externalIp.publicIpv4()
+ if (externalIpFetched) {
+ return externalIpFetched
+ }
+ } catch (error) {
+ console.error(
+ 'Defaulting to 127.0.0.1 - Error retrieving IP address:',
+ error
+ )
+ }
+
+ return '127.0.0.1'
})
.then(function (ip4) {
if (!ip4) {
@@ -255,13 +280,22 @@ export function install() {
return startServerOnPort_80_443_3000()
})
.then(function () {
- return checkPortOrThrow(myIp4, 80)
+ return checkPortOrThrow(
+ myIp4,
+ CaptainConstants.configs.nginxPortNumber80 as any
+ )
})
.then(function () {
- return checkPortOrThrow(myIp4, 443)
+ return checkPortOrThrow(
+ myIp4,
+ CaptainConstants.configs.nginxPortNumber443 as any
+ )
})
.then(function () {
- return checkPortOrThrow(myIp4, 3000)
+ return checkPortOrThrow(
+ myIp4,
+ CaptainConstants.configs.adminPortNumber3000 as any
+ )
})
.then(function () {
const imageName = CaptainConstants.configs.nginxImageName
@@ -274,7 +308,7 @@ export function install() {
return DockerApi.get().pullImage(imageName, undefined)
})
.then(function () {
- const imageName = CaptainConstants.certbotImageName
+ const imageName = CaptainConstants.configs.certbotImageName
console.log(`Pulling: ${imageName}`)
return DockerApi.get().pullImage(imageName, undefined)
})
@@ -282,6 +316,9 @@ export function install() {
return backupManger.checkAndPrepareRestoration()
})
.then(function () {
+ if (CaptainConstants.configs.useExistingSwarm) {
+ return DockerApi.get().ensureSwarmExists()
+ }
return DockerApi.get().initSwarm(myIp4)
})
.then(function (swarmId: string) {
@@ -292,18 +329,30 @@ export function install() {
return DockerApi.get().getLeaderNodeId()
})
.then(function (nodeId: string) {
- let volumeToMount = [
+ const volumeToMount = [
{
hostPath: CaptainConstants.captainBaseDirectory,
containerPath: CaptainConstants.captainBaseDirectory,
},
]
- let env = [] as IAppEnvVar[]
+ const env = [] as IAppEnvVar[]
env.push({
key: EnvVar.keys.IS_CAPTAIN_INSTANCE,
value: '1',
})
+ env.push({
+ key: EnvVar.keys.CAPTAIN_HOST_ADMIN_PORT,
+ value: CaptainConstants.configs.adminPortNumber3000 + '',
+ })
+ env.push({
+ key: EnvVar.keys.CAPTAIN_HOST_HTTP_PORT,
+ value: CaptainConstants.configs.nginxPortNumber80 + '',
+ })
+ env.push({
+ key: EnvVar.keys.CAPTAIN_HOST_HTTPS_PORT,
+ value: CaptainConstants.configs.nginxPortNumber443 + '',
+ })
if (EnvVar.DEFAULT_PASSWORD) {
env.push({
@@ -324,7 +373,14 @@ export function install() {
})
}
- let ports: IAppPort[] = []
+ if (EnvVar.CAPTAIN_BASE_DIRECTORY) {
+ env.push({
+ key: EnvVar.keys.CAPTAIN_BASE_DIRECTORY,
+ value: EnvVar.CAPTAIN_BASE_DIRECTORY,
+ })
+ }
+
+ const ports: IAppPort[] = []
let captainNameAndVersion = `${CaptainConstants.configs.publishedNameOnDockerHub}:${CaptainConstants.configs.version}`
@@ -350,8 +406,9 @@ export function install() {
ports.push({
protocol: 'tcp',
- containerPort: CaptainConstants.captainServiceExposedPort,
- hostPort: CaptainConstants.captainServiceExposedPort,
+ publishMode: 'host',
+ containerPort: 3000,
+ hostPort: CaptainConstants.configs.adminPortNumber3000,
})
return DockerApi.get().createServiceOnNodeId(
diff --git a/src/utils/Encryptor.ts b/src/utils/Encryptor.ts
index 679f85b93..5f5083b34 100644
--- a/src/utils/Encryptor.ts
+++ b/src/utils/Encryptor.ts
@@ -30,9 +30,9 @@ export default class CaptainEncryptor {
encrypt(clearText: string) {
const self = this
- let iv = crypto.randomBytes(IV_LENGTH)
- let key = Buffer.from(self.encryptionKey)
- let cipher = crypto.createCipheriv(algorithm, key, iv)
+ const iv = crypto.randomBytes(IV_LENGTH)
+ const key = Buffer.from(self.encryptionKey)
+ const cipher = crypto.createCipheriv(algorithm, key, iv)
let encrypted = cipher.update(clearText)
encrypted = Buffer.concat([encrypted, cipher.final()])
@@ -44,14 +44,14 @@ export default class CaptainEncryptor {
const self = this
text = text + ''
- let textParts = text.split(':')
- let shifted = textParts.shift()
+ const textParts = text.split(':')
+ const shifted = textParts.shift()
if (!shifted) throw new Error('text.split failed')
- let iv = Buffer.from(shifted, 'hex')
- let encryptedText = Buffer.from(textParts.join(':'), 'hex')
- let key = Buffer.from(self.encryptionKey)
- let decipher = crypto.createDecipheriv(algorithm, key, iv)
+ const iv = Buffer.from(shifted, 'hex')
+ const encryptedText = Buffer.from(textParts.join(':'), 'hex')
+ const key = Buffer.from(self.encryptionKey)
+ const decipher = crypto.createDecipheriv(algorithm, key, iv)
let decrypted = decipher.update(encryptedText)
decrypted = Buffer.concat([decrypted, decipher.final()])
diff --git a/src/utils/EnvVars.ts b/src/utils/EnvVars.ts
index 66bc6f73f..a978d7b7c 100644
--- a/src/utils/EnvVars.ts
+++ b/src/utils/EnvVars.ts
@@ -1,3 +1,26 @@
+/**
+ * Normalize a port into a number, string, or false.
+ */
+
+function normalizePort(val: string | undefined, defaultPort: number): number {
+ if (val === undefined) {
+ return defaultPort
+ }
+ const port = parseInt(val, 10)
+
+ if (isNaN(port)) {
+ // named pipe
+ return defaultPort
+ }
+
+ if (port >= 0) {
+ // port number
+ return port
+ }
+
+ return defaultPort
+}
+
export default {
keys: {
CAPTAIN_DOCKER_API: 'CAPTAIN_DOCKER_API',
@@ -5,6 +28,10 @@ export default {
DEFAULT_PASSWORD: 'DEFAULT_PASSWORD',
IS_CAPTAIN_INSTANCE: 'IS_CAPTAIN_INSTANCE',
DEMO_MODE_ADMIN_IP: 'DEMO_MODE_ADMIN_IP',
+ CAPTAIN_BASE_DIRECTORY: 'CAPTAIN_BASE_DIRECTORY',
+ CAPTAIN_HOST_HTTP_PORT: 'CAPTAIN_HOST_HTTP_PORT',
+ CAPTAIN_HOST_HTTPS_PORT: 'CAPTAIN_HOST_HTTPS_PORT',
+ CAPTAIN_HOST_ADMIN_PORT: 'CAPTAIN_HOST_ADMIN_PORT',
},
BY_PASS_PROXY_CHECK: process.env.BY_PASS_PROXY_CHECK,
@@ -13,11 +40,36 @@ export default {
CAPTAIN_IS_DEBUG: !!process.env.CAPTAIN_IS_DEBUG,
+ // Host ports - external to container. Refer it via CaptainConstants.configs.nginxPortNumber80
+ CAPTAIN_HOST_HTTP_PORT: normalizePort(
+ process.env.CAPTAIN_HOST_HTTP_PORT,
+ 80
+ ), //Tested with 10080
+ // Host ports - external to container. Refer it via CaptainConstants.configs.nginxPortNumber443
+ CAPTAIN_HOST_HTTPS_PORT: normalizePort(
+ process.env.CAPTAIN_HOST_HTTPS_PORT,
+ 443
+ ), //Tested with 10443
+ // Host ports - external to container. Refer it via CaptainConstants.configs.adminPortNumber3000
+ CAPTAIN_HOST_ADMIN_PORT: normalizePort(
+ process.env.CAPTAIN_HOST_ADMIN_PORT,
+ 3000
+ ), //Tested with 13000
+
MAIN_NODE_IP_ADDRESS: process.env.MAIN_NODE_IP_ADDRESS,
+ ACCEPTED_TERMS: !!process.env.ACCEPTED_TERMS,
+
IS_CAPTAIN_INSTANCE: process.env.IS_CAPTAIN_INSTANCE,
DEMO_MODE_ADMIN_IP: process.env.DEMO_MODE_ADMIN_IP,
DEFAULT_PASSWORD: process.env.DEFAULT_PASSWORD,
+
+ FORCE_ENABLE_PRO: process.env.FORCE_ENABLE_PRO,
+
+ CAPROVER_DISABLE_ANALYTICS:
+ !!process.env.CAPROVER_DISABLE_ANALYTICS || !!process.env.DO_NOT_TRACK,
+
+ CAPTAIN_BASE_DIRECTORY: process.env.CAPTAIN_BASE_DIRECTORY,
}
diff --git a/src/utils/GitHelper.ts b/src/utils/GitHelper.ts
index 720a3293e..12fb3e124 100644
--- a/src/utils/GitHelper.ts
+++ b/src/utils/GitHelper.ts
@@ -1,15 +1,31 @@
-import * as childPross from 'child_process'
+import * as childProcess from 'child_process'
import * as fs from 'fs-extra'
import * as path from 'path'
-import * as git from 'simple-git/promise'
+import git from 'simple-git'
import * as util from 'util'
import * as uuid from 'uuid'
import CaptainConstants from './CaptainConstants'
import Logger from './Logger'
import Utils from './Utils'
-const exec = util.promisify(childPross.exec)
+const exec = util.promisify(childProcess.exec)
export default class GitHelper {
+ private static SSH_PATH_RE = new RegExp(
+ [
+ /^\s*/,
+ /(?:(?[a-z]+):\/\/)?/,
+ /(?:(?[a-z_][a-z0-9_-]+)@)?/,
+ /(?[^\s/?#:]+)/,
+ /(?::(?[0-9]{1,5}):?)?/,
+ /(?:[/:](?[^\s/?#:]+))?/,
+ /(?:[/:](?(?:[^\s?#:.]|\.(?!git\/?\s*$))+))/,
+ /(?:(?.git))?\/?\s*$/,
+ ]
+ .map((r) => r.source)
+ .join(''),
+ 'i'
+ )
+
static getLastHash(directory: string) {
return git(directory) //
.silent(true) //
@@ -27,7 +43,7 @@ export default class GitHelper {
const USER = encodeURIComponent(username)
const PASS = encodeURIComponent(pass)
- if (!!sshKey) {
+ if (sshKey) {
const SSH_KEY_PATH = path.join(
CaptainConstants.captainRootDirectoryTemp,
uuid.v4()
@@ -37,9 +53,8 @@ export default class GitHelper {
const REPO_GIT_PATH = sanitized.repoPath
const SSH_PORT = sanitized.port
- const DOMAIN = GitHelper.getDomainFromSanitizedSshRepoPath(
- REPO_GIT_PATH
- )
+ const DOMAIN =
+ GitHelper.getDomainFromSanitizedSshRepoPath(REPO_GIT_PATH)
Logger.d(`Cloning SSH ${REPO_GIT_PATH}`)
@@ -64,7 +79,7 @@ export default class GitHelper {
.env('GIT_SSH_COMMAND', `ssh -i ${SSH_KEY_PATH}`) //
.raw([
'clone',
- '--recursive',
+ '--recurse-submodules',
'-b',
branch,
REPO_GIT_PATH,
@@ -78,19 +93,30 @@ export default class GitHelper {
// Some people put https when they are entering their git information
const REPO_PATH = GitHelper.sanitizeRepoPathHttps(repo)
- const remote = `https://${USER}:${PASS}@${REPO_PATH}`
+ // respect the explicit http repo path
+ const SCHEME = repo.startsWith('http://') ? 'http' : 'https'
+
+ const remote = `${SCHEME}://${USER}:${PASS}@${REPO_PATH}`
Logger.dev(`Cloning HTTPS ${remote}`)
return git() //
.silent(true) //
- .raw(['clone', '--recursive', '-b', branch, remote, directory])
- .then(function () {})
+ .raw([
+ 'clone',
+ '--recurse-submodules',
+ '-b',
+ branch,
+ remote,
+ directory,
+ ])
+ .then(function () {
+ //
+ })
}
}
// input is like this: ssh://git@github.com:22/caprover/caprover-cli.git
static getDomainFromSanitizedSshRepoPath(input: string) {
- input = input.substring(10)
- return input.substring(0, input.indexOf(':'))
+ return GitHelper.sanitizeRepoPathSsh(input).domain
}
// It returns a string like this "github.com/username/repository.git"
@@ -108,40 +134,23 @@ export default class GitHelper {
// It returns a string like this "ssh://git@github.com:22/caprover/caprover-cli.git"
static sanitizeRepoPathSsh(input: string) {
- input = Utils.removeHttpHttps(input)
- if (!input.startsWith('git@')) {
- // If we get here, we have something like github.com/username/repository.git
- if (input.indexOf(':') < 0) {
- input = input.replace('/', ':')
- }
- input = `git@${input}`
- }
-
- // At this point we have one of the following:
- // git@github.com:22/caprover/caprover
- // git@github.com:caprover/caprover
-
- let port = '22'
- const split = input.split(':')
- if (split.length == 2) {
- const secondSplit = split[1].split('/')
- if (`${Number(secondSplit[0])}` === secondSplit[0]) {
- // input is already in this format: git@github.com:22/caprover/caprover
- port = `${Number(secondSplit[0])}`
- } else {
- input = `${split[0]}:22/${split[1]}`
- }
- } else {
+ const found = input.match(GitHelper.SSH_PATH_RE)
+ if (!found) {
throw new Error(`Malformatted SSH path: ${input}`)
}
- if (!input.toLowerCase().startsWith('ssh://')) {
- input = `ssh://${input}`
- }
-
return {
- repoPath: input.replace(/\/$/, ''),
- port: port,
+ user: found.groups?.user ?? 'git',
+ domain: found.groups?.domain,
+ port: Number(found.groups?.port ?? 22),
+ owner: found.groups?.owner ?? '',
+ repo: found.groups?.repo,
+ suffix: found.groups?.suffix ?? '',
+ get repoPath() {
+ return `ssh://${this.user}@${this.domain}:${this.port}/${
+ this.owner
+ }${this.owner && '/'}${this.repo}${this.suffix}`
+ },
}
}
}
diff --git a/src/utils/Logger.ts b/src/utils/Logger.ts
index a0ff56be4..653d0f37b 100644
--- a/src/utils/Logger.ts
+++ b/src/utils/Logger.ts
@@ -1,6 +1,6 @@
+import moment from 'moment'
import { AnyError } from '../models/OtherTypes'
import CaptainConstants from './CaptainConstants'
-const moment = require('moment')
function errorize(error: AnyError) {
if (!(error instanceof Error)) {
@@ -29,9 +29,9 @@ class Logger {
}
}
- static e(msgOrError: AnyError) {
- let err = errorize(msgOrError)
- console.error(`${getTime() + err}
+ static e(msgOrError: AnyError, message?: string) {
+ const err = errorize(msgOrError)
+ console.error(`${getTime() + ((message || '') + '\n') + err}
${err.stack}`)
}
}
diff --git a/src/utils/MigrateCaptainDuckDuck.ts b/src/utils/MigrateCaptainDuckDuck.ts
deleted file mode 100644
index bc94395d9..000000000
--- a/src/utils/MigrateCaptainDuckDuck.ts
+++ /dev/null
@@ -1,361 +0,0 @@
-import * as fs from 'fs-extra'
-import * as path from 'path'
-import DataStore from '../datastore/DataStore'
-import DockerApi from '../docker/DockerApi'
-import { IRegistryTypes } from '../models/IRegistryInfo'
-import Authenticator from '../user/Authenticator'
-import CaptainConstants from './CaptainConstants'
-import Logger from './Logger'
-
-export default class MigrateCaptainDuckDuck {
- private oldFilePath: string
- private oldData: any
- constructor(
- private dataStore: DataStore,
- private authenticator: Authenticator
- ) {
- this.oldFilePath = path.join(
- CaptainConstants.captainDataDirectory,
- 'config.conf'
- )
- }
- migrateIfNeeded() {
- // TODO ensure this is all happening
- // Captain Boots-up
- // - Check if old conf file is available
- // - if so, then read json file and convert the old data into new data and save the data
- // - one all promises are done.
- // - Remove the old conf file and if it fails just hard crash.
- //
- // Migration limitations
- // Repos push webhook changes, need to be re-set in your git repo
- // Remote registries will need to be re-entered
- // Revert to version does not work for images built before the migration, e.g. failed deploys and images pushed to registry do not work
-
- const self = this
- const oldFilePath = self.oldFilePath
- if (!fs.pathExistsSync(oldFilePath)) {
- Logger.d('Migration not needed, skipping.')
- return Promise.resolve(false)
- }
-
- return this.performMigration().then(function () {
- return true
- })
- }
-
- performMigration() {
- Logger.d('Migration starting now...')
-
- const self = this
- const oldFilePath = self.oldFilePath
-
- const dataStore = this.dataStore
-
- return Promise.resolve()
- .then(function (data) {
- return fs.readJson(
- path.join(
- CaptainConstants.captainDataDirectory,
- 'config.conf'
- )
- )
- })
- .then(function (dataRetrieved) {
- self.oldData = dataRetrieved
- })
- .then(function () {
- Logger.d('Migrating basic configs...')
- const oldData = self.oldData
-
- const promises: Promise[] = []
-
- if (oldData.customDomain) {
- promises.push(
- dataStore.setCustomDomain(oldData.customDomain)
- )
- }
-
- if (oldData.hashedPassword) {
- promises.push(
- dataStore.setHashedPassword(oldData.hashedPassword)
- )
- }
-
- if (oldData.emailAddress) {
- promises.push(
- dataStore.setUserEmailAddress(oldData.emailAddress)
- )
- }
-
- if (oldData.hasRootSsl) {
- promises.push(dataStore.setHasRootSsl(!!oldData.hasRootSsl))
- }
-
- if (oldData.forceRootSsl) {
- promises.push(dataStore.setForceSsl(!!oldData.forceRootSsl))
- }
-
- if (oldData.hasRegistrySsl) {
- promises.push(
- dataStore.setHasRegistrySsl(!!oldData.hasRegistrySsl)
- )
- }
-
- if (oldData.NGINX_BASE_CONFIG || oldData.NGINX_CAPTAIN_CONFIG) {
- promises.push(
- dataStore.setNginxConfig(
- oldData.NGINX_BASE_CONFIG,
- oldData.NGINX_CAPTAIN_CONFIG
- )
- )
- }
-
- if (oldData.netDataInfo && oldData.netDataInfo.isEnabled) {
- promises.push(dataStore.setNetDataInfo(oldData.netDataInfo))
- }
-
- return Promise.all(promises)
- })
- .then(function () {
- const oldData = self.oldData
- if (!oldData.captainRegistryAuthSecretVer) {
- return Promise.resolve()
- }
-
- const authObj = JSON.parse(
- fs
- .readFileSync(
- `/run/secrets/captain-reg-auth${Number(
- oldData.captainRegistryAuthSecretVer
- )}`
- )
- .toString()
- )
-
- const registriesDataStore = dataStore.getRegistriesDataStore()
-
- if (
- (authObj.serveraddress as string).endsWith(
- `${oldData.customDomain}:${CaptainConstants.configs.registrySubDomainPort}` as string
- )
- ) {
- // local
- return registriesDataStore
- .addRegistryToDb(
- authObj.username,
- authObj.password,
- authObj.serveraddress,
- authObj.username,
- IRegistryTypes.LOCAL_REG
- )
- .then(function (idOfNewReg) {
- return registriesDataStore.setDefaultPushRegistryId(
- idOfNewReg
- )
- })
- } else {
- // remote
- return registriesDataStore
- .addRegistryToDb(
- authObj.username,
- authObj.password,
- authObj.serveraddress,
- authObj.username,
- IRegistryTypes.REMOTE_REG
- )
- .then(function (idOfNewReg) {
- return registriesDataStore.setDefaultPushRegistryId(
- idOfNewReg
- )
- })
- }
- })
- .then(function () {
- return DockerApi.get().getAllServices()
- })
- .then(function (dockerServices) {
- const oldAppDefinitions = self.oldData.appDefinitions
- if (!oldAppDefinitions) return Promise.resolve()
-
- function findCurrentlyInUseImageForApp(
- appNameToSearch: string
- ) {
- for (let i = 0; i < dockerServices.length; i++) {
- const element = dockerServices[i]
- if (
- element.Spec.Name ===
- 'srv-captain--' + appNameToSearch
- ) {
- return element.Spec.TaskTemplate.ContainerSpec.Image
- }
- }
-
- return ''
- }
-
- const promises: Promise[] = []
-
- Object.keys(oldAppDefinitions).forEach((appName) => {
- const app = JSON.parse(
- JSON.stringify(oldAppDefinitions[appName])
- )
-
- const appStore = dataStore.getAppsDataStore()
-
- const p = Promise.resolve() //
- .then(function () {
- return appStore.registerAppDefinition(
- appName,
- !!app.hasPersistentData
- )
- })
- .then(function () {
- for (
- let index = 0;
- index < app.volumes.length;
- index++
- ) {
- const element = app.volumes[index]
- element.type = undefined
- }
-
- const repoInfo = {
- user: '',
- password: '',
- sshKey: '',
- branch: '',
- repo: '',
- }
-
- if (
- app.appPushWebhook &&
- app.appPushWebhook.repoInfo
- ) {
- const extracted = JSON.parse(
- Buffer.from(
- app.appPushWebhook.repoInfo.split(
- '.'
- )[1],
- 'base64'
- ).toString()
- ).data
-
- repoInfo.user = extracted.user
- repoInfo.password = extracted.password
- repoInfo.branch = extracted.branch
- repoInfo.repo = extracted.repo
- }
-
- return Promise.resolve()
- .then(function () {
- const customDomains = app.customDomain || []
- const hasDefaultSubDomainSsl = !!app.hasDefaultSubDomainSsl
- return appStore.addCustomDomainForAppForMigration(
- appName,
- hasDefaultSubDomainSsl,
- customDomains
- )
- })
- .then(function () {
- const oldVers: any[] = app.versions || []
- const newVers: IAppVersion[] = []
- const newVersOnlyDeployVersion: IAppVersion[] = []
- const deployedVersion = Number(
- app.deployedVersion
- )
-
- oldVers.forEach((element) => {
- let thisVersion = Number(
- element.version
- )
-
- let deployedImageName = `img-captain--${appName}:${thisVersion}`
-
- if (thisVersion === deployedVersion) {
- deployedImageName = findCurrentlyInUseImageForApp(
- appName
- )
-
- // Only add the currently deployed version. Revert won't work for other versions as
- // it's impossible to guess their image name correct 100% due to the fact that
- // we don't know if they were pushed to the registry or not
- newVersOnlyDeployVersion.push({
- timeStamp:
- element.timeStamp || '',
- version: thisVersion,
- gitHash: element.gitHash,
- deployedImageName,
- })
- }
-
- newVers.push({
- timeStamp: element.timeStamp || '',
- version: thisVersion,
- gitHash: element.gitHash,
- deployedImageName,
- })
- })
-
- const deployedVersionFound =
- newVersOnlyDeployVersion.length === 1
- if (!deployedVersionFound) {
- Logger.d(
- '********* WARNING!! *********'
- )
- Logger.d(
- `** Not able to find the deployed image for ${appName}. This app might misbehave!! **`
- )
- }
-
- return appStore.setVersionsForMigration(
- appName,
- deployedVersionFound
- ? newVersOnlyDeployVersion
- : newVers,
- deployedVersion
- )
- })
- .then(function () {
- return appStore.updateAppDefinitionInDb(
- appName,
- '',
- Number(app.instanceCount),
- CaptainConstants.defaultCaptainDefinitionPath,
- app.envVars || [],
- app.volumes || [],
- app.nodeId || '',
- !!app.notExposeAsWebApp,
- 80,
- undefined,
- !!app.forceSsl,
- app.ports || [],
- repoInfo,
- self.authenticator,
- app.customNginxConfig,
- app.preDeployFunction,
- '',
- false,
- {
- enabled: false,
- }
- )
- })
- })
- promises.push(p)
- })
-
- return Promise.all(promises).then(function () {})
- })
- .then(function () {
- Logger.d(
- 'Old data migrated to new format, deleting the old format...'
- )
- fs.remove(oldFilePath)
- })
- .then(function () {
- Logger.d('Migration successfully done!')
- return Promise.resolve()
- })
- }
-}
diff --git a/src/utils/TemplateHelperVersionPrinter.ts b/src/utils/TemplateHelperVersionPrinter.ts
index 388859266..403d469cd 100644
--- a/src/utils/TemplateHelperVersionPrinter.ts
+++ b/src/utils/TemplateHelperVersionPrinter.ts
@@ -1,5 +1,6 @@
import request = require('request')
import ApiStatusCodes from '../api/ApiStatusCodes'
+import { IHashMapGeneric } from '../models/ICacheGeneric'
import { ITemplate } from '../models/OtherTypes'
import Logger from './Logger'
@@ -71,6 +72,7 @@ function firstEndsWithSecond(str1: string, str2: string) {
function isEmpty(obj: any) {
for (const key in obj) {
+ // eslint-disable-next-line no-prototype-builtins
if (obj.hasOwnProperty(key)) {
return false
}
diff --git a/src/utils/Utils.ts b/src/utils/Utils.ts
index 924780bee..04f6d401d 100644
--- a/src/utils/Utils.ts
+++ b/src/utils/Utils.ts
@@ -1,9 +1,14 @@
+import { CronJob } from 'cron'
import * as crypto from 'crypto'
import { remove } from 'fs-extra'
import * as yaml from 'yaml'
import Logger from './Logger'
export default class Utils {
+ static copyObject(obj: T): T {
+ return JSON.parse(JSON.stringify(obj)) as T
+ }
+
static removeHttpHttps(input: string) {
input = input.trim()
input = input.replace(/^(?:http?:\/\/)?/i, '')
@@ -51,7 +56,7 @@ export default class Utils {
}
static convertYamlOrJsonToObject(raw: string | undefined) {
- raw = !!raw ? `${raw}`.trim() : ''
+ raw = raw ? `${raw}`.trim() : ''
if (!raw.length) {
return undefined
}
@@ -101,7 +106,7 @@ export default class Utils {
}
static filterInPlace(arr: T[], condition: (value: T) => boolean) {
- let newArray = arr.filter(condition)
+ const newArray = arr.filter(condition)
arr.splice(0, arr.length)
newArray.forEach((value) => arr.push(value))
}
@@ -119,7 +124,7 @@ export default class Utils {
promises: (() => Promise)[],
curr?: number
): Promise {
- let currCorrected = curr ? curr : 0
+ const currCorrected = curr ? curr : 0
if (promises.length > currCorrected) {
return promises[currCorrected]().then(function () {
return Utils.runPromises(promises, currCorrected + 1)
@@ -158,4 +163,21 @@ export default class Utils {
throw 'Domain name is not accepted. Custom domain cannot be subdomain of root domain.'
}
}
+
+ static validateCron(schedule: string) {
+ try {
+ const testJob = new CronJob(
+ schedule, // cronTime
+ function () {}, // onTick
+ null, // onComplete
+ false, // start
+ 'UTC' // timezone
+ )
+ testJob.stop()
+ } catch (e) {
+ return false
+ }
+
+ return true
+ }
}
diff --git a/template/root-nginx-conf.ejs b/template/root-nginx-conf.ejs
index fb145fe03..3c4be1d3a 100644
--- a/template/root-nginx-conf.ejs
+++ b/template/root-nginx-conf.ejs
@@ -22,7 +22,7 @@
allow 172.16.0.0/12;
allow 10.0.0.0/8;
allow 192.168.0.0/16;
-
+
deny all;
}
@@ -39,8 +39,35 @@
# Captain dashboard at captain.captainroot.domain.com
server {
- listen 80;
- client_max_body_size 300m;
+ listen 80;
+ client_max_body_size 300m;
+
+ gzip on;
+ gzip_disable "MSIE [1-6]\.";
+ gzip_vary on;
+ gzip_proxied any;
+ gzip_comp_level 6;
+ gzip_min_length 16000;
+ gzip_buffers 16 8k;
+ gzip_types
+ text/css
+ text/plain
+ text/javascript
+ application/javascript
+ application/json
+ application/x-javascript
+ application/xml
+ application/xml+rss
+ application/xhtml+xml
+ application/x-font-ttf
+ application/x-font-opentype
+ application/vnd.ms-fontobject
+ image/svg+xml
+ image/x-icon
+ application/rss+xml
+ application/atom_xml;
+
+
<%
if (captain.hasRootSsl) {
@@ -85,11 +112,12 @@
location /.well-known/acme-challenge/ {
root <%-captain.staticWebRoot%>;
}
-
+
# Used by CapRover for health check
location /.well-known/captain-identifier {
root <%-captain.staticWebRoot%>;
}
+
}
diff --git a/template/server-block-conf.ejs b/template/server-block-conf.ejs
index 4f57ec9e4..f33a6f65a 100644
--- a/template/server-block-conf.ejs
+++ b/template/server-block-conf.ejs
@@ -36,11 +36,17 @@ server {
}
if (s.hasSsl) {
%>
- listen 443 ssl http2;
+ listen 443 ssl;
+ http2 on;
ssl_certificate <%-s.crtPath%>;
ssl_certificate_key <%-s.keyPath%>;
<%
}
+ if (s.logAccessPath) {
+ %>
+ access_log <%-s.logAccessPath%>;
+ <%
+ }
%>
client_max_body_size 500m;
@@ -57,30 +63,45 @@ server {
location / {
- <%
- if (s.httpBasicAuthPath) {
- %>
- auth_basic "Restricted Access";
- auth_basic_user_file <%-s.httpBasicAuthPath%>;
- <%
- }
- %>
-
- proxy_pass $upstream;
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Proto $scheme;
- <%
- if (s.websocketSupport) {
- %>
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection "upgrade";
- proxy_http_version 1.1;
- <%
- }
- %>
+ <%
+ if (s.redirectToPath) {
+ %>
+ return 302 <%-s.redirectToPath%>$request_uri;
+ <%
+ } else {
+ %>
+
+ <%
+ if (s.httpBasicAuthPath) {
+ %>
+ auth_basic "Restricted Access";
+ auth_basic_user_file <%-s.httpBasicAuthPath%>;
+ <%
+ }
+ %>
+
+ proxy_pass $upstream;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Proto $scheme;
+
+ <%
+ if (s.websocketSupport) {
+ %>
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+ proxy_http_version 1.1;
+ <%
+ }
+ %>
+
+
+ <%
+ }
+ %>
+
}
# Used by Lets Encrypt
diff --git a/template/themes/10-legacy.theme b/template/themes/10-legacy.theme
new file mode 100644
index 000000000..5e5acfb3d
--- /dev/null
+++ b/template/themes/10-legacy.theme
@@ -0,0 +1,23 @@
+###CapRoverTheme.name:
+Legacy
+
+
+###CapRoverTheme.content:
+{
+ algorithm: isDarkMode ? darkAlgorithm : defaultAlgorithm,
+ token: {
+ colorPrimary: '#1b8ad3',
+ colorLink: '#1b8ad3',
+ fontFamily: `QuickSand, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
+'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji',
+'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'`,
+ }
+}
+
+
+###CapRoverTheme.headEmbed:
+
+
+
+###CapRoverTheme.extra:
+{siderTheme:'dark'}
\ No newline at end of file
diff --git a/template/themes/20-teal-zen.theme b/template/themes/20-teal-zen.theme
new file mode 100644
index 000000000..59cd7e79a
--- /dev/null
+++ b/template/themes/20-teal-zen.theme
@@ -0,0 +1,36 @@
+###CapRoverTheme.name:
+Teal Zen
+
+
+
+###CapRoverTheme.content:
+{
+ algorithm: isDarkMode ? darkAlgorithm : defaultAlgorithm,
+ components: {
+ Menu: {
+ itemBg: isDarkMode ? '#151515' : '#fafafa',
+ },
+ Layout: {
+ headerBg: '#1a362f',
+ },
+ },
+ token: {
+ colorPrimary: '#008264',
+ colorLink: '#02bf94',
+ fontFamily: `'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI',
+'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji',
+'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'`,
+ borderRadius: 20,
+ lineWidth: 2,
+ colorBgLayout: '#dadada',
+ },
+}
+
+###CapRoverTheme.headEmbed:
+
+
+
+
+###CapRoverTheme.extra:
+{}
\ No newline at end of file
diff --git a/template/themes/30-robotic.theme b/template/themes/30-robotic.theme
new file mode 100644
index 000000000..6c234577b
--- /dev/null
+++ b/template/themes/30-robotic.theme
@@ -0,0 +1,58 @@
+###CapRoverTheme.name:
+Robotic
+
+
+
+###CapRoverTheme.content:
+{
+ algorithm: isDarkMode ? darkAlgorithm : defaultAlgorithm,
+ components: {
+ Menu: {
+ itemPadding: '0 20px',
+ itemHeight: '40px',
+ height: '56px',
+ colorText: '#fff',
+ colorBg: '#3f3f3f',
+ colorSubBg: '#4f4f4f',
+ colorItemBg: '#5f5f5f',
+ colorItemBgActive: '#7f7bff',
+ colorItemText: '#fff',
+ colorItemTextActive: '#fff',
+ colorItemIcon: '#fff',
+ colorItemIconActive: '#fff',
+ colorSider: '#3f3f3f',
+ colorSiderTitle: '#fff',
+ colorSiderTitleIcon: '#fff',
+ colorSiderTrigger: '#fff',
+ colorSiderTriggerIcon: '#fff',
+ colorSiderTriggerIconActive: '#7f7bff',
+ },
+ Layout: {
+ headerBg: '#3f3f3f',
+ footerBg: '#4f4f4f',
+ siderWidth: '256px',
+ layoutBg: '#f0f2f5',
+ contentBg: '#fff',
+ colorPrimary: '#7f7bff',
+ colorPrimaryBg: '#7f7bff',
+ colorInfo: '#7f7bff',
+ },
+ },
+ token: {
+ borderRadius: 2,
+ colorPrimary: '#7f7bff',
+ colorLink: '#2672c9',
+ fontFamily: `'Oxanium', -apple-system, BlinkMacSystemFont, 'Segoe UI',
+ 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji',
+ 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'`,
+ },
+}
+
+
+###CapRoverTheme.headEmbed:
+
+
+
+
+###CapRoverTheme.extra:
+{}
\ No newline at end of file
diff --git a/tests/ApacheMd5.test.ts b/tests/ApacheMd5.test.ts
new file mode 100644
index 000000000..85f09606f
--- /dev/null
+++ b/tests/ApacheMd5.test.ts
@@ -0,0 +1,41 @@
+import ApacheMd5 from '../src/utils/ApacheMd5'
+
+test('apache_test', () => {
+ // Test for valid password.
+ {
+ const encrypted = ApacheMd5.createApacheHash(
+ 'su/P3R%se#ret!',
+ '$apr1$cF.rAvCe$YlzjmK4qu/ia6hC8CNfnm/'
+ )
+ expect(encrypted).toBe('$apr1$cF.rAvCe$YlzjmK4qu/ia6hC8CNfnm/')
+ }
+
+ // Test for valid short password.
+ {
+ const encrypted = ApacheMd5.createApacheHash(
+ '123456',
+ '$1$VV5.4y5.$JbhytGQBPmDHBbrSjF2i7.'
+ )
+ expect(encrypted).toBe('$1$VV5.4y5.$JbhytGQBPmDHBbrSjF2i7.')
+ }
+
+ // Test for invalid password.
+ {
+ const encrypted =
+ ApacheMd5.createApacheHash(
+ 'invalidPass',
+ '$apr1$cF.rAvCe$YlzjmK4qu/ia6hC8CNfnm/'
+ ) == '$apr1$cF.rAvCe$YlzjmK4qu/ia6hC8CNfnm/'
+ expect(encrypted).toBeFalsy()
+ }
+
+ // Test for invalid short password.
+ {
+ const encrypted =
+ ApacheMd5.createApacheHash(
+ 'passw0rdpa55wore',
+ '$1$VV5.4y5.$9981ZZhKTHmeXFKQur4cV0'
+ ) == '$1$VV5.4y5.$9981ZZhKTHmeXFKQur4cV0'
+ expect(encrypted).toBeFalsy()
+ }
+})
diff --git a/tests/CertCommandGenerator.test.ts b/tests/CertCommandGenerator.test.ts
new file mode 100644
index 000000000..02d5b3ed0
--- /dev/null
+++ b/tests/CertCommandGenerator.test.ts
@@ -0,0 +1,61 @@
+import { CertCommandGenerator } from '../src/user/system/CertbotManager'
+
+const defaultCommand = 'certbot certonly --domain ${domainName}'
+const exampleRule = {
+ domain: 'example.com',
+ command: 'certbot certonly --manual --preferred-challenges=dns --domain ${domainName}',
+}
+const wildcardRule = {
+ domain: '*',
+ command: 'certbot renew',
+}
+const nullCommandRule = {
+ domain: 'fallback.com',
+}
+const fakeWebroot = '/path/to/webroot'
+
+test('uses default command when no rules match', () => {
+ const generator = new CertCommandGenerator([], defaultCommand)
+ expect(generator.getCertbotCertCommand('nonmatching.com', fakeWebroot))
+ .toEqual([ 'certbot', 'certonly', '--domain', 'nonmatching.com' ])
+})
+
+test('uses specific rule when domain matches exactly', () => {
+ const generator = new CertCommandGenerator([ exampleRule ], defaultCommand)
+ expect(generator.getCertbotCertCommand('example.com', fakeWebroot))
+ .toEqual([ 'certbot', 'certonly', '--manual', '--preferred-challenges=dns', '--domain', 'example.com' ])
+})
+
+test('uses wildcard rule for any domain', () => {
+ const generator = new CertCommandGenerator([ wildcardRule ], defaultCommand)
+ expect(generator.getCertbotCertCommand('anything.com', fakeWebroot)).toEqual([ 'certbot', 'renew' ])
+})
+
+test('matches subdomain to rule', () => {
+ const generator = new CertCommandGenerator([ exampleRule ], defaultCommand)
+ expect(generator.getCertbotCertCommand('sub.example.com', fakeWebroot))
+ .toEqual([ 'certbot', 'certonly', '--manual', '--preferred-challenges=dns', '--domain', 'sub.example.com' ])
+})
+
+test('replaces variables in command template', () => {
+ const generator = new CertCommandGenerator([], defaultCommand)
+ expect(generator.getCertbotCertCommand('example.com', fakeWebroot))
+ .toEqual([ 'certbot', 'certonly', '--domain', 'example.com' ])
+})
+
+test('leaves unreplaced placeholders unchanged', () => {
+ const generator = new CertCommandGenerator([], 'echo ${missing}')
+ expect(generator.getCertbotCertCommand('example.com', fakeWebroot)).toEqual([ 'echo', '${missing}' ])
+})
+
+test('first matching rule is used when multiple rules could apply', () => {
+ const generator = new CertCommandGenerator([ exampleRule, wildcardRule ], defaultCommand)
+ expect(generator.getCertbotCertCommand('example.com', fakeWebroot))
+ .toEqual([ 'certbot', 'certonly', '--manual', '--preferred-challenges=dns', '--domain', 'example.com' ])
+})
+
+test('falls back to default command when rule command is null', () => {
+ const generator = new CertCommandGenerator([ nullCommandRule ], defaultCommand)
+ expect(generator.getCertbotCertCommand('nullcommand.com', fakeWebroot))
+ .toEqual([ 'certbot', 'certonly', '--domain', 'nullcommand.com' ])
+})
diff --git a/tests/GitHelper.test.ts b/tests/GitHelper.test.ts
index fd38e8a77..01868daff 100644
--- a/tests/GitHelper.test.ts
+++ b/tests/GitHelper.test.ts
@@ -24,20 +24,42 @@ test('Testing - sanitizeRepoPathSsh', () => {
).toBe('ssh://git@github.com:22/username/repository.git')
})
+test('Testing - sanitizeRepoPathSsh - with extra path components', () => {
+ const sanitized = GitHelper.sanitizeRepoPathSsh(
+ ' git@gitlab.com/test1/test2/test3.git'
+ );
+ expect(sanitized).toEqual({
+ domain: "gitlab.com",
+ owner: "test1",
+ port: 22,
+ repo: "test2/test3",
+ repoPath: "ssh://git@gitlab.com:22/test1/test2/test3.git",
+ suffix: ".git",
+ user: "git",
+ })
+})
+
test('Testing - sanitizeRepoPathSsh - port', () => {
expect(
GitHelper.sanitizeRepoPathSsh(
' git@github.com:username/repository.git/ '
).port
- ).toBe('22')
+ ).toBe(22)
})
test('Testing - sanitizeRepoPathSsh - custom port', () => {
- expect(
- GitHelper.sanitizeRepoPathSsh(
- ' git@github.com:1234/username/repository.git/ '
- ).port
- ).toBe('1234')
+ const sanitized = GitHelper.sanitizeRepoPathSsh(
+ ' git@github.com:1234/username/repository.git/ '
+ )
+ expect(sanitized).toEqual({
+ user: "git",
+ domain: "github.com",
+ owner: "username",
+ port: 1234,
+ repo: "repository",
+ suffix: ".git",
+ repoPath: "ssh://git@github.com:1234/username/repository.git",
+ })
})
test('Testing - sanitizeRepoPathSsh from HTTPS', () => {
@@ -48,6 +70,121 @@ test('Testing - sanitizeRepoPathSsh from HTTPS', () => {
).toBe('ssh://git@github.com:22/username/repository.git')
})
+test('Testing - sanitizeRepoPathSsh - name with dot', () => {
+ expect(
+ GitHelper.sanitizeRepoPathSsh(' github.com/owner/site.com ').repoPath
+ ).toBe('ssh://git@github.com:22/owner/site.com')
+})
+
+test('Testing - sanitizeRepoPathSsh - name with dot and git suffix', () => {
+ expect(
+ GitHelper.sanitizeRepoPathSsh(' github.com/owner/site.com.git ')
+ .repoPath
+ ).toBe('ssh://git@github.com:22/owner/site.com.git')
+})
+
+test('Testing - sanitizeRepoPathSsh - name containing ".git"', () => {
+ expect(
+ GitHelper.sanitizeRepoPathSsh(' github.com/owner/repo.github ')
+ .repoPath
+ ).toBe('ssh://git@github.com:22/owner/repo.github')
+})
+
+test('Testing - sanitizeRepoPathSsh - name containing ".git" and git suffix', () => {
+ expect(
+ GitHelper.sanitizeRepoPathSsh(' github.com/owner/repo.github.git ')
+ .repoPath
+ ).toBe('ssh://git@github.com:22/owner/repo.github.git')
+})
+
+test('Testing - sanitizeRepoPathSsh - name containing ".git", git suffix and /', () => {
+ expect(
+ GitHelper.sanitizeRepoPathSsh(' github.com/owner/repo.github.git/ ')
+ .repoPath
+ ).toBe('ssh://git@github.com:22/owner/repo.github.git')
+})
+
+test('Testing - sanitizeRepoPathSsh - not git suffix', () => {
+ expect(
+ GitHelper.sanitizeRepoPathSsh(' github.com/owner/repository ').repoPath
+ ).toBe('ssh://git@github.com:22/owner/repository')
+})
+
+test('Testing - sanitizeRepoPathSsh - alt domain', () => {
+ expect(
+ GitHelper.sanitizeRepoPathSsh(
+ ' git@git.alt-domain.com/owner/repository.git/ '
+ ).repoPath
+ ).toBe('ssh://git@git.alt-domain.com:22/owner/repository.git')
+})
+
+test('Testing - sanitizeRepoPathSsh - alt user', () => {
+ expect(
+ GitHelper.sanitizeRepoPathSsh(
+ ' foobar@github.com/owner/repository.git/ '
+ ).repoPath
+ ).toBe('ssh://foobar@github.com:22/owner/repository.git')
+})
+
+test('Testing - sanitizeRepoPathSsh - default user', () => {
+ expect(
+ GitHelper.sanitizeRepoPathSsh(' github.com/owner/repository.git/ ')
+ .repoPath
+ ).toBe('ssh://git@github.com:22/owner/repository.git')
+})
+
+test('Testing - sanitizeRepoPathSsh - no owner', () => {
+ expect(
+ GitHelper.sanitizeRepoPathSsh(' git@github.com:repository.git/ ')
+ .repoPath
+ ).toBe('ssh://git@github.com:22/repository.git')
+})
+
+test('Testing - sanitizeRepoPathSsh - with extra path components separated by column', () => {
+ const sanitized = GitHelper.sanitizeRepoPathSsh(
+ ' git@ssh.dev.azure.com:v3/myOrg/My%20Project%20Name/my-repo-name '
+ )
+ expect(sanitized).toEqual({
+ user: 'git',
+ domain: 'ssh.dev.azure.com',
+ port: 22,
+ owner: 'v3',
+ repo: "myOrg/My%20Project%20Name/my-repo-name",
+ repoPath: "ssh://git@ssh.dev.azure.com:22/v3/myOrg/My%20Project%20Name/my-repo-name",
+ suffix: "",
+ })
+})
+
+test('Testing - sanitizeRepoPathSsh - with extra path components and port separated by column', () => {
+ const sanitized = GitHelper.sanitizeRepoPathSsh(
+ ' git@ssh.dev.azure.com:422:v3/myOrg/My%20Project%20Name/my-repo-name '
+ )
+ expect(sanitized).toEqual({
+ user: "git",
+ domain: 'ssh.dev.azure.com',
+ owner: "v3",
+ port: 422,
+ repo: "myOrg/My%20Project%20Name/my-repo-name",
+ repoPath: "ssh://git@ssh.dev.azure.com:422/v3/myOrg/My%20Project%20Name/my-repo-name",
+ suffix: "",
+ })
+})
+
+test('Testing - sanitizeRepoPathSsh - with extra path components and "owner" instead of "git" user', () => {
+ const sanitized = GitHelper.sanitizeRepoPathSsh(
+ ' myOrg@vs-ssh.visualstudio.com:v3/myOrg/My%20Project%20Name/my-repo-name '
+ )
+ expect(sanitized).toEqual({
+ user: 'myOrg',
+ domain: 'vs-ssh.visualstudio.com',
+ port: 22,
+ owner: "v3",
+ repo: "myOrg/My%20Project%20Name/my-repo-name",
+ repoPath: "ssh://myOrg@vs-ssh.visualstudio.com:22/v3/myOrg/My%20Project%20Name/my-repo-name",
+ suffix: "",
+ })
+})
+
test('Testing - getDomainFromSanitizedSshRepoPath - pure', () => {
expect(
GitHelper.getDomainFromSanitizedSshRepoPath(
@@ -75,3 +212,31 @@ test('Testing - getDomainFromSanitizedSshRepoPath from HTTPS', () => {
)
).toBe('github.com')
})
+
+test('Testing - getDomainFromSanitizedSshRepoPath - alt domain', () => {
+ expect(
+ GitHelper.getDomainFromSanitizedSshRepoPath(
+ ' ssh://user@some.other-domain.com/owner/repository.git/ '
+ )
+ ).toBe('some.other-domain.com')
+})
+
+test('Testing - getDomainFromSanitizedSshRepoPath - with extra path components separated by column', () => {
+ expect(
+ GitHelper.getDomainFromSanitizedSshRepoPath(
+ GitHelper.sanitizeRepoPathSsh(
+ ' git@ssh.dev.azure.com:422:v3/myOrg/My%20Project%20Name/my-repo-name '
+ ).repoPath
+ )
+ ).toBe('ssh.dev.azure.com')
+})
+
+test('Testing - getDomainFromSanitizedSshRepoPath - with extra path components separated by column and "owner" instead of "git" user', () => {
+ expect(
+ GitHelper.getDomainFromSanitizedSshRepoPath(
+ GitHelper.sanitizeRepoPathSsh(
+ ' myOrg@vs-ssh.visualstudio.com:v3/myOrg/My%20Project%20Name/my-repo-name '
+ ).repoPath
+ )
+ ).toBe('vs-ssh.visualstudio.com')
+})
diff --git a/tests/ProjectSorter.test.ts b/tests/ProjectSorter.test.ts
new file mode 100644
index 000000000..9b189550a
--- /dev/null
+++ b/tests/ProjectSorter.test.ts
@@ -0,0 +1,145 @@
+import configstore from 'configstore'
+import AppsDataStore from '../src/datastore/AppsDataStore'
+import ProjectsDataStore from '../src/datastore/ProjectsDataStore'
+import { ProjectDefinition } from '../src/models/ProjectDefinition'
+
+describe('ProjectsDataStore', () => {
+ let projectsDataStore: ProjectsDataStore
+
+ beforeEach(() => {
+ // Mock the configstore and AppsDataStore
+ const mockConfigstore = new configstore('test')
+ const mockAppsDataStore = {} as AppsDataStore
+ projectsDataStore = new ProjectsDataStore(
+ mockConfigstore,
+ mockAppsDataStore
+ )
+ })
+
+ describe('organizeFromTheLeafsToRoot', () => {
+ it('should correctly organize projects from leaves to root', () => {
+ const input = [
+ {
+ id: '1',
+ name: 'Root 1',
+ parentProjectId: '',
+ description: 'Root 1 desc',
+ },
+ {
+ id: '2',
+ name: 'Child 1',
+ parentProjectId: '1',
+ description: 'Child 1 desc',
+ },
+ {
+ id: '3',
+ name: 'Child 2',
+ parentProjectId: '1',
+ description: 'Child 2 desc',
+ },
+ {
+ id: '4',
+ name: 'Grandchild 1',
+ parentProjectId: '2',
+ description: 'Grandchild 1 desc',
+ },
+ {
+ id: '5',
+ name: 'Root 2',
+ parentProjectId: '',
+ description: 'Root 2 desc',
+ },
+ {
+ id: '6',
+ name: 'Child 3',
+ parentProjectId: '5',
+ description: 'Child 3 desc',
+ },
+ ]
+
+ const expected = [
+ {
+ id: '4',
+ name: 'Grandchild 1',
+ parentProjectId: '2',
+ description: 'Grandchild 1 desc',
+ },
+ {
+ id: '2',
+ name: 'Child 1',
+ parentProjectId: '1',
+ description: 'Child 1 desc',
+ },
+ {
+ id: '3',
+ name: 'Child 2',
+ parentProjectId: '1',
+ description: 'Child 2 desc',
+ },
+ {
+ id: '1',
+ name: 'Root 1',
+ parentProjectId: '',
+ description: 'Root 1 desc',
+ },
+ {
+ id: '6',
+ name: 'Child 3',
+ parentProjectId: '5',
+ description: 'Child 3 desc',
+ },
+ {
+ id: '5',
+ name: 'Root 2',
+ parentProjectId: '',
+ description: 'Root 2 desc',
+ },
+ ]
+
+ const result = projectsDataStore.organizeFromTheLeafsToRoot(input)
+
+ expect(result).toEqual(expected)
+ })
+
+ it('should handle empty input', () => {
+ const input: ProjectDefinition[] = []
+ const result = projectsDataStore.organizeFromTheLeafsToRoot(input)
+ expect(result).toEqual([])
+ })
+
+ it('should handle projects with no parent', () => {
+ const input = [
+ {
+ id: '1',
+ name: 'Root 1',
+ parentProjectId: '',
+ description: 'Root 1 desc',
+ },
+ {
+ id: '2',
+ name: 'Root 2',
+ parentProjectId: '',
+ description: 'Root 2 desc',
+ },
+ ]
+
+ const expected = [
+ {
+ id: '1',
+ name: 'Root 1',
+ parentProjectId: '',
+ description: 'Root 1 desc',
+ },
+ {
+ id: '2',
+ name: 'Root 2',
+ parentProjectId: '',
+ description: 'Root 2 desc',
+ },
+ ]
+
+ const result = projectsDataStore.organizeFromTheLeafsToRoot(input)
+ expect(result).toEqual(expected)
+ })
+ })
+})
diff --git a/tests/backup.test.ts b/tests/backup.test.ts
index 86d398b9d..114ecc91e 100644
--- a/tests/backup.test.ts
+++ b/tests/backup.test.ts
@@ -29,64 +29,75 @@ afterEach(() => {
return cleanup()
})
-test('No backup file', () => {
- const bk = new BackupManager()
- return Promise.resolve()
- .then(function () {
- return bk.checkAndPrepareRestoration()
- })
- .then(function (data) {
- expect(data).toBeFalsy()
- })
-})
+if (process.env.CI) {
+ describe('backup tests [CI only]', backupTests)
+} else {
+ describe.skip('backup tests [CI only]', backupTests)
+}
-test('Test backup file', () => {
- const bk = new BackupManager()
- return Promise.resolve()
- .then(function () {
- return copy(`${__dirname}/backup.tar`, BACKUP_FILE_PATH_ABSOLUTE)
- })
- .then(function () {
- return bk.checkAndPrepareRestoration()
- })
- .then(function () {
- return readJson(
- CaptainConstants.restoreDirectoryPath +
- '/restore-instructions.json'
- )
- })
- .then(function (ret: RestoringInfo) {
- const expectedValue = {
- nodesMapping: [
- {
- newIp: 'CURRENT_NODE_DONT_CHANGE',
- oldIp: '123.123.123.123',
- privateKeyPath: '',
- user: '',
- },
- ],
- oldNodesForReference: [
- {
- nodeData: {
- nodeId: '123456789',
- type: 'manager',
- isLeader: true,
- hostname: 'test',
- architecture: 'x86_64',
- operatingSystem: 'linux',
- nanoCpu: 8000000000,
- memoryBytes: 8241434624,
- dockerEngineVersion: '18.09.2',
- ip: '123.123.123.123',
- state: 'ready',
- status: 'active',
+function backupTests() {
+ test('No backup file', () => {
+ const bk = new BackupManager()
+ return Promise.resolve()
+ .then(function () {
+ return bk.checkAndPrepareRestoration()
+ })
+ .then(function (data) {
+ expect(data).toBeFalsy()
+ })
+ })
+
+ test('Test backup file', () => {
+ const bk = new BackupManager()
+ return Promise.resolve()
+ .then(function () {
+ return copy(
+ `${__dirname}/backup.tar`,
+ BACKUP_FILE_PATH_ABSOLUTE
+ )
+ })
+ .then(function () {
+ return bk.checkAndPrepareRestoration()
+ })
+ .then(function () {
+ return readJson(
+ CaptainConstants.restoreDirectoryPath +
+ '/restore-instructions.json'
+ )
+ })
+ .then(function (ret: RestoringInfo) {
+ const expectedValue = {
+ nodesMapping: [
+ {
+ newIp: 'CURRENT_NODE_DONT_CHANGE',
+ oldIp: '123.123.123.123',
+ privateKeyPath: '',
+ user: '',
},
- appsLockOnThisNode: ['pers1'],
- },
- ],
- }
- expect(isDeepStrictEqual(ret, expectedValue)).toBe(true)
- ret.nodesMapping[0].oldIp += ' '
- expect(isDeepStrictEqual(ret, expectedValue)).toBe(false)
- })
-})
+ ],
+ oldNodesForReference: [
+ {
+ nodeData: {
+ nodeId: '123456789',
+ type: 'manager',
+ isLeader: true,
+ hostname: 'test',
+ architecture: 'x86_64',
+ operatingSystem: 'linux',
+ nanoCpu: 8000000000,
+ memoryBytes: 8241434624,
+ dockerEngineVersion: '18.09.2',
+ ip: '123.123.123.123',
+ state: 'ready',
+ status: 'active',
+ },
+ appsLockOnThisNode: ['pers1'],
+ },
+ ],
+ }
+ expect(isDeepStrictEqual(ret, expectedValue)).toBe(true)
+ ret.nodesMapping[0].oldIp += ' '
+ expect(isDeepStrictEqual(ret, expectedValue)).toBe(false)
+ })
+ })
+}
diff --git a/tests/dockerutil.test.ts b/tests/dockerutil.test.ts
new file mode 100644
index 000000000..923cff843
--- /dev/null
+++ b/tests/dockerutil.test.ts
@@ -0,0 +1,26 @@
+// @ts-ignore
+import dockerodeUtils = require('dockerode/lib/util')
+
+test('dockerodeUtils', () => {
+ {
+ const parsed = dockerodeUtils.parseRepositoryTag('lib/repo:tag.v1.0')
+ expect(parsed.tag).toBe('tag.v1.0')
+ expect(parsed.repository).toBe('lib/repo')
+ }
+
+ {
+ const parsed = dockerodeUtils.parseRepositoryTag(
+ 'domain.com:3000/lib/repo:tag.v1.0'
+ )
+ expect(parsed.tag).toBe('tag.v1.0')
+ expect(parsed.repository).toBe('domain.com:3000/lib/repo')
+ }
+
+ {
+ const parsed = dockerodeUtils.parseRepositoryTag(
+ 'domain.com:3000/repo:tag.v1.0'
+ )
+ expect(parsed.tag).toBe('tag.v1.0')
+ expect(parsed.repository).toBe('domain.com:3000/repo')
+ }
+})
diff --git a/tests/encryptor.test.ts b/tests/encryptor.test.ts
index bd0f810b4..901fab001 100644
--- a/tests/encryptor.test.ts
+++ b/tests/encryptor.test.ts
@@ -4,7 +4,7 @@ test('Testing Encryptor 1', () => {
const encryptor = new CaptainEncryptor(
'8h9hasfasaaaaaaaaaaaaaa75h7553245235423452345235235235254h75h38'
)
- let valueToBeEncrypter = 'qq'
+ const valueToBeEncrypter = 'qq'
expect(encryptor.decrypt(encryptor.encrypt(valueToBeEncrypter))).toBe(
valueToBeEncrypter
)
@@ -14,7 +14,7 @@ test('Testing Encryptor 2', () => {
const encryptor = new CaptainEncryptor(
'8h9hasfasaaaaaaaaaaaaaa75h7553245235423452345235235235254h75h38'
)
- let valueToBeEncrypter = 'q290852f98nb80nv8m8m bn83vn@ 8098m%#@%$5$@#52q'
+ const valueToBeEncrypter = 'q290852f98nb80nv8m8m bn83vn@ 8098m%#@%$5$@#52q'
expect(encryptor.decrypt(encryptor.encrypt(valueToBeEncrypter))).toBe(
valueToBeEncrypter
)
diff --git a/tsconfig.json b/tsconfig.json
index 90e964c6b..8d016adc8 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,16 +1,15 @@
{
"compilerOptions": {
- "module": "commonjs",
- "moduleResolution": "node",
+ "module": "Node16",
+ "moduleResolution": "Node16",
"strictNullChecks": true,
"outDir": "./built",
"noImplicitAny": true,
"sourceMap": true,
"allowJs": true,
+ "esModuleInterop": true,
"noUnusedLocals": true,
- "target": "es6"
+ "target": "ES2018"
},
- "include": [
- "./src/**/*"
- ]
-}
\ No newline at end of file
+ "include": ["./src/**/*"]
+}
diff --git a/tslint.json b/tslint.json
deleted file mode 100644
index e5ae1a0e9..000000000
--- a/tslint.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "rules": {
- "class-name": true,
- "comment-format": [true, "check-space"],
- "indent": [true, "spaces"],
- "one-line": [true, "check-open-brace", "check-whitespace"],
- "no-var-keyword": true,
- "quotemark": [true, "single", "avoid-escape"],
- "semicolon": [true, "never", "ignore-bound-class-methods"],
- "typedef-whitespace": [
- true,
- {
- "call-signature": "nospace",
- "index-signature": "nospace",
- "parameter": "nospace",
- "property-declaration": "nospace",
- "variable-declaration": "nospace"
- },
- {
- "call-signature": "onespace",
- "index-signature": "onespace",
- "parameter": "onespace",
- "property-declaration": "onespace",
- "variable-declaration": "onespace"
- }
- ],
- "no-internal-module": true,
- "no-trailing-whitespace": true,
- "no-null-keyword": true,
- "jsdoc-format": true
- }
-}