diff --git a/.gitattributes b/.gitattributes
index 5a0d5e4..ce7609b 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,2 +1,4 @@
# Auto detect text files and perform LF normalization
* text=auto eol=lf
+*.{cmd,[cC][mM][dD]} text eol=crlf
+*.{bat,[bB][aA][tT]} text eol=crlf
diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 5d76f2a..bb8a7f4 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -22,9 +22,10 @@ assignees: ''
- A clear and concise description of what you expected to happen.
-**Debug Logs**
+**Provide Debug Logs**
-- With the `karmaTestExplorer.logLevel` set to `debug`, please capture and attach the logs from the `Karma Test Explorer` Output panel.
+- With the `karmaTestExplorer.logLevel` set to `debug`, please capture and attach the logs from the `Karma Test Explorer` Output chanel when the issue occurs.
+- Please also capture and attach the logs from the `Karma Server` Output channel when the issue occurs.
**Screenshots**
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 47e4325..bb5b3eb 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -2,7 +2,6 @@
"[typescript]": {
"editor.defaultFormatter": "dbaeumer.vscode-eslint",
},
- "typescript.tsdk": "node_modules/typescript/lib",
"eslint.format.enable": true,
"files.exclude": {
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 742fc35..f2c88ed 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -18,7 +18,7 @@ The format of this changelog is loosely based on [Keep a Changelog](https://keep
### Changed
-- Test duplication is only now reported for tests but no longer reported for test suites because test suites are simply containers for tests, so that duplicated test suites are themselves not an indication that actual tests have also been duplicated
+- Test duplication is no longer reported for test suites because test suites are simply containers for tests, so that duplicated test suites are themselves not an indication of actual test duplication
### Fixed
- Fixed an issue where test duplicate detection was producing false-positives on Windows (thanks [@nwash57](https://github.com/nwash57)!)
diff --git a/README.md b/README.md
index 8bef14e..c61bb48 100644
--- a/README.md
+++ b/README.md
@@ -89,7 +89,7 @@ Special thanks to the [author](https://github.com/Raagh) and contributors of the
## Reporting Issues
-If you encounter any problems using Karma Test Explorer, would like to request a feature, or have any questions, please open an issue [here](https://github.com/lucono/karma-test-explorer/issues/new).
+If you encounter any problems using Karma Test Explorer, would like to request a feature, or have any questions, please open an issue [here](https://github.com/lucono/karma-test-explorer/issues/new/choose).
## See Also
diff --git a/docs/documentation.md b/docs/documentation.md
index bdfc21f..b436915 100644
--- a/docs/documentation.md
+++ b/docs/documentation.md
@@ -50,13 +50,13 @@ Note that Karma Test Explorer will briefly display updates (using available spac
## Project Types
+### Karma Projects
+Projects without an `angular.json` or `.angular-cli.json` file in the project root are treated as plain Karma projects. Use the various [extension options](#configuration) where necessary to customize Karma Test Explorer's behavior to the specific needs of your project and team.
+
### Angular Projects
By default, any project with an `angular.json` or `.angular-cli.json` file in the project root is loaded as an Angular project. Use the `karmaTestExplorer.defaultAngularProjectName` setting to specify which configured Angular project should be loaded for testing. Otherwise, the project specified as default in the `angular.json` config will be chosen.
-### Non-Angular Projects
-Projects without an `angular.json` or `.angular-cli.json` file in the project root are treated as plain Karma projects. Use the various [extension options](#configuration) where necessary to customize Karma Test Explorer's behavior to the specific needs of your project and team.
-
---
@@ -97,12 +97,13 @@ Setting | Description
`karmaTestExplorer.customLauncher` | Specify the karma custom launcher configuration for launching the test browser, similar to a custom launcher entry in a karma config file
`karmaTestExplorer.autoWatchEnabled` | Enables automatic re-run of tests when the files change
`karmaTestExplorer.autoWatchBatchDelay` | The delay in milliseconds when autoWatch is enabled for batching multiple file changes into a single rerun. This is the same as Karma config's `autoWatchBatchDelay` option and overrides it when set
+`karmaTestExplorer.nonHeadlessModeEnabled` | Enables non-headless testing so that the browser UI is displayed when running tests. Has no effect when running in a container, or when the default value of the `customLauncher` or `browser` config settings are overridden
`karmaTestExplorer.env` | Additional environment variables to be set when running the tests. These override the values of the same variables if also provided through the `envFile` setting
`karmaTestExplorer.envFile` | Path to a dotenv file containing environment variables to be set when running the tests
`karmaTestExplorer.karmaProcessCommand` | The command or path to an executable to use for launching Karma. This is useful for using a custom script or different command other than the default
`karmaTestExplorer.angularProcessCommand` | The command or path to an executable to use for launching or running Angular tests. This is useful for using a custom script or different command other than the default
`karmaTestExplorer.testTriggerMethod` | Experimental. Specifies how test runs are triggered by default, either through the Karma CLI or Http interface. You will usually not need to use this setting unless working around specific issues
-`karmaTestExplorer.failOnStandardError` | Treats any errors written to stderr as a failure. This can sometimes be useful for uncovering testing issues
+`karmaTestExplorer.failOnStandardError` | Treats any Karma, Angular, or other testing stderr output as a failure. This can sometimes be useful for uncovering testing issues
`karmaTestExplorer.testsBasePath` | The base folder containing the test files (relative to `projectRootPath`)
`karmaTestExplorer.testFiles` | The path glob patterns identifying the test files (relative to `projectRootPath`)
`karmaTestExplorer.excludeFiles` | The path glob patterns identifying files to be excluded from `testFiles` (relative to `projectRootPath`)
@@ -114,6 +115,7 @@ Setting | Description
`karmaTestExplorer.containerMode` | Enables additional support for easier testing when running in a container. Can be either `auto` (the default when not set), `enabled`, or `disabled`
`karmaTestExplorer.logLevel` | Sets the level of logging detail produced in the output panel of the extension. More detailed levels such as the `debug` level can be helpful when troubleshooting issues with running Karma or the extension
`karmaTestExplorer.karmaLogLevel` | Sets the level of logging detail for the Karma server in its output channel, which can be helpful when troubleshooting issues with running Karma or the extension
+`karmaTestExplorer.karmaReporterLogLevel` | Sets the level of logging detail for the Karma Test Explorer reporter which logs additional details to the Karma server log related to the processing of test and browser events in Karma. This can be helpful when troubleshooting issues with how test and browser events are being processed in Karma and exchanged with the Karma Test Explorer. Set this to `disable` in order to not log any additional output from the reporter into the Karma server logs
@@ -138,7 +140,7 @@ For example, the following files would all be detected as test files by default,
### Customizing Test Discovery
-However, you can change this to the specific name pattern and paths of your test files by using the `karmaTestExplorer.testFiles` extension setting, which accepts an array of file glob patterns that identify the locations of your test files.
+You can change the default test discovery behavior by customizing test file detection to the specific name pattern and paths for your test files by using the `karmaTestExplorer.testFiles` extension setting, which accepts an array of file glob patterns that identify the locations of your test files.
For example:
diff --git a/package-lock.json b/package-lock.json
index 53932da..b212b22 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,19 +1,19 @@
{
"name": "karma-test-explorer",
- "version": "0.2.1",
+ "version": "0.3.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "karma-test-explorer",
- "version": "0.2.1",
+ "version": "0.3.0",
"license": "MIT",
"dependencies": {
"bluebird": "^3.7.2",
- "cross-spawn": "^7.0.0",
"dotenv": "^8.2.0",
"dotenv-expand": "5.1.0",
"express": "^4.17.1",
+ "get-installed-path": "^4.0.8",
"globby": "11.0.4",
"is-docker": "^2.2.1",
"karma": "^6.3.2",
@@ -33,8 +33,8 @@
},
"devDependencies": {
"@types/bluebird": "^3.5.36",
- "@types/cross-spawn": "^6.0.2",
"@types/express": "~4.17.13",
+ "@types/get-installed-path": "^4.0.1",
"@types/glob": "^7.1.4",
"@types/jest": "^27.0.2",
"@types/jest-when": "^2.7.3",
@@ -43,7 +43,7 @@
"@types/node": "^14.14.31",
"@types/semver": "~6.0.2",
"@types/throttle-debounce": "^2.1.0",
- "@types/vscode": "^1.60.0",
+ "@types/vscode": "^1.22.0",
"@typescript-eslint/eslint-plugin": "^4.32.0",
"@typescript-eslint/parser": "^4.32.0",
"esbuild": "^0.13.3",
@@ -58,10 +58,10 @@
"prettier-plugin-organize-imports": "^2.3.4",
"ts-jest": "^27.0.5",
"typescript": "^4.4.3",
- "vsce": "^1.100.2"
+ "vsce": "^1.102.0"
},
"engines": {
- "vscode": "^1.60.0"
+ "vscode": "^1.22.0"
}
},
"node_modules/@babel/code-frame": {
@@ -74,29 +74,29 @@
}
},
"node_modules/@babel/compat-data": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz",
- "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz",
+ "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz",
- "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.15.8",
- "@babel/generator": "^7.15.8",
- "@babel/helper-compilation-targets": "^7.15.4",
- "@babel/helper-module-transforms": "^7.15.8",
- "@babel/helpers": "^7.15.4",
- "@babel/parser": "^7.15.8",
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.6",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz",
+ "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.16.0",
+ "@babel/generator": "^7.16.0",
+ "@babel/helper-compilation-targets": "^7.16.0",
+ "@babel/helper-module-transforms": "^7.16.0",
+ "@babel/helpers": "^7.16.0",
+ "@babel/parser": "^7.16.0",
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.0",
+ "@babel/types": "^7.16.0",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -113,12 +113,12 @@
}
},
"node_modules/@babel/core/node_modules/@babel/code-frame": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
- "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz",
+ "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==",
"dev": true,
"dependencies": {
- "@babel/highlight": "^7.14.5"
+ "@babel/highlight": "^7.16.0"
},
"engines": {
"node": ">=6.9.0"
@@ -143,12 +143,12 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz",
- "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz",
+ "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.15.6",
+ "@babel/types": "^7.16.0",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
},
@@ -166,12 +166,12 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz",
- "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz",
+ "integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.15.0",
+ "@babel/compat-data": "^7.16.0",
"@babel/helper-validator-option": "^7.14.5",
"browserslist": "^4.16.6",
"semver": "^6.3.0"
@@ -193,93 +193,93 @@
}
},
"node_modules/@babel/helper-function-name": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz",
- "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz",
+ "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==",
"dev": true,
"dependencies": {
- "@babel/helper-get-function-arity": "^7.15.4",
- "@babel/template": "^7.15.4",
- "@babel/types": "^7.15.4"
+ "@babel/helper-get-function-arity": "^7.16.0",
+ "@babel/template": "^7.16.0",
+ "@babel/types": "^7.16.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-get-function-arity": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz",
- "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz",
+ "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.16.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-hoist-variables": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz",
- "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz",
+ "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.16.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz",
- "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz",
+ "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.16.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz",
- "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz",
+ "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.16.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz",
- "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz",
+ "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==",
"dev": true,
"dependencies": {
- "@babel/helper-module-imports": "^7.15.4",
- "@babel/helper-replace-supers": "^7.15.4",
- "@babel/helper-simple-access": "^7.15.4",
- "@babel/helper-split-export-declaration": "^7.15.4",
+ "@babel/helper-module-imports": "^7.16.0",
+ "@babel/helper-replace-supers": "^7.16.0",
+ "@babel/helper-simple-access": "^7.16.0",
+ "@babel/helper-split-export-declaration": "^7.16.0",
"@babel/helper-validator-identifier": "^7.15.7",
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.6"
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.0",
+ "@babel/types": "^7.16.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz",
- "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz",
+ "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.16.0"
},
"engines": {
"node": ">=6.9.0"
@@ -295,39 +295,39 @@
}
},
"node_modules/@babel/helper-replace-supers": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz",
- "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz",
+ "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==",
"dev": true,
"dependencies": {
- "@babel/helper-member-expression-to-functions": "^7.15.4",
- "@babel/helper-optimise-call-expression": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.4"
+ "@babel/helper-member-expression-to-functions": "^7.16.0",
+ "@babel/helper-optimise-call-expression": "^7.16.0",
+ "@babel/traverse": "^7.16.0",
+ "@babel/types": "^7.16.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-simple-access": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz",
- "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz",
+ "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.16.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-split-export-declaration": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz",
- "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz",
+ "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.16.0"
},
"engines": {
"node": ">=6.9.0"
@@ -352,26 +352,26 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz",
- "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.0.tgz",
+ "integrity": "sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.4"
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.0",
+ "@babel/types": "^7.16.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/highlight": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
- "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz",
+ "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==",
"dev": true,
"dependencies": {
- "@babel/helper-validator-identifier": "^7.14.5",
+ "@babel/helper-validator-identifier": "^7.15.7",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
},
@@ -451,9 +451,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz",
- "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.0.tgz",
+ "integrity": "sha512-TEHWXf0xxpi9wKVyBCmRcSSDjbJ/cl6LUdlbYUHEaNQUJGhreJbZrXT6sR4+fZLxVUJqNRB4KyOvjuy/D9009A==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -610,9 +610,9 @@
}
},
"node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz",
- "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz",
+ "integrity": "sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ==",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.14.5"
@@ -625,44 +625,44 @@
}
},
"node_modules/@babel/template": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz",
- "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz",
+ "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.14.5",
- "@babel/parser": "^7.15.4",
- "@babel/types": "^7.15.4"
+ "@babel/code-frame": "^7.16.0",
+ "@babel/parser": "^7.16.0",
+ "@babel/types": "^7.16.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/template/node_modules/@babel/code-frame": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
- "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz",
+ "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==",
"dev": true,
"dependencies": {
- "@babel/highlight": "^7.14.5"
+ "@babel/highlight": "^7.16.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz",
- "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.14.5",
- "@babel/generator": "^7.15.4",
- "@babel/helper-function-name": "^7.15.4",
- "@babel/helper-hoist-variables": "^7.15.4",
- "@babel/helper-split-export-declaration": "^7.15.4",
- "@babel/parser": "^7.15.4",
- "@babel/types": "^7.15.4",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz",
+ "integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.16.0",
+ "@babel/generator": "^7.16.0",
+ "@babel/helper-function-name": "^7.16.0",
+ "@babel/helper-hoist-variables": "^7.16.0",
+ "@babel/helper-split-export-declaration": "^7.16.0",
+ "@babel/parser": "^7.16.0",
+ "@babel/types": "^7.16.0",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
@@ -671,12 +671,12 @@
}
},
"node_modules/@babel/traverse/node_modules/@babel/code-frame": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
- "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz",
+ "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==",
"dev": true,
"dependencies": {
- "@babel/highlight": "^7.14.5"
+ "@babel/highlight": "^7.16.0"
},
"engines": {
"node": ">=6.9.0"
@@ -692,12 +692,12 @@
}
},
"node_modules/@babel/types": {
- "version": "7.15.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz",
- "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz",
+ "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==",
"dev": true,
"dependencies": {
- "@babel/helper-validator-identifier": "^7.14.9",
+ "@babel/helper-validator-identifier": "^7.15.7",
"to-fast-properties": "^2.0.0"
},
"engines": {
@@ -794,16 +794,16 @@
}
},
"node_modules/@jest/console": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.5.tgz",
- "integrity": "sha512-smtlRF9vNKorRMCUtJ+yllIoiY8oFmfFG7xlzsAE76nKEwXNhjPOJIsc7Dv+AUitVt76t+KjIpUP9m98Crn2LQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.3.1.tgz",
+ "integrity": "sha512-RkFNWmv0iui+qsOr/29q9dyfKTTT5DCuP31kUwg7rmOKPT/ozLeGLKJKVIiOfbiKyleUZKIrHwhmiZWVe8IMdw==",
"dev": true,
"dependencies": {
"@jest/types": "^27.2.5",
"@types/node": "*",
"chalk": "^4.0.0",
- "jest-message-util": "^27.2.5",
- "jest-util": "^27.2.5",
+ "jest-message-util": "^27.3.1",
+ "jest-util": "^27.3.1",
"slash": "^3.0.0"
},
"engines": {
@@ -811,15 +811,15 @@
}
},
"node_modules/@jest/core": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.5.tgz",
- "integrity": "sha512-VR7mQ+jykHN4WO3OvusRJMk4xCa2MFLipMS+43fpcRGaYrN1KwMATfVEXif7ccgFKYGy5D1TVXTNE4mGq/KMMA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.3.1.tgz",
+ "integrity": "sha512-DMNE90RR5QKx0EA+wqe3/TNEwiRpOkhshKNxtLxd4rt3IZpCt+RSL+FoJsGeblRZmqdK4upHA/mKKGPPRAifhg==",
"dev": true,
"dependencies": {
- "@jest/console": "^27.2.5",
- "@jest/reporters": "^27.2.5",
- "@jest/test-result": "^27.2.5",
- "@jest/transform": "^27.2.5",
+ "@jest/console": "^27.3.1",
+ "@jest/reporters": "^27.3.1",
+ "@jest/test-result": "^27.3.1",
+ "@jest/transform": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
@@ -827,19 +827,19 @@
"emittery": "^0.8.1",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
- "jest-changed-files": "^27.2.5",
- "jest-config": "^27.2.5",
- "jest-haste-map": "^27.2.5",
- "jest-message-util": "^27.2.5",
+ "jest-changed-files": "^27.3.0",
+ "jest-config": "^27.3.1",
+ "jest-haste-map": "^27.3.1",
+ "jest-message-util": "^27.3.1",
"jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.2.5",
- "jest-resolve-dependencies": "^27.2.5",
- "jest-runner": "^27.2.5",
- "jest-runtime": "^27.2.5",
- "jest-snapshot": "^27.2.5",
- "jest-util": "^27.2.5",
- "jest-validate": "^27.2.5",
- "jest-watcher": "^27.2.5",
+ "jest-resolve": "^27.3.1",
+ "jest-resolve-dependencies": "^27.3.1",
+ "jest-runner": "^27.3.1",
+ "jest-runtime": "^27.3.1",
+ "jest-snapshot": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "jest-validate": "^27.3.1",
+ "jest-watcher": "^27.3.1",
"micromatch": "^4.0.4",
"rimraf": "^3.0.0",
"slash": "^3.0.0",
@@ -857,102 +857,62 @@
}
}
},
- "node_modules/@jest/core/node_modules/jest-config": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.5.tgz",
- "integrity": "sha512-QdENtn9b5rIIYGlbDNEcgY9LDL5kcokJnXrp7x8AGjHob/XFqw1Z6p+gjfna2sUulQsQ3ce2Fvntnv+7fKYDhQ==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^27.2.5",
- "@jest/types": "^27.2.5",
- "babel-jest": "^27.2.5",
- "chalk": "^4.0.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.1",
- "graceful-fs": "^4.2.4",
- "is-ci": "^3.0.0",
- "jest-circus": "^27.2.5",
- "jest-environment-jsdom": "^27.2.5",
- "jest-environment-node": "^27.2.5",
- "jest-get-type": "^27.0.6",
- "jest-jasmine2": "^27.2.5",
- "jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.2.5",
- "jest-runner": "^27.2.5",
- "jest-util": "^27.2.5",
- "jest-validate": "^27.2.5",
- "micromatch": "^4.0.4",
- "pretty-format": "^27.2.5"
- },
- "engines": {
- "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
- },
- "peerDependencies": {
- "ts-node": ">=9.0.0"
- },
- "peerDependenciesMeta": {
- "ts-node": {
- "optional": true
- }
- }
- },
"node_modules/@jest/environment": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.5.tgz",
- "integrity": "sha512-XvUW3q6OUF+54SYFCgbbfCd/BKTwm5b2MGLoc2jINXQLKQDTCS2P2IrpPOtQ08WWZDGzbhAzVhOYta3J2arubg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.3.1.tgz",
+ "integrity": "sha512-BCKCj4mOVLme6Tanoyc9k0ultp3pnmuyHw73UHRPeeZxirsU/7E3HC4le/VDb/SMzE1JcPnto+XBKFOcoiJzVw==",
"dev": true,
"dependencies": {
- "@jest/fake-timers": "^27.2.5",
+ "@jest/fake-timers": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/node": "*",
- "jest-mock": "^27.2.5"
+ "jest-mock": "^27.3.0"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/@jest/fake-timers": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.5.tgz",
- "integrity": "sha512-ZGUb6jg7BgwY+nmO0TW10bc7z7Hl2G/UTAvmxEyZ/GgNFoa31tY9/cgXmqcxnnZ7o5Xs7RAOz3G1SKIj8IVDlg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.3.1.tgz",
+ "integrity": "sha512-M3ZFgwwlqJtWZ+QkBG5NmC23A9w+A6ZxNsO5nJxJsKYt4yguBd3i8TpjQz5NfCX91nEve1KqD9RA2Q+Q1uWqoA==",
"dev": true,
"dependencies": {
"@jest/types": "^27.2.5",
"@sinonjs/fake-timers": "^8.0.1",
"@types/node": "*",
- "jest-message-util": "^27.2.5",
- "jest-mock": "^27.2.5",
- "jest-util": "^27.2.5"
+ "jest-message-util": "^27.3.1",
+ "jest-mock": "^27.3.0",
+ "jest-util": "^27.3.1"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/@jest/globals": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.5.tgz",
- "integrity": "sha512-naRI537GM+enFVJQs6DcwGYPn/0vgJNb06zGVbzXfDfe/epDPV73hP1vqO37PqSKDeOXM2KInr6ymYbL1HTP7g==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.3.1.tgz",
+ "integrity": "sha512-Q651FWiWQAIFiN+zS51xqhdZ8g9b88nGCobC87argAxA7nMfNQq0Q0i9zTfQYgLa6qFXk2cGANEqfK051CZ8Pg==",
"dev": true,
"dependencies": {
- "@jest/environment": "^27.2.5",
+ "@jest/environment": "^27.3.1",
"@jest/types": "^27.2.5",
- "expect": "^27.2.5"
+ "expect": "^27.3.1"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/@jest/reporters": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.5.tgz",
- "integrity": "sha512-zYuR9fap3Q3mxQ454VWF8I6jYHErh368NwcKHWO2uy2fwByqBzRHkf9j2ekMDM7PaSTWcLBSZyd7NNxR1iHxzQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.3.1.tgz",
+ "integrity": "sha512-m2YxPmL9Qn1emFVgZGEiMwDntDxRRQ2D58tiDQlwYTg5GvbFOKseYCcHtn0WsI8CG4vzPglo3nqbOiT8ySBT/w==",
"dev": true,
"dependencies": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^27.2.5",
- "@jest/test-result": "^27.2.5",
- "@jest/transform": "^27.2.5",
+ "@jest/console": "^27.3.1",
+ "@jest/test-result": "^27.3.1",
+ "@jest/transform": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/node": "*",
"chalk": "^4.0.0",
@@ -965,10 +925,10 @@
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.0.2",
- "jest-haste-map": "^27.2.5",
- "jest-resolve": "^27.2.5",
- "jest-util": "^27.2.5",
- "jest-worker": "^27.2.5",
+ "jest-haste-map": "^27.3.1",
+ "jest-resolve": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "jest-worker": "^27.3.1",
"slash": "^3.0.0",
"source-map": "^0.6.0",
"string-length": "^4.0.1",
@@ -1002,12 +962,12 @@
}
},
"node_modules/@jest/test-result": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.5.tgz",
- "integrity": "sha512-ub7j3BrddxZ0BdSnM5JCF6cRZJ/7j3wgdX0+Dtwhw2Po+HKsELCiXUTvh+mgS4/89mpnU1CPhZxe2mTvuLPJJg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.3.1.tgz",
+ "integrity": "sha512-mLn6Thm+w2yl0opM8J/QnPTqrfS4FoXsXF2WIWJb2O/GBSyResL71BRuMYbYRsGt7ELwS5JGcEcGb52BNrumgg==",
"dev": true,
"dependencies": {
- "@jest/console": "^27.2.5",
+ "@jest/console": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
@@ -1017,24 +977,24 @@
}
},
"node_modules/@jest/test-sequencer": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.5.tgz",
- "integrity": "sha512-8j8fHZRfnjbbdMitMAGFKaBZ6YqvFRFJlMJzcy3v75edTOqc7RY65S9JpMY6wT260zAcL2sTQRga/P4PglCu3Q==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.3.1.tgz",
+ "integrity": "sha512-siySLo07IMEdSjA4fqEnxfIX8lB/lWYsBPwNFtkOvsFQvmBrL3yj3k3uFNZv/JDyApTakRpxbKLJ3CT8UGVCrA==",
"dev": true,
"dependencies": {
- "@jest/test-result": "^27.2.5",
+ "@jest/test-result": "^27.3.1",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.5",
- "jest-runtime": "^27.2.5"
+ "jest-haste-map": "^27.3.1",
+ "jest-runtime": "^27.3.1"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/@jest/transform": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.5.tgz",
- "integrity": "sha512-29lRtAHHYGALbZOx343v0zKmdOg4Sb0rsA1uSv0818bvwRhs3TyElOmTVXlrw0v1ZTqXJCAH/cmoDXimBhQOJQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.3.1.tgz",
+ "integrity": "sha512-3fSvQ02kuvjOI1C1ssqMVBKJpZf6nwoCiSu00zAKh5nrp3SptNtZy/8s5deayHnqxhjD9CWDJ+yqQwuQ0ZafXQ==",
"dev": true,
"dependencies": {
"@babel/core": "^7.1.0",
@@ -1044,9 +1004,9 @@
"convert-source-map": "^1.4.0",
"fast-json-stable-stringify": "^2.0.0",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.5",
+ "jest-haste-map": "^27.3.1",
"jest-regex-util": "^27.0.6",
- "jest-util": "^27.2.5",
+ "jest-util": "^27.3.1",
"micromatch": "^4.0.4",
"pirates": "^4.0.1",
"slash": "^3.0.0",
@@ -1123,6 +1083,11 @@
"@sinonjs/commons": "^1.7.0"
}
},
+ "node_modules/@socket.io/component-emitter": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.0.0.tgz",
+ "integrity": "sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q=="
+ },
"node_modules/@tootallnate/once": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
@@ -1196,9 +1161,9 @@
"dev": true
},
"node_modules/@types/component-emitter": {
- "version": "1.2.10",
- "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz",
- "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg=="
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz",
+ "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ=="
},
"node_modules/@types/connect": {
"version": "3.4.35",
@@ -1219,15 +1184,6 @@
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
"integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw=="
},
- "node_modules/@types/cross-spawn": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.2.tgz",
- "integrity": "sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==",
- "dev": true,
- "dependencies": {
- "@types/node": "*"
- }
- },
"node_modules/@types/express": {
"version": "4.17.13",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz",
@@ -1251,10 +1207,16 @@
"@types/range-parser": "*"
}
},
+ "node_modules/@types/get-installed-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@types/get-installed-path/-/get-installed-path-4.0.1.tgz",
+ "integrity": "sha512-E5837Qz+MZWdD7415qrjK/2srkx41zdInNCGzgLvFeqMeZepTZmIPGD/Dwz9UuPvHmfCh0XeokvLreOXksIY9g==",
+ "dev": true
+ },
"node_modules/@types/glob": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz",
- "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
"dev": true,
"dependencies": {
"@types/minimatch": "*",
@@ -1351,9 +1313,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "14.17.22",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.22.tgz",
- "integrity": "sha512-6Mgu9YWd8j0dk9M8V9+5w6ktqIFCcn/fFXAVIDFk/niAOFiOiz4GeFAMWYAQjKrcsASbFqMkqR8/Y2wuVCAkNg=="
+ "version": "14.17.32",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.32.tgz",
+ "integrity": "sha512-JcII3D5/OapPGx+eJ+Ik1SQGyt6WvuqdRfh9jUwL6/iHGjmyOriBDciBUu7lEIBTL2ijxwrR70WUnw5AEDmFvQ=="
},
"node_modules/@types/prettier": {
"version": "2.4.1",
@@ -1478,24 +1440,6 @@
"eslint": "*"
}
},
- "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
- "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
- "dev": true,
- "dependencies": {
- "eslint-visitor-keys": "^2.0.0"
- },
- "engines": {
- "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- },
- "peerDependencies": {
- "eslint": ">=5"
- }
- },
"node_modules/@typescript-eslint/parser": {
"version": "4.33.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz",
@@ -1809,12 +1753,12 @@
}
},
"node_modules/babel-jest": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.5.tgz",
- "integrity": "sha512-GC9pWCcitBhSuF7H3zl0mftoKizlswaF0E3qi+rPL417wKkCB0d+Sjjb0OfXvxj7gWiBf497ldgRMii68Xz+2g==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.3.1.tgz",
+ "integrity": "sha512-SjIF8hh/ir0peae2D6S6ZKRhUy7q/DnpH7k/V6fT4Bgs/LXXUztOpX4G2tCgq8mLo5HA9mN6NmlFMeYtKmIsTQ==",
"dev": true,
"dependencies": {
- "@jest/transform": "^27.2.5",
+ "@jest/transform": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/babel__core": "^7.1.14",
"babel-plugin-istanbul": "^6.0.0",
@@ -1831,21 +1775,46 @@
}
},
"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==",
+ "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,
"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",
+ "istanbul-lib-instrument": "^5.0.4",
"test-exclude": "^6.0.0"
},
"engines": {
"node": ">=8"
}
},
+ "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz",
+ "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==",
+ "dev": true,
+ "dependencies": {
+ "@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": ">=8"
+ }
+ },
+ "node_modules/babel-plugin-istanbul/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
"node_modules/babel-plugin-jest-hoist": {
"version": "27.2.0",
"resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.2.0.tgz",
@@ -1911,9 +1880,9 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"node_modules/base64-arraybuffer": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
- "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz",
+ "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==",
"engines": {
"node": ">= 0.6.0"
}
@@ -2005,16 +1974,16 @@
"dev": true
},
"node_modules/browserslist": {
- "version": "4.17.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.3.tgz",
- "integrity": "sha512-59IqHJV5VGdcJZ+GZ2hU5n4Kv3YiASzW6Xk5g9tf5a/MAzGeFwgGWU39fVzNIOVcgB3+Gp+kiQu0HEfTVU/3VQ==",
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.5.tgz",
+ "integrity": "sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==",
"dev": true,
"dependencies": {
- "caniuse-lite": "^1.0.30001264",
- "electron-to-chromium": "^1.3.857",
+ "caniuse-lite": "^1.0.30001271",
+ "electron-to-chromium": "^1.3.878",
"escalade": "^3.1.1",
- "node-releases": "^1.1.77",
- "picocolors": "^0.2.1"
+ "node-releases": "^2.0.1",
+ "picocolors": "^1.0.0"
},
"bin": {
"browserslist": "cli.js"
@@ -2103,9 +2072,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001265",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001265.tgz",
- "integrity": "sha512-YzBnspggWV5hep1m9Z6sZVLOt7vrju8xWooFAgN6BA5qvy98qPAPb7vNUzypFaoh2pb3vlfzbDO8tB57UPGbtw==",
+ "version": "1.0.30001274",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001274.tgz",
+ "integrity": "sha512-+Nkvv0fHyhISkiMIjnyjmf5YJcQ1IQHZN6U9TLUMroWR38FNwpsC51Gb68yueafX1V6ifOisInSgP9WJFS13ew==",
"dev": true,
"funding": {
"type": "opencollective",
@@ -2377,6 +2346,7 @@
"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",
@@ -2688,9 +2658,9 @@
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"node_modules/electron-to-chromium": {
- "version": "1.3.867",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.867.tgz",
- "integrity": "sha512-WbTXOv7hsLhjJyl7jBfDkioaY++iVVZomZ4dU6TMe/SzucV6mUAs2VZn/AehBwuZMiNEQDaPuTGn22YK5o+aDw==",
+ "version": "1.3.885",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.885.tgz",
+ "integrity": "sha512-JXKFJcVWrdHa09n4CNZYfYaK6EW5aAew7/wr3L1OnsD1L+JHL+RCtd7QgIsxUbFPeTwPlvnpqNNTOLkoefmtXg==",
"dev": true
},
"node_modules/emittery": {
@@ -2719,45 +2689,47 @@
}
},
"node_modules/engine.io": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.2.0.tgz",
- "integrity": "sha512-d1DexkQx87IFr1FLuV+0f5kAm1Hk1uOVijLOb+D1sDO2QMb7YjE02VHtZtxo7xIXMgcWLb+vl3HRT0rI9tr4jQ==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.0.0.tgz",
+ "integrity": "sha512-Ui7yl3JajEIaACg8MOUwWvuuwU7jepZqX3BKs1ho7NQRuP4LhN4XIykXhp8bEy+x/DhA0LBZZXYSCkZDqrwMMg==",
"dependencies": {
+ "@types/cookie": "^0.4.1",
+ "@types/cors": "^2.8.12",
+ "@types/node": ">=10.0.0",
"accepts": "~1.3.4",
"base64id": "2.0.0",
"cookie": "~0.4.1",
"cors": "~2.8.5",
"debug": "~4.3.1",
- "engine.io-parser": "~4.0.0",
- "ws": "~7.4.2"
+ "engine.io-parser": "~5.0.0",
+ "ws": "~8.2.3"
},
"engines": {
"node": ">=10.0.0"
}
},
"node_modules/engine.io-client": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-5.2.0.tgz",
- "integrity": "sha512-BcIBXGBkT7wKecwnfrSV79G2X5lSUSgeAGgoo60plXf8UsQEvCQww/KMwXSMhVjb98fFYNq20CC5eo8IOAPqsg==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.0.2.tgz",
+ "integrity": "sha512-cAep9lhZV6Q8jMXx3TNSU5cydMzMed8/O7Tz5uzyqZvpNPtQ3WQXrLYGADxlsuaFmOLN7wZLmT7ImiFhUOku8g==",
"dependencies": {
- "base64-arraybuffer": "0.1.4",
- "component-emitter": "~1.3.0",
+ "@socket.io/component-emitter": "~3.0.0",
"debug": "~4.3.1",
- "engine.io-parser": "~4.0.1",
+ "engine.io-parser": "~5.0.0",
"has-cors": "1.1.0",
"parseqs": "0.0.6",
"parseuri": "0.0.6",
- "ws": "~7.4.2",
+ "ws": "~8.2.3",
"xmlhttprequest-ssl": "~2.0.0",
"yeast": "0.1.2"
}
},
"node_modules/engine.io-client/node_modules/ws": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
+ "version": "8.2.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
+ "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
"engines": {
- "node": ">=8.3.0"
+ "node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
@@ -2773,14 +2745,14 @@
}
},
"node_modules/engine.io-parser": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.3.tgz",
- "integrity": "sha512-xEAAY0msNnESNPc00e19y5heTPX4y/TJ36gr8t1voOaNmTojP9b3oK3BbJLFufW2XFPQaaijpFewm2g2Um3uqA==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.1.tgz",
+ "integrity": "sha512-j4p3WwJrG2k92VISM0op7wiq60vO92MlF3CRGxhKHy9ywG1/Dkc72g0dXeDQ+//hrcDn8gqQzoEkdO9FN0d9AA==",
"dependencies": {
- "base64-arraybuffer": "0.1.4"
+ "base64-arraybuffer": "~1.0.1"
},
"engines": {
- "node": ">=8.0.0"
+ "node": ">=10.0.0"
}
},
"node_modules/engine.io/node_modules/cookie": {
@@ -2792,11 +2764,11 @@
}
},
"node_modules/engine.io/node_modules/ws": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
+ "version": "8.2.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
+ "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
"engines": {
- "node": ">=8.3.0"
+ "node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
@@ -2838,37 +2810,38 @@
}
},
"node_modules/esbuild": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.5.tgz",
- "integrity": "sha512-Q9/f1njsZaO+Qqe3dqAdtu4zGHNZIbcEtdg44/NooyPhqCerns4FeC1UPYeB4pKD08iDuWcmyINFJTqpdN+pqg==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.12.tgz",
+ "integrity": "sha512-vTKKUt+yoz61U/BbrnmlG9XIjwpdIxmHB8DlPR0AAW6OdS+nBQBci6LUHU2q9WbBobMEIQxxDpKbkmOGYvxsow==",
"dev": true,
"hasInstallScript": true,
"bin": {
"esbuild": "bin/esbuild"
},
"optionalDependencies": {
- "esbuild-android-arm64": "0.13.5",
- "esbuild-darwin-64": "0.13.5",
- "esbuild-darwin-arm64": "0.13.5",
- "esbuild-freebsd-64": "0.13.5",
- "esbuild-freebsd-arm64": "0.13.5",
- "esbuild-linux-32": "0.13.5",
- "esbuild-linux-64": "0.13.5",
- "esbuild-linux-arm": "0.13.5",
- "esbuild-linux-arm64": "0.13.5",
- "esbuild-linux-mips64le": "0.13.5",
- "esbuild-linux-ppc64le": "0.13.5",
- "esbuild-openbsd-64": "0.13.5",
- "esbuild-sunos-64": "0.13.5",
- "esbuild-windows-32": "0.13.5",
- "esbuild-windows-64": "0.13.5",
- "esbuild-windows-arm64": "0.13.5"
+ "esbuild-android-arm64": "0.13.12",
+ "esbuild-darwin-64": "0.13.12",
+ "esbuild-darwin-arm64": "0.13.12",
+ "esbuild-freebsd-64": "0.13.12",
+ "esbuild-freebsd-arm64": "0.13.12",
+ "esbuild-linux-32": "0.13.12",
+ "esbuild-linux-64": "0.13.12",
+ "esbuild-linux-arm": "0.13.12",
+ "esbuild-linux-arm64": "0.13.12",
+ "esbuild-linux-mips64le": "0.13.12",
+ "esbuild-linux-ppc64le": "0.13.12",
+ "esbuild-netbsd-64": "0.13.12",
+ "esbuild-openbsd-64": "0.13.12",
+ "esbuild-sunos-64": "0.13.12",
+ "esbuild-windows-32": "0.13.12",
+ "esbuild-windows-64": "0.13.12",
+ "esbuild-windows-arm64": "0.13.12"
}
},
"node_modules/esbuild-android-arm64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.5.tgz",
- "integrity": "sha512-xaNH58b9XRAWT5q0rwA2GNTgJynb51JhdotlNKdLmSCyKXPVlF87yqNLNdmlX/zndzRDrZdtpCWSALdn/J63Ug==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.12.tgz",
+ "integrity": "sha512-TSVZVrb4EIXz6KaYjXfTzPyyRpXV5zgYIADXtQsIenjZ78myvDGaPi11o4ZSaHIwFHsuwkB6ne5SZRBwAQ7maw==",
"cpu": [
"arm64"
],
@@ -2879,9 +2852,9 @@
]
},
"node_modules/esbuild-darwin-64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.5.tgz",
- "integrity": "sha512-ClGQeUObXIxEpZviGzjTinDikXy9XodojP9jLKwqLCBpZ9wdV3MW7JOmw60fgXgnbNRvkZCqM6uEi+ur8p80Ow==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.12.tgz",
+ "integrity": "sha512-c51C+N+UHySoV2lgfWSwwmlnLnL0JWj/LzuZt9Ltk9ub1s2Y8cr6SQV5W3mqVH1egUceew6KZ8GyI4nwu+fhsw==",
"cpu": [
"x64"
],
@@ -2892,9 +2865,9 @@
]
},
"node_modules/esbuild-darwin-arm64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.5.tgz",
- "integrity": "sha512-qro6M/qzs1dBPh14Ca+5moIkLo2KE3ll3dOpiN7aAususkM1HmqQptCEchi0XwX+6nfqWI96YvVqPJ3DfUUK5A==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.12.tgz",
+ "integrity": "sha512-JvAMtshP45Hd8A8wOzjkY1xAnTKTYuP/QUaKp5eUQGX+76GIie3fCdUUr2ZEKdvpSImNqxiZSIMziEiGB5oUmQ==",
"cpu": [
"arm64"
],
@@ -2905,9 +2878,9 @@
]
},
"node_modules/esbuild-freebsd-64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.5.tgz",
- "integrity": "sha512-vklf7L7fghREEvS1sjAFcxcw/Qqt+Z+L0ySN+pEeb7rA8nPLfRBSFdXAru8UNuHsMWns6CrcZ5eDOKTerZZ5ng==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.12.tgz",
+ "integrity": "sha512-r6On/Skv9f0ZjTu6PW5o7pdXr8aOgtFOEURJZYf1XAJs0IQ+gW+o1DzXjVkIoT+n1cm3N/t1KRJfX71MPg/ZUA==",
"cpu": [
"x64"
],
@@ -2918,9 +2891,9 @@
]
},
"node_modules/esbuild-freebsd-arm64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.5.tgz",
- "integrity": "sha512-kJoouhbZt4QvjiPak7/Lz57Azok0CgFnNtixiOsqEQXTabIaKmMmnq4qgjD6EBFeU/hvSXDrPe6U8dWhBZOrWQ==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.12.tgz",
+ "integrity": "sha512-F6LmI2Q1gii073kmBE3NOTt/6zLL5zvZsxNLF8PMAwdHc+iBhD1vzfI8uQZMJA1IgXa3ocr3L3DJH9fLGXy6Yw==",
"cpu": [
"arm64"
],
@@ -2931,9 +2904,9 @@
]
},
"node_modules/esbuild-linux-32": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.5.tgz",
- "integrity": "sha512-/QufG6tTGKAf42pIYkOVZzKBPxF01xH1kCPyOFJZukZBV/Tk3TeOZfhJIAf7pxl4jhfa+c4Jcdp7CvIAjXrmJg==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.12.tgz",
+ "integrity": "sha512-U1UZwG3UIwF7/V4tCVAo/nkBV9ag5KJiJTt+gaCmLVWH3bPLX7y+fNlhIWZy8raTMnXhMKfaTvWZ9TtmXzvkuQ==",
"cpu": [
"ia32"
],
@@ -2944,9 +2917,9 @@
]
},
"node_modules/esbuild-linux-64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.5.tgz",
- "integrity": "sha512-NmNFMXEthuFJTFaD4cLhAHCxg+y3uXzo7nqH/WNNSZ8PPY11jbeOvMbdArYlbo2Wy1N/mTHXMcK1synSJj+4Iw==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.12.tgz",
+ "integrity": "sha512-YpXSwtu2NxN3N4ifJxEdsgd6Q5d8LYqskrAwjmoCT6yQnEHJSF5uWcxv783HWN7lnGpJi9KUtDvYsnMdyGw71Q==",
"cpu": [
"x64"
],
@@ -2957,9 +2930,9 @@
]
},
"node_modules/esbuild-linux-arm": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.5.tgz",
- "integrity": "sha512-69nQmbKLBRaAxf88diyaOyarrI7yIdBkZ8bmVzQ7XVWneY+nYIcGtugTSOs5znNGfPqGOElAjh1lX+0sGYHNpA==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.12.tgz",
+ "integrity": "sha512-SyiT/JKxU6J+DY2qUiSLZJqCAftIt3uoGejZ0HDnUM2MGJqEGSGh7p1ecVL2gna3PxS4P+j6WAehCwgkBPXNIw==",
"cpu": [
"arm"
],
@@ -2970,9 +2943,9 @@
]
},
"node_modules/esbuild-linux-arm64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.5.tgz",
- "integrity": "sha512-dOS5EZsZj8Lw0TgEj3zy1/slTBbfBw4v7uHEqZXP34dUaRq2oltNaUYIj735CtgB7I5/MXrXEUYkXLqcVfzJQQ==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.12.tgz",
+ "integrity": "sha512-sgDNb8kb3BVodtAlcFGgwk+43KFCYjnFOaOfJibXnnIojNWuJHpL6aQJ4mumzNWw8Rt1xEtDQyuGK9f+Y24jGA==",
"cpu": [
"arm64"
],
@@ -2983,9 +2956,9 @@
]
},
"node_modules/esbuild-linux-mips64le": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.5.tgz",
- "integrity": "sha512-dmKA8ZI/nHwpxIQW/L5crk7Ac4wJJ2Kquvdo1CdXPW1UljMyKUDuHc4K7D1Iws5igqJmNO6U5vdRUKrdnIov6Q==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.12.tgz",
+ "integrity": "sha512-qQJHlZBG+QwVIA8AbTEtbvF084QgDi4DaUsUnA+EolY1bxrG+UyOuGflM2ZritGhfS/k7THFjJbjH2wIeoKA2g==",
"cpu": [
"mips64el"
],
@@ -2996,9 +2969,9 @@
]
},
"node_modules/esbuild-linux-ppc64le": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.5.tgz",
- "integrity": "sha512-HkVGKkPL3XOhJqNOJ752Q1li5zeidrJHv+XWX6qCnCipNsVuGqaAGfxeWbL/+A/giolMlP7wvAuiKgoe+a5UAw==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.12.tgz",
+ "integrity": "sha512-2dSnm1ldL7Lppwlo04CGQUpwNn5hGqXI38OzaoPOkRsBRWFBozyGxTFSee/zHFS+Pdh3b28JJbRK3owrrRgWNw==",
"cpu": [
"ppc64"
],
@@ -3008,10 +2981,23 @@
"linux"
]
},
+ "node_modules/esbuild-netbsd-64": {
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.12.tgz",
+ "integrity": "sha512-D4raxr02dcRiQNbxOLzpqBzcJNFAdsDNxjUbKkDMZBkL54Z0vZh4LRndycdZAMcIdizC/l/Yp/ZsBdAFxc5nbA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ]
+ },
"node_modules/esbuild-openbsd-64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.5.tgz",
- "integrity": "sha512-BuOZzmdsdreSs0qDgbuiEhSbUDDW2Wyp4VtpNGBmaLwPMHftdprOJXLkeFud3HlnRB2n9qdiTVKg1B8YqMogSw==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.12.tgz",
+ "integrity": "sha512-KuLCmYMb2kh05QuPJ+va60bKIH5wHL8ypDkmpy47lzwmdxNsuySeCMHuTv5o2Af1RUn5KLO5ZxaZeq4GEY7DaQ==",
"cpu": [
"x64"
],
@@ -3022,9 +3008,9 @@
]
},
"node_modules/esbuild-sunos-64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.5.tgz",
- "integrity": "sha512-YJNB6Og1QYAPikvYDbqvk5xCqr6WL2i5cRWPGGgWOEItQPnq6gFsWogS3DiYM8TQKe50KRiD3Lwu7eNYsdPO4w==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.12.tgz",
+ "integrity": "sha512-jBsF+e0woK3miKI8ufGWKG3o3rY9DpHvCVRn5eburMIIE+2c+y3IZ1srsthKyKI6kkXLvV4Cf/E7w56kLipMXw==",
"cpu": [
"x64"
],
@@ -3035,9 +3021,9 @@
]
},
"node_modules/esbuild-windows-32": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.5.tgz",
- "integrity": "sha512-CigOlBSKsZ61IS+FyhD3luqCpl7LN9ntDaBZXumls/0IZ/8BJ5txqw4a6pv4LtnfIgt0ixGHSH7kAUmApw/HAw==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.12.tgz",
+ "integrity": "sha512-L9m4lLFQrFeR7F+eLZXG82SbXZfUhyfu6CexZEil6vm+lc7GDCE0Q8DiNutkpzjv1+RAbIGVva9muItQ7HVTkQ==",
"cpu": [
"ia32"
],
@@ -3048,9 +3034,9 @@
]
},
"node_modules/esbuild-windows-64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.5.tgz",
- "integrity": "sha512-pg2BZXLpcPcrIcmToGapLRExzj6sm0VmQlqlmnMOtIJh0YQV9c0CRbhfIT0gYvJqCz5JEGiRvYpArRlxWADN3Q==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.12.tgz",
+ "integrity": "sha512-k4tX4uJlSbSkfs78W5d9+I9gpd+7N95W7H2bgOMFPsYREVJs31+Q2gLLHlsnlY95zBoPQMIzHooUIsixQIBjaQ==",
"cpu": [
"x64"
],
@@ -3061,9 +3047,9 @@
]
},
"node_modules/esbuild-windows-arm64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.5.tgz",
- "integrity": "sha512-KKRDmUOIE4oCvJp0I4p4QyazK2X79spF29vsZr2U8qHhmxbTLSQWvYmb2WlF5Clb1URRsX0L013rhwHx1SEu0w==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.12.tgz",
+ "integrity": "sha512-2tTv/BpYRIvuwHpp2M960nG7uvL+d78LFW/ikPItO+2GfK51CswIKSetSpDii+cjz8e9iSPgs+BU4o8nWICBwQ==",
"cpu": [
"arm64"
],
@@ -3121,9 +3107,9 @@
}
},
"node_modules/escodegen/node_modules/estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
"engines": {
"node": ">=4.0"
@@ -3305,6 +3291,33 @@
}
},
"node_modules/eslint-utils": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
+ "dev": true,
+ "dependencies": {
+ "eslint-visitor-keys": "^2.0.0"
+ },
+ "engines": {
+ "node": "^10.0.0 || ^12.0.0 || >= 14.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=5"
+ }
+ },
+ "node_modules/eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/eslint/node_modules/eslint-utils": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
"integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
@@ -3319,7 +3332,7 @@
"url": "https://github.com/sponsors/mysticatea"
}
},
- "node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
+ "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
"integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
@@ -3328,15 +3341,6 @@
"node": ">=4"
}
},
- "node_modules/eslint-visitor-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
- "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/eslint/node_modules/ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
@@ -3395,9 +3399,9 @@
}
},
"node_modules/esquery/node_modules/estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
"engines": {
"node": ">=4.0"
@@ -3416,9 +3420,9 @@
}
},
"node_modules/esrecurse/node_modules/estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true,
"engines": {
"node": ">=4.0"
@@ -3487,17 +3491,28 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "dependencies": {
+ "homedir-polyfill": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/expect": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.5.tgz",
- "integrity": "sha512-ZrO0w7bo8BgGoP/bLz+HDCI+0Hfei9jUSZs5yI/Wyn9VkG9w8oJ7rHRgYj+MA7yqqFa0IwHA3flJzZtYugShJA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-27.3.1.tgz",
+ "integrity": "sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg==",
"dev": true,
"dependencies": {
"@jest/types": "^27.2.5",
"ansi-styles": "^5.0.0",
- "jest-get-type": "^27.0.6",
- "jest-matcher-utils": "^27.2.5",
- "jest-message-util": "^27.2.5",
+ "jest-get-type": "^27.3.1",
+ "jest-matcher-utils": "^27.3.1",
+ "jest-message-util": "^27.3.1",
"jest-regex-util": "^27.0.6"
},
"engines": {
@@ -3725,9 +3740,9 @@
"dev": true
},
"node_modules/follow-redirects": {
- "version": "1.14.4",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz",
- "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==",
+ "version": "1.14.5",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz",
+ "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==",
"funding": [
{
"type": "individual",
@@ -3833,6 +3848,19 @@
"node": "6.* || 8.* || >= 10.*"
}
},
+ "node_modules/get-installed-path": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/get-installed-path/-/get-installed-path-4.0.8.tgz",
+ "integrity": "sha512-PmANK1xElIHlHH2tXfOoTnSDUjX1X3GvKK6ZyLbUnSCCn1pADwu67eVWttuPzJWrXDDT2MfO6uAaKILOFfitmA==",
+ "dependencies": {
+ "global-modules": "1.0.0"
+ },
+ "engines": {
+ "node": ">=6",
+ "npm": ">=5",
+ "yarn": ">=1"
+ }
+ },
"node_modules/get-intrinsic": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
@@ -3909,10 +3937,49 @@
"node": ">=4"
}
},
+ "node_modules/global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "dependencies": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "dependencies": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/global-prefix/node_modules/which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dependencies": {
+ "isexe": "^2.0.0"
+ },
+ "bin": {
+ "which": "bin/which"
+ }
+ },
"node_modules/globals": {
- "version": "13.11.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
- "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
+ "version": "13.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
+ "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -3986,6 +4053,17 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "dependencies": {
+ "parse-passwd": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/hosted-git-info": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz",
@@ -4197,22 +4275,10 @@
"node": ">=8"
}
},
- "node_modules/is-ci": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz",
- "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==",
- "dev": true,
- "dependencies": {
- "ci-info": "^3.1.1"
- },
- "bin": {
- "is-ci": "bin.js"
- }
- },
"node_modules/is-core-module": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz",
- "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==",
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
+ "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
"dev": true,
"dependencies": {
"has": "^1.0.3"
@@ -4303,6 +4369,14 @@
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
"dev": true
},
+ "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==",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/isbinaryfile": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz",
@@ -4320,9 +4394,9 @@
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
},
"node_modules/istanbul-lib-coverage": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.2.tgz",
- "integrity": "sha512-o5+eTUYzCJ11/+JhW5/FUCdfsdoYVdQ/8I/OveE2XsjehYn5DdeSnNQAbjYaO8gQ6hvGTN6GM6ddQqpTVG5j8g==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
"dev": true,
"engines": {
"node": ">=8"
@@ -4381,9 +4455,9 @@
}
},
"node_modules/istanbul-reports": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
- "integrity": "sha512-bFjUnc95rHjdCR63WMHUS7yfJJh8T9IPSWavvR02hhjVwezWALZ5axF9EqjmwZHpXqkzbgAMP8DmAtiyNxrdrQ==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz",
+ "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==",
"dev": true,
"dependencies": {
"html-escaper": "^2.0.0",
@@ -4394,19 +4468,19 @@
}
},
"node_modules/jasmine-core": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.9.0.tgz",
- "integrity": "sha512-Tv3kVbPCGVrjsnHBZ38NsPU3sDOtNa0XmbG2baiyJqdb5/SPpDO6GVwJYtUryl6KB4q1Ssckwg612ES9Z0dreQ=="
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.10.1.tgz",
+ "integrity": "sha512-ooZWSDVAdh79Rrj4/nnfklL3NQVra0BcuhcuWoAwwi+znLDoUeH87AFfeX8s+YeYi6xlv5nveRyaA1v7CintfA=="
},
"node_modules/jest": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.5.tgz",
- "integrity": "sha512-vDMzXcpQN4Ycaqu+vO7LX8pZwNNoKMhc+gSp6q1D8S6ftRk8gNW8cni3YFxknP95jxzQo23Lul0BI2FrWgnwYQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-27.3.1.tgz",
+ "integrity": "sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng==",
"dev": true,
"dependencies": {
- "@jest/core": "^27.2.5",
+ "@jest/core": "^27.3.1",
"import-local": "^3.0.2",
- "jest-cli": "^27.2.5"
+ "jest-cli": "^27.3.1"
},
"bin": {
"jest": "bin/jest.js"
@@ -4424,9 +4498,9 @@
}
},
"node_modules/jest-changed-files": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.2.5.tgz",
- "integrity": "sha512-jfnNJzF89csUKRPKJ4MwZ1SH27wTmX2xiAIHUHrsb/OYd9Jbo4/SXxJ17/nnx6RIifpthk3Y+LEeOk+/dDeGdw==",
+ "version": "27.3.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.3.0.tgz",
+ "integrity": "sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg==",
"dev": true,
"dependencies": {
"@jest/types": "^27.2.5",
@@ -4438,27 +4512,27 @@
}
},
"node_modules/jest-circus": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.5.tgz",
- "integrity": "sha512-eyL9IcrAxm3Saq3rmajFCwpaxaRMGJ1KJs+7hlTDinXpJmeR3P02bheM3CYohE7UfwOBmrFMJHjgo/WPcLTM+Q==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.3.1.tgz",
+ "integrity": "sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw==",
"dev": true,
"dependencies": {
- "@jest/environment": "^27.2.5",
- "@jest/test-result": "^27.2.5",
+ "@jest/environment": "^27.3.1",
+ "@jest/test-result": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
"dedent": "^0.7.0",
- "expect": "^27.2.5",
+ "expect": "^27.3.1",
"is-generator-fn": "^2.0.0",
- "jest-each": "^27.2.5",
- "jest-matcher-utils": "^27.2.5",
- "jest-message-util": "^27.2.5",
- "jest-runtime": "^27.2.5",
- "jest-snapshot": "^27.2.5",
- "jest-util": "^27.2.5",
- "pretty-format": "^27.2.5",
+ "jest-each": "^27.3.1",
+ "jest-matcher-utils": "^27.3.1",
+ "jest-message-util": "^27.3.1",
+ "jest-runtime": "^27.3.1",
+ "jest-snapshot": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "pretty-format": "^27.3.1",
"slash": "^3.0.0",
"stack-utils": "^2.0.3",
"throat": "^6.0.1"
@@ -4468,21 +4542,21 @@
}
},
"node_modules/jest-cli": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.5.tgz",
- "integrity": "sha512-XzfcOXi5WQrXqFYsDxq5RDOKY4FNIgBgvgf3ZBz4e/j5/aWep5KnsAYH5OFPMdX/TP/LFsYQMRH7kzJUMh6JKg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.3.1.tgz",
+ "integrity": "sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q==",
"dev": true,
"dependencies": {
- "@jest/core": "^27.2.5",
- "@jest/test-result": "^27.2.5",
+ "@jest/core": "^27.3.1",
+ "@jest/test-result": "^27.3.1",
"@jest/types": "^27.2.5",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"import-local": "^3.0.2",
- "jest-config": "^27.2.5",
- "jest-util": "^27.2.5",
- "jest-validate": "^27.2.5",
+ "jest-config": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "jest-validate": "^27.3.1",
"prompts": "^2.0.1",
"yargs": "^16.2.0"
},
@@ -4501,33 +4575,33 @@
}
}
},
- "node_modules/jest-cli/node_modules/jest-config": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.5.tgz",
- "integrity": "sha512-QdENtn9b5rIIYGlbDNEcgY9LDL5kcokJnXrp7x8AGjHob/XFqw1Z6p+gjfna2sUulQsQ3ce2Fvntnv+7fKYDhQ==",
+ "node_modules/jest-config": {
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.3.1.tgz",
+ "integrity": "sha512-KY8xOIbIACZ/vdYCKSopL44I0xboxC751IX+DXL2+Wx6DKNycyEfV3rryC3BPm5Uq/BBqDoMrKuqLEUNJmMKKg==",
"dev": true,
"dependencies": {
"@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^27.2.5",
+ "@jest/test-sequencer": "^27.3.1",
"@jest/types": "^27.2.5",
- "babel-jest": "^27.2.5",
+ "babel-jest": "^27.3.1",
"chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.1",
"graceful-fs": "^4.2.4",
- "is-ci": "^3.0.0",
- "jest-circus": "^27.2.5",
- "jest-environment-jsdom": "^27.2.5",
- "jest-environment-node": "^27.2.5",
- "jest-get-type": "^27.0.6",
- "jest-jasmine2": "^27.2.5",
+ "jest-circus": "^27.3.1",
+ "jest-environment-jsdom": "^27.3.1",
+ "jest-environment-node": "^27.3.1",
+ "jest-get-type": "^27.3.1",
+ "jest-jasmine2": "^27.3.1",
"jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.2.5",
- "jest-runner": "^27.2.5",
- "jest-util": "^27.2.5",
- "jest-validate": "^27.2.5",
+ "jest-resolve": "^27.3.1",
+ "jest-runner": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "jest-validate": "^27.3.1",
"micromatch": "^4.0.4",
- "pretty-format": "^27.2.5"
+ "pretty-format": "^27.3.1"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
@@ -4542,15 +4616,15 @@
}
},
"node_modules/jest-diff": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.5.tgz",
- "integrity": "sha512-7gfwwyYkeslOOVQY4tVq5TaQa92mWfC9COsVYMNVYyJTOYAqbIkoD3twi5A+h+tAPtAelRxkqY6/xu+jwTr0dA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.3.1.tgz",
+ "integrity": "sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==",
"dev": true,
"dependencies": {
"chalk": "^4.0.0",
"diff-sequences": "^27.0.6",
- "jest-get-type": "^27.0.6",
- "pretty-format": "^27.2.5"
+ "jest-get-type": "^27.3.1",
+ "pretty-format": "^27.3.1"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
@@ -4569,33 +4643,33 @@
}
},
"node_modules/jest-each": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.5.tgz",
- "integrity": "sha512-HUPWIbJT0bXarRwKu/m7lYzqxR4GM5EhKOsu0z3t0SKtbFN6skQhpAUADM4qFShBXb9zoOuag5lcrR1x/WM+Ag==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.3.1.tgz",
+ "integrity": "sha512-E4SwfzKJWYcvOYCjOxhZcxwL+AY0uFMvdCOwvzgutJiaiodFjkxQQDxHm8FQBeTqDnSmKsQWn7ldMRzTn2zJaQ==",
"dev": true,
"dependencies": {
"@jest/types": "^27.2.5",
"chalk": "^4.0.0",
- "jest-get-type": "^27.0.6",
- "jest-util": "^27.2.5",
- "pretty-format": "^27.2.5"
+ "jest-get-type": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "pretty-format": "^27.3.1"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/jest-environment-jsdom": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.5.tgz",
- "integrity": "sha512-QtRpOh/RQKuXniaWcoFE2ElwP6tQcyxHu0hlk32880g0KczdonCs5P1sk5+weu/OVzh5V4Bt1rXuQthI01mBLg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.3.1.tgz",
+ "integrity": "sha512-3MOy8qMzIkQlfb3W1TfrD7uZHj+xx8Olix5vMENkj5djPmRqndMaXtpnaZkxmxM+Qc3lo+yVzJjzuXbCcZjAlg==",
"dev": true,
"dependencies": {
- "@jest/environment": "^27.2.5",
- "@jest/fake-timers": "^27.2.5",
+ "@jest/environment": "^27.3.1",
+ "@jest/fake-timers": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/node": "*",
- "jest-mock": "^27.2.5",
- "jest-util": "^27.2.5",
+ "jest-mock": "^27.3.0",
+ "jest-util": "^27.3.1",
"jsdom": "^16.6.0"
},
"engines": {
@@ -4603,35 +4677,35 @@
}
},
"node_modules/jest-environment-node": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.5.tgz",
- "integrity": "sha512-0o1LT4grm7iwrS8fIoLtwJxb/hoa3GsH7pP10P02Jpj7Mi4BXy65u46m89vEM2WfD1uFJQ2+dfDiWZNA2e6bJg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.3.1.tgz",
+ "integrity": "sha512-T89F/FgkE8waqrTSA7/ydMkcc52uYPgZZ6q8OaZgyiZkJb5QNNCF6oPZjH9IfPFfcc9uBWh1574N0kY0pSvTXw==",
"dev": true,
"dependencies": {
- "@jest/environment": "^27.2.5",
- "@jest/fake-timers": "^27.2.5",
+ "@jest/environment": "^27.3.1",
+ "@jest/fake-timers": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/node": "*",
- "jest-mock": "^27.2.5",
- "jest-util": "^27.2.5"
+ "jest-mock": "^27.3.0",
+ "jest-util": "^27.3.1"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/jest-get-type": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
- "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.3.1.tgz",
+ "integrity": "sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==",
"dev": true,
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/jest-haste-map": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.5.tgz",
- "integrity": "sha512-pzO+Gw2WLponaSi0ilpzYBE0kuVJstoXBX8YWyUebR8VaXuX4tzzn0Zp23c/WaETo7XYTGv2e8KdnpiskAFMhQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.3.1.tgz",
+ "integrity": "sha512-lYfNZIzwPccDJZIyk9Iz5iQMM/MH56NIIcGj7AFU1YyA4ewWFBl8z+YPJuSCRML/ee2cCt2y3W4K3VXPT6Nhzg==",
"dev": true,
"dependencies": {
"@jest/types": "^27.2.5",
@@ -4642,8 +4716,8 @@
"graceful-fs": "^4.2.4",
"jest-regex-util": "^27.0.6",
"jest-serializer": "^27.0.6",
- "jest-util": "^27.2.5",
- "jest-worker": "^27.2.5",
+ "jest-util": "^27.3.1",
+ "jest-worker": "^27.3.1",
"micromatch": "^4.0.4",
"walker": "^1.0.7"
},
@@ -4655,28 +4729,28 @@
}
},
"node_modules/jest-jasmine2": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.5.tgz",
- "integrity": "sha512-hdxY9Cm/CjLqu2tXeAoQHPgA4vcqlweVXYOg1+S9FeFdznB9Rti+eEBKDDkmOy9iqr4Xfbq95OkC4NFbXXPCAQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.3.1.tgz",
+ "integrity": "sha512-WK11ZUetDQaC09w4/j7o4FZDUIp+4iYWH/Lik34Pv7ukL+DuXFGdnmmi7dT58J2ZYKFB5r13GyE0z3NPeyJmsg==",
"dev": true,
"dependencies": {
"@babel/traverse": "^7.1.0",
- "@jest/environment": "^27.2.5",
+ "@jest/environment": "^27.3.1",
"@jest/source-map": "^27.0.6",
- "@jest/test-result": "^27.2.5",
+ "@jest/test-result": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
- "expect": "^27.2.5",
+ "expect": "^27.3.1",
"is-generator-fn": "^2.0.0",
- "jest-each": "^27.2.5",
- "jest-matcher-utils": "^27.2.5",
- "jest-message-util": "^27.2.5",
- "jest-runtime": "^27.2.5",
- "jest-snapshot": "^27.2.5",
- "jest-util": "^27.2.5",
- "pretty-format": "^27.2.5",
+ "jest-each": "^27.3.1",
+ "jest-matcher-utils": "^27.3.1",
+ "jest-message-util": "^27.3.1",
+ "jest-runtime": "^27.3.1",
+ "jest-snapshot": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "pretty-format": "^27.3.1",
"throat": "^6.0.1"
},
"engines": {
@@ -4684,37 +4758,37 @@
}
},
"node_modules/jest-leak-detector": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.5.tgz",
- "integrity": "sha512-HYsi3GUR72bYhOGB5C5saF9sPdxGzSjX7soSQS+BqDRysc7sPeBwPbhbuT8DnOpijnKjgwWQ8JqvbmReYnt3aQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.3.1.tgz",
+ "integrity": "sha512-78QstU9tXbaHzwlRlKmTpjP9k4Pvre5l0r8Spo4SbFFVy/4Abg9I6ZjHwjg2QyKEAMg020XcjP+UgLZIY50yEg==",
"dev": true,
"dependencies": {
- "jest-get-type": "^27.0.6",
- "pretty-format": "^27.2.5"
+ "jest-get-type": "^27.3.1",
+ "pretty-format": "^27.3.1"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/jest-matcher-utils": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.5.tgz",
- "integrity": "sha512-qNR/kh6bz0Dyv3m68Ck2g1fLW5KlSOUNcFQh87VXHZwWc/gY6XwnKofx76Qytz3x5LDWT09/2+yXndTkaG4aWg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.3.1.tgz",
+ "integrity": "sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w==",
"dev": true,
"dependencies": {
"chalk": "^4.0.0",
- "jest-diff": "^27.2.5",
- "jest-get-type": "^27.0.6",
- "pretty-format": "^27.2.5"
+ "jest-diff": "^27.3.1",
+ "jest-get-type": "^27.3.1",
+ "pretty-format": "^27.3.1"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/jest-message-util": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.5.tgz",
- "integrity": "sha512-ggXSLoPfIYcbmZ8glgEJZ8b+e0Msw/iddRmgkoO7lDAr9SmI65IIfv7VnvTnV4FGnIIUIjzM+fHRHO5RBvyAbQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.3.1.tgz",
+ "integrity": "sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.12.13",
@@ -4723,7 +4797,7 @@
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
"micromatch": "^4.0.4",
- "pretty-format": "^27.2.5",
+ "pretty-format": "^27.3.1",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
@@ -4732,21 +4806,21 @@
}
},
"node_modules/jest-message-util/node_modules/@babel/code-frame": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
- "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz",
+ "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==",
"dev": true,
"dependencies": {
- "@babel/highlight": "^7.14.5"
+ "@babel/highlight": "^7.16.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/jest-mock": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.2.5.tgz",
- "integrity": "sha512-HiMB3LqE9RzmeMzZARi2Bz3NoymxyP0gCid4y42ca1djffNtYFKgI220aC1VP1mUZ8rbpqZbHZOJ15093bZV/Q==",
+ "version": "27.3.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.3.0.tgz",
+ "integrity": "sha512-ziZiLk0elZOQjD08bLkegBzv5hCABu/c8Ytx45nJKkysQwGaonvmTxwjLqEA4qGdasq9o2I8/HtdGMNnVsMTGw==",
"dev": true,
"dependencies": {
"@jest/types": "^27.2.5",
@@ -4796,20 +4870,20 @@
}
},
"node_modules/jest-resolve": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.5.tgz",
- "integrity": "sha512-q5irwS3oS73SKy3+FM/HL2T7WJftrk9BRzrXF92f7net5HMlS7lJMg/ZwxLB4YohKqjSsdksEw7n/jvMxV7EKg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.3.1.tgz",
+ "integrity": "sha512-Dfzt25CFSPo3Y3GCbxynRBZzxq9AdyNN+x/v2IqYx6KVT5Z6me2Z/PsSGFSv3cOSUZqJ9pHxilao/I/m9FouLw==",
"dev": true,
"dependencies": {
"@jest/types": "^27.2.5",
"chalk": "^4.0.0",
- "escalade": "^3.1.1",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.5",
+ "jest-haste-map": "^27.3.1",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^27.2.5",
- "jest-validate": "^27.2.5",
+ "jest-util": "^27.3.1",
+ "jest-validate": "^27.3.1",
"resolve": "^1.20.0",
+ "resolve.exports": "^1.1.0",
"slash": "^3.0.0"
},
"engines": {
@@ -4817,29 +4891,29 @@
}
},
"node_modules/jest-resolve-dependencies": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.5.tgz",
- "integrity": "sha512-BSjefped31bcvvCh++/pN9ueqqN1n0+p8/58yScuWfklLm2tbPbS9d251vJhAy0ZI2pL/0IaGhOTJrs9Y4FJlg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.3.1.tgz",
+ "integrity": "sha512-X7iLzY8pCiYOnvYo2YrK3P9oSE8/3N2f4pUZMJ8IUcZnT81vlSonya1KTO9ZfKGuC+svE6FHK/XOb8SsoRUV1A==",
"dev": true,
"dependencies": {
"@jest/types": "^27.2.5",
"jest-regex-util": "^27.0.6",
- "jest-snapshot": "^27.2.5"
+ "jest-snapshot": "^27.3.1"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
}
},
"node_modules/jest-runner": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.5.tgz",
- "integrity": "sha512-n41vw9RLg5TKAnEeJK9d6pGOsBOpwE89XBniK+AD1k26oIIy3V7ogM1scbDjSheji8MUPC9pNgCrZ/FHLVDNgg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.3.1.tgz",
+ "integrity": "sha512-r4W6kBn6sPr3TBwQNmqE94mPlYVn7fLBseeJfo4E2uCTmAyDFm2O5DYAQAFP7Q3YfiA/bMwg8TVsciP7k0xOww==",
"dev": true,
"dependencies": {
- "@jest/console": "^27.2.5",
- "@jest/environment": "^27.2.5",
- "@jest/test-result": "^27.2.5",
- "@jest/transform": "^27.2.5",
+ "@jest/console": "^27.3.1",
+ "@jest/environment": "^27.3.1",
+ "@jest/test-result": "^27.3.1",
+ "@jest/transform": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/node": "*",
"chalk": "^4.0.0",
@@ -4847,15 +4921,15 @@
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"jest-docblock": "^27.0.6",
- "jest-environment-jsdom": "^27.2.5",
- "jest-environment-node": "^27.2.5",
- "jest-haste-map": "^27.2.5",
- "jest-leak-detector": "^27.2.5",
- "jest-message-util": "^27.2.5",
- "jest-resolve": "^27.2.5",
- "jest-runtime": "^27.2.5",
- "jest-util": "^27.2.5",
- "jest-worker": "^27.2.5",
+ "jest-environment-jsdom": "^27.3.1",
+ "jest-environment-node": "^27.3.1",
+ "jest-haste-map": "^27.3.1",
+ "jest-leak-detector": "^27.3.1",
+ "jest-message-util": "^27.3.1",
+ "jest-resolve": "^27.3.1",
+ "jest-runtime": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "jest-worker": "^27.3.1",
"source-map-support": "^0.5.6",
"throat": "^6.0.1"
},
@@ -4864,18 +4938,17 @@
}
},
"node_modules/jest-runtime": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.5.tgz",
- "integrity": "sha512-N0WRZ3QszKyZ3Dm27HTBbBuestsSd3Ud5ooVho47XZJ8aSKO/X1Ag8M1dNx9XzfGVRNdB/xCA3lz8MJwIzPLLA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.3.1.tgz",
+ "integrity": "sha512-qtO6VxPbS8umqhEDpjA4pqTkKQ1Hy4ZSi9mDVeE9Za7LKBo2LdW2jmT+Iod3XFaJqINikZQsn2wEi0j9wPRbLg==",
"dev": true,
"dependencies": {
- "@jest/console": "^27.2.5",
- "@jest/environment": "^27.2.5",
- "@jest/fake-timers": "^27.2.5",
- "@jest/globals": "^27.2.5",
+ "@jest/console": "^27.3.1",
+ "@jest/environment": "^27.3.1",
+ "@jest/globals": "^27.3.1",
"@jest/source-map": "^27.0.6",
- "@jest/test-result": "^27.2.5",
- "@jest/transform": "^27.2.5",
+ "@jest/test-result": "^27.3.1",
+ "@jest/transform": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/yargs": "^16.0.0",
"chalk": "^4.0.0",
@@ -4885,14 +4958,14 @@
"exit": "^0.1.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.5",
- "jest-message-util": "^27.2.5",
- "jest-mock": "^27.2.5",
+ "jest-haste-map": "^27.3.1",
+ "jest-message-util": "^27.3.1",
+ "jest-mock": "^27.3.0",
"jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.2.5",
- "jest-snapshot": "^27.2.5",
- "jest-util": "^27.2.5",
- "jest-validate": "^27.2.5",
+ "jest-resolve": "^27.3.1",
+ "jest-snapshot": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "jest-validate": "^27.3.1",
"slash": "^3.0.0",
"strip-bom": "^4.0.0",
"yargs": "^16.2.0"
@@ -4915,9 +4988,9 @@
}
},
"node_modules/jest-snapshot": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.5.tgz",
- "integrity": "sha512-2/Jkn+VN6Abwz0llBltZaiJMnL8b1j5Bp/gRIxe9YR3FCEh9qp0TXVV0dcpTGZ8AcJV1SZGQkczewkI9LP5yGw==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.3.1.tgz",
+ "integrity": "sha512-APZyBvSgQgOT0XumwfFu7X3G5elj6TGhCBLbBdn3R1IzYustPGPE38F51dBWMQ8hRXa9je0vAdeVDtqHLvB6lg==",
"dev": true,
"dependencies": {
"@babel/core": "^7.7.2",
@@ -4926,23 +4999,23 @@
"@babel/plugin-syntax-typescript": "^7.7.2",
"@babel/traverse": "^7.7.2",
"@babel/types": "^7.0.0",
- "@jest/transform": "^27.2.5",
+ "@jest/transform": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/babel__traverse": "^7.0.4",
"@types/prettier": "^2.1.5",
"babel-preset-current-node-syntax": "^1.0.0",
"chalk": "^4.0.0",
- "expect": "^27.2.5",
+ "expect": "^27.3.1",
"graceful-fs": "^4.2.4",
- "jest-diff": "^27.2.5",
- "jest-get-type": "^27.0.6",
- "jest-haste-map": "^27.2.5",
- "jest-matcher-utils": "^27.2.5",
- "jest-message-util": "^27.2.5",
- "jest-resolve": "^27.2.5",
- "jest-util": "^27.2.5",
+ "jest-diff": "^27.3.1",
+ "jest-get-type": "^27.3.1",
+ "jest-haste-map": "^27.3.1",
+ "jest-matcher-utils": "^27.3.1",
+ "jest-message-util": "^27.3.1",
+ "jest-resolve": "^27.3.1",
+ "jest-util": "^27.3.1",
"natural-compare": "^1.4.0",
- "pretty-format": "^27.2.5",
+ "pretty-format": "^27.3.1",
"semver": "^7.3.2"
},
"engines": {
@@ -4950,16 +5023,16 @@
}
},
"node_modules/jest-util": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.5.tgz",
- "integrity": "sha512-QRhDC6XxISntMzFRd/OQ6TGsjbzA5ONO0tlAj2ElHs155x1aEr0rkYJBEysG6H/gZVH3oGFzCdAB/GA8leh8NQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.3.1.tgz",
+ "integrity": "sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw==",
"dev": true,
"dependencies": {
"@jest/types": "^27.2.5",
"@types/node": "*",
"chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
"graceful-fs": "^4.2.4",
- "is-ci": "^3.0.0",
"picomatch": "^2.2.3"
},
"engines": {
@@ -4967,17 +5040,17 @@
}
},
"node_modules/jest-validate": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.5.tgz",
- "integrity": "sha512-XgYtjS89nhVe+UfkbLgcm+GgXKWgL80t9nTcNeejyO3t0Sj/yHE8BtIJqjZu9NXQksYbGImoQRXmQ1gP+Guffw==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.3.1.tgz",
+ "integrity": "sha512-3H0XCHDFLA9uDII67Bwi1Vy7AqwA5HqEEjyy934lgVhtJ3eisw6ShOF1MDmRPspyikef5MyExvIm0/TuLzZ86Q==",
"dev": true,
"dependencies": {
"@jest/types": "^27.2.5",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
- "jest-get-type": "^27.0.6",
+ "jest-get-type": "^27.3.1",
"leven": "^3.1.0",
- "pretty-format": "^27.2.5"
+ "pretty-format": "^27.3.1"
},
"engines": {
"node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0"
@@ -4996,17 +5069,17 @@
}
},
"node_modules/jest-watcher": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.5.tgz",
- "integrity": "sha512-umV4qGozg2Dn6DTTtqAh9puPw+DGLK9AQas7+mWjiK8t0fWMpxKg8ZXReZw7L4C88DqorsGUiDgwHNZ+jkVrkQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.3.1.tgz",
+ "integrity": "sha512-9/xbV6chABsGHWh9yPaAGYVVKurWoP3ZMCv6h+O1v9/+pkOroigs6WzZ0e9gLP/njokUwM7yQhr01LKJVMkaZA==",
"dev": true,
"dependencies": {
- "@jest/test-result": "^27.2.5",
+ "@jest/test-result": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
- "jest-util": "^27.2.5",
+ "jest-util": "^27.3.1",
"string-length": "^4.0.1"
},
"engines": {
@@ -5014,18 +5087,18 @@
}
},
"node_modules/jest-when": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/jest-when/-/jest-when-3.4.1.tgz",
- "integrity": "sha512-oFxeKarvTsuE46SPTzX+znKb+vzQKUxhkPF/fOfhMJE19EcW+sk9dKiACgFVE3K82GgALDH1pjCvHU+uE91QYA==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/jest-when/-/jest-when-3.4.2.tgz",
+ "integrity": "sha512-vO1r+1XsyeavhoSapj7q4xD5xuM9i+UdopfhmJJK/aKaDpzDesxZ6hreLSO1JUZhZInqdM7CCn+At7c0SI2EEw==",
"dev": true,
"peerDependencies": {
"jest": ">= 25"
}
},
"node_modules/jest-worker": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.5.tgz",
- "integrity": "sha512-HTjEPZtcNKZ4LnhSp02NEH4vE+5OpJ0EsOWYvGQpHgUMLngydESAAMH5Wd/asPf29+XUDQZszxpLg1BkIIA2aw==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz",
+ "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==",
"dev": true,
"dependencies": {
"@types/node": "*",
@@ -5176,9 +5249,9 @@
}
},
"node_modules/karma": {
- "version": "6.3.4",
- "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.4.tgz",
- "integrity": "sha512-hbhRogUYIulfkBTZT7xoPrCYhRBnBoqbbL4fszWD0ReFGUxU+LYBr3dwKdAluaDQ/ynT9/7C+Lf7pPNW4gSx4Q==",
+ "version": "6.3.6",
+ "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.6.tgz",
+ "integrity": "sha512-xsiu3D6AjCv6Uq0YKXJgC6TvXX2WloQ5+XtHXmC1lwiLVG617DDV3W2DdM4BxCMKHlmz6l3qESZHFQGHAKvrew==",
"dependencies": {
"body-parser": "^1.19.0",
"braces": "^3.0.2",
@@ -5198,10 +5271,10 @@
"qjobs": "^1.2.0",
"range-parser": "^1.2.1",
"rimraf": "^3.0.2",
- "socket.io": "^3.1.0",
+ "socket.io": "^4.2.0",
"source-map": "^0.6.1",
"tmp": "^0.2.1",
- "ua-parser-js": "^0.7.28",
+ "ua-parser-js": "^0.7.30",
"yargs": "^16.1.1"
},
"bin": {
@@ -5244,75 +5317,6 @@
"karma": "*"
}
},
- "node_modules/karma/node_modules/cookie": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
- "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/karma/node_modules/engine.io": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.1.1.tgz",
- "integrity": "sha512-t2E9wLlssQjGw0nluF6aYyfX8LwYU8Jj0xct+pAhfWfv/YrBn6TSNtEYsgxHIfaMqfrLx07czcMg9bMN6di+3w==",
- "dependencies": {
- "accepts": "~1.3.4",
- "base64id": "2.0.0",
- "cookie": "~0.4.1",
- "cors": "~2.8.5",
- "debug": "~4.3.1",
- "engine.io-parser": "~4.0.0",
- "ws": "~7.4.2"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/karma/node_modules/socket.io": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-3.1.2.tgz",
- "integrity": "sha512-JubKZnTQ4Z8G4IZWtaAZSiRP3I/inpy8c/Bsx2jrwGrTbKeVU5xd6qkKMHpChYeM3dWZSO0QACiGK+obhBNwYw==",
- "dependencies": {
- "@types/cookie": "^0.4.0",
- "@types/cors": "^2.8.8",
- "@types/node": ">=10.0.0",
- "accepts": "~1.3.4",
- "base64id": "~2.0.0",
- "debug": "~4.3.1",
- "engine.io": "~4.1.0",
- "socket.io-adapter": "~2.1.0",
- "socket.io-parser": "~4.0.3"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/karma/node_modules/socket.io-adapter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.1.0.tgz",
- "integrity": "sha512-+vDov/aTsLjViYTwS9fPy5pEtTkrbEKsw2M+oVSoFGw6OD1IpvlV1VPhUzNbofCQ8oyMbdYJqDtGdmHQK6TdPg=="
- },
- "node_modules/karma/node_modules/ws": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
- "engines": {
- "node": ">=8.3.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
"node_modules/kleur": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
@@ -5376,6 +5380,12 @@
"integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
"dev": true
},
+ "node_modules/lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+ "dev": true
+ },
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@@ -5451,12 +5461,12 @@
"dev": true
},
"node_modules/makeerror": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
- "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
+ "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
"dev": true,
"dependencies": {
- "tmpl": "1.0.x"
+ "tmpl": "1.0.5"
}
},
"node_modules/markdown-it": {
@@ -5626,9 +5636,9 @@
}
},
"node_modules/node": {
- "version": "14.18.0",
- "resolved": "https://registry.npmjs.org/node/-/node-14.18.0.tgz",
- "integrity": "sha512-ho+MOL09f9W1lQ4ECUGv+2wuShttuZ6QnOIomhQ6ZQ2ZYovOCUtK0Z0796mnag2DZmA+v+R/4qsiXFnlMGBn3w==",
+ "version": "14.18.1",
+ "resolved": "https://registry.npmjs.org/node/-/node-14.18.1.tgz",
+ "integrity": "sha512-gBt7GlSQp68Bj5KoYx3dGgMCaE2PN0Qox3oiemTDINYHhJjML/Xd24jXuo7X1ehyJuVNZsLWYrJgX6DhHCze6w==",
"hasInstallScript": true,
"dependencies": {
"node-bin-setup": "^1.0.0"
@@ -5661,9 +5671,9 @@
}
},
"node_modules/node-releases": {
- "version": "1.1.77",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz",
- "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
+ "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==",
"dev": true
},
"node_modules/normalize-path": {
@@ -5848,6 +5858,14 @@
"node": ">=6"
}
},
+ "node_modules/parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/parse-semver": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz",
@@ -5920,6 +5938,7 @@
"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"
}
@@ -5950,9 +5969,9 @@
"dev": true
},
"node_modules/picocolors": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
- "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
"dev": true
},
"node_modules/picomatch": {
@@ -6055,9 +6074,9 @@
}
},
"node_modules/pretty-format": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.5.tgz",
- "integrity": "sha512-+nYn2z9GgicO9JiqmY25Xtq8SYfZ/5VCpEU3pppHHNAhd1y+ZXxmNPd1evmNcAd6Hz4iBV2kf0UpGth5A/VJ7g==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz",
+ "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==",
"dev": true,
"dependencies": {
"@jest/types": "^27.2.5",
@@ -6284,6 +6303,18 @@
"node": ">=8"
}
},
+ "node_modules/resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "dependencies": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@@ -6304,6 +6335,15 @@
"node": ">=8"
}
},
+ "node_modules/resolve.exports": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz",
+ "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -6472,6 +6512,7 @@
"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"
},
@@ -6483,6 +6524,7 @@
"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"
}
@@ -6539,17 +6581,14 @@
}
},
"node_modules/socket.io": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.2.0.tgz",
- "integrity": "sha512-sjlGfMmnaWvTRVxGRGWyhd9ctpg4APxWAxu85O/SxekkxHhfxmePWZbaYCkeX5QQX0z1YEnKOlNt6w82E4Nzug==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.3.1.tgz",
+ "integrity": "sha512-HC5w5Olv2XZ0XJ4gOLGzzHEuOCfj3G0SmoW3jLHYYh34EVsIr3EkW9h6kgfW+K3TFEcmYy8JcPWe//KUkBp5jA==",
"dependencies": {
- "@types/cookie": "^0.4.1",
- "@types/cors": "^2.8.12",
- "@types/node": ">=10.0.0",
"accepts": "~1.3.4",
"base64id": "~2.0.0",
"debug": "~4.3.2",
- "engine.io": "~5.2.0",
+ "engine.io": "~6.0.0",
"socket.io-adapter": "~2.3.2",
"socket.io-parser": "~4.0.4"
},
@@ -6563,17 +6602,28 @@
"integrity": "sha512-PBZpxUPYjmoogY0aoaTmo1643JelsaS1CiAwNjRVdrI0X9Seuc19Y2Wife8k88avW6haG8cznvwbubAZwH4Mtg=="
},
"node_modules/socket.io-client": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.2.0.tgz",
- "integrity": "sha512-3GJ2KMh7inJUNAOjgf8NaKJZJa9uRyfryh2LrVJyKyxmzoXlfW9DeDNqylJn0ovOFt4e/kRLNWzMt/YqqEWYSA==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.3.2.tgz",
+ "integrity": "sha512-2B9LqSunN60yV8F7S84CCEEcgbYNfrn7ejIInZtLZ7ppWtiX8rGZAjvdCvbnC8bqo/9RlCNOUsORLyskxSFP1g==",
"dependencies": {
- "@types/component-emitter": "^1.2.10",
+ "@socket.io/component-emitter": "~3.0.0",
"backo2": "~1.0.2",
- "component-emitter": "~1.3.0",
"debug": "~4.3.2",
- "engine.io-client": "~5.2.0",
+ "engine.io-client": "~6.0.1",
"parseuri": "0.0.6",
- "socket.io-parser": "~4.0.4"
+ "socket.io-parser": "~4.1.1"
+ },
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/socket.io-client/node_modules/socket.io-parser": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.1.tgz",
+ "integrity": "sha512-USQVLSkDWE5nbcY760ExdKaJxCE65kcsG/8k5FDGZVVxpD1pA7hABYXYkCUvxUuYYh/+uQw0N/fvBzfT8o07KA==",
+ "dependencies": {
+ "@socket.io/component-emitter": "~3.0.0",
+ "debug": "~4.3.1"
},
"engines": {
"node": ">=10.0.0"
@@ -6942,16 +6992,16 @@
}
},
"node_modules/ts-jest": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.5.tgz",
- "integrity": "sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w==",
+ "version": "27.0.7",
+ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.7.tgz",
+ "integrity": "sha512-O41shibMqzdafpuP+CkrOL7ykbmLh+FqQrXEmV9CydQ5JBk0Sj0uAEF5TNNe94fZWKm3yYvWa/IbyV4Yg1zK2Q==",
"dev": true,
"dependencies": {
"bs-logger": "0.x",
"fast-json-stable-stringify": "2.x",
"jest-util": "^27.0.0",
"json5": "2.x",
- "lodash": "4.x",
+ "lodash.memoize": "4.x",
"make-error": "1.x",
"semver": "7.x",
"yargs-parser": "20.x"
@@ -7104,9 +7154,9 @@
}
},
"node_modules/ua-parser-js": {
- "version": "0.7.28",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz",
- "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==",
+ "version": "0.7.31",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz",
+ "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==",
"funding": [
{
"type": "opencollective",
@@ -7218,9 +7268,9 @@
}
},
"node_modules/vsce": {
- "version": "1.100.2",
- "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.100.2.tgz",
- "integrity": "sha512-eDeubJNc0iav6mbTESZ90E9WcSzqAAl/lunb4KbNjRrz9tf+657i1mKhnWUyvK7Y4D8kN5NBD2FXD4FFMZj7ig==",
+ "version": "1.102.0",
+ "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.102.0.tgz",
+ "integrity": "sha512-fICfop2CvO4AwdkWmJyjxJSQoIJ0ke9owwBhvtQpXvgcH4kW0uV9jwdNviOEy0QYlhM3sAZJkf3/Nta3UPWvKQ==",
"dev": true,
"dependencies": {
"azure-devops-node-api": "^11.0.1",
@@ -7387,12 +7437,12 @@
}
},
"node_modules/walker": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
- "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
+ "version": "1.0.8",
+ "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
+ "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
"dev": true,
"dependencies": {
- "makeerror": "1.0.x"
+ "makeerror": "1.0.12"
}
},
"node_modules/webidl-conversions": {
@@ -7437,6 +7487,7 @@
"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"
},
@@ -7627,26 +7678,26 @@
}
},
"@babel/compat-data": {
- "version": "7.15.0",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz",
- "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.16.0.tgz",
+ "integrity": "sha512-DGjt2QZse5SGd9nfOSqO4WLJ8NN/oHkijbXbPrxuoJO3oIPJL3TciZs9FX+cOHNiY9E9l0opL8g7BmLe3T+9ew==",
"dev": true
},
"@babel/core": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz",
- "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.15.8",
- "@babel/generator": "^7.15.8",
- "@babel/helper-compilation-targets": "^7.15.4",
- "@babel/helper-module-transforms": "^7.15.8",
- "@babel/helpers": "^7.15.4",
- "@babel/parser": "^7.15.8",
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.6",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.0.tgz",
+ "integrity": "sha512-mYZEvshBRHGsIAiyH5PzCFTCfbWfoYbO/jcSdXQSUQu1/pW0xDZAUP7KEc32heqWTAfAHhV9j1vH8Sav7l+JNQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.0",
+ "@babel/generator": "^7.16.0",
+ "@babel/helper-compilation-targets": "^7.16.0",
+ "@babel/helper-module-transforms": "^7.16.0",
+ "@babel/helpers": "^7.16.0",
+ "@babel/parser": "^7.16.0",
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.0",
+ "@babel/types": "^7.16.0",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -7656,12 +7707,12 @@
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
- "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz",
+ "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.14.5"
+ "@babel/highlight": "^7.16.0"
}
},
"semver": {
@@ -7679,12 +7730,12 @@
}
},
"@babel/generator": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz",
- "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.16.0.tgz",
+ "integrity": "sha512-RR8hUCfRQn9j9RPKEVXo9LiwoxLPYn6hNZlvUOR8tSnaxlD0p0+la00ZP9/SnRt6HchKr+X0fO2r8vrETiJGew==",
"dev": true,
"requires": {
- "@babel/types": "^7.15.6",
+ "@babel/types": "^7.16.0",
"jsesc": "^2.5.1",
"source-map": "^0.5.0"
},
@@ -7698,12 +7749,12 @@
}
},
"@babel/helper-compilation-targets": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz",
- "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.0.tgz",
+ "integrity": "sha512-S7iaOT1SYlqK0sQaCi21RX4+13hmdmnxIEAnQUB/eh7GeAnRjOUgTYpLkUOiRXzD+yog1JxP0qyAQZ7ZxVxLVg==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.15.0",
+ "@babel/compat-data": "^7.16.0",
"@babel/helper-validator-option": "^7.14.5",
"browserslist": "^4.16.6",
"semver": "^6.3.0"
@@ -7718,75 +7769,75 @@
}
},
"@babel/helper-function-name": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz",
- "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.0.tgz",
+ "integrity": "sha512-BZh4mEk1xi2h4HFjWUXRQX5AEx4rvaZxHgax9gcjdLWdkjsY7MKt5p0otjsg5noXw+pB+clMCjw+aEVYADMjog==",
"dev": true,
"requires": {
- "@babel/helper-get-function-arity": "^7.15.4",
- "@babel/template": "^7.15.4",
- "@babel/types": "^7.15.4"
+ "@babel/helper-get-function-arity": "^7.16.0",
+ "@babel/template": "^7.16.0",
+ "@babel/types": "^7.16.0"
}
},
"@babel/helper-get-function-arity": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz",
- "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.0.tgz",
+ "integrity": "sha512-ASCquNcywC1NkYh/z7Cgp3w31YW8aojjYIlNg4VeJiHkqyP4AzIvr4qx7pYDb4/s8YcsZWqqOSxgkvjUz1kpDQ==",
"dev": true,
"requires": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.16.0"
}
},
"@babel/helper-hoist-variables": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz",
- "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.0.tgz",
+ "integrity": "sha512-1AZlpazjUR0EQZQv3sgRNfM9mEVWPK3M6vlalczA+EECcPz3XPh6VplbErL5UoMpChhSck5wAJHthlj1bYpcmg==",
"dev": true,
"requires": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.16.0"
}
},
"@babel/helper-member-expression-to-functions": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz",
- "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.0.tgz",
+ "integrity": "sha512-bsjlBFPuWT6IWhl28EdrQ+gTvSvj5tqVP5Xeftp07SEuz5pLnsXZuDkDD3Rfcxy0IsHmbZ+7B2/9SHzxO0T+sQ==",
"dev": true,
"requires": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.16.0"
}
},
"@babel/helper-module-imports": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz",
- "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.0.tgz",
+ "integrity": "sha512-kkH7sWzKPq0xt3H1n+ghb4xEMP8k0U7XV3kkB+ZGy69kDk2ySFW1qPi06sjKzFY3t1j6XbJSqr4mF9L7CYVyhg==",
"dev": true,
"requires": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.16.0"
}
},
"@babel/helper-module-transforms": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz",
- "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.16.0.tgz",
+ "integrity": "sha512-My4cr9ATcaBbmaEa8M0dZNA74cfI6gitvUAskgDtAFmAqyFKDSHQo5YstxPbN+lzHl2D9l/YOEFqb2mtUh4gfA==",
"dev": true,
"requires": {
- "@babel/helper-module-imports": "^7.15.4",
- "@babel/helper-replace-supers": "^7.15.4",
- "@babel/helper-simple-access": "^7.15.4",
- "@babel/helper-split-export-declaration": "^7.15.4",
+ "@babel/helper-module-imports": "^7.16.0",
+ "@babel/helper-replace-supers": "^7.16.0",
+ "@babel/helper-simple-access": "^7.16.0",
+ "@babel/helper-split-export-declaration": "^7.16.0",
"@babel/helper-validator-identifier": "^7.15.7",
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.6"
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.0",
+ "@babel/types": "^7.16.0"
}
},
"@babel/helper-optimise-call-expression": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz",
- "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.0.tgz",
+ "integrity": "sha512-SuI467Gi2V8fkofm2JPnZzB/SUuXoJA5zXe/xzyPP2M04686RzFKFHPK6HDVN6JvWBIEW8tt9hPR7fXdn2Lgpw==",
"dev": true,
"requires": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.16.0"
}
},
"@babel/helper-plugin-utils": {
@@ -7796,33 +7847,33 @@
"dev": true
},
"@babel/helper-replace-supers": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz",
- "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.0.tgz",
+ "integrity": "sha512-TQxuQfSCdoha7cpRNJvfaYxxxzmbxXw/+6cS7V02eeDYyhxderSoMVALvwupA54/pZcOTtVeJ0xccp1nGWladA==",
"dev": true,
"requires": {
- "@babel/helper-member-expression-to-functions": "^7.15.4",
- "@babel/helper-optimise-call-expression": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.4"
+ "@babel/helper-member-expression-to-functions": "^7.16.0",
+ "@babel/helper-optimise-call-expression": "^7.16.0",
+ "@babel/traverse": "^7.16.0",
+ "@babel/types": "^7.16.0"
}
},
"@babel/helper-simple-access": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz",
- "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.16.0.tgz",
+ "integrity": "sha512-o1rjBT/gppAqKsYfUdfHq5Rk03lMQrkPHG1OWzHWpLgVXRH4HnMM9Et9CVdIqwkCQlobnGHEJMsgWP/jE1zUiw==",
"dev": true,
"requires": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.16.0"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz",
- "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.0.tgz",
+ "integrity": "sha512-0YMMRpuDFNGTHNRiiqJX19GjNXA4H0E8jZ2ibccfSxaCogbm3am5WN/2nQNj0YnQwGWM1J06GOcQ2qnh3+0paw==",
"dev": true,
"requires": {
- "@babel/types": "^7.15.4"
+ "@babel/types": "^7.16.0"
}
},
"@babel/helper-validator-identifier": {
@@ -7838,23 +7889,23 @@
"dev": true
},
"@babel/helpers": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz",
- "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.16.0.tgz",
+ "integrity": "sha512-dVRM0StFMdKlkt7cVcGgwD8UMaBfWJHl3A83Yfs8GQ3MO0LHIIIMvK7Fa0RGOGUQ10qikLaX6D7o5htcQWgTMQ==",
"dev": true,
"requires": {
- "@babel/template": "^7.15.4",
- "@babel/traverse": "^7.15.4",
- "@babel/types": "^7.15.4"
+ "@babel/template": "^7.16.0",
+ "@babel/traverse": "^7.16.0",
+ "@babel/types": "^7.16.0"
}
},
"@babel/highlight": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
- "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.0.tgz",
+ "integrity": "sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g==",
"dev": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.14.5",
+ "@babel/helper-validator-identifier": "^7.15.7",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
},
@@ -7918,9 +7969,9 @@
}
},
"@babel/parser": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz",
- "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.0.tgz",
+ "integrity": "sha512-TEHWXf0xxpi9wKVyBCmRcSSDjbJ/cl6LUdlbYUHEaNQUJGhreJbZrXT6sR4+fZLxVUJqNRB4KyOvjuy/D9009A==",
"dev": true
},
"@babel/plugin-syntax-async-generators": {
@@ -8032,60 +8083,60 @@
}
},
"@babel/plugin-syntax-typescript": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz",
- "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.0.tgz",
+ "integrity": "sha512-Xv6mEXqVdaqCBfJFyeab0fH2DnUoMsDmhamxsSi4j8nLd4Vtw213WMJr55xxqipC/YVWyPY3K0blJncPYji+dQ==",
"dev": true,
"requires": {
"@babel/helper-plugin-utils": "^7.14.5"
}
},
"@babel/template": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz",
- "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.0.tgz",
+ "integrity": "sha512-MnZdpFD/ZdYhXwiunMqqgyZyucaYsbL0IrjoGjaVhGilz+x8YB++kRfygSOIj1yOtWKPlx7NBp+9I1RQSgsd5A==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.14.5",
- "@babel/parser": "^7.15.4",
- "@babel/types": "^7.15.4"
+ "@babel/code-frame": "^7.16.0",
+ "@babel/parser": "^7.16.0",
+ "@babel/types": "^7.16.0"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
- "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz",
+ "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.14.5"
+ "@babel/highlight": "^7.16.0"
}
}
}
},
"@babel/traverse": {
- "version": "7.15.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz",
- "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.14.5",
- "@babel/generator": "^7.15.4",
- "@babel/helper-function-name": "^7.15.4",
- "@babel/helper-hoist-variables": "^7.15.4",
- "@babel/helper-split-export-declaration": "^7.15.4",
- "@babel/parser": "^7.15.4",
- "@babel/types": "^7.15.4",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.16.0.tgz",
+ "integrity": "sha512-qQ84jIs1aRQxaGaxSysII9TuDaguZ5yVrEuC0BN2vcPlalwfLovVmCjbFDPECPXcYM/wLvNFfp8uDOliLxIoUQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.16.0",
+ "@babel/generator": "^7.16.0",
+ "@babel/helper-function-name": "^7.16.0",
+ "@babel/helper-hoist-variables": "^7.16.0",
+ "@babel/helper-split-export-declaration": "^7.16.0",
+ "@babel/parser": "^7.16.0",
+ "@babel/types": "^7.16.0",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
- "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz",
+ "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.14.5"
+ "@babel/highlight": "^7.16.0"
}
},
"globals": {
@@ -8097,12 +8148,12 @@
}
},
"@babel/types": {
- "version": "7.15.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.6.tgz",
- "integrity": "sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.16.0.tgz",
+ "integrity": "sha512-PJgg/k3SdLsGb3hhisFvtLOw5ts113klrpLuIPtCJIU+BB24fqq6lf8RWqKJEjzqXR9AEH1rIb5XTqwBHB+kQg==",
"dev": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.14.9",
+ "@babel/helper-validator-identifier": "^7.15.7",
"to-fast-properties": "^2.0.0"
}
},
@@ -8182,29 +8233,29 @@
"dev": true
},
"@jest/console": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.2.5.tgz",
- "integrity": "sha512-smtlRF9vNKorRMCUtJ+yllIoiY8oFmfFG7xlzsAE76nKEwXNhjPOJIsc7Dv+AUitVt76t+KjIpUP9m98Crn2LQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.3.1.tgz",
+ "integrity": "sha512-RkFNWmv0iui+qsOr/29q9dyfKTTT5DCuP31kUwg7rmOKPT/ozLeGLKJKVIiOfbiKyleUZKIrHwhmiZWVe8IMdw==",
"dev": true,
"requires": {
"@jest/types": "^27.2.5",
"@types/node": "*",
"chalk": "^4.0.0",
- "jest-message-util": "^27.2.5",
- "jest-util": "^27.2.5",
+ "jest-message-util": "^27.3.1",
+ "jest-util": "^27.3.1",
"slash": "^3.0.0"
}
},
"@jest/core": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.2.5.tgz",
- "integrity": "sha512-VR7mQ+jykHN4WO3OvusRJMk4xCa2MFLipMS+43fpcRGaYrN1KwMATfVEXif7ccgFKYGy5D1TVXTNE4mGq/KMMA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.3.1.tgz",
+ "integrity": "sha512-DMNE90RR5QKx0EA+wqe3/TNEwiRpOkhshKNxtLxd4rt3IZpCt+RSL+FoJsGeblRZmqdK4upHA/mKKGPPRAifhg==",
"dev": true,
"requires": {
- "@jest/console": "^27.2.5",
- "@jest/reporters": "^27.2.5",
- "@jest/test-result": "^27.2.5",
- "@jest/transform": "^27.2.5",
+ "@jest/console": "^27.3.1",
+ "@jest/reporters": "^27.3.1",
+ "@jest/test-result": "^27.3.1",
+ "@jest/transform": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
@@ -8212,103 +8263,72 @@
"emittery": "^0.8.1",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
- "jest-changed-files": "^27.2.5",
- "jest-config": "^27.2.5",
- "jest-haste-map": "^27.2.5",
- "jest-message-util": "^27.2.5",
+ "jest-changed-files": "^27.3.0",
+ "jest-config": "^27.3.1",
+ "jest-haste-map": "^27.3.1",
+ "jest-message-util": "^27.3.1",
"jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.2.5",
- "jest-resolve-dependencies": "^27.2.5",
- "jest-runner": "^27.2.5",
- "jest-runtime": "^27.2.5",
- "jest-snapshot": "^27.2.5",
- "jest-util": "^27.2.5",
- "jest-validate": "^27.2.5",
- "jest-watcher": "^27.2.5",
+ "jest-resolve": "^27.3.1",
+ "jest-resolve-dependencies": "^27.3.1",
+ "jest-runner": "^27.3.1",
+ "jest-runtime": "^27.3.1",
+ "jest-snapshot": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "jest-validate": "^27.3.1",
+ "jest-watcher": "^27.3.1",
"micromatch": "^4.0.4",
"rimraf": "^3.0.0",
"slash": "^3.0.0",
"strip-ansi": "^6.0.0"
- },
- "dependencies": {
- "jest-config": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.5.tgz",
- "integrity": "sha512-QdENtn9b5rIIYGlbDNEcgY9LDL5kcokJnXrp7x8AGjHob/XFqw1Z6p+gjfna2sUulQsQ3ce2Fvntnv+7fKYDhQ==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^27.2.5",
- "@jest/types": "^27.2.5",
- "babel-jest": "^27.2.5",
- "chalk": "^4.0.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.1",
- "graceful-fs": "^4.2.4",
- "is-ci": "^3.0.0",
- "jest-circus": "^27.2.5",
- "jest-environment-jsdom": "^27.2.5",
- "jest-environment-node": "^27.2.5",
- "jest-get-type": "^27.0.6",
- "jest-jasmine2": "^27.2.5",
- "jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.2.5",
- "jest-runner": "^27.2.5",
- "jest-util": "^27.2.5",
- "jest-validate": "^27.2.5",
- "micromatch": "^4.0.4",
- "pretty-format": "^27.2.5"
- }
- }
}
},
"@jest/environment": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.2.5.tgz",
- "integrity": "sha512-XvUW3q6OUF+54SYFCgbbfCd/BKTwm5b2MGLoc2jINXQLKQDTCS2P2IrpPOtQ08WWZDGzbhAzVhOYta3J2arubg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.3.1.tgz",
+ "integrity": "sha512-BCKCj4mOVLme6Tanoyc9k0ultp3pnmuyHw73UHRPeeZxirsU/7E3HC4le/VDb/SMzE1JcPnto+XBKFOcoiJzVw==",
"dev": true,
"requires": {
- "@jest/fake-timers": "^27.2.5",
+ "@jest/fake-timers": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/node": "*",
- "jest-mock": "^27.2.5"
+ "jest-mock": "^27.3.0"
}
},
"@jest/fake-timers": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.2.5.tgz",
- "integrity": "sha512-ZGUb6jg7BgwY+nmO0TW10bc7z7Hl2G/UTAvmxEyZ/GgNFoa31tY9/cgXmqcxnnZ7o5Xs7RAOz3G1SKIj8IVDlg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.3.1.tgz",
+ "integrity": "sha512-M3ZFgwwlqJtWZ+QkBG5NmC23A9w+A6ZxNsO5nJxJsKYt4yguBd3i8TpjQz5NfCX91nEve1KqD9RA2Q+Q1uWqoA==",
"dev": true,
"requires": {
"@jest/types": "^27.2.5",
"@sinonjs/fake-timers": "^8.0.1",
"@types/node": "*",
- "jest-message-util": "^27.2.5",
- "jest-mock": "^27.2.5",
- "jest-util": "^27.2.5"
+ "jest-message-util": "^27.3.1",
+ "jest-mock": "^27.3.0",
+ "jest-util": "^27.3.1"
}
},
"@jest/globals": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.2.5.tgz",
- "integrity": "sha512-naRI537GM+enFVJQs6DcwGYPn/0vgJNb06zGVbzXfDfe/epDPV73hP1vqO37PqSKDeOXM2KInr6ymYbL1HTP7g==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.3.1.tgz",
+ "integrity": "sha512-Q651FWiWQAIFiN+zS51xqhdZ8g9b88nGCobC87argAxA7nMfNQq0Q0i9zTfQYgLa6qFXk2cGANEqfK051CZ8Pg==",
"dev": true,
"requires": {
- "@jest/environment": "^27.2.5",
+ "@jest/environment": "^27.3.1",
"@jest/types": "^27.2.5",
- "expect": "^27.2.5"
+ "expect": "^27.3.1"
}
},
"@jest/reporters": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.2.5.tgz",
- "integrity": "sha512-zYuR9fap3Q3mxQ454VWF8I6jYHErh368NwcKHWO2uy2fwByqBzRHkf9j2ekMDM7PaSTWcLBSZyd7NNxR1iHxzQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.3.1.tgz",
+ "integrity": "sha512-m2YxPmL9Qn1emFVgZGEiMwDntDxRRQ2D58tiDQlwYTg5GvbFOKseYCcHtn0WsI8CG4vzPglo3nqbOiT8ySBT/w==",
"dev": true,
"requires": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^27.2.5",
- "@jest/test-result": "^27.2.5",
- "@jest/transform": "^27.2.5",
+ "@jest/console": "^27.3.1",
+ "@jest/test-result": "^27.3.1",
+ "@jest/transform": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/node": "*",
"chalk": "^4.0.0",
@@ -8321,10 +8341,10 @@
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.0.2",
- "jest-haste-map": "^27.2.5",
- "jest-resolve": "^27.2.5",
- "jest-util": "^27.2.5",
- "jest-worker": "^27.2.5",
+ "jest-haste-map": "^27.3.1",
+ "jest-resolve": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "jest-worker": "^27.3.1",
"slash": "^3.0.0",
"source-map": "^0.6.0",
"string-length": "^4.0.1",
@@ -8344,33 +8364,33 @@
}
},
"@jest/test-result": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.2.5.tgz",
- "integrity": "sha512-ub7j3BrddxZ0BdSnM5JCF6cRZJ/7j3wgdX0+Dtwhw2Po+HKsELCiXUTvh+mgS4/89mpnU1CPhZxe2mTvuLPJJg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.3.1.tgz",
+ "integrity": "sha512-mLn6Thm+w2yl0opM8J/QnPTqrfS4FoXsXF2WIWJb2O/GBSyResL71BRuMYbYRsGt7ELwS5JGcEcGb52BNrumgg==",
"dev": true,
"requires": {
- "@jest/console": "^27.2.5",
+ "@jest/console": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
}
},
"@jest/test-sequencer": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.2.5.tgz",
- "integrity": "sha512-8j8fHZRfnjbbdMitMAGFKaBZ6YqvFRFJlMJzcy3v75edTOqc7RY65S9JpMY6wT260zAcL2sTQRga/P4PglCu3Q==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.3.1.tgz",
+ "integrity": "sha512-siySLo07IMEdSjA4fqEnxfIX8lB/lWYsBPwNFtkOvsFQvmBrL3yj3k3uFNZv/JDyApTakRpxbKLJ3CT8UGVCrA==",
"dev": true,
"requires": {
- "@jest/test-result": "^27.2.5",
+ "@jest/test-result": "^27.3.1",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.5",
- "jest-runtime": "^27.2.5"
+ "jest-haste-map": "^27.3.1",
+ "jest-runtime": "^27.3.1"
}
},
"@jest/transform": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.2.5.tgz",
- "integrity": "sha512-29lRtAHHYGALbZOx343v0zKmdOg4Sb0rsA1uSv0818bvwRhs3TyElOmTVXlrw0v1ZTqXJCAH/cmoDXimBhQOJQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.3.1.tgz",
+ "integrity": "sha512-3fSvQ02kuvjOI1C1ssqMVBKJpZf6nwoCiSu00zAKh5nrp3SptNtZy/8s5deayHnqxhjD9CWDJ+yqQwuQ0ZafXQ==",
"dev": true,
"requires": {
"@babel/core": "^7.1.0",
@@ -8380,9 +8400,9 @@
"convert-source-map": "^1.4.0",
"fast-json-stable-stringify": "^2.0.0",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.5",
+ "jest-haste-map": "^27.3.1",
"jest-regex-util": "^27.0.6",
- "jest-util": "^27.2.5",
+ "jest-util": "^27.3.1",
"micromatch": "^4.0.4",
"pirates": "^4.0.1",
"slash": "^3.0.0",
@@ -8444,6 +8464,11 @@
"@sinonjs/commons": "^1.7.0"
}
},
+ "@socket.io/component-emitter": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.0.0.tgz",
+ "integrity": "sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q=="
+ },
"@tootallnate/once": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
@@ -8514,9 +8539,9 @@
"dev": true
},
"@types/component-emitter": {
- "version": "1.2.10",
- "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz",
- "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg=="
+ "version": "1.2.11",
+ "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz",
+ "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ=="
},
"@types/connect": {
"version": "3.4.35",
@@ -8537,15 +8562,6 @@
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
"integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw=="
},
- "@types/cross-spawn": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.2.tgz",
- "integrity": "sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
"@types/express": {
"version": "4.17.13",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz",
@@ -8569,10 +8585,16 @@
"@types/range-parser": "*"
}
},
+ "@types/get-installed-path": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/@types/get-installed-path/-/get-installed-path-4.0.1.tgz",
+ "integrity": "sha512-E5837Qz+MZWdD7415qrjK/2srkx41zdInNCGzgLvFeqMeZepTZmIPGD/Dwz9UuPvHmfCh0XeokvLreOXksIY9g==",
+ "dev": true
+ },
"@types/glob": {
- "version": "7.1.4",
- "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz",
- "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
"dev": true,
"requires": {
"@types/minimatch": "*",
@@ -8669,9 +8691,9 @@
"dev": true
},
"@types/node": {
- "version": "14.17.22",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.22.tgz",
- "integrity": "sha512-6Mgu9YWd8j0dk9M8V9+5w6ktqIFCcn/fFXAVIDFk/niAOFiOiz4GeFAMWYAQjKrcsASbFqMkqR8/Y2wuVCAkNg=="
+ "version": "14.17.32",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.32.tgz",
+ "integrity": "sha512-JcII3D5/OapPGx+eJ+Ik1SQGyt6WvuqdRfh9jUwL6/iHGjmyOriBDciBUu7lEIBTL2ijxwrR70WUnw5AEDmFvQ=="
},
"@types/prettier": {
"version": "2.4.1",
@@ -8768,17 +8790,6 @@
"@typescript-eslint/typescript-estree": "4.33.0",
"eslint-scope": "^5.1.1",
"eslint-utils": "^3.0.0"
- },
- "dependencies": {
- "eslint-utils": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
- "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^2.0.0"
- }
- }
}
},
"@typescript-eslint/parser": {
@@ -8994,12 +9005,12 @@
}
},
"babel-jest": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.2.5.tgz",
- "integrity": "sha512-GC9pWCcitBhSuF7H3zl0mftoKizlswaF0E3qi+rPL417wKkCB0d+Sjjb0OfXvxj7gWiBf497ldgRMii68Xz+2g==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.3.1.tgz",
+ "integrity": "sha512-SjIF8hh/ir0peae2D6S6ZKRhUy7q/DnpH7k/V6fT4Bgs/LXXUztOpX4G2tCgq8mLo5HA9mN6NmlFMeYtKmIsTQ==",
"dev": true,
"requires": {
- "@jest/transform": "^27.2.5",
+ "@jest/transform": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/babel__core": "^7.1.14",
"babel-plugin-istanbul": "^6.0.0",
@@ -9010,16 +9021,37 @@
}
},
"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==",
+ "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,
"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",
+ "istanbul-lib-instrument": "^5.0.4",
"test-exclude": "^6.0.0"
+ },
+ "dependencies": {
+ "istanbul-lib-instrument": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz",
+ "integrity": "sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q==",
+ "dev": true,
+ "requires": {
+ "@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"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
}
},
"babel-plugin-jest-hoist": {
@@ -9075,9 +9107,9 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
},
"base64-arraybuffer": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz",
- "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI="
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz",
+ "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA=="
},
"base64id": {
"version": "2.0.0",
@@ -9156,16 +9188,16 @@
"dev": true
},
"browserslist": {
- "version": "4.17.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.3.tgz",
- "integrity": "sha512-59IqHJV5VGdcJZ+GZ2hU5n4Kv3YiASzW6Xk5g9tf5a/MAzGeFwgGWU39fVzNIOVcgB3+Gp+kiQu0HEfTVU/3VQ==",
+ "version": "4.17.5",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.5.tgz",
+ "integrity": "sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==",
"dev": true,
"requires": {
- "caniuse-lite": "^1.0.30001264",
- "electron-to-chromium": "^1.3.857",
+ "caniuse-lite": "^1.0.30001271",
+ "electron-to-chromium": "^1.3.878",
"escalade": "^3.1.1",
- "node-releases": "^1.1.77",
- "picocolors": "^0.2.1"
+ "node-releases": "^2.0.1",
+ "picocolors": "^1.0.0"
}
},
"bs-logger": {
@@ -9226,9 +9258,9 @@
"dev": true
},
"caniuse-lite": {
- "version": "1.0.30001265",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001265.tgz",
- "integrity": "sha512-YzBnspggWV5hep1m9Z6sZVLOt7vrju8xWooFAgN6BA5qvy98qPAPb7vNUzypFaoh2pb3vlfzbDO8tB57UPGbtw==",
+ "version": "1.0.30001274",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001274.tgz",
+ "integrity": "sha512-+Nkvv0fHyhISkiMIjnyjmf5YJcQ1IQHZN6U9TLUMroWR38FNwpsC51Gb68yueafX1V6ifOisInSgP9WJFS13ew==",
"dev": true
},
"chalk": {
@@ -9446,6 +9478,7 @@
"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",
@@ -9684,9 +9717,9 @@
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
},
"electron-to-chromium": {
- "version": "1.3.867",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.867.tgz",
- "integrity": "sha512-WbTXOv7hsLhjJyl7jBfDkioaY++iVVZomZ4dU6TMe/SzucV6mUAs2VZn/AehBwuZMiNEQDaPuTGn22YK5o+aDw==",
+ "version": "1.3.885",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.885.tgz",
+ "integrity": "sha512-JXKFJcVWrdHa09n4CNZYfYaK6EW5aAew7/wr3L1OnsD1L+JHL+RCtd7QgIsxUbFPeTwPlvnpqNNTOLkoefmtXg==",
"dev": true
},
"emittery": {
@@ -9706,17 +9739,20 @@
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
"engine.io": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.2.0.tgz",
- "integrity": "sha512-d1DexkQx87IFr1FLuV+0f5kAm1Hk1uOVijLOb+D1sDO2QMb7YjE02VHtZtxo7xIXMgcWLb+vl3HRT0rI9tr4jQ==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.0.0.tgz",
+ "integrity": "sha512-Ui7yl3JajEIaACg8MOUwWvuuwU7jepZqX3BKs1ho7NQRuP4LhN4XIykXhp8bEy+x/DhA0LBZZXYSCkZDqrwMMg==",
"requires": {
+ "@types/cookie": "^0.4.1",
+ "@types/cors": "^2.8.12",
+ "@types/node": ">=10.0.0",
"accepts": "~1.3.4",
"base64id": "2.0.0",
"cookie": "~0.4.1",
"cors": "~2.8.5",
"debug": "~4.3.1",
- "engine.io-parser": "~4.0.0",
- "ws": "~7.4.2"
+ "engine.io-parser": "~5.0.0",
+ "ws": "~8.2.3"
},
"dependencies": {
"cookie": {
@@ -9725,44 +9761,43 @@
"integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
},
"ws": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
+ "version": "8.2.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
+ "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
"requires": {}
}
}
},
"engine.io-client": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-5.2.0.tgz",
- "integrity": "sha512-BcIBXGBkT7wKecwnfrSV79G2X5lSUSgeAGgoo60plXf8UsQEvCQww/KMwXSMhVjb98fFYNq20CC5eo8IOAPqsg==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.0.2.tgz",
+ "integrity": "sha512-cAep9lhZV6Q8jMXx3TNSU5cydMzMed8/O7Tz5uzyqZvpNPtQ3WQXrLYGADxlsuaFmOLN7wZLmT7ImiFhUOku8g==",
"requires": {
- "base64-arraybuffer": "0.1.4",
- "component-emitter": "~1.3.0",
+ "@socket.io/component-emitter": "~3.0.0",
"debug": "~4.3.1",
- "engine.io-parser": "~4.0.1",
+ "engine.io-parser": "~5.0.0",
"has-cors": "1.1.0",
"parseqs": "0.0.6",
"parseuri": "0.0.6",
- "ws": "~7.4.2",
+ "ws": "~8.2.3",
"xmlhttprequest-ssl": "~2.0.0",
"yeast": "0.1.2"
},
"dependencies": {
"ws": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
+ "version": "8.2.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
+ "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
"requires": {}
}
}
},
"engine.io-parser": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.3.tgz",
- "integrity": "sha512-xEAAY0msNnESNPc00e19y5heTPX4y/TJ36gr8t1voOaNmTojP9b3oK3BbJLFufW2XFPQaaijpFewm2g2Um3uqA==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.1.tgz",
+ "integrity": "sha512-j4p3WwJrG2k92VISM0op7wiq60vO92MlF3CRGxhKHy9ywG1/Dkc72g0dXeDQ+//hrcDn8gqQzoEkdO9FN0d9AA==",
"requires": {
- "base64-arraybuffer": "0.1.4"
+ "base64-arraybuffer": "~1.0.1"
}
},
"enquirer": {
@@ -9786,138 +9821,146 @@
"dev": true
},
"esbuild": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.5.tgz",
- "integrity": "sha512-Q9/f1njsZaO+Qqe3dqAdtu4zGHNZIbcEtdg44/NooyPhqCerns4FeC1UPYeB4pKD08iDuWcmyINFJTqpdN+pqg==",
- "dev": true,
- "requires": {
- "esbuild-android-arm64": "0.13.5",
- "esbuild-darwin-64": "0.13.5",
- "esbuild-darwin-arm64": "0.13.5",
- "esbuild-freebsd-64": "0.13.5",
- "esbuild-freebsd-arm64": "0.13.5",
- "esbuild-linux-32": "0.13.5",
- "esbuild-linux-64": "0.13.5",
- "esbuild-linux-arm": "0.13.5",
- "esbuild-linux-arm64": "0.13.5",
- "esbuild-linux-mips64le": "0.13.5",
- "esbuild-linux-ppc64le": "0.13.5",
- "esbuild-openbsd-64": "0.13.5",
- "esbuild-sunos-64": "0.13.5",
- "esbuild-windows-32": "0.13.5",
- "esbuild-windows-64": "0.13.5",
- "esbuild-windows-arm64": "0.13.5"
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.12.tgz",
+ "integrity": "sha512-vTKKUt+yoz61U/BbrnmlG9XIjwpdIxmHB8DlPR0AAW6OdS+nBQBci6LUHU2q9WbBobMEIQxxDpKbkmOGYvxsow==",
+ "dev": true,
+ "requires": {
+ "esbuild-android-arm64": "0.13.12",
+ "esbuild-darwin-64": "0.13.12",
+ "esbuild-darwin-arm64": "0.13.12",
+ "esbuild-freebsd-64": "0.13.12",
+ "esbuild-freebsd-arm64": "0.13.12",
+ "esbuild-linux-32": "0.13.12",
+ "esbuild-linux-64": "0.13.12",
+ "esbuild-linux-arm": "0.13.12",
+ "esbuild-linux-arm64": "0.13.12",
+ "esbuild-linux-mips64le": "0.13.12",
+ "esbuild-linux-ppc64le": "0.13.12",
+ "esbuild-netbsd-64": "0.13.12",
+ "esbuild-openbsd-64": "0.13.12",
+ "esbuild-sunos-64": "0.13.12",
+ "esbuild-windows-32": "0.13.12",
+ "esbuild-windows-64": "0.13.12",
+ "esbuild-windows-arm64": "0.13.12"
}
},
"esbuild-android-arm64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.5.tgz",
- "integrity": "sha512-xaNH58b9XRAWT5q0rwA2GNTgJynb51JhdotlNKdLmSCyKXPVlF87yqNLNdmlX/zndzRDrZdtpCWSALdn/J63Ug==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.13.12.tgz",
+ "integrity": "sha512-TSVZVrb4EIXz6KaYjXfTzPyyRpXV5zgYIADXtQsIenjZ78myvDGaPi11o4ZSaHIwFHsuwkB6ne5SZRBwAQ7maw==",
"dev": true,
"optional": true
},
"esbuild-darwin-64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.5.tgz",
- "integrity": "sha512-ClGQeUObXIxEpZviGzjTinDikXy9XodojP9jLKwqLCBpZ9wdV3MW7JOmw60fgXgnbNRvkZCqM6uEi+ur8p80Ow==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.13.12.tgz",
+ "integrity": "sha512-c51C+N+UHySoV2lgfWSwwmlnLnL0JWj/LzuZt9Ltk9ub1s2Y8cr6SQV5W3mqVH1egUceew6KZ8GyI4nwu+fhsw==",
"dev": true,
"optional": true
},
"esbuild-darwin-arm64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.5.tgz",
- "integrity": "sha512-qro6M/qzs1dBPh14Ca+5moIkLo2KE3ll3dOpiN7aAususkM1HmqQptCEchi0XwX+6nfqWI96YvVqPJ3DfUUK5A==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.12.tgz",
+ "integrity": "sha512-JvAMtshP45Hd8A8wOzjkY1xAnTKTYuP/QUaKp5eUQGX+76GIie3fCdUUr2ZEKdvpSImNqxiZSIMziEiGB5oUmQ==",
"dev": true,
"optional": true
},
"esbuild-freebsd-64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.5.tgz",
- "integrity": "sha512-vklf7L7fghREEvS1sjAFcxcw/Qqt+Z+L0ySN+pEeb7rA8nPLfRBSFdXAru8UNuHsMWns6CrcZ5eDOKTerZZ5ng==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.12.tgz",
+ "integrity": "sha512-r6On/Skv9f0ZjTu6PW5o7pdXr8aOgtFOEURJZYf1XAJs0IQ+gW+o1DzXjVkIoT+n1cm3N/t1KRJfX71MPg/ZUA==",
"dev": true,
"optional": true
},
"esbuild-freebsd-arm64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.5.tgz",
- "integrity": "sha512-kJoouhbZt4QvjiPak7/Lz57Azok0CgFnNtixiOsqEQXTabIaKmMmnq4qgjD6EBFeU/hvSXDrPe6U8dWhBZOrWQ==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.12.tgz",
+ "integrity": "sha512-F6LmI2Q1gii073kmBE3NOTt/6zLL5zvZsxNLF8PMAwdHc+iBhD1vzfI8uQZMJA1IgXa3ocr3L3DJH9fLGXy6Yw==",
"dev": true,
"optional": true
},
"esbuild-linux-32": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.5.tgz",
- "integrity": "sha512-/QufG6tTGKAf42pIYkOVZzKBPxF01xH1kCPyOFJZukZBV/Tk3TeOZfhJIAf7pxl4jhfa+c4Jcdp7CvIAjXrmJg==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.13.12.tgz",
+ "integrity": "sha512-U1UZwG3UIwF7/V4tCVAo/nkBV9ag5KJiJTt+gaCmLVWH3bPLX7y+fNlhIWZy8raTMnXhMKfaTvWZ9TtmXzvkuQ==",
"dev": true,
"optional": true
},
"esbuild-linux-64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.5.tgz",
- "integrity": "sha512-NmNFMXEthuFJTFaD4cLhAHCxg+y3uXzo7nqH/WNNSZ8PPY11jbeOvMbdArYlbo2Wy1N/mTHXMcK1synSJj+4Iw==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.13.12.tgz",
+ "integrity": "sha512-YpXSwtu2NxN3N4ifJxEdsgd6Q5d8LYqskrAwjmoCT6yQnEHJSF5uWcxv783HWN7lnGpJi9KUtDvYsnMdyGw71Q==",
"dev": true,
"optional": true
},
"esbuild-linux-arm": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.5.tgz",
- "integrity": "sha512-69nQmbKLBRaAxf88diyaOyarrI7yIdBkZ8bmVzQ7XVWneY+nYIcGtugTSOs5znNGfPqGOElAjh1lX+0sGYHNpA==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.13.12.tgz",
+ "integrity": "sha512-SyiT/JKxU6J+DY2qUiSLZJqCAftIt3uoGejZ0HDnUM2MGJqEGSGh7p1ecVL2gna3PxS4P+j6WAehCwgkBPXNIw==",
"dev": true,
"optional": true
},
"esbuild-linux-arm64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.5.tgz",
- "integrity": "sha512-dOS5EZsZj8Lw0TgEj3zy1/slTBbfBw4v7uHEqZXP34dUaRq2oltNaUYIj735CtgB7I5/MXrXEUYkXLqcVfzJQQ==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.12.tgz",
+ "integrity": "sha512-sgDNb8kb3BVodtAlcFGgwk+43KFCYjnFOaOfJibXnnIojNWuJHpL6aQJ4mumzNWw8Rt1xEtDQyuGK9f+Y24jGA==",
"dev": true,
"optional": true
},
"esbuild-linux-mips64le": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.5.tgz",
- "integrity": "sha512-dmKA8ZI/nHwpxIQW/L5crk7Ac4wJJ2Kquvdo1CdXPW1UljMyKUDuHc4K7D1Iws5igqJmNO6U5vdRUKrdnIov6Q==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.12.tgz",
+ "integrity": "sha512-qQJHlZBG+QwVIA8AbTEtbvF084QgDi4DaUsUnA+EolY1bxrG+UyOuGflM2ZritGhfS/k7THFjJbjH2wIeoKA2g==",
"dev": true,
"optional": true
},
"esbuild-linux-ppc64le": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.5.tgz",
- "integrity": "sha512-HkVGKkPL3XOhJqNOJ752Q1li5zeidrJHv+XWX6qCnCipNsVuGqaAGfxeWbL/+A/giolMlP7wvAuiKgoe+a5UAw==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.12.tgz",
+ "integrity": "sha512-2dSnm1ldL7Lppwlo04CGQUpwNn5hGqXI38OzaoPOkRsBRWFBozyGxTFSee/zHFS+Pdh3b28JJbRK3owrrRgWNw==",
+ "dev": true,
+ "optional": true
+ },
+ "esbuild-netbsd-64": {
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.12.tgz",
+ "integrity": "sha512-D4raxr02dcRiQNbxOLzpqBzcJNFAdsDNxjUbKkDMZBkL54Z0vZh4LRndycdZAMcIdizC/l/Yp/ZsBdAFxc5nbA==",
"dev": true,
"optional": true
},
"esbuild-openbsd-64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.5.tgz",
- "integrity": "sha512-BuOZzmdsdreSs0qDgbuiEhSbUDDW2Wyp4VtpNGBmaLwPMHftdprOJXLkeFud3HlnRB2n9qdiTVKg1B8YqMogSw==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.12.tgz",
+ "integrity": "sha512-KuLCmYMb2kh05QuPJ+va60bKIH5wHL8ypDkmpy47lzwmdxNsuySeCMHuTv5o2Af1RUn5KLO5ZxaZeq4GEY7DaQ==",
"dev": true,
"optional": true
},
"esbuild-sunos-64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.5.tgz",
- "integrity": "sha512-YJNB6Og1QYAPikvYDbqvk5xCqr6WL2i5cRWPGGgWOEItQPnq6gFsWogS3DiYM8TQKe50KRiD3Lwu7eNYsdPO4w==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.13.12.tgz",
+ "integrity": "sha512-jBsF+e0woK3miKI8ufGWKG3o3rY9DpHvCVRn5eburMIIE+2c+y3IZ1srsthKyKI6kkXLvV4Cf/E7w56kLipMXw==",
"dev": true,
"optional": true
},
"esbuild-windows-32": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.5.tgz",
- "integrity": "sha512-CigOlBSKsZ61IS+FyhD3luqCpl7LN9ntDaBZXumls/0IZ/8BJ5txqw4a6pv4LtnfIgt0ixGHSH7kAUmApw/HAw==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.13.12.tgz",
+ "integrity": "sha512-L9m4lLFQrFeR7F+eLZXG82SbXZfUhyfu6CexZEil6vm+lc7GDCE0Q8DiNutkpzjv1+RAbIGVva9muItQ7HVTkQ==",
"dev": true,
"optional": true
},
"esbuild-windows-64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.5.tgz",
- "integrity": "sha512-pg2BZXLpcPcrIcmToGapLRExzj6sm0VmQlqlmnMOtIJh0YQV9c0CRbhfIT0gYvJqCz5JEGiRvYpArRlxWADN3Q==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.13.12.tgz",
+ "integrity": "sha512-k4tX4uJlSbSkfs78W5d9+I9gpd+7N95W7H2bgOMFPsYREVJs31+Q2gLLHlsnlY95zBoPQMIzHooUIsixQIBjaQ==",
"dev": true,
"optional": true
},
"esbuild-windows-arm64": {
- "version": "0.13.5",
- "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.5.tgz",
- "integrity": "sha512-KKRDmUOIE4oCvJp0I4p4QyazK2X79spF29vsZr2U8qHhmxbTLSQWvYmb2WlF5Clb1URRsX0L013rhwHx1SEu0w==",
+ "version": "0.13.12",
+ "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.12.tgz",
+ "integrity": "sha512-2tTv/BpYRIvuwHpp2M960nG7uvL+d78LFW/ikPItO+2GfK51CswIKSetSpDii+cjz8e9iSPgs+BU4o8nWICBwQ==",
"dev": true,
"optional": true
},
@@ -9951,9 +9994,9 @@
},
"dependencies": {
"estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true
},
"levn": {
@@ -10045,6 +10088,23 @@
"v8-compile-cache": "^2.0.3"
},
"dependencies": {
+ "eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "dev": true,
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
+ "dev": true
+ }
+ }
+ },
"ignore": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
@@ -10089,20 +10149,12 @@
}
},
"eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz",
+ "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==",
"dev": true,
"requires": {
- "eslint-visitor-keys": "^1.1.0"
- },
- "dependencies": {
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true
- }
+ "eslint-visitor-keys": "^2.0.0"
}
},
"eslint-visitor-keys": {
@@ -10146,9 +10198,9 @@
},
"dependencies": {
"estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true
}
}
@@ -10163,9 +10215,9 @@
},
"dependencies": {
"estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
"dev": true
}
}
@@ -10215,17 +10267,25 @@
"integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
"dev": true
},
+ "expand-tilde": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
+ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
+ "requires": {
+ "homedir-polyfill": "^1.0.1"
+ }
+ },
"expect": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.5.tgz",
- "integrity": "sha512-ZrO0w7bo8BgGoP/bLz+HDCI+0Hfei9jUSZs5yI/Wyn9VkG9w8oJ7rHRgYj+MA7yqqFa0IwHA3flJzZtYugShJA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-27.3.1.tgz",
+ "integrity": "sha512-MrNXV2sL9iDRebWPGOGFdPQRl2eDQNu/uhxIMShjjx74T6kC6jFIkmQ6OqXDtevjGUkyB2IT56RzDBqXf/QPCg==",
"dev": true,
"requires": {
"@jest/types": "^27.2.5",
"ansi-styles": "^5.0.0",
- "jest-get-type": "^27.0.6",
- "jest-matcher-utils": "^27.2.5",
- "jest-message-util": "^27.2.5",
+ "jest-get-type": "^27.3.1",
+ "jest-matcher-utils": "^27.3.1",
+ "jest-message-util": "^27.3.1",
"jest-regex-util": "^27.0.6"
},
"dependencies": {
@@ -10429,9 +10489,9 @@
"dev": true
},
"follow-redirects": {
- "version": "1.14.4",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz",
- "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g=="
+ "version": "1.14.5",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz",
+ "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA=="
},
"form-data": {
"version": "3.0.1",
@@ -10498,6 +10558,14 @@
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
},
+ "get-installed-path": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/get-installed-path/-/get-installed-path-4.0.8.tgz",
+ "integrity": "sha512-PmANK1xElIHlHH2tXfOoTnSDUjX1X3GvKK6ZyLbUnSCCn1pADwu67eVWttuPzJWrXDDT2MfO6uAaKILOFfitmA==",
+ "requires": {
+ "global-modules": "1.0.0"
+ }
+ },
"get-intrinsic": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
@@ -10550,10 +10618,42 @@
"ini": "^1.3.4"
}
},
+ "global-modules": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
+ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
+ "requires": {
+ "global-prefix": "^1.0.1",
+ "is-windows": "^1.0.1",
+ "resolve-dir": "^1.0.0"
+ }
+ },
+ "global-prefix": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
+ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
+ "requires": {
+ "expand-tilde": "^2.0.2",
+ "homedir-polyfill": "^1.0.1",
+ "ini": "^1.3.4",
+ "is-windows": "^1.0.1",
+ "which": "^1.2.14"
+ },
+ "dependencies": {
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
+ }
+ },
"globals": {
- "version": "13.11.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.11.0.tgz",
- "integrity": "sha512-08/xrJ7wQjK9kkkRoI3OFUBbLx4f+6x3SGwcPvQ0QH6goFDrOU2oyAWrmh3dJezu65buo+HBMzAMQy6rovVC3g==",
+ "version": "13.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz",
+ "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==",
"dev": true,
"requires": {
"type-fest": "^0.20.2"
@@ -10603,6 +10703,14 @@
"integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
"dev": true
},
+ "homedir-polyfill": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
+ "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
+ "requires": {
+ "parse-passwd": "^1.0.0"
+ }
+ },
"hosted-git-info": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.0.2.tgz",
@@ -10759,19 +10867,10 @@
"binary-extensions": "^2.0.0"
}
},
- "is-ci": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.0.tgz",
- "integrity": "sha512-kDXyttuLeslKAHYL/K28F2YkM3x5jvFPEw3yXbRptXydjD9rpLEz+C5K5iutY9ZiUu6AP41JdvRQwF4Iqs4ZCQ==",
- "dev": true,
- "requires": {
- "ci-info": "^3.1.1"
- }
- },
"is-core-module": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.7.0.tgz",
- "integrity": "sha512-ByY+tjCciCr+9nLryBYcSD50EOGWt95c7tIsKTG1J2ixKKXPvF7Ej3AVd+UfDydAJom3biBGDBALaO79ktwgEQ==",
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
+ "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
"dev": true,
"requires": {
"has": "^1.0.3"
@@ -10829,6 +10928,11 @@
"integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
"dev": true
},
+ "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=="
+ },
"isbinaryfile": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz",
@@ -10840,9 +10944,9 @@
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
},
"istanbul-lib-coverage": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.2.tgz",
- "integrity": "sha512-o5+eTUYzCJ11/+JhW5/FUCdfsdoYVdQ/8I/OveE2XsjehYn5DdeSnNQAbjYaO8gQ6hvGTN6GM6ddQqpTVG5j8g==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
"dev": true
},
"istanbul-lib-instrument": {
@@ -10888,9 +10992,9 @@
}
},
"istanbul-reports": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
- "integrity": "sha512-bFjUnc95rHjdCR63WMHUS7yfJJh8T9IPSWavvR02hhjVwezWALZ5axF9EqjmwZHpXqkzbgAMP8DmAtiyNxrdrQ==",
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.5.tgz",
+ "integrity": "sha512-5+19PlhnGabNWB7kOFnuxT8H3T/iIyQzIbQMxXsURmmvKg86P2sbkrGOT77VnHw0Qr0gc2XzRaRfMZYYbSQCJQ==",
"dev": true,
"requires": {
"html-escaper": "^2.0.0",
@@ -10898,25 +11002,25 @@
}
},
"jasmine-core": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.9.0.tgz",
- "integrity": "sha512-Tv3kVbPCGVrjsnHBZ38NsPU3sDOtNa0XmbG2baiyJqdb5/SPpDO6GVwJYtUryl6KB4q1Ssckwg612ES9Z0dreQ=="
+ "version": "3.10.1",
+ "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.10.1.tgz",
+ "integrity": "sha512-ooZWSDVAdh79Rrj4/nnfklL3NQVra0BcuhcuWoAwwi+znLDoUeH87AFfeX8s+YeYi6xlv5nveRyaA1v7CintfA=="
},
"jest": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest/-/jest-27.2.5.tgz",
- "integrity": "sha512-vDMzXcpQN4Ycaqu+vO7LX8pZwNNoKMhc+gSp6q1D8S6ftRk8gNW8cni3YFxknP95jxzQo23Lul0BI2FrWgnwYQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-27.3.1.tgz",
+ "integrity": "sha512-U2AX0AgQGd5EzMsiZpYt8HyZ+nSVIh5ujQ9CPp9EQZJMjXIiSZpJNweZl0swatKRoqHWgGKM3zaSwm4Zaz87ng==",
"dev": true,
"requires": {
- "@jest/core": "^27.2.5",
+ "@jest/core": "^27.3.1",
"import-local": "^3.0.2",
- "jest-cli": "^27.2.5"
+ "jest-cli": "^27.3.1"
}
},
"jest-changed-files": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.2.5.tgz",
- "integrity": "sha512-jfnNJzF89csUKRPKJ4MwZ1SH27wTmX2xiAIHUHrsb/OYd9Jbo4/SXxJ17/nnx6RIifpthk3Y+LEeOk+/dDeGdw==",
+ "version": "27.3.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.3.0.tgz",
+ "integrity": "sha512-9DJs9garMHv4RhylUMZgbdCJ3+jHSkpL9aaVKp13xtXAD80qLTLrqcDZL1PHA9dYA0bCI86Nv2BhkLpLhrBcPg==",
"dev": true,
"requires": {
"@jest/types": "^27.2.5",
@@ -10925,93 +11029,91 @@
}
},
"jest-circus": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.2.5.tgz",
- "integrity": "sha512-eyL9IcrAxm3Saq3rmajFCwpaxaRMGJ1KJs+7hlTDinXpJmeR3P02bheM3CYohE7UfwOBmrFMJHjgo/WPcLTM+Q==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.3.1.tgz",
+ "integrity": "sha512-v1dsM9II6gvXokgqq6Yh2jHCpfg7ZqV4jWY66u7npz24JnhP3NHxI0sKT7+ZMQ7IrOWHYAaeEllOySbDbWsiXw==",
"dev": true,
"requires": {
- "@jest/environment": "^27.2.5",
- "@jest/test-result": "^27.2.5",
+ "@jest/environment": "^27.3.1",
+ "@jest/test-result": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
"dedent": "^0.7.0",
- "expect": "^27.2.5",
+ "expect": "^27.3.1",
"is-generator-fn": "^2.0.0",
- "jest-each": "^27.2.5",
- "jest-matcher-utils": "^27.2.5",
- "jest-message-util": "^27.2.5",
- "jest-runtime": "^27.2.5",
- "jest-snapshot": "^27.2.5",
- "jest-util": "^27.2.5",
- "pretty-format": "^27.2.5",
+ "jest-each": "^27.3.1",
+ "jest-matcher-utils": "^27.3.1",
+ "jest-message-util": "^27.3.1",
+ "jest-runtime": "^27.3.1",
+ "jest-snapshot": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "pretty-format": "^27.3.1",
"slash": "^3.0.0",
"stack-utils": "^2.0.3",
"throat": "^6.0.1"
}
},
"jest-cli": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.2.5.tgz",
- "integrity": "sha512-XzfcOXi5WQrXqFYsDxq5RDOKY4FNIgBgvgf3ZBz4e/j5/aWep5KnsAYH5OFPMdX/TP/LFsYQMRH7kzJUMh6JKg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.3.1.tgz",
+ "integrity": "sha512-WHnCqpfK+6EvT62me6WVs8NhtbjAS4/6vZJnk7/2+oOr50cwAzG4Wxt6RXX0hu6m1169ZGMlhYYUNeKBXCph/Q==",
"dev": true,
"requires": {
- "@jest/core": "^27.2.5",
- "@jest/test-result": "^27.2.5",
+ "@jest/core": "^27.3.1",
+ "@jest/test-result": "^27.3.1",
"@jest/types": "^27.2.5",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"import-local": "^3.0.2",
- "jest-config": "^27.2.5",
- "jest-util": "^27.2.5",
- "jest-validate": "^27.2.5",
+ "jest-config": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "jest-validate": "^27.3.1",
"prompts": "^2.0.1",
"yargs": "^16.2.0"
- },
- "dependencies": {
- "jest-config": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.2.5.tgz",
- "integrity": "sha512-QdENtn9b5rIIYGlbDNEcgY9LDL5kcokJnXrp7x8AGjHob/XFqw1Z6p+gjfna2sUulQsQ3ce2Fvntnv+7fKYDhQ==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.1.0",
- "@jest/test-sequencer": "^27.2.5",
- "@jest/types": "^27.2.5",
- "babel-jest": "^27.2.5",
- "chalk": "^4.0.0",
- "deepmerge": "^4.2.2",
- "glob": "^7.1.1",
- "graceful-fs": "^4.2.4",
- "is-ci": "^3.0.0",
- "jest-circus": "^27.2.5",
- "jest-environment-jsdom": "^27.2.5",
- "jest-environment-node": "^27.2.5",
- "jest-get-type": "^27.0.6",
- "jest-jasmine2": "^27.2.5",
- "jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.2.5",
- "jest-runner": "^27.2.5",
- "jest-util": "^27.2.5",
- "jest-validate": "^27.2.5",
- "micromatch": "^4.0.4",
- "pretty-format": "^27.2.5"
- }
- }
+ }
+ },
+ "jest-config": {
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.3.1.tgz",
+ "integrity": "sha512-KY8xOIbIACZ/vdYCKSopL44I0xboxC751IX+DXL2+Wx6DKNycyEfV3rryC3BPm5Uq/BBqDoMrKuqLEUNJmMKKg==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.1.0",
+ "@jest/test-sequencer": "^27.3.1",
+ "@jest/types": "^27.2.5",
+ "babel-jest": "^27.3.1",
+ "chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
+ "deepmerge": "^4.2.2",
+ "glob": "^7.1.1",
+ "graceful-fs": "^4.2.4",
+ "jest-circus": "^27.3.1",
+ "jest-environment-jsdom": "^27.3.1",
+ "jest-environment-node": "^27.3.1",
+ "jest-get-type": "^27.3.1",
+ "jest-jasmine2": "^27.3.1",
+ "jest-regex-util": "^27.0.6",
+ "jest-resolve": "^27.3.1",
+ "jest-runner": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "jest-validate": "^27.3.1",
+ "micromatch": "^4.0.4",
+ "pretty-format": "^27.3.1"
}
},
"jest-diff": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.2.5.tgz",
- "integrity": "sha512-7gfwwyYkeslOOVQY4tVq5TaQa92mWfC9COsVYMNVYyJTOYAqbIkoD3twi5A+h+tAPtAelRxkqY6/xu+jwTr0dA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.3.1.tgz",
+ "integrity": "sha512-PCeuAH4AWUo2O5+ksW4pL9v5xJAcIKPUPfIhZBcG1RKv/0+dvaWTQK1Nrau8d67dp65fOqbeMdoil+6PedyEPQ==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
"diff-sequences": "^27.0.6",
- "jest-get-type": "^27.0.6",
- "pretty-format": "^27.2.5"
+ "jest-get-type": "^27.3.1",
+ "pretty-format": "^27.3.1"
}
},
"jest-docblock": {
@@ -11024,57 +11126,57 @@
}
},
"jest-each": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.2.5.tgz",
- "integrity": "sha512-HUPWIbJT0bXarRwKu/m7lYzqxR4GM5EhKOsu0z3t0SKtbFN6skQhpAUADM4qFShBXb9zoOuag5lcrR1x/WM+Ag==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.3.1.tgz",
+ "integrity": "sha512-E4SwfzKJWYcvOYCjOxhZcxwL+AY0uFMvdCOwvzgutJiaiodFjkxQQDxHm8FQBeTqDnSmKsQWn7ldMRzTn2zJaQ==",
"dev": true,
"requires": {
"@jest/types": "^27.2.5",
"chalk": "^4.0.0",
- "jest-get-type": "^27.0.6",
- "jest-util": "^27.2.5",
- "pretty-format": "^27.2.5"
+ "jest-get-type": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "pretty-format": "^27.3.1"
}
},
"jest-environment-jsdom": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.2.5.tgz",
- "integrity": "sha512-QtRpOh/RQKuXniaWcoFE2ElwP6tQcyxHu0hlk32880g0KczdonCs5P1sk5+weu/OVzh5V4Bt1rXuQthI01mBLg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.3.1.tgz",
+ "integrity": "sha512-3MOy8qMzIkQlfb3W1TfrD7uZHj+xx8Olix5vMENkj5djPmRqndMaXtpnaZkxmxM+Qc3lo+yVzJjzuXbCcZjAlg==",
"dev": true,
"requires": {
- "@jest/environment": "^27.2.5",
- "@jest/fake-timers": "^27.2.5",
+ "@jest/environment": "^27.3.1",
+ "@jest/fake-timers": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/node": "*",
- "jest-mock": "^27.2.5",
- "jest-util": "^27.2.5",
+ "jest-mock": "^27.3.0",
+ "jest-util": "^27.3.1",
"jsdom": "^16.6.0"
}
},
"jest-environment-node": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.2.5.tgz",
- "integrity": "sha512-0o1LT4grm7iwrS8fIoLtwJxb/hoa3GsH7pP10P02Jpj7Mi4BXy65u46m89vEM2WfD1uFJQ2+dfDiWZNA2e6bJg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.3.1.tgz",
+ "integrity": "sha512-T89F/FgkE8waqrTSA7/ydMkcc52uYPgZZ6q8OaZgyiZkJb5QNNCF6oPZjH9IfPFfcc9uBWh1574N0kY0pSvTXw==",
"dev": true,
"requires": {
- "@jest/environment": "^27.2.5",
- "@jest/fake-timers": "^27.2.5",
+ "@jest/environment": "^27.3.1",
+ "@jest/fake-timers": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/node": "*",
- "jest-mock": "^27.2.5",
- "jest-util": "^27.2.5"
+ "jest-mock": "^27.3.0",
+ "jest-util": "^27.3.1"
}
},
"jest-get-type": {
- "version": "27.0.6",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.0.6.tgz",
- "integrity": "sha512-XTkK5exIeUbbveehcSR8w0bhH+c0yloW/Wpl+9vZrjzztCPWrxhHwkIFpZzCt71oRBsgxmuUfxEqOYoZI2macg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.3.1.tgz",
+ "integrity": "sha512-+Ilqi8hgHSAdhlQ3s12CAVNd8H96ZkQBfYoXmArzZnOfAtVAJEiPDBirjByEblvG/4LPJmkL+nBqPO3A1YJAEg==",
"dev": true
},
"jest-haste-map": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.2.5.tgz",
- "integrity": "sha512-pzO+Gw2WLponaSi0ilpzYBE0kuVJstoXBX8YWyUebR8VaXuX4tzzn0Zp23c/WaETo7XYTGv2e8KdnpiskAFMhQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.3.1.tgz",
+ "integrity": "sha512-lYfNZIzwPccDJZIyk9Iz5iQMM/MH56NIIcGj7AFU1YyA4ewWFBl8z+YPJuSCRML/ee2cCt2y3W4K3VXPT6Nhzg==",
"dev": true,
"requires": {
"@jest/types": "^27.2.5",
@@ -11086,64 +11188,64 @@
"graceful-fs": "^4.2.4",
"jest-regex-util": "^27.0.6",
"jest-serializer": "^27.0.6",
- "jest-util": "^27.2.5",
- "jest-worker": "^27.2.5",
+ "jest-util": "^27.3.1",
+ "jest-worker": "^27.3.1",
"micromatch": "^4.0.4",
"walker": "^1.0.7"
}
},
"jest-jasmine2": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.2.5.tgz",
- "integrity": "sha512-hdxY9Cm/CjLqu2tXeAoQHPgA4vcqlweVXYOg1+S9FeFdznB9Rti+eEBKDDkmOy9iqr4Xfbq95OkC4NFbXXPCAQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.3.1.tgz",
+ "integrity": "sha512-WK11ZUetDQaC09w4/j7o4FZDUIp+4iYWH/Lik34Pv7ukL+DuXFGdnmmi7dT58J2ZYKFB5r13GyE0z3NPeyJmsg==",
"dev": true,
"requires": {
"@babel/traverse": "^7.1.0",
- "@jest/environment": "^27.2.5",
+ "@jest/environment": "^27.3.1",
"@jest/source-map": "^27.0.6",
- "@jest/test-result": "^27.2.5",
+ "@jest/test-result": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
- "expect": "^27.2.5",
+ "expect": "^27.3.1",
"is-generator-fn": "^2.0.0",
- "jest-each": "^27.2.5",
- "jest-matcher-utils": "^27.2.5",
- "jest-message-util": "^27.2.5",
- "jest-runtime": "^27.2.5",
- "jest-snapshot": "^27.2.5",
- "jest-util": "^27.2.5",
- "pretty-format": "^27.2.5",
+ "jest-each": "^27.3.1",
+ "jest-matcher-utils": "^27.3.1",
+ "jest-message-util": "^27.3.1",
+ "jest-runtime": "^27.3.1",
+ "jest-snapshot": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "pretty-format": "^27.3.1",
"throat": "^6.0.1"
}
},
"jest-leak-detector": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.2.5.tgz",
- "integrity": "sha512-HYsi3GUR72bYhOGB5C5saF9sPdxGzSjX7soSQS+BqDRysc7sPeBwPbhbuT8DnOpijnKjgwWQ8JqvbmReYnt3aQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.3.1.tgz",
+ "integrity": "sha512-78QstU9tXbaHzwlRlKmTpjP9k4Pvre5l0r8Spo4SbFFVy/4Abg9I6ZjHwjg2QyKEAMg020XcjP+UgLZIY50yEg==",
"dev": true,
"requires": {
- "jest-get-type": "^27.0.6",
- "pretty-format": "^27.2.5"
+ "jest-get-type": "^27.3.1",
+ "pretty-format": "^27.3.1"
}
},
"jest-matcher-utils": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.5.tgz",
- "integrity": "sha512-qNR/kh6bz0Dyv3m68Ck2g1fLW5KlSOUNcFQh87VXHZwWc/gY6XwnKofx76Qytz3x5LDWT09/2+yXndTkaG4aWg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.3.1.tgz",
+ "integrity": "sha512-hX8N7zXS4k+8bC1Aj0OWpGb7D3gIXxYvPNK1inP5xvE4ztbz3rc4AkI6jGVaerepBnfWB17FL5lWFJT3s7qo8w==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
- "jest-diff": "^27.2.5",
- "jest-get-type": "^27.0.6",
- "pretty-format": "^27.2.5"
+ "jest-diff": "^27.3.1",
+ "jest-get-type": "^27.3.1",
+ "pretty-format": "^27.3.1"
}
},
"jest-message-util": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.2.5.tgz",
- "integrity": "sha512-ggXSLoPfIYcbmZ8glgEJZ8b+e0Msw/iddRmgkoO7lDAr9SmI65IIfv7VnvTnV4FGnIIUIjzM+fHRHO5RBvyAbQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.3.1.tgz",
+ "integrity": "sha512-bh3JEmxsTZ/9rTm0jQrPElbY2+y48Rw2t47uMfByNyUVR+OfPh4anuyKsGqsNkXk/TI4JbLRZx+7p7Hdt6q1yg==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.12.13",
@@ -11152,26 +11254,26 @@
"chalk": "^4.0.0",
"graceful-fs": "^4.2.4",
"micromatch": "^4.0.4",
- "pretty-format": "^27.2.5",
+ "pretty-format": "^27.3.1",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.15.8",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
- "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
+ "version": "7.16.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.0.tgz",
+ "integrity": "sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.14.5"
+ "@babel/highlight": "^7.16.0"
}
}
}
},
"jest-mock": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.2.5.tgz",
- "integrity": "sha512-HiMB3LqE9RzmeMzZARi2Bz3NoymxyP0gCid4y42ca1djffNtYFKgI220aC1VP1mUZ8rbpqZbHZOJ15093bZV/Q==",
+ "version": "27.3.0",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.3.0.tgz",
+ "integrity": "sha512-ziZiLk0elZOQjD08bLkegBzv5hCABu/c8Ytx45nJKkysQwGaonvmTxwjLqEA4qGdasq9o2I8/HtdGMNnVsMTGw==",
"dev": true,
"requires": {
"@jest/types": "^27.2.5",
@@ -11201,44 +11303,44 @@
"dev": true
},
"jest-resolve": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.2.5.tgz",
- "integrity": "sha512-q5irwS3oS73SKy3+FM/HL2T7WJftrk9BRzrXF92f7net5HMlS7lJMg/ZwxLB4YohKqjSsdksEw7n/jvMxV7EKg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.3.1.tgz",
+ "integrity": "sha512-Dfzt25CFSPo3Y3GCbxynRBZzxq9AdyNN+x/v2IqYx6KVT5Z6me2Z/PsSGFSv3cOSUZqJ9pHxilao/I/m9FouLw==",
"dev": true,
"requires": {
"@jest/types": "^27.2.5",
"chalk": "^4.0.0",
- "escalade": "^3.1.1",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.5",
+ "jest-haste-map": "^27.3.1",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^27.2.5",
- "jest-validate": "^27.2.5",
+ "jest-util": "^27.3.1",
+ "jest-validate": "^27.3.1",
"resolve": "^1.20.0",
+ "resolve.exports": "^1.1.0",
"slash": "^3.0.0"
}
},
"jest-resolve-dependencies": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.2.5.tgz",
- "integrity": "sha512-BSjefped31bcvvCh++/pN9ueqqN1n0+p8/58yScuWfklLm2tbPbS9d251vJhAy0ZI2pL/0IaGhOTJrs9Y4FJlg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.3.1.tgz",
+ "integrity": "sha512-X7iLzY8pCiYOnvYo2YrK3P9oSE8/3N2f4pUZMJ8IUcZnT81vlSonya1KTO9ZfKGuC+svE6FHK/XOb8SsoRUV1A==",
"dev": true,
"requires": {
"@jest/types": "^27.2.5",
"jest-regex-util": "^27.0.6",
- "jest-snapshot": "^27.2.5"
+ "jest-snapshot": "^27.3.1"
}
},
"jest-runner": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.2.5.tgz",
- "integrity": "sha512-n41vw9RLg5TKAnEeJK9d6pGOsBOpwE89XBniK+AD1k26oIIy3V7ogM1scbDjSheji8MUPC9pNgCrZ/FHLVDNgg==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.3.1.tgz",
+ "integrity": "sha512-r4W6kBn6sPr3TBwQNmqE94mPlYVn7fLBseeJfo4E2uCTmAyDFm2O5DYAQAFP7Q3YfiA/bMwg8TVsciP7k0xOww==",
"dev": true,
"requires": {
- "@jest/console": "^27.2.5",
- "@jest/environment": "^27.2.5",
- "@jest/test-result": "^27.2.5",
- "@jest/transform": "^27.2.5",
+ "@jest/console": "^27.3.1",
+ "@jest/environment": "^27.3.1",
+ "@jest/test-result": "^27.3.1",
+ "@jest/transform": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/node": "*",
"chalk": "^4.0.0",
@@ -11246,32 +11348,31 @@
"exit": "^0.1.2",
"graceful-fs": "^4.2.4",
"jest-docblock": "^27.0.6",
- "jest-environment-jsdom": "^27.2.5",
- "jest-environment-node": "^27.2.5",
- "jest-haste-map": "^27.2.5",
- "jest-leak-detector": "^27.2.5",
- "jest-message-util": "^27.2.5",
- "jest-resolve": "^27.2.5",
- "jest-runtime": "^27.2.5",
- "jest-util": "^27.2.5",
- "jest-worker": "^27.2.5",
+ "jest-environment-jsdom": "^27.3.1",
+ "jest-environment-node": "^27.3.1",
+ "jest-haste-map": "^27.3.1",
+ "jest-leak-detector": "^27.3.1",
+ "jest-message-util": "^27.3.1",
+ "jest-resolve": "^27.3.1",
+ "jest-runtime": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "jest-worker": "^27.3.1",
"source-map-support": "^0.5.6",
"throat": "^6.0.1"
}
},
"jest-runtime": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.2.5.tgz",
- "integrity": "sha512-N0WRZ3QszKyZ3Dm27HTBbBuestsSd3Ud5ooVho47XZJ8aSKO/X1Ag8M1dNx9XzfGVRNdB/xCA3lz8MJwIzPLLA==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.3.1.tgz",
+ "integrity": "sha512-qtO6VxPbS8umqhEDpjA4pqTkKQ1Hy4ZSi9mDVeE9Za7LKBo2LdW2jmT+Iod3XFaJqINikZQsn2wEi0j9wPRbLg==",
"dev": true,
"requires": {
- "@jest/console": "^27.2.5",
- "@jest/environment": "^27.2.5",
- "@jest/fake-timers": "^27.2.5",
- "@jest/globals": "^27.2.5",
+ "@jest/console": "^27.3.1",
+ "@jest/environment": "^27.3.1",
+ "@jest/globals": "^27.3.1",
"@jest/source-map": "^27.0.6",
- "@jest/test-result": "^27.2.5",
- "@jest/transform": "^27.2.5",
+ "@jest/test-result": "^27.3.1",
+ "@jest/transform": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/yargs": "^16.0.0",
"chalk": "^4.0.0",
@@ -11281,14 +11382,14 @@
"exit": "^0.1.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.4",
- "jest-haste-map": "^27.2.5",
- "jest-message-util": "^27.2.5",
- "jest-mock": "^27.2.5",
+ "jest-haste-map": "^27.3.1",
+ "jest-message-util": "^27.3.1",
+ "jest-mock": "^27.3.0",
"jest-regex-util": "^27.0.6",
- "jest-resolve": "^27.2.5",
- "jest-snapshot": "^27.2.5",
- "jest-util": "^27.2.5",
- "jest-validate": "^27.2.5",
+ "jest-resolve": "^27.3.1",
+ "jest-snapshot": "^27.3.1",
+ "jest-util": "^27.3.1",
+ "jest-validate": "^27.3.1",
"slash": "^3.0.0",
"strip-bom": "^4.0.0",
"yargs": "^16.2.0"
@@ -11305,9 +11406,9 @@
}
},
"jest-snapshot": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.2.5.tgz",
- "integrity": "sha512-2/Jkn+VN6Abwz0llBltZaiJMnL8b1j5Bp/gRIxe9YR3FCEh9qp0TXVV0dcpTGZ8AcJV1SZGQkczewkI9LP5yGw==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.3.1.tgz",
+ "integrity": "sha512-APZyBvSgQgOT0XumwfFu7X3G5elj6TGhCBLbBdn3R1IzYustPGPE38F51dBWMQ8hRXa9je0vAdeVDtqHLvB6lg==",
"dev": true,
"requires": {
"@babel/core": "^7.7.2",
@@ -11316,52 +11417,52 @@
"@babel/plugin-syntax-typescript": "^7.7.2",
"@babel/traverse": "^7.7.2",
"@babel/types": "^7.0.0",
- "@jest/transform": "^27.2.5",
+ "@jest/transform": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/babel__traverse": "^7.0.4",
"@types/prettier": "^2.1.5",
"babel-preset-current-node-syntax": "^1.0.0",
"chalk": "^4.0.0",
- "expect": "^27.2.5",
+ "expect": "^27.3.1",
"graceful-fs": "^4.2.4",
- "jest-diff": "^27.2.5",
- "jest-get-type": "^27.0.6",
- "jest-haste-map": "^27.2.5",
- "jest-matcher-utils": "^27.2.5",
- "jest-message-util": "^27.2.5",
- "jest-resolve": "^27.2.5",
- "jest-util": "^27.2.5",
+ "jest-diff": "^27.3.1",
+ "jest-get-type": "^27.3.1",
+ "jest-haste-map": "^27.3.1",
+ "jest-matcher-utils": "^27.3.1",
+ "jest-message-util": "^27.3.1",
+ "jest-resolve": "^27.3.1",
+ "jest-util": "^27.3.1",
"natural-compare": "^1.4.0",
- "pretty-format": "^27.2.5",
+ "pretty-format": "^27.3.1",
"semver": "^7.3.2"
}
},
"jest-util": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.2.5.tgz",
- "integrity": "sha512-QRhDC6XxISntMzFRd/OQ6TGsjbzA5ONO0tlAj2ElHs155x1aEr0rkYJBEysG6H/gZVH3oGFzCdAB/GA8leh8NQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.3.1.tgz",
+ "integrity": "sha512-8fg+ifEH3GDryLQf/eKZck1DEs2YuVPBCMOaHQxVVLmQwl/CDhWzrvChTX4efLZxGrw+AA0mSXv78cyytBt/uw==",
"dev": true,
"requires": {
"@jest/types": "^27.2.5",
"@types/node": "*",
"chalk": "^4.0.0",
+ "ci-info": "^3.2.0",
"graceful-fs": "^4.2.4",
- "is-ci": "^3.0.0",
"picomatch": "^2.2.3"
}
},
"jest-validate": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.2.5.tgz",
- "integrity": "sha512-XgYtjS89nhVe+UfkbLgcm+GgXKWgL80t9nTcNeejyO3t0Sj/yHE8BtIJqjZu9NXQksYbGImoQRXmQ1gP+Guffw==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.3.1.tgz",
+ "integrity": "sha512-3H0XCHDFLA9uDII67Bwi1Vy7AqwA5HqEEjyy934lgVhtJ3eisw6ShOF1MDmRPspyikef5MyExvIm0/TuLzZ86Q==",
"dev": true,
"requires": {
"@jest/types": "^27.2.5",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
- "jest-get-type": "^27.0.6",
+ "jest-get-type": "^27.3.1",
"leven": "^3.1.0",
- "pretty-format": "^27.2.5"
+ "pretty-format": "^27.3.1"
},
"dependencies": {
"camelcase": {
@@ -11373,31 +11474,31 @@
}
},
"jest-watcher": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.2.5.tgz",
- "integrity": "sha512-umV4qGozg2Dn6DTTtqAh9puPw+DGLK9AQas7+mWjiK8t0fWMpxKg8ZXReZw7L4C88DqorsGUiDgwHNZ+jkVrkQ==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.3.1.tgz",
+ "integrity": "sha512-9/xbV6chABsGHWh9yPaAGYVVKurWoP3ZMCv6h+O1v9/+pkOroigs6WzZ0e9gLP/njokUwM7yQhr01LKJVMkaZA==",
"dev": true,
"requires": {
- "@jest/test-result": "^27.2.5",
+ "@jest/test-result": "^27.3.1",
"@jest/types": "^27.2.5",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
- "jest-util": "^27.2.5",
+ "jest-util": "^27.3.1",
"string-length": "^4.0.1"
}
},
"jest-when": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/jest-when/-/jest-when-3.4.1.tgz",
- "integrity": "sha512-oFxeKarvTsuE46SPTzX+znKb+vzQKUxhkPF/fOfhMJE19EcW+sk9dKiACgFVE3K82GgALDH1pjCvHU+uE91QYA==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/jest-when/-/jest-when-3.4.2.tgz",
+ "integrity": "sha512-vO1r+1XsyeavhoSapj7q4xD5xuM9i+UdopfhmJJK/aKaDpzDesxZ6hreLSO1JUZhZInqdM7CCn+At7c0SI2EEw==",
"dev": true,
"requires": {}
},
"jest-worker": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.5.tgz",
- "integrity": "sha512-HTjEPZtcNKZ4LnhSp02NEH4vE+5OpJ0EsOWYvGQpHgUMLngydESAAMH5Wd/asPf29+XUDQZszxpLg1BkIIA2aw==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.3.1.tgz",
+ "integrity": "sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==",
"dev": true,
"requires": {
"@types/node": "*",
@@ -11511,9 +11612,9 @@
}
},
"karma": {
- "version": "6.3.4",
- "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.4.tgz",
- "integrity": "sha512-hbhRogUYIulfkBTZT7xoPrCYhRBnBoqbbL4fszWD0ReFGUxU+LYBr3dwKdAluaDQ/ynT9/7C+Lf7pPNW4gSx4Q==",
+ "version": "6.3.6",
+ "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.6.tgz",
+ "integrity": "sha512-xsiu3D6AjCv6Uq0YKXJgC6TvXX2WloQ5+XtHXmC1lwiLVG617DDV3W2DdM4BxCMKHlmz6l3qESZHFQGHAKvrew==",
"requires": {
"body-parser": "^1.19.0",
"braces": "^3.0.2",
@@ -11533,59 +11634,11 @@
"qjobs": "^1.2.0",
"range-parser": "^1.2.1",
"rimraf": "^3.0.2",
- "socket.io": "^3.1.0",
+ "socket.io": "^4.2.0",
"source-map": "^0.6.1",
"tmp": "^0.2.1",
- "ua-parser-js": "^0.7.28",
+ "ua-parser-js": "^0.7.30",
"yargs": "^16.1.1"
- },
- "dependencies": {
- "cookie": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
- "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
- },
- "engine.io": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-4.1.1.tgz",
- "integrity": "sha512-t2E9wLlssQjGw0nluF6aYyfX8LwYU8Jj0xct+pAhfWfv/YrBn6TSNtEYsgxHIfaMqfrLx07czcMg9bMN6di+3w==",
- "requires": {
- "accepts": "~1.3.4",
- "base64id": "2.0.0",
- "cookie": "~0.4.1",
- "cors": "~2.8.5",
- "debug": "~4.3.1",
- "engine.io-parser": "~4.0.0",
- "ws": "~7.4.2"
- }
- },
- "socket.io": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-3.1.2.tgz",
- "integrity": "sha512-JubKZnTQ4Z8G4IZWtaAZSiRP3I/inpy8c/Bsx2jrwGrTbKeVU5xd6qkKMHpChYeM3dWZSO0QACiGK+obhBNwYw==",
- "requires": {
- "@types/cookie": "^0.4.0",
- "@types/cors": "^2.8.8",
- "@types/node": ">=10.0.0",
- "accepts": "~1.3.4",
- "base64id": "~2.0.0",
- "debug": "~4.3.1",
- "engine.io": "~4.1.0",
- "socket.io-adapter": "~2.1.0",
- "socket.io-parser": "~4.0.3"
- }
- },
- "socket.io-adapter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.1.0.tgz",
- "integrity": "sha512-+vDov/aTsLjViYTwS9fPy5pEtTkrbEKsw2M+oVSoFGw6OD1IpvlV1VPhUzNbofCQ8oyMbdYJqDtGdmHQK6TdPg=="
- },
- "ws": {
- "version": "7.4.6",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
- "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
- "requires": {}
- }
}
},
"karma-chrome-launcher": {
@@ -11665,6 +11718,12 @@
"integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
"dev": true
},
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
+ "dev": true
+ },
"lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@@ -11729,12 +11788,12 @@
"dev": true
},
"makeerror": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz",
- "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+ "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"
+ "tmpl": "1.0.5"
}
},
"markdown-it": {
@@ -11867,9 +11926,9 @@
"integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
},
"node": {
- "version": "14.18.0",
- "resolved": "https://registry.npmjs.org/node/-/node-14.18.0.tgz",
- "integrity": "sha512-ho+MOL09f9W1lQ4ECUGv+2wuShttuZ6QnOIomhQ6ZQ2ZYovOCUtK0Z0796mnag2DZmA+v+R/4qsiXFnlMGBn3w==",
+ "version": "14.18.1",
+ "resolved": "https://registry.npmjs.org/node/-/node-14.18.1.tgz",
+ "integrity": "sha512-gBt7GlSQp68Bj5KoYx3dGgMCaE2PN0Qox3oiemTDINYHhJjML/Xd24jXuo7X1ehyJuVNZsLWYrJgX6DhHCze6w==",
"requires": {
"node-bin-setup": "^1.0.0"
}
@@ -11892,9 +11951,9 @@
"dev": true
},
"node-releases": {
- "version": "1.1.77",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.77.tgz",
- "integrity": "sha512-rB1DUFUNAN4Gn9keO2K1efO35IDK7yKHCdCaIMvFO7yUYmmZYeDjnGKle26G4rwj+LKRQpjyUUvMkPglwGCYNQ==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
+ "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==",
"dev": true
},
"normalize-path": {
@@ -12031,6 +12090,11 @@
"callsites": "^3.0.0"
}
},
+ "parse-passwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
+ "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY="
+ },
"parse-semver": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz",
@@ -12092,7 +12156,8 @@
"path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
},
"path-parse": {
"version": "1.0.7",
@@ -12117,9 +12182,9 @@
"dev": true
},
"picocolors": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
- "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
"dev": true
},
"picomatch": {
@@ -12194,9 +12259,9 @@
"requires": {}
},
"pretty-format": {
- "version": "27.2.5",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.2.5.tgz",
- "integrity": "sha512-+nYn2z9GgicO9JiqmY25Xtq8SYfZ/5VCpEU3pppHHNAhd1y+ZXxmNPd1evmNcAd6Hz4iBV2kf0UpGth5A/VJ7g==",
+ "version": "27.3.1",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.3.1.tgz",
+ "integrity": "sha512-DR/c+pvFc52nLimLROYjnXPtolawm+uWDxr4FjuLDLUn+ktWnSN851KoHwHzzqq6rfCOjkzN8FLgDrSub6UDuA==",
"dev": true,
"requires": {
"@jest/types": "^27.2.5",
@@ -12353,6 +12418,15 @@
}
}
},
+ "resolve-dir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
+ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
+ "requires": {
+ "expand-tilde": "^2.0.0",
+ "global-modules": "^1.0.0"
+ }
+ },
"resolve-from": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@@ -12367,6 +12441,12 @@
"global-dirs": "^0.1.1"
}
},
+ "resolve.exports": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz",
+ "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==",
+ "dev": true
+ },
"reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -12494,6 +12574,7 @@
"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"
}
@@ -12501,7 +12582,8 @@
"shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
},
"side-channel": {
"version": "1.0.4",
@@ -12543,17 +12625,14 @@
}
},
"socket.io": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.2.0.tgz",
- "integrity": "sha512-sjlGfMmnaWvTRVxGRGWyhd9ctpg4APxWAxu85O/SxekkxHhfxmePWZbaYCkeX5QQX0z1YEnKOlNt6w82E4Nzug==",
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.3.1.tgz",
+ "integrity": "sha512-HC5w5Olv2XZ0XJ4gOLGzzHEuOCfj3G0SmoW3jLHYYh34EVsIr3EkW9h6kgfW+K3TFEcmYy8JcPWe//KUkBp5jA==",
"requires": {
- "@types/cookie": "^0.4.1",
- "@types/cors": "^2.8.12",
- "@types/node": ">=10.0.0",
"accepts": "~1.3.4",
"base64id": "~2.0.0",
"debug": "~4.3.2",
- "engine.io": "~5.2.0",
+ "engine.io": "~6.0.0",
"socket.io-adapter": "~2.3.2",
"socket.io-parser": "~4.0.4"
}
@@ -12564,17 +12643,27 @@
"integrity": "sha512-PBZpxUPYjmoogY0aoaTmo1643JelsaS1CiAwNjRVdrI0X9Seuc19Y2Wife8k88avW6haG8cznvwbubAZwH4Mtg=="
},
"socket.io-client": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.2.0.tgz",
- "integrity": "sha512-3GJ2KMh7inJUNAOjgf8NaKJZJa9uRyfryh2LrVJyKyxmzoXlfW9DeDNqylJn0ovOFt4e/kRLNWzMt/YqqEWYSA==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.3.2.tgz",
+ "integrity": "sha512-2B9LqSunN60yV8F7S84CCEEcgbYNfrn7ejIInZtLZ7ppWtiX8rGZAjvdCvbnC8bqo/9RlCNOUsORLyskxSFP1g==",
"requires": {
- "@types/component-emitter": "^1.2.10",
+ "@socket.io/component-emitter": "~3.0.0",
"backo2": "~1.0.2",
- "component-emitter": "~1.3.0",
"debug": "~4.3.2",
- "engine.io-client": "~5.2.0",
+ "engine.io-client": "~6.0.1",
"parseuri": "0.0.6",
- "socket.io-parser": "~4.0.4"
+ "socket.io-parser": "~4.1.1"
+ },
+ "dependencies": {
+ "socket.io-parser": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.1.1.tgz",
+ "integrity": "sha512-USQVLSkDWE5nbcY760ExdKaJxCE65kcsG/8k5FDGZVVxpD1pA7hABYXYkCUvxUuYYh/+uQw0N/fvBzfT8o07KA==",
+ "requires": {
+ "@socket.io/component-emitter": "~3.0.0",
+ "debug": "~4.3.1"
+ }
+ }
}
},
"socket.io-parser": {
@@ -12856,16 +12945,16 @@
"requires": {}
},
"ts-jest": {
- "version": "27.0.5",
- "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.5.tgz",
- "integrity": "sha512-lIJApzfTaSSbtlksfFNHkWOzLJuuSm4faFAfo5kvzOiRAuoN4/eKxVJ2zEAho8aecE04qX6K1pAzfH5QHL1/8w==",
+ "version": "27.0.7",
+ "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-27.0.7.tgz",
+ "integrity": "sha512-O41shibMqzdafpuP+CkrOL7ykbmLh+FqQrXEmV9CydQ5JBk0Sj0uAEF5TNNe94fZWKm3yYvWa/IbyV4Yg1zK2Q==",
"dev": true,
"requires": {
"bs-logger": "0.x",
"fast-json-stable-stringify": "2.x",
"jest-util": "^27.0.0",
"json5": "2.x",
- "lodash": "4.x",
+ "lodash.memoize": "4.x",
"make-error": "1.x",
"semver": "7.x",
"yargs-parser": "20.x"
@@ -12959,9 +13048,9 @@
"dev": true
},
"ua-parser-js": {
- "version": "0.7.28",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.28.tgz",
- "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g=="
+ "version": "0.7.31",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz",
+ "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ=="
},
"uc.micro": {
"version": "1.0.6",
@@ -13041,9 +13130,9 @@
"integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w="
},
"vsce": {
- "version": "1.100.2",
- "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.100.2.tgz",
- "integrity": "sha512-eDeubJNc0iav6mbTESZ90E9WcSzqAAl/lunb4KbNjRrz9tf+657i1mKhnWUyvK7Y4D8kN5NBD2FXD4FFMZj7ig==",
+ "version": "1.102.0",
+ "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.102.0.tgz",
+ "integrity": "sha512-fICfop2CvO4AwdkWmJyjxJSQoIJ0ke9owwBhvtQpXvgcH4kW0uV9jwdNviOEy0QYlhM3sAZJkf3/Nta3UPWvKQ==",
"dev": true,
"requires": {
"azure-devops-node-api": "^11.0.1",
@@ -13173,12 +13262,12 @@
}
},
"walker": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz",
- "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
+ "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"
+ "makeerror": "1.0.12"
}
},
"webidl-conversions": {
@@ -13217,6 +13306,7 @@
"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"
}
diff --git a/package.json b/package.json
index dfb77f0..065f610 100644
--- a/package.json
+++ b/package.json
@@ -5,7 +5,7 @@
"icon": "docs/img/extension-icon-128.png",
"author": "Lucas Ononiwu",
"publisher": "lucono",
- "version": "0.2.1",
+ "version": "0.3.0",
"preview": true,
"license": "MIT",
"homepage": "https://github.com/lucono/karma-test-explorer",
@@ -48,10 +48,10 @@
},
"dependencies": {
"bluebird": "^3.7.2",
- "cross-spawn": "^7.0.0",
"dotenv": "^8.2.0",
"dotenv-expand": "5.1.0",
"express": "^4.17.1",
+ "get-installed-path": "^4.0.8",
"globby": "11.0.4",
"is-docker": "^2.2.1",
"karma": "^6.3.2",
@@ -71,8 +71,8 @@
},
"devDependencies": {
"@types/bluebird": "^3.5.36",
- "@types/cross-spawn": "^6.0.2",
"@types/express": "~4.17.13",
+ "@types/get-installed-path": "^4.0.1",
"@types/glob": "^7.1.4",
"@types/jest": "^27.0.2",
"@types/jest-when": "^2.7.3",
@@ -81,7 +81,7 @@
"@types/node": "^14.14.31",
"@types/semver": "~6.0.2",
"@types/throttle-debounce": "^2.1.0",
- "@types/vscode": "^1.60.0",
+ "@types/vscode": "^1.22.0",
"@typescript-eslint/eslint-plugin": "^4.32.0",
"@typescript-eslint/parser": "^4.32.0",
"esbuild": "^0.13.3",
@@ -96,16 +96,27 @@
"prettier-plugin-organize-imports": "^2.3.4",
"ts-jest": "^27.0.5",
"typescript": "^4.4.3",
- "vsce": "^1.100.2"
+ "vsce": "^1.102.0"
},
"engines": {
- "vscode": "^1.60.0"
+ "vscode": "^1.22.0"
},
"extensionDependencies": [
"hbenl.vscode-test-explorer"
],
"activationEvents": [
- "*"
+ "onLanguage:javascript",
+ "onLanguage:typescript",
+ "onStartupFinished",
+ "onView:test-explorer",
+ "onCommand:test-explorer.reload",
+ "onCommand:test-explorer.rerun",
+ "onCommand:test-explorer.redebug",
+ "onCommand:test-explorer.cancel",
+ "onCommand:test-explorer.run-all",
+ "onCommand:test-explorer.run-file",
+ "onCommand:test-explorer.run-test-at-cursor",
+ "onCommand:test-explorer.debug-test-at-cursor"
],
"contributes": {
"configuration": {
@@ -149,8 +160,14 @@
"Test runs are triggered using the Karma Http interface"
]
},
+ "karmaTestExplorer.nonHeadlessModeEnabled": {
+ "description": "Enables non-headless testing so that the browser UI is displayed when running tests. Has no effect when running in a container, or when the default value of the `customLauncher` or `browser` config settings are overridden",
+ "type": "boolean",
+ "scope": "resource",
+ "default": false
+ },
"karmaTestExplorer.failOnStandardError": {
- "description": "Treats any errors written to stderr as a failure. This can sometimes be useful for uncovering testing issues",
+ "description": "Treats any Karma, Angular, or other testing stderr output as a failure. This can sometimes be useful for uncovering testing issues",
"type": "boolean",
"scope": "resource",
"default": false
@@ -274,6 +291,27 @@
"info",
"debug"
],
+ "enumDescriptions": [
+ "Disable logging",
+ "Log only errors",
+ "Log only errors and warnings",
+ "Log errors, warnings and info level messages",
+ "More detailed logging which includes debug level information"
+ ]
+ },
+ "karmaTestExplorer.karmaReporterLogLevel": {
+ "description": "Sets the level of logging detail for the Karma Test Explorer reporter which logs additional details to the Karma server log related to the processing of test and browser events in Karma. This can be helpful when troubleshooting issues with how test and browser events are being processed in Karma and exchanged with the Karma Test Explorer. Set this to `disable` in order to not log any additional output from the reporter into the Karma server logs",
+ "type": "string",
+ "scope": "resource",
+ "default": "disable",
+ "enum": [
+ "disable",
+ "error",
+ "warn",
+ "info",
+ "debug",
+ "trace"
+ ],
"enumDescriptions": [
"Disable logging",
"Log only errors",
@@ -330,8 +368,11 @@
"base"
],
"default": {
- "base": "ChromeHeadless",
+ "base": "Chrome",
"flags": [
+ "--headless",
+ "--disable-gpu",
+ "--disable-dev-shm-usage",
"--remote-debugging-port=9222"
]
}
diff --git a/src/adapter.ts b/src/adapter.ts
index c06d36d..f0b0580 100644
--- a/src/adapter.ts
+++ b/src/adapter.ts
@@ -1,4 +1,4 @@
-import { resolve } from 'path';
+import { join, relative } from 'path';
import { debounce } from 'throttle-debounce';
import {
commands,
@@ -9,6 +9,8 @@ import {
EventEmitter,
FileChangeType,
FileSystemWatcher,
+ RelativePattern,
+ window,
workspace,
WorkspaceFolder
} from 'vscode';
@@ -30,7 +32,6 @@ import {
DEBUG_SESSION_START_TIMEOUT,
EXTENSION_CONFIG_PREFIX,
EXTENSION_NAME,
- EXTENSION_OUTPUT_CHANNEL_NAME,
WATCHED_FILE_CHANGE_BATCH_DELAY
} from './constants';
import { TestLoadEvent, TestResultEvent, TestRunEvent } from './core/base/test-events';
@@ -50,7 +51,7 @@ import { Disposable } from './util/disposable/disposable';
import { Disposer } from './util/disposable/disposer';
import { DeferredPromise } from './util/future/deferred-promise';
import { Execution } from './util/future/execution';
-import { LogLevel, LogLevelName } from './util/logging/log-level';
+import { LogLevel } from './util/logging/log-level';
import { SimpleLogger } from './util/logging/simple-logger';
import { getCircularReferenceReplacer, normalizePath } from './util/utils';
@@ -68,7 +69,6 @@ export class Adapter implements TestAdapter, Disposable {
private readonly testLoadEmitter = new EventEmitter();
private readonly testRunEmitter = new EventEmitter();
private readonly autorunEmitter = new EventEmitter();
- private readonly extensionOutputChannelLog: OutputChannelLog;
private config!: ExtensionConfig;
private logger!: SimpleLogger;
@@ -77,9 +77,10 @@ export class Adapter implements TestAdapter, Disposable {
private testManager!: TestManager;
private factory!: MainFactory;
- constructor(public readonly workspaceFolder: WorkspaceFolder) {
- this.extensionOutputChannelLog = new OutputChannelLog(EXTENSION_OUTPUT_CHANNEL_NAME);
-
+ constructor(
+ public readonly workspaceFolder: WorkspaceFolder,
+ private readonly extensionOutputChannelLog: OutputChannelLog
+ ) {
this.init();
const debouncedConfigChangeHandler = debounce(
@@ -89,7 +90,6 @@ export class Adapter implements TestAdapter, Disposable {
);
this.disposables.push(
- this.extensionOutputChannelLog,
this.testLoadEmitter,
this.testRunEmitter,
this.autorunEmitter,
@@ -112,8 +112,11 @@ export class Adapter implements TestAdapter, Disposable {
() => `Using extension configuration: ${JSON.stringify(this.config, getCircularReferenceReplacer(), 2)}`
);
- this.logger.debug(() => 'Creating status bar display');
- this.notifications = new Notifications(new SimpleLogger(this.logger, Notifications.name));
+ this.logger.debug(() => 'Creating notifications manager');
+ this.notifications = new Notifications(
+ window.createStatusBarItem(),
+ new SimpleLogger(this.logger, Notifications.name)
+ );
this.initDisposables.push(this.notifications);
this.logger.debug(() => 'Creating main factory');
@@ -343,7 +346,11 @@ export class Adapter implements TestAdapter, Disposable {
} else if (isForcedRefresh) {
await this.testManager.restart();
}
- await this.specLocator?.ready();
+
+ const testFileLoadCompletion = this.specLocator?.ready();
+ this.notifications.notifyStatus(StatusType.Busy, 'Loading test files...', testFileLoadCompletion);
+ await testFileLoadCompletion;
+
discoveredTests = await this.testManager.discoverTests();
testLoadFinishedEvent.suite = discoveredTests;
@@ -411,7 +418,7 @@ export class Adapter implements TestAdapter, Disposable {
private createConfig(): ExtensionConfig {
const config: ConfigStore = workspace.getConfiguration(EXTENSION_CONFIG_PREFIX, this.workspaceFolder.uri);
- const logLevel = LogLevel[config.get(ConfigSetting.LogLevel)!.toUpperCase() as LogLevelName];
+ const logLevel = config.get(ConfigSetting.LogLevel);
const configLogger = new SimpleLogger(this.extensionOutputChannelLog, ExtensionConfig.name, logLevel);
return new ExtensionConfig(config, this.workspaceFolder.uri.path, configLogger);
}
@@ -427,8 +434,12 @@ export class Adapter implements TestAdapter, Disposable {
reloadTriggerFiles.push(this.config.envFile);
}
+ const reloadTriggerFilesRelativePaths = reloadTriggerFiles.map(triggerFile =>
+ normalizePath(relative(this.config.projectRootPath, triggerFile))
+ );
+
const reloadTriggerFilesWatchers = this.registerFileHandler(
- reloadTriggerFiles,
+ reloadTriggerFilesRelativePaths,
debounce(WATCHED_FILE_CHANGE_BATCH_DELAY, filePath => {
this.logger.info(() => `Requesting adapter reset - monitored file changed: ${filePath}`);
this.reset();
@@ -451,7 +462,7 @@ export class Adapter implements TestAdapter, Disposable {
: this.specLocator.refreshFiles([changedTestFile]));
} else {
const changedTestIds: string[] = Array.from(this.loadedTestsById.values())
- .filter(loadedTest => loadedTest.file === changedTestFile)
+ .filter(loadedTest => loadedTest.file === changedTestFile && loadedTest.type === TestType.Test)
.map(changedTest => changedTest.id);
if (changedTestIds.length > 0) {
@@ -469,19 +480,26 @@ export class Adapter implements TestAdapter, Disposable {
handler: (filePath: string, changeType: FileChangeType) => void
): FileSystemWatcher[] {
const fileWatchers: FileSystemWatcher[] = [];
+ const workspaceRootPath = normalizePath(this.workspaceFolder.uri.fsPath);
+ const relativeProjectRootPath = relative(workspaceRootPath, this.config.projectRootPath);
+ const isProjectRootSameAsWorkspace = this.config.projectRootPath === workspaceRootPath;
this.logger.debug(() => `Registering file handler for files: ${JSON.stringify(filePatterns, null, 2)}`);
for (const fileOrPattern of filePatterns) {
- const absoluteFileOrPattern = normalizePath(resolve(this.config.projectRootPath, fileOrPattern));
- const fileWatcher = workspace.createFileSystemWatcher(absoluteFileOrPattern);
- fileWatchers.push(fileWatcher);
+ const relativeFileOrPattern = isProjectRootSameAsWorkspace
+ ? fileOrPattern
+ : normalizePath(join(relativeProjectRootPath, fileOrPattern));
+
+ const absoluteFileOrPattern = new RelativePattern(this.workspaceFolder, relativeFileOrPattern);
this.logger.debug(
() =>
`Creating file watcher for file or pattern '${fileOrPattern}' ` +
- `using absolute file or pattern: ${absoluteFileOrPattern}`
+ `using base path: ${absoluteFileOrPattern.base}`
);
+ const fileWatcher = workspace.createFileSystemWatcher(absoluteFileOrPattern);
+ fileWatchers.push(fileWatcher);
this.disposables.push(
fileWatcher.onDidChange(fileUri => handler(normalizePath(fileUri.fsPath), FileChangeType.Changed)),
diff --git a/src/constants.ts b/src/constants.ts
index b4bedd4..6ea042b 100644
--- a/src/constants.ts
+++ b/src/constants.ts
@@ -6,7 +6,8 @@ export const EXTENSION_CONFIG_PREFIX = 'karmaTestExplorer';
export const EXTENSION_OUTPUT_CHANNEL_NAME = EXTENSION_NAME;
export const DEFAULT_LOG_LEVEL = LogLevel.DEBUG;
export const DEBUG_SESSION_START_TIMEOUT = 1000 * 15;
-export const STATUS_BAR_MESASGE_MAX_DURATION = 1000 * 60 * 5;
+export const STATUS_BAR_MESASGE_MIN_DURATION = 1000 * 60;
+export const STATUS_BAR_MESASGE_MAX_DURATION = 1000 * 60 * 15;
export const CONFIG_FILE_CHANGE_BATCH_DELAY = 1000 * 3;
export const WATCHED_FILE_CHANGE_BATCH_DELAY = 2500;
@@ -14,6 +15,7 @@ export const WATCHED_FILE_CHANGE_BATCH_DELAY = 2500;
export const KARMA_SERVER_OUTPUT_CHANNEL_NAME = 'Karma Server';
export const KARMA_CUSTOM_LAUNCHER_BROWSER_NAME = 'KarmaTestExplorer_CustomLauncher';
export const KARMA_BROWSER_CONTAINER_NO_SANDBOX_FLAG = '--no-sandbox';
+export const KARMA_BROWSER_CONTAINER_HEADLESS_FLAGS = ['--headless', '--disable-gpu', '--disable-dev-shm-usage'];
export const KARMA_TEST_RUN_ID_FLAG = '--testRunId';
export const KARMA_SOCKET_PING_INTERVAL = 1000 * 60 * 60 * 24;
export const KARMA_SOCKET_PING_TIMEOUT = 1000 * 60 * 60 * 24;
@@ -21,6 +23,7 @@ export const KARMA_READY_DEFAULT_TIMEOUT = 1000 * 60 * 15;
export const KARMA_TEST_EVENT_INTERVAL_TIMEOUT = 1000 * 60;
// Others
+export const DEFAULT_KARMA_AND_ANGULAR_CONFIG_GLOBS = ['**/karma.conf.*', '**/angular.json', '**/.angular-cli.json'];
export const ALWAYS_EXCLUDED_TEST_FILE_GLOBS = ['**/node_modules/**/*'];
export const CHROME_BROWSER_DEBUGGING_PORT_FLAG = '--remote-debugging-port';
export const CHROME_DEFAULT_DEBUGGING_PORT = 9222;
diff --git a/src/core/config/config-setting.ts b/src/core/config/config-setting.ts
index 6e1221f..04e8f88 100644
--- a/src/core/config/config-setting.ts
+++ b/src/core/config/config-setting.ts
@@ -8,6 +8,7 @@ export enum ConfigSetting {
TestTriggerMethod = 'testTriggerMethod',
Browser = 'browser',
CustomLauncher = 'customLauncher',
+ NonHeadlessModeEnabled = 'nonHeadlessModeEnabled',
TestsBasePath = 'testsBasePath',
TestFiles = 'testFiles',
ExcludeFiles = 'excludeFiles',
@@ -20,6 +21,7 @@ export enum ConfigSetting {
DebuggerConfigName = 'debuggerConfigName',
LogLevel = 'logLevel',
KarmaLogLevel = 'karmaLogLevel',
+ KarmaReporterLogLevel = 'karmaReporterLogLevel',
Env = 'env',
EnvFile = 'envFile',
AutoWatchEnabled = 'autoWatchEnabled',
diff --git a/src/core/config/extension-config.ts b/src/core/config/extension-config.ts
index 891082f..69d2434 100644
--- a/src/core/config/extension-config.ts
+++ b/src/core/config/extension-config.ts
@@ -9,12 +9,13 @@ import {
ALWAYS_EXCLUDED_TEST_FILE_GLOBS,
CHROME_BROWSER_DEBUGGING_PORT_FLAG,
CHROME_DEFAULT_DEBUGGING_PORT,
+ KARMA_BROWSER_CONTAINER_HEADLESS_FLAGS,
KARMA_BROWSER_CONTAINER_NO_SANDBOX_FLAG
} from '../../constants';
-import { KarmaLogLevel } from '../../frameworks/karma/karma-logger';
+import { KarmaLogLevel } from '../../frameworks/karma/karma-log-level';
import { Disposable } from '../../util/disposable/disposable';
import { Disposer } from '../../util/disposable/disposer';
-import { LogLevel, LogLevelName } from '../../util/logging/log-level';
+import { LogLevel } from '../../util/logging/log-level';
import { Logger } from '../../util/logging/logger';
import { asNonBlankStringOrUndefined, normalizePath, toSingleUniqueArray } from '../../util/utils';
import { TestFrameworkName } from '../base/test-framework-name';
@@ -29,8 +30,8 @@ export enum ContainerMode {
}
export enum TestTriggerMethod {
- Http = 'HTTP',
- Cli = 'CLI'
+ Http = 'http',
+ Cli = 'cli'
}
export class ExtensionConfig implements Disposable {
@@ -46,9 +47,10 @@ export class ExtensionConfig implements Disposable {
public readonly envFile?: string;
public readonly environment: Readonly>;
public readonly excludeFiles: readonly string[];
- public readonly logLevel?: LogLevel;
public readonly flattenSingleChildFolders: boolean;
+ public readonly logLevel: LogLevel;
public readonly karmaLogLevel: KarmaLogLevel;
+ public readonly karmaReporterLogLevel: LogLevel;
public readonly karmaPort: number;
public readonly defaultSocketConnectionPort: number;
public readonly defaultDebugPort?: number;
@@ -72,12 +74,13 @@ export class ExtensionConfig implements Disposable {
this.karmaPort = config.get(ConfigSetting.KarmaPort)!;
this.karmaProcessCommand = asNonBlankStringOrUndefined(config.get(ConfigSetting.KarmaProcessCommand));
this.angularProcessCommand = asNonBlankStringOrUndefined(config.get(ConfigSetting.AngularProcessCommand));
- this.testTriggerMethod = config.get(ConfigSetting.TestTriggerMethod)!.toUpperCase() as TestTriggerMethod;
+ this.testTriggerMethod = config.get(ConfigSetting.TestTriggerMethod);
this.failOnStandardError = !!config.get(ConfigSetting.FailOnStandardError);
this.testsBasePath = normalizePath(resolve(this.projectRootPath, config.get(ConfigSetting.TestsBasePath)!));
this.defaultSocketConnectionPort = config.get(ConfigSetting.DefaultSocketConnectionPort)!;
- this.logLevel = LogLevel[config.get(ConfigSetting.LogLevel)!.toUpperCase() as LogLevelName];
- this.karmaLogLevel = config.get(ConfigSetting.KarmaLogLevel)!.toUpperCase() as KarmaLogLevel;
+ this.logLevel = config.get(ConfigSetting.LogLevel);
+ this.karmaLogLevel = config.get(ConfigSetting.KarmaLogLevel);
+ this.karmaReporterLogLevel = config.get(ConfigSetting.KarmaReporterLogLevel);
this.autoWatchEnabled = !!config.get(ConfigSetting.AutoWatchEnabled);
this.autoWatchBatchDelay = config.get(ConfigSetting.AutoWatchBatchDelay);
this.karmaReadyTimeout = config.get(ConfigSetting.KarmaReadyTimeout)!;
@@ -151,6 +154,7 @@ export class ExtensionConfig implements Disposable {
private getCustomLauncher(config: ConfigStore): CustomLauncher {
const configuredLauncher: CustomLauncher = config.get(ConfigSetting.CustomLauncher);
const configuredContainerMode: ContainerMode = config.get(ConfigSetting.ContainerMode);
+ const isNonHeadlessMode = !!config.get(ConfigSetting.NonHeadlessModeEnabled);
const isContainerMode =
configuredContainerMode === ContainerMode.Enabled
@@ -159,15 +163,19 @@ export class ExtensionConfig implements Disposable {
? false
: isDocker();
- if (!isContainerMode || (configuredLauncher.base ?? '').toLowerCase().indexOf('chrome') === -1) {
+ if ((configuredLauncher.base ?? '').toLowerCase().indexOf('chrome') === -1) {
return configuredLauncher;
}
let launcherFlags = (configuredLauncher.flags ??= []);
- launcherFlags = launcherFlags.includes(KARMA_BROWSER_CONTAINER_NO_SANDBOX_FLAG)
- ? launcherFlags
- : [...launcherFlags, KARMA_BROWSER_CONTAINER_NO_SANDBOX_FLAG];
+ if (isContainerMode && !launcherFlags.includes(KARMA_BROWSER_CONTAINER_NO_SANDBOX_FLAG)) {
+ launcherFlags = [...launcherFlags, KARMA_BROWSER_CONTAINER_NO_SANDBOX_FLAG];
+ }
+
+ if (!isContainerMode && configuredLauncher.base === 'Chrome' && isNonHeadlessMode) {
+ launcherFlags = launcherFlags.filter(flag => !KARMA_BROWSER_CONTAINER_HEADLESS_FLAGS.includes(flag));
+ }
const customLauncher: CustomLauncher = { ...configuredLauncher, flags: launcherFlags };
return customLauncher;
diff --git a/src/core/default-test-manager.ts b/src/core/default-test-manager.ts
index 6004927..6cb51b9 100644
--- a/src/core/default-test-manager.ts
+++ b/src/core/default-test-manager.ts
@@ -246,6 +246,7 @@ export class DefaultTestManager implements TestManager {
await this.restart();
}
this.logger.info(() => 'Discovering tests');
+
this.notifications.notifyStatus(
StatusType.Busy,
'Discovering tests...',
diff --git a/src/core/main-factory.ts b/src/core/main-factory.ts
index a59b234..5695afc 100644
--- a/src/core/main-factory.ts
+++ b/src/core/main-factory.ts
@@ -7,6 +7,7 @@ import { AngularProject } from '../frameworks/angular/angular-project';
import { getDefaultAngularProject } from '../frameworks/angular/angular-util';
import { JasmineTestFramework } from '../frameworks/jasmine/jasmine-test-framework';
import { KarmaFactory, KarmaFactoryConfig } from '../frameworks/karma/karma-factory';
+import { KarmaLogLevel } from '../frameworks/karma/karma-log-level';
import { KarmaAutoWatchTestEventProcessor } from '../frameworks/karma/runner/karma-auto-watch-test-event-processor';
import { KarmaTestEventListener } from '../frameworks/karma/runner/karma-test-event-listener';
import { KarmaTestEventProcessor } from '../frameworks/karma/runner/karma-test-event-processor';
@@ -18,7 +19,6 @@ import { Disposable } from '../util/disposable/disposable';
import { Disposer } from '../util/disposable/disposer';
import { FileHandler } from '../util/file-handler';
import { LogAppender } from '../util/logging/log-appender';
-import { LogLevel } from '../util/logging/log-level';
import { SimpleLogger } from '../util/logging/simple-logger';
import { PortAcquisitionManager } from '../util/port-acquisition-manager';
import { CommandLineProcessLog } from '../util/process/command-line-process-log';
@@ -30,7 +30,6 @@ import { TestFramework } from './base/test-framework';
import { TestFrameworkName } from './base/test-framework-name';
import { TestResolver } from './base/test-resolver';
import { CascadingTestFactory } from './cascading-test-factory';
-import { ConfigSetting } from './config/config-setting';
import { ExtensionConfig } from './config/extension-config';
import { DefaultTestFileParser } from './default-test-file-parser';
import { DefaultTestManager } from './default-test-manager';
@@ -56,7 +55,7 @@ export class MainFactory {
this.disposables.push(logger);
this.angularProject = getDefaultAngularProject(this.config.projectRootPath, this.config.defaultAngularProjectName);
- this.logger.info(() => `Project detected as ${this.angularProject ? 'Angular' : 'non-Angular'} project`);
+ this.logger.info(() => `Project detected as ${this.angularProject ? 'Angular' : 'plain Karma'} project`);
const fileHandler = new FileHandler(this.createLogger(FileHandler.name));
const karmaConfigPath = this.angularProject?.karmaConfigPath ?? this.config.userKarmaConfFilePath;
@@ -68,7 +67,7 @@ export class MainFactory {
this.disposables.push(this.specLocator);
this.testServerLog = new OutputChannelLog(KARMA_SERVER_OUTPUT_CHANNEL_NAME, {
- enabled: config.karmaLogLevel !== LogLevel[LogLevel.DISABLE]
+ enabled: config.karmaLogLevel !== KarmaLogLevel.DISABLE
});
this.disposables.push(this.testServerLog);
}
@@ -85,11 +84,7 @@ export class MainFactory {
const watchModeEnabled = watchModeRequested && watchModeSupported;
if (watchModeRequested && !watchModeSupported) {
- this.logger.warn(
- () =>
- `Auto-watch setting '${ConfigSetting.AutoWatchEnabled}' is enabled but not supported ` +
- `for the current test framework '${this.testFramework.name}'`
- );
+ this.logger.info(() => `Auto-watch is unavailable for the current test framework: ${this.testFramework.name}`);
}
const testSuiteOrganizer = new TestSuiteOrganizer(this.createLogger(TestSuiteOrganizer.name));
@@ -201,6 +196,7 @@ export class MainFactory {
autoWatchEnabled: watchModeEnabled,
autoWatchBatchDelay: this.config.autoWatchBatchDelay,
karmaLogLevel: this.config.karmaLogLevel,
+ karmaReporterLogLevel: this.config.karmaReporterLogLevel,
customLauncher: this.config.customLauncher,
environment: this.config.environment,
browser: this.config.browser,
@@ -228,6 +224,7 @@ export class MainFactory {
autoWatchEnabled: watchModeEnabled,
autoWatchBatchDelay: this.config.autoWatchBatchDelay,
karmaLogLevel: this.config.karmaLogLevel,
+ karmaReporterLogLevel: this.config.karmaReporterLogLevel,
customLauncher: this.config.customLauncher,
environment: this.config.environment,
browser: this.config.browser,
@@ -268,6 +265,7 @@ export class MainFactory {
specToTestSuiteMapper,
testSuiteOrganizer,
suiteTestResultProcessor,
+ this.specLocator,
this.config.testGrouping,
this.config.projectRootPath,
this.config.testsBasePath,
@@ -283,6 +281,7 @@ export class MainFactory {
specToTestSuiteMapper,
testSuiteOrganizer,
suiteTestResultProcessor,
+ this.specLocator,
this.config.testGrouping,
this.config.projectRootPath,
this.config.testsBasePath,
@@ -304,9 +303,9 @@ export class MainFactory {
return new KarmaTestEventListener(
testRunEventProcessor,
watchModeTestEventProcessor,
- this.config.karmaReadyTimeout,
this.notifications,
- this.createLogger(KarmaTestEventListener.name)
+ this.createLogger(KarmaTestEventListener.name),
+ { karmaReadyTimeout: this.config.karmaReadyTimeout }
);
}
diff --git a/src/core/spec-locator.ts b/src/core/spec-locator.ts
index e9f0c8d..254d4ab 100644
--- a/src/core/spec-locator.ts
+++ b/src/core/spec-locator.ts
@@ -1,6 +1,6 @@
import globby from 'globby';
import { isMatch } from 'micromatch';
-import { join, resolve } from 'path';
+import { join, relative, resolve } from 'path';
import { Disposable } from '../util/disposable/disposable';
import { Disposer } from '../util/disposable/disposer';
import { FileHandler } from '../util/file-handler';
@@ -26,7 +26,6 @@ export interface SpecLocatorOptions extends globby.GlobbyOptions {
}
export class SpecLocator implements Disposable {
- private readonly fileGlobs: string[];
private readonly fileInfoMap: Map = new Map();
private readonly specFilesBySuite: Map = new Map();
private readonly specLocatorOptions: SpecLocatorOptions;
@@ -35,13 +34,12 @@ export class SpecLocator implements Disposable {
private readonly disposables: Disposable[] = [];
public constructor(
- fileGlobs: string[],
+ private readonly fileGlobs: string[],
private readonly testFileParser: TestFileParser,
private readonly fileHandler: FileHandler,
private readonly logger: Logger,
specLocatorOptions: SpecLocatorOptions = {}
) {
- this.fileGlobs = fileGlobs.map(glob => normalizePath(glob));
this.disposables.push(logger, fileHandler);
this.cwd = normalizePath(specLocatorOptions.cwd ?? process.cwd());
this.specLocatorOptions = { ...specLocatorOptions, cwd: this.cwd };
@@ -164,33 +162,39 @@ export class SpecLocator implements Disposable {
this.addSuiteFileToCache(fileTopSuite, fileAbsolutePath);
}
- public getSpecLocation(specSuite: string[], specDescription?: string): SpecLocation[] {
+ public getSpecLocations(
+ specSuite: string[],
+ specDescription?: string,
+ withRelativePaths: boolean = false
+ ): SpecLocation[] {
if (specSuite.length === 0) {
return [];
}
const specFiles = this.getSuiteFilesFromCache(specSuite);
+ let specLocations: SpecLocation[] = [];
if (specFiles) {
- const specLocations: SpecLocation[] = specFiles
+ specLocations = specFiles
.map((specFile: string): SpecLocation | undefined => {
const specLine = this.getSpecLineNumber(this.fileInfoMap.get(specFile), specSuite, specDescription);
return specLine ? { file: specFile, line: specLine } : undefined;
})
.filter(specLocation => specLocation !== undefined) as SpecLocation[];
+ } else {
+ for (const specFile of this.fileInfoMap.keys()) {
+ const specLineNumber = this.getSpecLineNumber(this.fileInfoMap.get(specFile), specSuite, specDescription);
- return specLocations;
+ if (specLineNumber !== undefined) {
+ this.addSuiteFileToCache(specSuite, specFile);
+ specLocations.push({ file: specFile, line: specLineNumber });
+ }
+ }
}
- const specLocations: SpecLocation[] = [];
-
- for (const specFile of this.fileInfoMap.keys()) {
- const specLineNumber = this.getSpecLineNumber(this.fileInfoMap.get(specFile), specSuite, specDescription);
-
- if (specLineNumber !== undefined) {
- this.addSuiteFileToCache(specSuite, specFile);
- specLocations.push({ file: specFile, line: specLineNumber });
- }
+ if (withRelativePaths) {
+ specLocations.forEach(specLocation => (specLocation.file = normalizePath(relative(this.cwd, specLocation.file))));
}
+
return specLocations;
}
diff --git a/src/core/test-suite-organizer.ts b/src/core/test-suite-organizer.ts
index 939a1b0..3b67707 100644
--- a/src/core/test-suite-organizer.ts
+++ b/src/core/test-suite-organizer.ts
@@ -1,4 +1,4 @@
-import { basename, dirname, isAbsolute, join, normalize, relative, resolve, sep as pathSeparator } from 'path';
+import { basename, dirname, isAbsolute, normalize, posix, relative, resolve, sep as pathSeparator } from 'path';
import { TestInfo, TestSuiteInfo } from 'vscode-test-adapter-api';
import { Disposable } from '../util/disposable/disposable';
import { Disposer } from '../util/disposable/disposer';
@@ -142,7 +142,7 @@ export class TestSuiteOrganizer implements Disposable {
const flattenedTestSuite =
flattenOptions.flattenSingleChildFolders && singleChild?.suiteType === TestSuiteType.Folder
- ? { ...singleChild, label: join(suite.label, singleChild.label) }
+ ? { ...singleChild, label: posix.join(suite.label, singleChild.label) }
: suite;
return flattenedTestSuite;
diff --git a/src/core/vscode/notifications.ts b/src/core/vscode/notifications.ts
index 5455e5c..7a84934 100644
--- a/src/core/vscode/notifications.ts
+++ b/src/core/vscode/notifications.ts
@@ -1,5 +1,5 @@
-import { commands, StatusBarItem, window } from 'vscode';
-import { EXTENSION_NAME, STATUS_BAR_MESASGE_MAX_DURATION } from '../../constants';
+import { Command, commands, MarkdownString, window } from 'vscode';
+import { EXTENSION_NAME, STATUS_BAR_MESASGE_MAX_DURATION, STATUS_BAR_MESASGE_MIN_DURATION } from '../../constants';
import { Disposable } from '../../util/disposable/disposable';
import { Disposer } from '../../util/disposable/disposer';
import { DeferredPromise } from '../../util/future/deferred-promise';
@@ -53,14 +53,20 @@ const DEFAULT_NOTIFY_OPTIONS: NotifyOptions = {
dismissAction: true
};
+interface StatusDisplay extends Disposable {
+ text: string;
+ tooltip?: string | MarkdownString;
+ command: string | Command | undefined;
+ readonly show: () => void;
+ readonly hide: () => void;
+}
+
export class Notifications implements Disposable {
- private readonly statusBar: StatusBarItem;
- private deferredStatus?: DeferredPromise;
+ private deferredStatusDismissal?: DeferredPromise;
private disposables: Disposable[] = [];
- public constructor(private readonly logger: Logger) {
- this.statusBar = window.createStatusBarItem();
- this.disposables.push(this.statusBar, logger);
+ public constructor(private readonly statusDisplay: StatusDisplay, private readonly logger: Logger) {
+ this.disposables.push(statusDisplay, logger);
}
public notify(
@@ -117,10 +123,14 @@ export class Notifications implements Disposable {
this.logger.trace(() => `Setting '${statusName}' status with message '${message}' and tooltip: ${tooltip}`);
- this.deferredStatus?.reject();
- this.statusBar.hide();
- this.statusBar.text = `$(${statusType}) ${EXTENSION_NAME} - ${message}`;
- this.statusBar.tooltip = tooltip;
+ if (this.deferredStatusDismissal?.promise().isResolved() === false) {
+ this.logger.trace(() => 'Existing status is yet to dismiss - Will cancel future dismissal');
+ this.deferredStatusDismissal.reject(`Displaying new status with message - ${message}`);
+ }
+
+ this.statusDisplay.hide();
+ this.statusDisplay.text = `$(${statusType}) ${EXTENSION_NAME} - ${message}`;
+ this.statusDisplay.tooltip = tooltip;
const clickCommand =
'command' in action.handler
@@ -132,25 +142,50 @@ export class Notifications implements Disposable {
this.executeAction(clickCommand);
};
- this.statusBar.command = {
+ this.statusDisplay.command = {
title: clickCommand.title,
command: ExtensionCommands.ExecuteFunction,
arguments: [clickHandler]
};
- this.statusBar.show();
+ this.statusDisplay.show();
- const deferredStatus = new DeferredPromise();
- deferredStatus.autoFulfill(STATUS_BAR_MESASGE_MAX_DURATION);
+ const deferredStatusDismissal = new DeferredPromise();
+ deferredStatusDismissal.autoFulfill(dismiss ? STATUS_BAR_MESASGE_MAX_DURATION : STATUS_BAR_MESASGE_MIN_DURATION);
- const statusResolver = deferredStatus.fulfill.bind(deferredStatus);
- dismiss?.then(statusResolver, statusResolver);
+ const fulfillFutureDismissal = () => {
+ this.logger.trace(
+ () =>
+ `Dismissing promise has concluded for '${statusName}' ` +
+ `status with message '${message}' and tooltip: ${tooltip}`
+ );
+ deferredStatusDismissal.fulfill();
+ };
+
+ dismiss?.then(fulfillFutureDismissal, fulfillFutureDismissal);
- deferredStatus.promise().then(() => {
+ const dismissStatus = () => {
+ if (this.deferredStatusDismissal !== deferredStatusDismissal) {
+ this.logger.trace(
+ () =>
+ `Aborting dismiss of '${statusName}' status with message '${message}' - ` +
+ `Different status already displayed`
+ );
+ return;
+ }
this.logger.trace(() => `Dismissing '${statusName}' status with message '${message}' and tooltip: ${tooltip}`);
- this.statusBar.hide();
+ this.statusDisplay.hide();
+ };
+
+ deferredStatusDismissal.promise().then(dismissStatus);
+
+ deferredStatusDismissal.promise().catch(reason => {
+ this.logger.trace(
+ () => `Cancelled status dismisser for '${statusName}' status with message '${message}' due to reason: ${reason}`
+ );
});
- this.deferredStatus = deferredStatus;
+
+ this.deferredStatusDismissal = deferredStatusDismissal;
}
private executeAction(handler: NotificationActionHandler) {
diff --git a/src/frameworks/angular/angular-factory.ts b/src/frameworks/angular/angular-factory.ts
index a9f9817..05209f3 100644
--- a/src/frameworks/angular/angular-factory.ts
+++ b/src/frameworks/angular/angular-factory.ts
@@ -21,6 +21,7 @@ export type AngularFactoryConfig = Pick<
| 'environment'
| 'failOnStandardError'
| 'karmaLogLevel'
+ | 'karmaReporterLogLevel'
| 'projectRootPath'
>;
@@ -53,7 +54,8 @@ export class AngularFactory implements Partial {
[KarmaEnvironmentVariable.AutoWatchBatchDelay]: `${this.factoryConfig.autoWatchBatchDelay ?? ''}`,
[KarmaEnvironmentVariable.Browser]: this.factoryConfig.browser ?? '',
[KarmaEnvironmentVariable.CustomLauncher]: JSON.stringify(this.factoryConfig.customLauncher),
- [KarmaEnvironmentVariable.KarmaLogLevel]: `${this.factoryConfig.karmaLogLevel}`
+ [KarmaEnvironmentVariable.KarmaLogLevel]: `${this.factoryConfig.karmaLogLevel}`,
+ [KarmaEnvironmentVariable.KarmaReporterLogLevel]: `${this.factoryConfig.karmaReporterLogLevel}`
};
const options: AngularTestServerExecutorOptions = {
diff --git a/src/frameworks/angular/angular-test-server-executor.ts b/src/frameworks/angular/angular-test-server-executor.ts
index 9cb36dd..7015a15 100644
--- a/src/frameworks/angular/angular-test-server-executor.ts
+++ b/src/frameworks/angular/angular-test-server-executor.ts
@@ -1,6 +1,4 @@
-import { existsSync } from 'fs';
import { join } from 'path';
-import { silent } from 'resolve-global';
import { ServerStopExecutor, TestServerExecutor } from '../../api/test-server-executor';
import { Disposable } from '../../util/disposable/disposable';
import { Disposer } from '../../util/disposable/disposer';
@@ -12,6 +10,7 @@ import {
CommandLineProcessHandlerOptions
} from '../../util/process/command-line-process-handler';
import { CommandLineProcessLog } from '../../util/process/command-line-process-log';
+import { getPackageInstallPathForProjectRoot } from '../../util/utils';
import { KarmaEnvironmentVariable } from '../karma/karma-environment-variable';
import { AngularProject } from './angular-project';
@@ -62,29 +61,27 @@ export class AngularTestServerExecutor implements TestServerExecutor {
failOnStandardError: this.options.failOnStandardError
};
- const angularProcessCommand = this.options.angularProcessCommand;
- const localAngularPath = join(this.workspaceRootPath, 'node_modules', '@angular', 'cli', 'bin', 'ng');
- const isAngularInstalledLocally = existsSync(localAngularPath);
- const isAngularInstalledGlobally = silent('@angular/cli') !== undefined;
+ const angularInstallPath = getPackageInstallPathForProjectRoot('@angular/cli', this.workspaceRootPath);
+ const angularBinaryPath = angularInstallPath ? join(angularInstallPath, 'bin', 'ng') : undefined;
- let command: string;
- let processArguments: string[] = [];
-
- if (angularProcessCommand) {
- command = angularProcessCommand;
- } else if (isAngularInstalledLocally) {
- command = 'npx';
- processArguments.push('ng');
- } else if (isAngularInstalledGlobally) {
- command = 'ng';
- } else {
+ if (!angularBinaryPath) {
throw new Error(
- `@angular/cli does not seem to be installed - ` +
+ `Angular CLI does not seem to be installed - ` +
`You may need to run 'npm install' in your project. ` +
`Please install it and try again.`
);
}
+ let command: string;
+ let processArguments: string[] = [];
+
+ if (this.options.angularProcessCommand) {
+ command = this.options.angularProcessCommand;
+ } else {
+ command = process.execPath;
+ processArguments = [angularBinaryPath];
+ }
+
processArguments = [
...processArguments,
'test',
diff --git a/src/frameworks/karma/config/karma-configurator.ts b/src/frameworks/karma/config/karma-configurator.ts
index f23fb4b..16d41ad 100644
--- a/src/frameworks/karma/config/karma-configurator.ts
+++ b/src/frameworks/karma/config/karma-configurator.ts
@@ -1,9 +1,9 @@
-import { Config as KarmaConfig, ConfigOptions as KarmaConfigOptions, CustomLauncher } from 'karma';
+import { Config as KarmaConfig, ConfigOptions as KarmaConfigOptions, CustomLauncher, InlinePluginDef } from 'karma';
import { dirname, resolve } from 'path';
import { CHROME_BROWSER_DEBUGGING_PORT_FLAG, KARMA_CUSTOM_LAUNCHER_BROWSER_NAME } from '../../../constants';
import { KarmaEnvironmentVariable } from '../karma-environment-variable';
-import { KarmaLogLevel } from '../karma-logger';
-import { instance as customReporterInstance, name as customReporterName } from '../runner/karma-test-explorer-reporter';
+import { KarmaLogLevel } from '../karma-log-level';
+import { KarmaTestExplorerReporter } from '../runner/karma-test-explorer-reporter';
export class KarmaConfigurator {
private readonly karmaPort: number;
@@ -14,7 +14,7 @@ export class KarmaConfigurator {
private readonly karmaLogLevel: KarmaLogLevel;
public constructor() {
- this.karmaLogLevel = (process.env[KarmaEnvironmentVariable.KarmaLogLevel]! as KarmaLogLevel) ?? 'INFO';
+ this.karmaLogLevel = process.env[KarmaEnvironmentVariable.KarmaLogLevel] ?? KarmaLogLevel.INFO;
this.autoWatchEnabled =
(process.env[KarmaEnvironmentVariable.AutoWatchEnabled] ?? 'false').toLowerCase() === 'true';
@@ -45,37 +45,36 @@ export class KarmaConfigurator {
}
}
- private addCustomLauncherDebugPort(customLaucher: CustomLauncher, debugPort: number | undefined) {
- if (!customLaucher || !debugPort) {
- return;
- }
- customLaucher.flags = customLaucher.flags?.map(flag =>
- flag.startsWith(CHROME_BROWSER_DEBUGGING_PORT_FLAG) ? `${CHROME_BROWSER_DEBUGGING_PORT_FLAG}=${debugPort}` : flag
- );
- }
-
- public setMandatoryOptions(config: KarmaConfig) {
+ public applyConfigOverrides(config: KarmaConfig) {
config.port = this.karmaPort;
- config.logLevel = (config as any)[`LOG_${this.karmaLogLevel.toUpperCase()}`] ?? config.LOG_INFO;
+ config.logLevel = (config as any)[`LOG_${this.karmaLogLevel.toUpperCase()}`];
config.singleRun = false;
config.autoWatch = this.autoWatchEnabled;
config.autoWatchBatchDelay = this.autoWatchBatchDelay ?? config.autoWatchBatchDelay;
config.restartOnFileChange = false;
config.browsers = [this.browser];
config.customLaunchers = this.customLauncher ? { [this.browser]: this.customLauncher } : config.customLaunchers;
- config.browserNoActivityTimeout = 1_000 * 60 * 60 * 24;
- config.browserDisconnectTimeout = 30_000;
- config.pingTimeout = 1_000 * 60 * 60 * 24;
- config.captureTimeout = 60_000;
+ config.browserNoActivityTimeout = 1000 * 60 * 60 * 24;
+ config.browserDisconnectTimeout = Math.max(config.browserDisconnectTimeout || 0, 30_000);
+ config.pingTimeout = 1000 * 60 * 60 * 24;
+ config.captureTimeout = Math.max(config.captureTimeout || 0, 60_000);
config.browserSocketTimeout = 30_000;
- config.processKillTimeout = 2_000;
- config.retryLimit = 3;
+ config.processKillTimeout = 2000;
+ config.retryLimit = Math.max(config.retryLimit || 0, 3);
+ (config.client ??= {}).clearContext = false;
+ }
- config.client ??= {};
- config.client.clearContext = true;
+ public loadOriginalKarmaConfig(config: KarmaConfig, originalKarmaConfigPath: string) {
+ let originalKarmaConfigModule = require(originalKarmaConfigPath); // eslint-disable-line @typescript-eslint/no-var-requires
+
+ // https://github.com/karma-runner/karma/blob/v1.7.0/lib/config.js#L364
+ if (typeof originalKarmaConfigModule === 'object' && typeof originalKarmaConfigModule.default !== 'undefined') {
+ originalKarmaConfigModule = originalKarmaConfigModule.default;
+ }
+ originalKarmaConfigModule(config);
}
- public dontLoadOriginalConfigurationFileIntoBrowser(config: KarmaConfig, originalConfigPath: string) {
+ public addOriginalKarmaConfigToExcludes(config: KarmaConfig, originalConfigPath: string) {
(config.exclude ??= []).push(originalConfigPath);
}
@@ -89,57 +88,34 @@ export class KarmaConfigurator {
}
}
- public disableSingleRunPermanently(config: KarmaConfig) {
- const prevSet = config.set;
- if (typeof prevSet === 'function') {
- config.set = (newConfig: KarmaConfigOptions) => {
- if (newConfig != null) {
- if (newConfig.singleRun === true) {
- newConfig.singleRun = false;
- }
- prevSet(newConfig);
- }
- };
- }
- }
+ public disableSingleRun(config: KarmaConfig) {
+ const originalConfigSet = config.set;
- public cleanUpReporters(config: KarmaConfig) {
- const filteredReporters = this.removeElementsFromArrayWithoutModifyingIt(config.reporters, ['dots', 'kjhtml']);
- config.reporters = filteredReporters;
- }
-
- public loadOriginalUserConfiguration(config: KarmaConfig, originalConfigPath: string) {
- let originalConfigModule = require(originalConfigPath); // eslint-disable-line @typescript-eslint/no-var-requires
- // https://github.com/karma-runner/karma/blob/v1.7.0/lib/config.js#L364
- if (typeof originalConfigModule === 'object' && typeof originalConfigModule.default !== 'undefined') {
- originalConfigModule = originalConfigModule.default;
+ if (typeof originalConfigSet !== 'function') {
+ return;
}
-
- originalConfigModule(config);
+ config.set = (newConfig?: KarmaConfigOptions) => {
+ if (newConfig) {
+ newConfig.singleRun = newConfig.singleRun === true ? false : newConfig.singleRun;
+ originalConfigSet.apply(config, [newConfig]);
+ }
+ };
}
- public configureTestExplorerCustomReporter(config: KarmaConfig) {
- this.addPlugin(config, { [`reporter:${customReporterName}`]: ['type', customReporterInstance] });
- (config.reporters ??= []).push(customReporterName);
- }
+ public addReporter(config: KarmaConfig) {
+ const reporterName = KarmaTestExplorerReporter.name;
+ const karmaPlugin: InlinePluginDef = { [`reporter:${reporterName}`]: ['type', KarmaTestExplorerReporter] };
- private addPlugin(karmaConfig: KarmaConfigOptions, karmaPlugin: any) {
- (karmaConfig.plugins ??= ['karma-*']).push(karmaPlugin);
+ (config.plugins ??= ['karma-*']).push(karmaPlugin);
+ (config.reporters ??= []).splice(0, config.reporters.length, reporterName);
}
- private removeElementsFromArrayWithoutModifyingIt(elements?: any[], elementsToRemove?: any[] | any) {
- if (elements === undefined) {
- return [];
- }
-
- if (Array.isArray(elementsToRemove)) {
- return elements.filter(element =>
- typeof element === 'object'
- ? !elementsToRemove.some(x => Object.keys(element)[0] in x)
- : elementsToRemove.indexOf(element) < 0
- );
- } else {
- return elements.filter(element => element !== elementsToRemove);
+ private addCustomLauncherDebugPort(customLaucher: CustomLauncher, debugPort: number | undefined) {
+ if (!customLaucher || !debugPort) {
+ return;
}
+ customLaucher.flags = customLaucher.flags?.map(flag =>
+ flag.startsWith(CHROME_BROWSER_DEBUGGING_PORT_FLAG) ? `${CHROME_BROWSER_DEBUGGING_PORT_FLAG}=${debugPort}` : flag
+ );
}
}
diff --git a/src/frameworks/karma/config/karma.conf.ts b/src/frameworks/karma/config/karma.conf.ts
index d22d784..c96e7ef 100644
--- a/src/frameworks/karma/config/karma.conf.ts
+++ b/src/frameworks/karma/config/karma.conf.ts
@@ -6,11 +6,10 @@ const originalConfigPath = process.env[KarmaEnvironmentVariable.UserKarmaConfigP
const karmaConfigurator = new KarmaConfigurator();
module.exports = (config: KarmaConfig) => {
- karmaConfigurator.loadOriginalUserConfiguration(config, originalConfigPath);
- karmaConfigurator.setMandatoryOptions(config);
- karmaConfigurator.cleanUpReporters(config);
- karmaConfigurator.dontLoadOriginalConfigurationFileIntoBrowser(config, originalConfigPath);
- karmaConfigurator.configureTestExplorerCustomReporter(config);
+ karmaConfigurator.loadOriginalKarmaConfig(config, originalConfigPath);
+ karmaConfigurator.applyConfigOverrides(config);
+ karmaConfigurator.addOriginalKarmaConfigToExcludes(config, originalConfigPath);
+ karmaConfigurator.addReporter(config);
karmaConfigurator.setBasePath(config, originalConfigPath);
- karmaConfigurator.disableSingleRunPermanently(config);
+ karmaConfigurator.disableSingleRun(config);
};
diff --git a/src/frameworks/karma/karma-environment-variable.ts b/src/frameworks/karma/karma-environment-variable.ts
index 992abf9..66bf690 100644
--- a/src/frameworks/karma/karma-environment-variable.ts
+++ b/src/frameworks/karma/karma-environment-variable.ts
@@ -7,5 +7,6 @@ export enum KarmaEnvironmentVariable {
AutoWatchBatchDelay = 'KarmaTestExplorer_autoWatchBatchDelay',
Browser = 'KarmaTestExplorer_browser',
CustomLauncher = 'KarmaTestExplorer_customLauncher',
- KarmaLogLevel = 'KarmaTestExplorer_karmaLogLevel'
+ KarmaLogLevel = 'KarmaTestExplorer_karmaLogLevel',
+ KarmaReporterLogLevel = 'KarmaTestExplorer_karmaReporterLogLevel'
}
diff --git a/src/frameworks/karma/karma-factory.ts b/src/frameworks/karma/karma-factory.ts
index fc6a6c9..b3c2855 100644
--- a/src/frameworks/karma/karma-factory.ts
+++ b/src/frameworks/karma/karma-factory.ts
@@ -34,6 +34,7 @@ export type KarmaFactoryConfig = Pick<
| 'environment'
| 'failOnStandardError'
| 'karmaLogLevel'
+ | 'karmaReporterLogLevel'
| 'karmaProcessCommand'
| 'projectRootPath'
| 'testTriggerMethod'
@@ -129,7 +130,8 @@ export class KarmaFactory implements TestFactory, Disposable {
[KarmaEnvironmentVariable.AutoWatchBatchDelay]: `${this.factoryConfig.autoWatchBatchDelay ?? ''}`,
[KarmaEnvironmentVariable.Browser]: this.factoryConfig.browser ?? '',
[KarmaEnvironmentVariable.CustomLauncher]: JSON.stringify(this.factoryConfig.customLauncher),
- [KarmaEnvironmentVariable.KarmaLogLevel]: `${this.factoryConfig.karmaLogLevel}`
+ [KarmaEnvironmentVariable.KarmaLogLevel]: `${this.factoryConfig.karmaLogLevel}`,
+ [KarmaEnvironmentVariable.KarmaReporterLogLevel]: `${this.factoryConfig.karmaReporterLogLevel}`
};
const options: KarmaCommandLineTestServerExecutorOptions = {
diff --git a/src/frameworks/karma/karma-log-level.ts b/src/frameworks/karma/karma-log-level.ts
new file mode 100644
index 0000000..fa238f6
--- /dev/null
+++ b/src/frameworks/karma/karma-log-level.ts
@@ -0,0 +1,7 @@
+export enum KarmaLogLevel {
+ DISABLE = 'disable',
+ ERROR = 'error',
+ WARN = 'warn',
+ INFO = 'info',
+ DEBUG = 'debug'
+}
diff --git a/src/frameworks/karma/karma-logger.ts b/src/frameworks/karma/karma-logger.ts
deleted file mode 100644
index fa7e5e5..0000000
--- a/src/frameworks/karma/karma-logger.ts
+++ /dev/null
@@ -1,6 +0,0 @@
-import { LogLevelName } from '../../util/logging/log-level';
-import { Logger } from '../../util/logging/logger';
-
-export type KarmaLogger = Omit;
-
-export type KarmaLogLevel = Exclude;
diff --git a/src/frameworks/karma/runner/karma-command-line-test-run-executor.ts b/src/frameworks/karma/runner/karma-command-line-test-run-executor.ts
index eb68517..2368fbd 100644
--- a/src/frameworks/karma/runner/karma-command-line-test-run-executor.ts
+++ b/src/frameworks/karma/runner/karma-command-line-test-run-executor.ts
@@ -1,6 +1,4 @@
-import { existsSync } from 'fs';
import { join } from 'path';
-import { silent } from 'resolve-global';
import { TestRunExecutor } from '../../../api/test-run-executor';
import { Disposable } from '../../../util/disposable/disposable';
import { Disposer } from '../../../util/disposable/disposer';
@@ -11,6 +9,7 @@ import {
CommandLineProcessHandlerOptions,
CommandLineProcessLogOutput
} from '../../../util/process/command-line-process-handler';
+import { getPackageInstallPathForProjectRoot } from '../../../util/utils';
export interface KarmaCommandLineTestRunExecutorOptions {
environment: Record;
@@ -35,26 +34,25 @@ export class KarmaCommandLineTestRunExecutor implements TestRunExecutor {
failOnStandardError: this.options.failOnStandardError
};
- const localKarmaPath = join(this.projectRootPath, 'node_modules', 'karma', 'bin', 'karma');
- const isKarmaInstalledLocally = existsSync(localKarmaPath);
- const isKarmaInstalledGlobally = silent('karma') !== undefined;
+ const karmaInstallPath = getPackageInstallPathForProjectRoot('karma', this.projectRootPath);
+ const karmaBinaryPath = karmaInstallPath ? join(karmaInstallPath, 'bin', 'karma') : undefined;
+
+ if (!karmaBinaryPath) {
+ throw new Error(
+ `Karma does not seem to be installed - ` +
+ `You may need to run 'npm install' in your project. ` +
+ `Please install it and try again.`
+ );
+ }
let command: string;
let processArguments: string[] = [];
if (this.options.karmaProcessCommand) {
command = this.options.karmaProcessCommand;
- } else if (isKarmaInstalledLocally) {
- command = 'npx';
- processArguments = ['karma'];
- } else if (isKarmaInstalledGlobally) {
- command = 'karma';
} else {
- throw new Error(
- `Karma does not seem to be installed - ` +
- `You may need to run 'npm install' in your project. ` +
- `Please install it and try again.`
- );
+ command = process.execPath;
+ processArguments = [karmaBinaryPath];
}
const escapedClientArgs: string[] = clientArgs.map(arg => this.shellEscape(arg));
diff --git a/src/frameworks/karma/runner/karma-event.ts b/src/frameworks/karma/runner/karma-event.ts
index 8731c30..24a6386 100644
--- a/src/frameworks/karma/runner/karma-event.ts
+++ b/src/frameworks/karma/runner/karma-event.ts
@@ -6,6 +6,7 @@ export interface KarmaEvent {
readonly runId?: string;
readonly runStatus?: TestRunStatus;
readonly runInfo?: Record;
+ readonly exitCode?: number;
readonly port?: number;
readonly results?: LightSpecCompleteResponse;
readonly browser?: BrowserInfo;
diff --git a/src/frameworks/karma/runner/karma-http-test-run-executor.ts b/src/frameworks/karma/runner/karma-http-test-run-executor.ts
index 3ac0454..22d8b84 100644
--- a/src/frameworks/karma/runner/karma-http-test-run-executor.ts
+++ b/src/frameworks/karma/runner/karma-http-test-run-executor.ts
@@ -6,7 +6,7 @@ import { DeferredExecution } from '../../../util/future/deferred-execution';
import { Execution } from '../../../util/future/execution';
import { Logger } from '../../../util/logging/logger';
-const defaultRunOptions = {
+const DEFAULT_RUN_OPTIONS = {
refresh: true,
urlRoot: '/run',
hostname: 'localhost',
@@ -26,12 +26,12 @@ export class KarmaHttpTestRunExecutor implements TestRunExecutor {
const karmaRequestData = {
// See: https://github.com/karma-runner/karma/blob/94cf15e8fa4420c8716998873b77f0c4f59b9e94/lib/runner.js#L100-L105
args: clientArgs,
- refresh: defaultRunOptions.refresh
+ refresh: DEFAULT_RUN_OPTIONS.refresh
};
const httpRequestOptions: RequestOptions = {
- hostname: defaultRunOptions.hostname,
- path: defaultRunOptions.urlRoot,
+ hostname: DEFAULT_RUN_OPTIONS.hostname,
+ path: DEFAULT_RUN_OPTIONS.urlRoot,
port: karmaPort,
method: 'POST',
headers: { 'Content-Type': 'application/json' }
diff --git a/src/frameworks/karma/runner/karma-test-event-listener.ts b/src/frameworks/karma/runner/karma-test-event-listener.ts
index 69d6820..6f801c0 100644
--- a/src/frameworks/karma/runner/karma-test-event-listener.ts
+++ b/src/frameworks/karma/runner/karma-test-event-listener.ts
@@ -41,6 +41,10 @@ interface TestCaptureSession {
readonly testRunEnded: (testRunId?: string) => void;
}
+interface KarmaTestEventListenerOptions {
+ readonly karmaReadyTimeout?: number;
+}
+
export type TestCapture = Record;
export class KarmaTestEventListener implements Disposable {
@@ -54,10 +58,11 @@ export class KarmaTestEventListener implements Disposable {
public constructor(
private readonly testEventProcessor: KarmaTestEventProcessor,
private readonly watchModeTestEventProcessor: KarmaAutoWatchTestEventProcessor | undefined,
- karmaReadyTimeout: number,
private readonly notifications: Notifications,
- private readonly logger: SimpleLogger
+ private readonly logger: SimpleLogger,
+ listenerOptions: KarmaTestEventListenerOptions = {}
) {
+ const karmaReadyTimeout = listenerOptions.karmaReadyTimeout ?? 0;
this.karmaReadyTimeout = karmaReadyTimeout > 0 ? karmaReadyTimeout : KARMA_READY_DEFAULT_TIMEOUT;
this.disposables.push(logger);
}
@@ -412,7 +417,7 @@ export class KarmaTestEventListener implements Disposable {
if (!eventProcessor?.isProcessing()) {
this.logger.debug(
() =>
- `Not processing received spec id '${event.results?.id ?? ''}' - ` +
+ `Not processing received spec id '${event.results?.id || ''}' - ` +
`Neither the test run nor watch mode test processors are currently active`
);
return;
@@ -421,13 +426,18 @@ export class KarmaTestEventListener implements Disposable {
const results: LightSpecCompleteResponse = event.results!;
const fullName: string = [...results.suite, results.description].join(' ');
const testId: string = results.id || `${results.filePath ?? ''}:${fullName}`;
- const specResults: SpecCompleteResponse = { ...results, id: testId, fullName };
- const testStatus: TestStatus = specResults.status;
+ const testStatus: TestStatus = results.status;
const browserName = `${event.browser?.name ?? '(Unknwon browser)'}`;
+ const specResults: SpecCompleteResponse = {
+ ...results,
+ id: testId,
+ fullName
+ };
+
this.logger.debug(
() =>
- `Processing received spec id '${event.results?.id ?? ''}' ` +
+ `Processing received spec id '${specResults.id || ''}' ` +
`with test processor: ${eventProcessor.constructor.name}`
);
@@ -465,6 +475,11 @@ export class KarmaTestEventListener implements Disposable {
: undefined;
if (errorMsg) {
+ this.logger.warn(
+ () =>
+ `${errorMsg} (Exit code: ${event.exitCode ?? ''}) - ` +
+ `${event.error?.split('\n')[0] || ''}`
+ );
this.processTestErrorEvent(errorMsg);
return;
}
diff --git a/src/frameworks/karma/runner/karma-test-event-processor.ts b/src/frameworks/karma/runner/karma-test-event-processor.ts
index 1e89995..df82af0 100644
--- a/src/frameworks/karma/runner/karma-test-event-processor.ts
+++ b/src/frameworks/karma/runner/karma-test-event-processor.ts
@@ -1,3 +1,4 @@
+import { isAbsolute, posix } from 'path';
import { EventEmitter } from 'vscode';
import { TestDecoration, TestEvent, TestInfo, TestSuiteInfo } from 'vscode-test-adapter-api';
import { TestResultEvent } from '../../../core/base/test-events';
@@ -7,12 +8,14 @@ import { TestResolver } from '../../../core/base/test-resolver';
import { TestResults } from '../../../core/base/test-results';
import { TestState } from '../../../core/base/test-state';
import { TestStatus } from '../../../core/base/test-status';
+import { SpecLocation, SpecLocator } from '../../../core/spec-locator';
import { SuiteAggregateTestResultProcessor } from '../../../core/suite-aggregate-test-result-processor';
import { TestSuiteOrganizationOptions, TestSuiteOrganizer } from '../../../core/test-suite-organizer';
import { Disposable } from '../../../util/disposable/disposable';
import { Disposer } from '../../../util/disposable/disposer';
import { DeferredPromise } from '../../../util/future/deferred-promise';
import { Logger } from '../../../util/logging/logger';
+import { escapeForRegExp } from '../../../util/utils';
import { TestCapture } from './karma-test-event-listener';
import { SpecCompleteResponse } from './spec-complete-response';
import { SpecResponseToTestSuiteInfoMapper } from './spec-response-to-test-suite-info-mapper';
@@ -52,6 +55,7 @@ export class KarmaTestEventProcessor {
private readonly specToTestSuiteMapper: SpecResponseToTestSuiteInfoMapper,
private readonly testSuiteOrganizer: TestSuiteOrganizer,
private readonly suiteTestResultEmitter: SuiteAggregateTestResultProcessor,
+ private readonly specLocator: SpecLocator,
private readonly testGrouping: TestGrouping,
private readonly projectRootPath: string,
private readonly testsBasePath: string,
@@ -123,7 +127,7 @@ export class KarmaTestEventProcessor {
this.concludeProcessing();
}
- public processTestResultEvent(testResult: SpecCompleteResponse) {
+ public processTestResultEvent(testResult: Readonly) {
this.logger.debug(() => `Request to process test result event having status: ${testResult.status}`);
this.logger.trace(() => `Test result event for processing has Id: ${testResult.id}`);
@@ -187,7 +191,7 @@ export class KarmaTestEventProcessor {
);
}
- private emitTestResultEvent(testResult: SpecCompleteResponse) {
+ private emitTestResultEvent(testResult: Readonly) {
const testId = testResult.id;
if (!this.currentProcessingInfo?.eventProcessingOptions.emitTestEvents?.includes(testResult.status)) {
@@ -196,7 +200,6 @@ export class KarmaTestEventProcessor {
`Skipping test result event for test id ${testId} - ` +
`Emit events not enabled for test status ${testResult.status}`
);
-
return;
}
this.logger.debug(() => `Processing test result event for test id: ${testId}`);
@@ -215,28 +218,48 @@ export class KarmaTestEventProcessor {
? 'Skipped'
: '';
- let message: string | undefined;
- let decorations: TestDecoration[] | undefined;
-
- if (testResult.failureMessages.length > 0) {
- message = this.createErrorMessage(testResult);
- decorations = this.createDecorations(testResult) ?? [];
-
- if (decorations.length === 0 && test?.line !== undefined) {
- const { file, line } = test;
- const hover = `${testResult.fullName} \n-------- Failure: --------\n${message || 'Failed'}`;
-
- decorations = [
- {
- line,
- file,
- message: message || 'Failed',
- hover: `\`${hover.replace(/`/g, '\\`')}\``
- }
- ];
- }
+ let relativeTestLocation: SpecLocation | undefined =
+ test?.file && test?.line !== undefined
+ ? { file: posix.relative(this.projectRootPath, test.file), line: test.line }
+ : undefined;
+
+ this.logger.debug(
+ () =>
+ `Relative test location from loaded test: ` +
+ `${relativeTestLocation ? JSON.stringify(relativeTestLocation, null, 2) : ''}`
+ );
+
+ if (!relativeTestLocation) {
+ const candidateSpecLocations = this.specLocator.getSpecLocations(testResult.suite, testResult.description, true);
+ relativeTestLocation = candidateSpecLocations.length === 1 ? candidateSpecLocations[0] : relativeTestLocation;
+
+ this.logger.debug(
+ () =>
+ `Relative test location from ${candidateSpecLocations.length} resulting candidates from lookup: ` +
+ `${relativeTestLocation ? JSON.stringify(relativeTestLocation, null, 2) : ''}`
+ );
+ }
+
+ if (!relativeTestLocation && testResult.filePath && testResult.line !== undefined) {
+ relativeTestLocation = { file: posix.relative(this.projectRootPath, testResult.filePath), line: testResult.line };
+
+ this.logger.debug(
+ () =>
+ `Relative test location from karma spec response: ` +
+ `${relativeTestLocation ? JSON.stringify(relativeTestLocation, null, 2) : ''}`
+ );
}
+ const testResultForErrorReporting: SpecCompleteResponse = {
+ ...testResult,
+ filePath: relativeTestLocation?.file,
+ line: relativeTestLocation?.line,
+ failureMessages: testResult.failureMessages.map(message => decodeURIComponent(message))
+ };
+
+ const failureMessage = this.createFailureMessage(testResultForErrorReporting);
+ const failureDecorations = this.createTestFailureDecorations(testResultForErrorReporting);
+
if (test) {
this.updateTestWithResultData(test, testResult);
}
@@ -246,8 +269,8 @@ export class KarmaTestEventProcessor {
test: test ?? testId,
state: testState,
tooltip: `${testResult.fullName}`,
- message,
- decorations
+ message: failureMessage,
+ decorations: failureDecorations
};
if (this.currentProcessingInfo.eventProcessingOptions.emitTestStats) {
@@ -330,7 +353,7 @@ export class KarmaTestEventProcessor {
test.label = testResult.description || test.label;
test.fullName = testResult.fullName || test.fullName;
test.file = testResult.filePath || test.file;
- test.line = testResult.line || test.line;
+ test.line = testResult.line ?? test.line;
}
private mapTestResultToTestState(testStatus: TestStatus): TestState {
@@ -344,17 +367,20 @@ export class KarmaTestEventProcessor {
}
}
- private createErrorMessage(results: SpecCompleteResponse): string {
- const failureMessage = results.failureMessages[0];
+ private createFailureMessage(testResult: SpecCompleteResponse): string | undefined {
+ if (testResult.failureMessages.length === 0) {
+ return;
+ }
+ const failureMessage = testResult.failureMessages[0] || 'Failed';
const message = failureMessage.split('\n')[0];
- if (!results.filePath) {
+ if (!testResult.filePath) {
return message;
}
try {
const errorLineAndColumnCollection = failureMessage
- .substring(failureMessage.indexOf(results.filePath))
+ .substring(failureMessage.indexOf(testResult.filePath))
.split(':');
const lineNumber = parseInt(errorLineAndColumnCollection[1], undefined);
const columnNumber = parseInt(errorLineAndColumnCollection[2], undefined);
@@ -369,31 +395,73 @@ export class KarmaTestEventProcessor {
}
}
- private createDecorations(results: SpecCompleteResponse): TestDecoration[] | undefined {
- if (!results.filePath) {
- return undefined;
+ private createTestFailureDecorations(testResult: SpecCompleteResponse): TestDecoration[] | undefined {
+ if (testResult.failureMessages.length === 0) {
+ return;
}
-
- try {
- const decorations = results.failureMessages.map((failureMessage: string) => {
- const errorLineAndColumnCollection = failureMessage
- .substring(failureMessage.indexOf(results.filePath as string))
- .split(':');
- const lineNumber = parseInt(errorLineAndColumnCollection[1], undefined);
- return {
- line: lineNumber,
- message: failureMessage.split('\n')[0]
- };
- });
-
- if (decorations.some(x => isNaN(x.line))) {
- return undefined;
+ this.logger.debug(() => `Creating detailed test failure decorations for test id: ${testResult.id}`);
+
+ let failureDecorations: TestDecoration[] = [];
+ const testDescriptionHoverHeader = `'${testResult.fullName.replace(/'/g, "\\'")}'\n---`;
+ const relativeFilePath = testResult.filePath && !isAbsolute(testResult.filePath) ? testResult.filePath : undefined;
+
+ this.logger.debug(() => `Using relative file path for test id '${testResult.id}': ${relativeFilePath || ''}`);
+
+ if (relativeFilePath) {
+ try {
+ const decorations = testResult.failureMessages.map((failureMessage): TestDecoration => {
+ const errorLineAndColumnCollection = failureMessage
+ .substring(failureMessage.indexOf(relativeFilePath))
+ .split(':');
+
+ const fileAndLinePattern = new RegExp(
+ `\\([^)]*${escapeForRegExp(relativeFilePath)}[^:)]*:(\\d+):(\\d+)\\)`,
+ 'gm'
+ );
+
+ const sanitizedFailureMessage = failureMessage.replace(fileAndLinePattern, `(${relativeFilePath}:$1:$2)`);
+ const lineNumber = parseInt(errorLineAndColumnCollection[1], undefined);
+ const hoverMessage = `${testDescriptionHoverHeader}\n${sanitizedFailureMessage}`;
+
+ return {
+ line: lineNumber - 1,
+ message: sanitizedFailureMessage.split('\n')[0],
+ hover: hoverMessage
+ };
+ });
+
+ if (decorations.every(decoration => !isNaN(decoration.line))) {
+ failureDecorations = decorations;
+ } else {
+ this.logger.debug(
+ () =>
+ `Aborting creation of detailed test failure decorations for test id '${testResult.id}' - ` +
+ `Could not determine some failure line positions`
+ );
+ this.logger.trace(
+ () => `Test result with undetermined failure line positions: ${JSON.stringify(testResult, null, 2)}`
+ );
+ }
+ } catch (error) {
+ this.logger.debug(
+ () => `Error while creating detailed test failure decorations for test id '${testResult.id}': ${error}`
+ );
}
+ } else {
+ this.logger.debug(
+ () =>
+ `Not able to create detailed test failure decoration - ` +
+ `Could not determine relative file path for test id: ${testResult.id}`
+ );
+ }
- return decorations;
- } catch (error) {
- return undefined;
+ if (failureDecorations?.length === 0 && testResult.line !== undefined) {
+ const failureMessage = testResult.failureMessages[0]?.split('\n')[0] || 'Failed';
+ const hoverMessage = `${testDescriptionHoverHeader}\n${testResult.failureMessages.join('\n')}`;
+
+ failureDecorations = [{ line: testResult.line, message: failureMessage, hover: hoverMessage }];
}
+ return failureDecorations;
}
public async dispose() {
diff --git a/src/frameworks/karma/runner/karma-test-explorer-reporter.ts b/src/frameworks/karma/runner/karma-test-explorer-reporter.ts
index a4b472f..ce5e865 100644
--- a/src/frameworks/karma/runner/karma-test-explorer-reporter.ts
+++ b/src/frameworks/karma/runner/karma-test-explorer-reporter.ts
@@ -1,42 +1,39 @@
import { EventEmitter } from 'events';
import { Server as HttpServer } from 'http';
-import { ConfigOptions as KarmaConfigOptions, TestResults as KarmaTestResults } from 'karma';
+import { TestResults as KarmaTestResults } from 'karma';
import { resolve } from 'path';
import { Worker } from 'worker_threads';
import { KARMA_SOCKET_PING_INTERVAL, KARMA_SOCKET_PING_TIMEOUT, KARMA_TEST_RUN_ID_FLAG } from '../../../constants';
import { TestStatus } from '../../../core/base/test-status';
-import { BasicLog } from '../../../util/logging/basic-log';
import { LogLevel } from '../../../util/logging/log-level';
import { Logger } from '../../../util/logging/logger';
import { LoggerAdapter } from '../../../util/logging/logger-adapter';
import { MultiEventHandler } from '../../../util/multi-event-handler';
+import { getCircularReferenceReplacer } from '../../../util/utils';
import { KarmaEnvironmentVariable } from '../karma-environment-variable';
-import { KarmaLogger, KarmaLogLevel } from '../karma-logger';
import { BrowserInfo, KarmaEvent, KarmaEventName } from './karma-event';
import { LightSpecCompleteResponse } from './spec-complete-response';
import { TestResultEmitterWorkerData } from './test-result-emitter-worker-data';
import { TestRunStatus } from './test-run-status';
-function KarmaTestExplorerReporter(
+export function KarmaTestExplorerReporter(
this: any,
baseReporterDecorator: any,
- config: KarmaConfigOptions,
- logger: any,
emitter: EventEmitter,
+ karmaLogger: any,
injector: any
) {
baseReporterDecorator(this);
- this.config = config;
- this.emitter = emitter;
-
// --- Setup logger ---
- const karmaLogLevel: KarmaLogLevel = process.env[KarmaEnvironmentVariable.KarmaLogLevel]! as KarmaLogLevel;
- const logLevel: LogLevel = LogLevel[karmaLogLevel];
- const log: BasicLog = logger.create(`reporter:${name}`);
- const reporterLogger: Logger = LoggerAdapter.fromBasicLog(log, logLevel);
- const karmaLogger: KarmaLogger = reporterLogger;
+ const logLevel = process.env[KarmaEnvironmentVariable.KarmaReporterLogLevel] as LogLevel;
+
+ const logger: Logger = LoggerAdapter.fromBasicLog(
+ karmaLogger.create(`reporter:${KarmaTestExplorerReporter.name}`),
+ logLevel,
+ { bypassUnderlyingTraceMethod: true }
+ );
// --- Setup worker to communicate with extension ---
@@ -51,11 +48,11 @@ function KarmaTestExplorerReporter(
const workerScriptFile = resolve(__dirname, './test-result-emitter-worker.js');
const worker = new Worker(workerScriptFile, { workerData });
- karmaLogger.debug(
+ logger.debug(
() => `Using socket port from '${KarmaEnvironmentVariable.KarmaSocketPort}' env variable: ${socketPort}`
);
- karmaLogger.debug(
+ logger.debug(
() => `Using ping timeout of '${KARMA_SOCKET_PING_TIMEOUT}' and ping interval of '${KARMA_SOCKET_PING_INTERVAL}'`
);
@@ -68,28 +65,33 @@ function KarmaTestExplorerReporter(
// --- Setup karma event listeners ---
const karmaEventHandler: MultiEventHandler void> =
- new MultiEventHandler(reporterLogger);
+ new MultiEventHandler(logger);
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
karmaEventHandler.setDefaultHandler((eventName: string, ...args: any[]) => {
- karmaLogger.debug(() => `No specific handler for event: ${eventName}`);
+ logger.debug(() => `No specific handler for event: ${eventName}`);
const isErrorEvent = eventName.toLowerCase().includes('error');
if (isErrorEvent) {
- karmaLogger.debug(
- () => `No specific handler for received error event '${eventName}' with data: ${JSON.stringify(args, null, 2)}`
+ logger.trace(
+ () =>
+ `No specific handler for received error event '${eventName}' with data: ` +
+ `${JSON.stringify(args, getCircularReferenceReplacer(), 2)}`
);
}
sendEvent({ name: eventName as KarmaEventName });
});
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
karmaEventHandler.setErrorHandler((eventName: string, error: Error, ...args: any[]) => {
- karmaLogger.error(() => `Error while handling event '${eventName}': ${error}`);
+ logger.error(() => `Error while handling event '${eventName}': ${error}`);
+ logger.trace(
+ () =>
+ `Event data for errored '${eventName}' event handling: ` +
+ `${JSON.stringify(args, getCircularReferenceReplacer(), 2)}`
+ );
});
interceptAllEmitterEvents(emitter, (eventName: string, ...args: any[]) => {
- karmaLogger.debug(() => `New Karma event: ${eventName}`);
+ logger.trace(() => `New Karma event: ${JSON.stringify({ eventName, args }, getCircularReferenceReplacer(), 2)}`);
karmaEventHandler.handleEvent(eventName as KarmaEventName, eventName as KarmaEventName, ...args);
});
@@ -101,14 +103,14 @@ function KarmaTestExplorerReporter(
const clientArgs: string[] = browsers?.emitter?._injector?._providers?.config?.[1]?.client?.args ?? [];
let runId: string | undefined;
- karmaLogger.debug(() => `Karma event '${name}' has client args: ${JSON.stringify(clientArgs, null, 2)}`);
+ logger.debug(() => `Karma event '${name}' has client args: ${JSON.stringify(clientArgs, null, 2)}`);
if (clientArgs) {
const runIdArg = clientArgs.find(clientArg => clientArg.startsWith(KARMA_TEST_RUN_ID_FLAG));
if (runIdArg) {
runId = runIdArg.split('=')[1];
- karmaLogger.debug(() => `Karma event '${name}' has runId: ${runId}`);
+ logger.debug(() => `Karma event '${name}' has runId: ${runId}`);
}
}
@@ -119,8 +121,9 @@ function KarmaTestExplorerReporter(
});
});
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
karmaEventHandler.setEventHandler(KarmaEventName.BrowserStart, (name: KarmaEventName, browser: any, info: any) => {
+ logger.trace(() => `Karma event '${name}' has 'info': ${JSON.stringify(info, getCircularReferenceReplacer(), 2)}`);
+
sendEvent({
name,
browser: getBrowserInfo(browser)
@@ -155,8 +158,11 @@ function KarmaTestExplorerReporter(
karmaEventHandler.setEventHandler(
KarmaEventName.BrowserComplete,
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
(name: KarmaEventName, browser: any, runInfo: any) => {
+ logger.trace(
+ () => `Karma event '${name}' has 'runInfo': ${JSON.stringify(runInfo, getCircularReferenceReplacer(), 2)}`
+ );
+
sendEvent({
name,
browser: getBrowserInfo(browser)
@@ -170,14 +176,14 @@ function KarmaTestExplorerReporter(
const clientArgs: string[] = browsers?.emitter?._injector?._providers?.config?.[1]?.client?.args ?? [];
let runId: string | undefined;
- karmaLogger.debug(() => `Karma event '${name}' has client args: ${JSON.stringify(clientArgs, null, 2)}`);
+ logger.debug(() => `Karma event '${name}' has client args: ${JSON.stringify(clientArgs, null, 2)}`);
if (clientArgs) {
const runIdArg = clientArgs.find(clientArg => clientArg.startsWith(KARMA_TEST_RUN_ID_FLAG));
if (runIdArg) {
runId = runIdArg.split('=')[1];
- karmaLogger.debug(() => `Karma event '${name}' has runId: ${runId}`);
+ logger.debug(() => `Karma event '${name}' has runId: ${runId}`);
}
}
@@ -190,8 +196,10 @@ function KarmaTestExplorerReporter(
sendEvent({
name,
runId,
+ runStatus,
+ exitCode: runResult.exitCode,
browsers: browsers.map(getBrowserInfo),
- runStatus
+ error: typeof runResult.error === 'string' ? runResult.error : undefined
});
}
);
@@ -223,6 +231,8 @@ function KarmaTestExplorerReporter(
});
}
+KarmaTestExplorerReporter.$inject = ['baseReporterDecorator', 'emitter', 'logger', 'injector'];
+
const interceptAllEmitterEvents = (emitter: EventEmitter, listener: (eventName: string, ...args: any[]) => void) => {
const emit = emitter.emit.bind(emitter);
@@ -252,8 +262,3 @@ const configureTimeouts = (injector: any) => {
}
});
};
-
-KarmaTestExplorerReporter.$inject = ['baseReporterDecorator', 'config', 'logger', 'emitter', 'injector'];
-
-export const name = KarmaTestExplorerReporter.name;
-export const instance = KarmaTestExplorerReporter;
diff --git a/src/frameworks/karma/runner/spec-response-to-test-suite-info-mapper.ts b/src/frameworks/karma/runner/spec-response-to-test-suite-info-mapper.ts
index c43f32f..0f1b9e6 100644
--- a/src/frameworks/karma/runner/spec-response-to-test-suite-info-mapper.ts
+++ b/src/frameworks/karma/runner/spec-response-to-test-suite-info-mapper.ts
@@ -15,7 +15,7 @@ export class SpecResponseToTestSuiteInfoMapper {
specs.forEach(rawSpec => {
const spec: SpecCompleteResponse = { ...rawSpec, suite: this.filterSuiteNoise(rawSpec.suite) };
- const matchingSpecLocations = this.specLocator.getSpecLocation(spec.suite, spec.description);
+ const matchingSpecLocations = this.specLocator.getSpecLocations(spec.suite, spec.description);
let specFile: string | undefined = spec.filePath;
if (matchingSpecLocations.length === 1) {
@@ -86,7 +86,7 @@ export class SpecResponseToTestSuiteInfoMapper {
}
private createSuite(suitePath: string[], suiteFile: string): TestSuiteInfo {
- const allMatchingSuiteLocations = this.specLocator.getSpecLocation(suitePath);
+ const allMatchingSuiteLocations = this.specLocator.getSpecLocations(suitePath);
const suiteLocation = allMatchingSuiteLocations.find(loc => loc.file === suiteFile);
const suiteName = suitePath[suitePath.length - 1];
const suiteFullName = suitePath.join(' ');
@@ -107,7 +107,7 @@ export class SpecResponseToTestSuiteInfoMapper {
}
private createTest(spec: SpecCompleteResponse, specFile: string): TestInfo {
- const allMatchingSpecLocations = this.specLocator.getSpecLocation(spec.suite, spec.description);
+ const allMatchingSpecLocations = this.specLocator.getSpecLocations(spec.suite, spec.description);
const specLocation = allMatchingSpecLocations.find(loc => loc.file === specFile);
const runFailureMessage = spec.failureMessages?.join('\n');
diff --git a/src/frameworks/karma/server/karma-command-line-test-server-executor.ts b/src/frameworks/karma/server/karma-command-line-test-server-executor.ts
index 3eac103..e4cab8e 100644
--- a/src/frameworks/karma/server/karma-command-line-test-server-executor.ts
+++ b/src/frameworks/karma/server/karma-command-line-test-server-executor.ts
@@ -1,6 +1,4 @@
-import { existsSync } from 'fs';
import { join } from 'path';
-import { silent } from 'resolve-global';
import { ServerStopExecutor, TestServerExecutor } from '../../../api/test-server-executor';
import { Disposable } from '../../../util/disposable/disposable';
import { Disposer } from '../../../util/disposable/disposer';
@@ -12,6 +10,7 @@ import {
CommandLineProcessHandlerOptions
} from '../../../util/process/command-line-process-handler';
import { CommandLineProcessLog } from '../../../util/process/command-line-process-log';
+import { getPackageInstallPathForProjectRoot } from '../../../util/utils';
import { KarmaEnvironmentVariable } from '../karma-environment-variable';
export interface KarmaCommandLineTestServerExecutorOptions {
@@ -61,26 +60,25 @@ export class KarmaCommandLineTestServerExecutor implements TestServerExecutor {
failOnStandardError: this.options.failOnStandardError
};
- const localKarmaPath = join(this.projectRootPath, 'node_modules', 'karma', 'bin', 'karma');
- const isKarmaInstalledLocally = existsSync(localKarmaPath);
- const isKarmaInstalledGlobally = silent('karma') !== undefined;
+ const karmaInstallPath = getPackageInstallPathForProjectRoot('karma', this.projectRootPath);
+ const karmaBinaryPath = karmaInstallPath ? join(karmaInstallPath, 'bin', 'karma') : undefined;
+
+ if (!karmaBinaryPath) {
+ throw new Error(
+ `Karma does not seem to be installed - ` +
+ `You may need to run 'npm install' in your project. ` +
+ `Please install it and try again.`
+ );
+ }
let command: string;
let processArguments: string[] = [];
if (this.options.karmaProcessCommand) {
command = this.options.karmaProcessCommand;
- } else if (isKarmaInstalledLocally) {
- command = 'npx';
- processArguments = ['karma'];
- } else if (isKarmaInstalledGlobally) {
- command = 'karma';
} else {
- throw new Error(
- `Karma does not seem to be installed - ` +
- `You may need to run 'npm install' in your project. ` +
- `Please install it and try again.`
- );
+ command = process.execPath;
+ processArguments = [karmaBinaryPath];
}
processArguments = [...processArguments, 'start', this.baseKarmaConfigFile, '--no-single-run'];
diff --git a/src/main.ts b/src/main.ts
index 194d3ac..a1ad70a 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -1,33 +1,102 @@
-import { ExtensionContext, extensions, window } from 'vscode';
+import globby from 'globby';
+import { ExtensionContext, extensions, workspace, WorkspaceFolder } from 'vscode';
import { testExplorerExtensionId, TestHub } from 'vscode-test-adapter-api';
-import { TestAdapterRegistrar } from 'vscode-test-adapter-util';
import { Adapter } from './adapter';
-import { EXTENSION_OUTPUT_CHANNEL_NAME } from './constants';
-import { Disposable } from './util/disposable/disposable';
+import {
+ ALWAYS_EXCLUDED_TEST_FILE_GLOBS,
+ DEFAULT_KARMA_AND_ANGULAR_CONFIG_GLOBS,
+ EXTENSION_CONFIG_PREFIX,
+ EXTENSION_OUTPUT_CHANNEL_NAME
+} from './constants';
+import { ConfigSetting } from './core/config/config-setting';
+import { OutputChannelLog } from './core/vscode/output-channel-log';
import { Disposer } from './util/disposable/disposer';
+import { LogLevel } from './util/logging/log-level';
+import { Logger } from './util/logging/logger';
+import { SimpleLogger } from './util/logging/simple-logger';
+import { normalizePath } from './util/utils';
-const disposables: Disposable[] = [];
+const registeredAdapters = new Map();
-export async function activate(context: ExtensionContext) {
+export const activate = async (context: ExtensionContext) => {
+ const outputChannelLog = new OutputChannelLog(EXTENSION_OUTPUT_CHANNEL_NAME);
+ const logger: Logger = new SimpleLogger(outputChannelLog, 'Main', LogLevel.INFO);
const testExplorerExtension = extensions.getExtension(testExplorerExtensionId);
if (!testExplorerExtension) {
const errorMsg = 'ERROR: Could not find Test Explorer UI extension';
- window.createOutputChannel(EXTENSION_OUTPUT_CHANNEL_NAME).append(errorMsg);
+ logger.error(() => errorMsg);
throw new Error(errorMsg);
}
-
const testHub = testExplorerExtension.exports;
+ const workspaceFolders = workspace.workspaceFolders;
+
+ workspaceFolders?.forEach(workspaceFolder => addAdapterForFolder(workspaceFolder, testHub, logger, outputChannelLog));
+
+ const workspaceFolderChangeSubscription = workspace.onDidChangeWorkspaceFolders(folderChangeEvent => {
+ folderChangeEvent.added.forEach(addedFolder => addAdapterForFolder(addedFolder, testHub, logger, outputChannelLog));
+ folderChangeEvent.removed.forEach(removedFolder => removeAdapterForFolder(removedFolder, testHub, logger));
+ });
- context.subscriptions.push(
- new TestAdapterRegistrar(testHub, workspaceFolder => {
- const testExplorerAdapter = new Adapter(workspaceFolder);
- disposables.push(testExplorerAdapter);
- return testExplorerAdapter;
- })
- );
-}
+ context.subscriptions.push(workspaceFolderChangeSubscription, outputChannelLog);
+};
-export async function deactivate() {
+export const deactivate = async () => {
+ const disposables = Array.from(registeredAdapters.values());
await Disposer.dispose(disposables);
-}
+};
+
+const addAdapterForFolder = (
+ workspaceFolder: WorkspaceFolder,
+ testHub: TestHub,
+ logger: Logger,
+ outputLog: OutputChannelLog
+): void => {
+ if (workspaceFolder.uri.scheme !== 'file' || !shouldActivateAdapterForWorkspaceFolder(workspaceFolder, logger)) {
+ return;
+ }
+ logger.info(() => `Activating new adapter for workspace folder: ${normalizePath(workspaceFolder.uri.fsPath)}`);
+ const adapter = new Adapter(workspaceFolder, outputLog);
+ registeredAdapters.set(workspaceFolder, adapter);
+ testHub.registerTestAdapter(adapter);
+ logger.info(() => `Done activating adapter for workspace folder: ${normalizePath(workspaceFolder.uri.fsPath)}`);
+};
+
+const removeAdapterForFolder = (workspaceFolder: WorkspaceFolder, testHub: TestHub, logger: Logger): void => {
+ const adapter = registeredAdapters.get(workspaceFolder);
+
+ if (adapter) {
+ logger.info(() => `Deactivating adapter for workspace folder: ${normalizePath(workspaceFolder.uri.fsPath)}`);
+ testHub.unregisterTestAdapter(adapter);
+ registeredAdapters.delete(workspaceFolder);
+ adapter.dispose();
+ logger.info(() => `Done deactivating adapter for workspace folder: ${normalizePath(workspaceFolder.uri.fsPath)}`);
+ }
+};
+
+const shouldActivateAdapterForWorkspaceFolder = (workspaceFolder: WorkspaceFolder, logger: Logger): boolean => {
+ const workspaceFolderPath = normalizePath(workspaceFolder.uri.fsPath);
+
+ const workspaceKarmaOrAngularConfigFiles = globby.sync(DEFAULT_KARMA_AND_ANGULAR_CONFIG_GLOBS, {
+ ignore: ALWAYS_EXCLUDED_TEST_FILE_GLOBS,
+ cwd: workspaceFolderPath
+ });
+ const config = workspace.getConfiguration(EXTENSION_CONFIG_PREFIX, workspaceFolder.uri);
+ const configuredExtensionSetting = Object.values(ConfigSetting).find(configSetting => config.has(configSetting));
+ const hasKarmaOrAngularConfigFile = workspaceKarmaOrAngularConfigFiles.length > 0;
+
+ if (hasKarmaOrAngularConfigFile) {
+ logger.debug(
+ () =>
+ `Activating adapter for workspace folder '${workspaceFolderPath}' because ` +
+ `it has relevant project config file: ${workspaceKarmaOrAngularConfigFiles[0]}`
+ );
+ } else if (configuredExtensionSetting !== undefined) {
+ logger.debug(
+ () =>
+ `Activating adapter for workspace folder '${workspaceFolderPath}' because ` +
+ `it has the extension setting configured: ${configuredExtensionSetting}`
+ );
+ }
+ return hasKarmaOrAngularConfigFile || !!configuredExtensionSetting;
+};
diff --git a/src/util/logging/log-level.ts b/src/util/logging/log-level.ts
index 47f639c..c68ec92 100644
--- a/src/util/logging/log-level.ts
+++ b/src/util/logging/log-level.ts
@@ -1,10 +1,17 @@
export enum LogLevel {
- DISABLE = 1,
- ERROR,
- WARN,
- INFO,
- DEBUG,
- TRACE
+ DISABLE = 'disable',
+ ERROR = 'error',
+ WARN = 'warn',
+ INFO = 'info',
+ DEBUG = 'debug',
+ TRACE = 'trace'
}
-export type LogLevelName = keyof typeof LogLevel;
+export const LogLevels: Record = {
+ [LogLevel.DISABLE]: 0,
+ [LogLevel.ERROR]: 1,
+ [LogLevel.WARN]: 2,
+ [LogLevel.INFO]: 3,
+ [LogLevel.DEBUG]: 4,
+ [LogLevel.TRACE]: 5
+};
diff --git a/src/util/logging/logger-adapter.ts b/src/util/logging/logger-adapter.ts
index 696e6a8..d9fd7e5 100644
--- a/src/util/logging/logger-adapter.ts
+++ b/src/util/logging/logger-adapter.ts
@@ -1,12 +1,24 @@
import { BasicLog } from './basic-log';
-import { LogLevel } from './log-level';
+import { LogLevel, LogLevels } from './log-level';
import { Logger } from './logger';
+export interface LoggerAdapterOptions {
+ bypassUnderlyingTraceMethod?: boolean;
+}
+
export class LoggerAdapter implements Logger {
- private constructor(private readonly logger: BasicLog, private readonly logLevel: LogLevel) {}
+ private options: Required;
- public static fromBasicLog(log: BasicLog, logLevel: LogLevel): LoggerAdapter {
- return new LoggerAdapter(log, logLevel);
+ private constructor(
+ private readonly logger: BasicLog,
+ private readonly logLevel: LogLevel,
+ options?: LoggerAdapterOptions
+ ) {
+ this.options = { bypassUnderlyingTraceMethod: false, ...options };
+ }
+
+ public static fromBasicLog(log: BasicLog, logLevel: LogLevel, options?: LoggerAdapterOptions): LoggerAdapter {
+ return new LoggerAdapter(log, logLevel, options);
}
public error(msgSource: () => string) {
@@ -34,13 +46,18 @@ export class LoggerAdapter implements Logger {
}
public trace(msgSource: () => string) {
- if (this.isLevelEnabled(LogLevel.TRACE)) {
- (this.logger.trace ?? this.logger.debug).apply(this.logger, [msgSource()]);
+ if (!this.isLevelEnabled(LogLevel.TRACE)) {
+ return;
+ }
+ if (!this.options.bypassUnderlyingTraceMethod && typeof this.logger.trace === 'function') {
+ this.logger.trace(msgSource());
+ } else {
+ this.logger.debug(`[TRACE]: ${msgSource()}`);
}
}
private isLevelEnabled(logLevel: LogLevel): boolean {
- return logLevel <= this.logLevel;
+ return LogLevels[this.logLevel] >= LogLevels[logLevel];
}
public dispose(): void {
diff --git a/src/util/logging/logger.ts b/src/util/logging/logger.ts
index 808e909..c5e7d38 100644
--- a/src/util/logging/logger.ts
+++ b/src/util/logging/logger.ts
@@ -1,9 +1,9 @@
import { Disposable } from '../disposable/disposable';
export interface Logger extends Disposable {
- error(msgSource: () => string): void;
- warn(msgSource: () => string): void;
- info(msgSource: () => string): void;
- debug(msgSource: () => string): void;
- trace(msgSource: () => string): void;
+ error(provideMessage: () => string): void;
+ warn(provideMessage: () => string): void;
+ info(provideMessage: () => string): void;
+ debug(provideMessage: () => string): void;
+ trace(provideMessage: () => string): void;
}
diff --git a/src/util/logging/simple-logger.ts b/src/util/logging/simple-logger.ts
index a3d10a7..d5f119d 100644
--- a/src/util/logging/simple-logger.ts
+++ b/src/util/logging/simple-logger.ts
@@ -1,8 +1,9 @@
import { DEFAULT_LOG_LEVEL } from '../../constants';
import { Disposable } from '../disposable/disposable';
import { Disposer } from '../disposable/disposer';
+import { getPropertyWithValue } from '../utils';
import { LogAppender } from './log-appender';
-import { LogLevel } from './log-level';
+import { LogLevel, LogLevels } from './log-level';
import { Logger } from './logger';
export class SimpleLogger implements Logger {
@@ -51,12 +52,12 @@ export class SimpleLogger implements Logger {
}
private isLevelEnabled(logLevel: LogLevel): boolean {
- return logLevel <= this.logLevel;
+ return LogLevels[this.logLevel] >= LogLevels[logLevel];
}
private log(logLevel: LogLevel, msg: string): void {
const timeStamp = new Date().toISOString().replace('T', ' ').replace('Z', '');
- const logLevelLabel = LogLevel[logLevel];
+ const logLevelLabel = getPropertyWithValue(LogLevel, logLevel) || 'LOG';
const loggerNameDecoration = this.loggerName ? ` [${this.loggerName}]` : '';
this.appender.append(`[${timeStamp}] [${logLevelLabel}]${loggerNameDecoration}: ${msg}`);
}
diff --git a/src/util/process/command-line-process-handler.ts b/src/util/process/command-line-process-handler.ts
index b351981..fda38ae 100644
--- a/src/util/process/command-line-process-handler.ts
+++ b/src/util/process/command-line-process-handler.ts
@@ -1,5 +1,4 @@
-import { ChildProcess, SpawnOptions } from 'child_process';
-import spawn from 'cross-spawn';
+import { ChildProcess, spawn, SpawnOptions } from 'child_process';
import treeKill from 'tree-kill';
import { Disposable } from '../disposable/disposable';
import { Disposer } from '../disposable/disposer';
diff --git a/src/util/utils.ts b/src/util/utils.ts
index c312ce4..2ca264c 100644
--- a/src/util/utils.ts
+++ b/src/util/utils.ts
@@ -1,4 +1,5 @@
import path = require('path');
+import { getInstalledPathSync } from 'get-installed-path';
export const generateRandomId = () => Math.random().toString(36).slice(2);
@@ -73,3 +74,29 @@ export const getValueTypeReplacer = () => {
};
return replacer;
};
+
+export const getPackageInstallPathForProjectRoot = (
+ packageName: string,
+ projectRootPath?: string
+): string | undefined => {
+ let packageInstallPath: string | undefined;
+
+ if (projectRootPath) {
+ try {
+ packageInstallPath = getInstalledPathSync(packageName, { local: true, cwd: projectRootPath });
+ } catch (error) {
+ console.warn(`Could not find '${packageName}' package local install at root path '${projectRootPath}': ${error}`);
+ }
+ }
+
+ if (!packageInstallPath) {
+ try {
+ packageInstallPath = getInstalledPathSync('karma');
+ } catch (error) {
+ console.warn(`Could not find '${packageName}' package global install: ${error}`);
+ return;
+ }
+ }
+
+ return packageInstallPath;
+};
diff --git a/test/core/spec-locator.test.ts b/test/core/spec-locator.test.ts
index 17cf78b..0303942 100644
--- a/test/core/spec-locator.test.ts
+++ b/test/core/spec-locator.test.ts
@@ -60,7 +60,7 @@ describe('SpecLocator', () => {
describe('the getSpecLocation method', () => {
it('should return the spec locations with normalized file paths', () => {
- const specLocations = specLocator.getSpecLocation(['SuiteName']);
+ const specLocations = specLocator.getSpecLocations(['SuiteName']);
const expectedNormalizedTestFiles = [
withUnixStyleSeparator(mockTestFiles[0]).replace(/^d:/, 'D:'),
diff --git a/test/util/process/command-line-process-handler.test.ts b/test/util/process/command-line-process-handler.test.ts
index dc1e485..a7c2dde 100644
--- a/test/util/process/command-line-process-handler.test.ts
+++ b/test/util/process/command-line-process-handler.test.ts
@@ -1,12 +1,11 @@
-import { ChildProcess } from 'child_process';
-import spawn from 'cross-spawn';
+import { ChildProcess, spawn } from 'child_process';
import { mock } from 'jest-mock-extended';
import treeKill from 'tree-kill';
import { Logger } from '../../../src/util/logging/logger';
import { CommandLineProcessHandler } from '../../../src/util/process/command-line-process-handler';
import { Writeable } from '../../test-util';
-jest.mock('cross-spawn');
+jest.mock('child_process');
jest.mock('tree-kill');
const mockSpawn = spawn as jest.MockedFunction;